| 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."); |
| 38 DEFINE_int32(threads, SkThreadPool::kThreadPerCore, | 40 DEFINE_int32(threads, SkThreadPool::kThreadPerCore, |
| 39 "Run threadsafe tests on a threadpool with this many threads."); | 41 "Run threadsafe tests on a threadpool with this many threads."); |
| 40 | 42 |
| 41 // need to explicitly declare this, or we get some weird infinite loop llist | 43 // need to explicitly declare this, or we get some weird infinite loop llist |
| 42 template TestRegistry* TestRegistry::gHead; | 44 template TestRegistry* TestRegistry::gHead; |
| 43 | 45 |
| 44 class Iter { | 46 class Iter { |
| 45 public: | 47 public: |
| 46 Iter() { this->reset(); } | 48 Iter() { this->reset(); } |
| 47 void reset() { fReg = TestRegistry::Head(); } | 49 void reset() { fReg = TestRegistry::Head(); } |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 117 sk_atomic_inc(fFailCount); | 119 sk_atomic_inc(fFailCount); |
| 118 } | 120 } |
| 119 SkDELETE(this); | 121 SkDELETE(this); |
| 120 } | 122 } |
| 121 | 123 |
| 122 private: | 124 private: |
| 123 SkAutoTDelete<Test> fTest; | 125 SkAutoTDelete<Test> fTest; |
| 124 int32_t* fFailCount; | 126 int32_t* fFailCount; |
| 125 }; | 127 }; |
| 126 | 128 |
| 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 |
| 127 int tool_main(int argc, char** argv); | 142 int tool_main(int argc, char** argv); |
| 128 int tool_main(int argc, char** argv) { | 143 int tool_main(int argc, char** argv) { |
| 129 SkCommandLineFlags::SetUsage(""); | 144 SkCommandLineFlags::SetUsage(""); |
| 130 SkCommandLineFlags::Parse(argc, argv); | 145 SkCommandLineFlags::Parse(argc, argv); |
| 131 | 146 |
| 132 #if SK_ENABLE_INST_COUNT | 147 #if SK_ENABLE_INST_COUNT |
| 133 if (FLAGS_leaks) { | 148 if (FLAGS_leaks) { |
| 134 gPrintInstCount = true; | 149 gPrintInstCount = true; |
| 135 } | 150 } |
| 136 #endif | 151 #endif |
| (...skipping 27 matching lines...) Expand all Loading... |
| 164 | 179 |
| 165 | 180 |
| 166 // Count tests first. | 181 // Count tests first. |
| 167 int total = 0; | 182 int total = 0; |
| 168 int toRun = 0; | 183 int toRun = 0; |
| 169 Test* test; | 184 Test* test; |
| 170 | 185 |
| 171 Iter iter; | 186 Iter iter; |
| 172 while ((test = iter.next(NULL/*reporter not needed*/)) != NULL) { | 187 while ((test = iter.next(NULL/*reporter not needed*/)) != NULL) { |
| 173 SkAutoTDelete<Test> owned(test); | 188 SkAutoTDelete<Test> owned(test); |
| 174 | 189 if (should_run(test->getName(), test->isGPUTest())) { |
| 175 if(!SkCommandLineFlags::ShouldSkip(FLAGS_match, test->getName())) { | |
| 176 toRun++; | 190 toRun++; |
| 177 } | 191 } |
| 178 total++; | 192 total++; |
| 179 } | 193 } |
| 180 | 194 |
| 181 // Now run them. | 195 // Now run them. |
| 182 iter.reset(); | 196 iter.reset(); |
| 183 int32_t failCount = 0; | 197 int32_t failCount = 0; |
| 184 int skipCount = 0; | 198 int skipCount = 0; |
| 185 | 199 |
| 186 SkThreadPool threadpool(FLAGS_threads); | 200 SkThreadPool threadpool(FLAGS_threads); |
| 187 SkTArray<Test*> unsafeTests; // Always passes ownership to an SkTestRunnabl
e | 201 SkTArray<Test*> unsafeTests; // Always passes ownership to an SkTestRunnabl
e |
| 188 | 202 |
| 189 DebugfReporter reporter(toRun); | 203 DebugfReporter reporter(toRun); |
| 190 for (int i = 0; i < total; i++) { | 204 for (int i = 0; i < total; i++) { |
| 191 SkAutoTDelete<Test> test(iter.next(&reporter)); | 205 SkAutoTDelete<Test> test(iter.next(&reporter)); |
| 192 if (SkCommandLineFlags::ShouldSkip(FLAGS_match, test->getName())) { | 206 if (!should_run(test->getName(), test->isGPUTest())) { |
| 193 ++skipCount; | 207 ++skipCount; |
| 194 } else if (!test->isThreadsafe()) { | 208 } else if (!test->isGPUTest()) { |
| 195 unsafeTests.push_back() = test.detach(); | 209 unsafeTests.push_back() = test.detach(); |
| 196 } else { | 210 } else { |
| 197 threadpool.add(SkNEW_ARGS(SkTestRunnable, (test.detach(), &failCount
))); | 211 threadpool.add(SkNEW_ARGS(SkTestRunnable, (test.detach(), &failCount
))); |
| 198 } | 212 } |
| 199 } | 213 } |
| 200 | 214 |
| 201 // Run the tests that aren't threadsafe. | 215 // Run the tests that aren't threadsafe. |
| 202 for (int i = 0; i < unsafeTests.count(); i++) { | 216 for (int i = 0; i < unsafeTests.count(); i++) { |
| 203 SkNEW_ARGS(SkTestRunnable, (unsafeTests[i], &failCount))->run(); | 217 SkNEW_ARGS(SkTestRunnable, (unsafeTests[i], &failCount))->run(); |
| 204 } | 218 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 215 | 229 |
| 216 SkDebugf("\n"); | 230 SkDebugf("\n"); |
| 217 return (failCount == 0) ? 0 : 1; | 231 return (failCount == 0) ? 0 : 1; |
| 218 } | 232 } |
| 219 | 233 |
| 220 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) | 234 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) |
| 221 int main(int argc, char * const argv[]) { | 235 int main(int argc, char * const argv[]) { |
| 222 return tool_main(argc, (char**) argv); | 236 return tool_main(argc, (char**) argv); |
| 223 } | 237 } |
| 224 #endif | 238 #endif |
| OLD | NEW |