diff options
author | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2014-02-25 19:32:15 +0000 |
---|---|---|
committer | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2014-02-25 19:32:15 +0000 |
commit | 6bd250a2a340348434b7b16bd4e4b5da0f598e3e (patch) | |
tree | 34bbd0434468296dfc15e31cb2270a1b0a7f4a9e /tests/skia_test.cpp | |
parent | 036405d4fb45b7549c820dc158faf35ef7c26b09 (diff) |
Let DM run unit tests.
- refactor GYPs and a few flags
- make GPU tests grab a thread-local GrContextFactory when needed as we do in DM for GMs
- add a few more UI features to make DM more like tests
I believe this makes the program 'tests' obsolete.
It should be somewhat faster to run the two sets together than running the old binaries serially:
- serial: tests 20s (3m18s CPU), dm 21s (3m01s CPU)
- together: 27s (6m21s CPU)
Next up is to incorporate benches. I'm only planning there on a single-pass sanity check, so that won't obsolete the program 'bench' just yet.
Tested: out/Debug/tests && out/Debug/dm && echo ok
BUG=skia:
R=reed@google.com, bsalomon@google.com, mtklein@google.com, tfarina@chromium.org
Author: mtklein@chromium.org
Review URL: https://codereview.chromium.org/178273002
git-svn-id: http://skia.googlecode.com/svn/trunk@13586 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'tests/skia_test.cpp')
-rw-r--r-- | tests/skia_test.cpp | 30 |
1 files changed, 12 insertions, 18 deletions
diff --git a/tests/skia_test.cpp b/tests/skia_test.cpp index 48d87719d5..050a241ccd 100644 --- a/tests/skia_test.cpp +++ b/tests/skia_test.cpp @@ -17,6 +17,7 @@ #if SK_SUPPORT_GPU #include "GrContext.h" +#include "GrContextFactory.h" #endif using namespace skiatest; @@ -29,8 +30,6 @@ DEFINE_string2(match, m, NULL, "[~][^]substring[$] [...] of test name to run.\n" "^ and $ requires an exact match\n" \ "If a test does not match any list entry,\n" \ "it is skipped unless some list entry starts with ~"); -DEFINE_string2(tmpDir, t, NULL, "tmp directory for tests to use."); -DEFINE_string2(resourcePath, i, "resources", "directory for test resources."); DEFINE_bool2(extendedTest, x, false, "run extended tests for pathOps."); DEFINE_bool2(leaks, l, false, "show leaked ref cnt'd objects."); DEFINE_bool2(single, z, false, "run tests on a single thread internally."); @@ -40,6 +39,7 @@ DEFINE_bool(cpu, true, "whether or not to run CPU tests."); DEFINE_bool(gpu, true, "whether or not to run GPU tests."); DEFINE_int32(threads, SkThreadPool::kThreadPerCore, "Run threadsafe tests on a threadpool with this many threads."); +DEFINE_string2(resourcePath, i, "resources", "directory for test resources."); // need to explicitly declare this, or we get some weird infinite loop llist template TestRegistry* TestRegistry::gHead; @@ -98,16 +98,6 @@ private: const int fTotal; }; -SkString Test::GetTmpDir() { - const char* tmpDir = FLAGS_tmpDir.isEmpty() ? NULL : FLAGS_tmpDir[0]; - return SkString(tmpDir); -} - -SkString Test::GetResourcePath() { - const char* resourcePath = FLAGS_resourcePath.isEmpty() ? NULL : FLAGS_resourcePath[0]; - return SkString(resourcePath); -} - // Deletes self when run. class SkTestRunnable : public SkRunnable { public: @@ -144,6 +134,7 @@ int tool_main(int argc, char** argv); int tool_main(int argc, char** argv) { SkCommandLineFlags::SetUsage(""); SkCommandLineFlags::Parse(argc, argv); + Test::SetResourcePath(FLAGS_resourcePath[0]); #if SK_ENABLE_INST_COUNT if (FLAGS_leaks) { @@ -199,7 +190,7 @@ int tool_main(int argc, char** argv) { int skipCount = 0; SkThreadPool threadpool(FLAGS_threads); - SkTArray<Test*> unsafeTests; // Always passes ownership to an SkTestRunnable + SkTArray<Test*> gpuTests; // Always passes ownership to an SkTestRunnable DebugfReporter reporter(toRun); for (int i = 0; i < total; i++) { @@ -207,16 +198,20 @@ int tool_main(int argc, char** argv) { if (!should_run(test->getName(), test->isGPUTest())) { ++skipCount; } else if (test->isGPUTest()) { - unsafeTests.push_back() = test.detach(); + gpuTests.push_back() = test.detach(); } else { threadpool.add(SkNEW_ARGS(SkTestRunnable, (test.detach(), &failCount))); } } - // Run the tests that aren't threadsafe. - for (int i = 0; i < unsafeTests.count(); i++) { - SkNEW_ARGS(SkTestRunnable, (unsafeTests[i], &failCount))->run(); +#if SK_SUPPORT_GPU + GrContextFactory grContextFactory; + // Run GPU tests on this thread. + for (int i = 0; i < gpuTests.count(); i++) { + gpuTests[i]->setGrContextFactory(&grContextFactory); + SkNEW_ARGS(SkTestRunnable, (gpuTests[i], &failCount))->run(); } +#endif // Block until threaded tests finish. threadpool.wait(); @@ -226,7 +221,6 @@ int tool_main(int argc, char** argv) { toRun, failCount, skipCount, reporter.countTests()); } SkGraphics::Term(); - GpuTest::DestroyContexts(); SkDebugf("\n"); return (failCount == 0) ? 0 : 1; |