| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "OverwriteLine.h" | 8 #include "OverwriteLine.h" |
| 9 #include "SkCommandLineFlags.h" | 9 #include "SkCommandLineFlags.h" |
| 10 #include "SkGraphics.h" | 10 #include "SkGraphics.h" |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 "$ requires the end of the test to match\n" \ | 28 "$ requires the end of the test to match\n" \ |
| 29 "^ and $ requires an exact match\n" \ | 29 "^ and $ requires an exact match\n" \ |
| 30 "If a test does not match any list entry,\n" \ | 30 "If a test does not match any list entry,\n" \ |
| 31 "it is skipped unless some list entry starts with
~"); | 31 "it is skipped unless some list entry starts with
~"); |
| 32 DEFINE_string2(tmpDir, t, NULL, "tmp directory for tests to use."); | 32 DEFINE_string2(tmpDir, t, NULL, "tmp directory for tests to use."); |
| 33 DEFINE_string2(resourcePath, i, "resources", "directory for test resources."); | 33 DEFINE_string2(resourcePath, i, "resources", "directory for test resources."); |
| 34 DEFINE_bool2(extendedTest, x, false, "run extended tests for pathOps."); | 34 DEFINE_bool2(extendedTest, x, false, "run extended tests for pathOps."); |
| 35 DEFINE_bool2(leaks, l, false, "show leaked ref cnt'd objects."); | 35 DEFINE_bool2(leaks, l, false, "show leaked ref cnt'd objects."); |
| 36 DEFINE_bool2(single, z, false, "run tests on a single thread internally."); | 36 DEFINE_bool2(single, z, false, "run tests on a single thread internally."); |
| 37 DEFINE_bool2(verbose, v, false, "enable verbose output."); | 37 DEFINE_bool2(verbose, v, false, "enable verbose output."); |
| 38 DEFINE_bool(cpu, true, "whether or not to run CPU tests."); | |
| 39 DEFINE_bool(gpu, true, "whether or not to run GPU tests."); | |
| 40 DEFINE_int32(threads, SkThreadPool::kThreadPerCore, | 38 DEFINE_int32(threads, SkThreadPool::kThreadPerCore, |
| 41 "Run threadsafe tests on a threadpool with this many threads."); | 39 "Run threadsafe tests on a threadpool with this many threads."); |
| 42 | 40 |
| 43 // need to explicitly declare this, or we get some weird infinite loop llist | 41 // need to explicitly declare this, or we get some weird infinite loop llist |
| 44 template TestRegistry* TestRegistry::gHead; | 42 template TestRegistry* TestRegistry::gHead; |
| 45 | 43 |
| 46 class Iter { | 44 class Iter { |
| 47 public: | 45 public: |
| 48 Iter() { this->reset(); } | 46 Iter() { this->reset(); } |
| 49 void reset() { fReg = TestRegistry::Head(); } | 47 void reset() { fReg = TestRegistry::Head(); } |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 119 sk_atomic_inc(fFailCount); | 117 sk_atomic_inc(fFailCount); |
| 120 } | 118 } |
| 121 SkDELETE(this); | 119 SkDELETE(this); |
| 122 } | 120 } |
| 123 | 121 |
| 124 private: | 122 private: |
| 125 SkAutoTDelete<Test> fTest; | 123 SkAutoTDelete<Test> fTest; |
| 126 int32_t* fFailCount; | 124 int32_t* fFailCount; |
| 127 }; | 125 }; |
| 128 | 126 |
| 129 static bool should_run(const char* testName, bool isGPUTest) { | |
| 130 if (SkCommandLineFlags::ShouldSkip(FLAGS_match, testName)) { | |
| 131 return false; | |
| 132 } | |
| 133 if (!FLAGS_cpu && !isGPUTest) { | |
| 134 return false; | |
| 135 } | |
| 136 if (!FLAGS_gpu && isGPUTest) { | |
| 137 return false; | |
| 138 } | |
| 139 return true; | |
| 140 } | |
| 141 | |
| 142 int tool_main(int argc, char** argv); | 127 int tool_main(int argc, char** argv); |
| 143 int tool_main(int argc, char** argv) { | 128 int tool_main(int argc, char** argv) { |
| 144 SkCommandLineFlags::SetUsage(""); | 129 SkCommandLineFlags::SetUsage(""); |
| 145 SkCommandLineFlags::Parse(argc, argv); | 130 SkCommandLineFlags::Parse(argc, argv); |
| 146 | 131 |
| 147 #if SK_ENABLE_INST_COUNT | 132 #if SK_ENABLE_INST_COUNT |
| 148 if (FLAGS_leaks) { | 133 if (FLAGS_leaks) { |
| 149 gPrintInstCount = true; | 134 gPrintInstCount = true; |
| 150 } | 135 } |
| 151 #endif | 136 #endif |
| (...skipping 27 matching lines...) Expand all Loading... |
| 179 | 164 |
| 180 | 165 |
| 181 // Count tests first. | 166 // Count tests first. |
| 182 int total = 0; | 167 int total = 0; |
| 183 int toRun = 0; | 168 int toRun = 0; |
| 184 Test* test; | 169 Test* test; |
| 185 | 170 |
| 186 Iter iter; | 171 Iter iter; |
| 187 while ((test = iter.next(NULL/*reporter not needed*/)) != NULL) { | 172 while ((test = iter.next(NULL/*reporter not needed*/)) != NULL) { |
| 188 SkAutoTDelete<Test> owned(test); | 173 SkAutoTDelete<Test> owned(test); |
| 189 if (should_run(test->getName(), test->isGPUTest())) { | 174 |
| 175 if(!SkCommandLineFlags::ShouldSkip(FLAGS_match, test->getName())) { |
| 190 toRun++; | 176 toRun++; |
| 191 } | 177 } |
| 192 total++; | 178 total++; |
| 193 } | 179 } |
| 194 | 180 |
| 195 // Now run them. | 181 // Now run them. |
| 196 iter.reset(); | 182 iter.reset(); |
| 197 int32_t failCount = 0; | 183 int32_t failCount = 0; |
| 198 int skipCount = 0; | 184 int skipCount = 0; |
| 199 | 185 |
| 200 SkThreadPool threadpool(FLAGS_threads); | 186 SkThreadPool threadpool(FLAGS_threads); |
| 201 SkTArray<Test*> unsafeTests; // Always passes ownership to an SkTestRunnabl
e | 187 SkTArray<Test*> unsafeTests; // Always passes ownership to an SkTestRunnabl
e |
| 202 | 188 |
| 203 DebugfReporter reporter(toRun); | 189 DebugfReporter reporter(toRun); |
| 204 for (int i = 0; i < total; i++) { | 190 for (int i = 0; i < total; i++) { |
| 205 SkAutoTDelete<Test> test(iter.next(&reporter)); | 191 SkAutoTDelete<Test> test(iter.next(&reporter)); |
| 206 if (!should_run(test->getName(), test->isGPUTest())) { | 192 if (SkCommandLineFlags::ShouldSkip(FLAGS_match, test->getName())) { |
| 207 ++skipCount; | 193 ++skipCount; |
| 208 } else if (!test->isGPUTest()) { | 194 } else if (!test->isThreadsafe()) { |
| 209 unsafeTests.push_back() = test.detach(); | 195 unsafeTests.push_back() = test.detach(); |
| 210 } else { | 196 } else { |
| 211 threadpool.add(SkNEW_ARGS(SkTestRunnable, (test.detach(), &failCount
))); | 197 threadpool.add(SkNEW_ARGS(SkTestRunnable, (test.detach(), &failCount
))); |
| 212 } | 198 } |
| 213 } | 199 } |
| 214 | 200 |
| 215 // Run the tests that aren't threadsafe. | 201 // Run the tests that aren't threadsafe. |
| 216 for (int i = 0; i < unsafeTests.count(); i++) { | 202 for (int i = 0; i < unsafeTests.count(); i++) { |
| 217 SkNEW_ARGS(SkTestRunnable, (unsafeTests[i], &failCount))->run(); | 203 SkNEW_ARGS(SkTestRunnable, (unsafeTests[i], &failCount))->run(); |
| 218 } | 204 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 229 | 215 |
| 230 SkDebugf("\n"); | 216 SkDebugf("\n"); |
| 231 return (failCount == 0) ? 0 : 1; | 217 return (failCount == 0) ? 0 : 1; |
| 232 } | 218 } |
| 233 | 219 |
| 234 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) | 220 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) |
| 235 int main(int argc, char * const argv[]) { | 221 int main(int argc, char * const argv[]) { |
| 236 return tool_main(argc, (char**) argv); | 222 return tool_main(argc, (char**) argv); |
| 237 } | 223 } |
| 238 #endif | 224 #endif |
| OLD | NEW |