| OLD | NEW | 
|---|
| 1 #include "CrashHandler.h" | 1 #include "CrashHandler.h" | 
| 2 #include "DMJsonWriter.h" | 2 #include "DMJsonWriter.h" | 
| 3 #include "DMSrcSink.h" | 3 #include "DMSrcSink.h" | 
| 4 #include "OverwriteLine.h" | 4 #include "OverwriteLine.h" | 
| 5 #include "ProcStats.h" | 5 #include "ProcStats.h" | 
| 6 #include "SkBBHFactory.h" | 6 #include "SkBBHFactory.h" | 
| 7 #include "SkChecksum.h" | 7 #include "SkChecksum.h" | 
| 8 #include "SkCommonFlags.h" | 8 #include "SkCommonFlags.h" | 
| 9 #include "SkForceLinking.h" | 9 #include "SkForceLinking.h" | 
| 10 #include "SkGraphics.h" | 10 #include "SkGraphics.h" | 
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 42 static SkTArray<SkString> gFailures; | 42 static SkTArray<SkString> gFailures; | 
| 43 | 43 | 
| 44 static void fail(ImplicitString err) { | 44 static void fail(ImplicitString err) { | 
| 45     SkAutoMutexAcquire lock(gFailuresMutex); | 45     SkAutoMutexAcquire lock(gFailuresMutex); | 
| 46     SkDebugf("\n\nFAILURE: %s\n\n", err.c_str()); | 46     SkDebugf("\n\nFAILURE: %s\n\n", err.c_str()); | 
| 47     gFailures.push_back(err); | 47     gFailures.push_back(err); | 
| 48 } | 48 } | 
| 49 | 49 | 
| 50 static int32_t gPending = 0;  // Atomic. | 50 static int32_t gPending = 0;  // Atomic. | 
| 51 | 51 | 
| 52 static void done(double ms, ImplicitString config, ImplicitString src, ImplicitS
     tring name) { | 52 static void done(double ms, | 
|  | 53                  ImplicitString config, ImplicitString src, ImplicitString name, | 
|  | 54                  ImplicitString log) { | 
|  | 55     if (!log.isEmpty()) { | 
|  | 56         log.prepend("\n"); | 
|  | 57     } | 
| 53     int32_t pending = sk_atomic_dec(&gPending)-1; | 58     int32_t pending = sk_atomic_dec(&gPending)-1; | 
| 54     SkDebugf("%s(%4dMB %5d) %s\t%s %s %s  ", FLAGS_verbose ? "\n" : kSkOverwrite
     Line | 59     SkDebugf("%s(%4dMB %5d) %s\t%s %s %s%s", FLAGS_verbose ? "\n" : kSkOverwrite
     Line | 
| 55                                            , sk_tools::getMaxResidentSetSizeMB() | 60                                            , sk_tools::getMaxResidentSetSizeMB() | 
| 56                                            , pending | 61                                            , pending | 
| 57                                            , HumanizeMs(ms).c_str() | 62                                            , HumanizeMs(ms).c_str() | 
| 58                                            , config.c_str() | 63                                            , config.c_str() | 
| 59                                            , src.c_str() | 64                                            , src.c_str() | 
| 60                                            , name.c_str()); | 65                                            , name.c_str() | 
|  | 66                                            , log.c_str()); | 
| 61     // We write our dm.json file every once in a while in case we crash. | 67     // We write our dm.json file every once in a while in case we crash. | 
| 62     // Notice this also handles the final dm.json when pending == 0. | 68     // Notice this also handles the final dm.json when pending == 0. | 
| 63     if (pending % 500 == 0) { | 69     if (pending % 500 == 0) { | 
| 64         JsonWriter::DumpJson(); | 70         JsonWriter::DumpJson(); | 
| 65     } | 71     } | 
| 66 } | 72 } | 
| 67 | 73 | 
| 68 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     ~~~~~~~~~~~~~~~~*/ | 74 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     ~~~~~~~~~~~~~~~~*/ | 
| 69 | 75 | 
| 70 struct Gold : public SkString { | 76 struct Gold : public SkString { | 
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 170     } | 176     } | 
| 171     // Try a noop Src as a canary.  If it fails, skip this sink. | 177     // Try a noop Src as a canary.  If it fails, skip this sink. | 
| 172     struct : public Src { | 178     struct : public Src { | 
| 173         Error draw(SkCanvas*) const SK_OVERRIDE { return ""; } | 179         Error draw(SkCanvas*) const SK_OVERRIDE { return ""; } | 
| 174         SkISize size() const SK_OVERRIDE { return SkISize::Make(16, 16); } | 180         SkISize size() const SK_OVERRIDE { return SkISize::Make(16, 16); } | 
| 175         Name name() const SK_OVERRIDE { return "noop"; } | 181         Name name() const SK_OVERRIDE { return "noop"; } | 
| 176     } noop; | 182     } noop; | 
| 177 | 183 | 
| 178     SkBitmap bitmap; | 184     SkBitmap bitmap; | 
| 179     SkDynamicMemoryWStream stream; | 185     SkDynamicMemoryWStream stream; | 
| 180     Error err = sink->draw(noop, &bitmap, &stream); | 186     SkString log; | 
|  | 187     Error err = sink->draw(noop, &bitmap, &stream, &log); | 
| 181     if (!err.isEmpty()) { | 188     if (!err.isEmpty()) { | 
| 182         SkDebugf("Skipping %s: %s\n", tag, err.c_str()); | 189         SkDebugf("Skipping %s: %s\n", tag, err.c_str()); | 
| 183         return; | 190         return; | 
| 184     } | 191     } | 
| 185 | 192 | 
| 186     Tagged<Sink>& ts = gSinks.push_back(); | 193     Tagged<Sink>& ts = gSinks.push_back(); | 
| 187     ts.reset(sink.detach()); | 194     ts.reset(sink.detach()); | 
| 188     ts.tag = tag; | 195     ts.tag = tag; | 
| 189 } | 196 } | 
| 190 | 197 | 
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 290 // The finest-grained unit of work we can run: draw a single Src into a single S
     ink, | 297 // The finest-grained unit of work we can run: draw a single Src into a single S
     ink, | 
| 291 // report any errors, and perhaps write out the output: a .png of the bitmap, or
      a raw stream. | 298 // report any errors, and perhaps write out the output: a .png of the bitmap, or
      a raw stream. | 
| 292 struct Task { | 299 struct Task { | 
| 293     Task(const Tagged<Src>& src, const Tagged<Sink>& sink) : src(src), sink(sink
     ) {} | 300     Task(const Tagged<Src>& src, const Tagged<Sink>& sink) : src(src), sink(sink
     ) {} | 
| 294     const Tagged<Src>&  src; | 301     const Tagged<Src>&  src; | 
| 295     const Tagged<Sink>& sink; | 302     const Tagged<Sink>& sink; | 
| 296 | 303 | 
| 297     static void Run(Task* task) { | 304     static void Run(Task* task) { | 
| 298         SkString name = task->src->name(); | 305         SkString name = task->src->name(); | 
| 299         SkString whyBlacklisted = is_blacklisted(task->sink.tag, task->src.tag, 
     name.c_str()); | 306         SkString whyBlacklisted = is_blacklisted(task->sink.tag, task->src.tag, 
     name.c_str()); | 
|  | 307         SkString log; | 
| 300         WallTimer timer; | 308         WallTimer timer; | 
| 301         timer.start(); | 309         timer.start(); | 
| 302         if (!FLAGS_dryRun && whyBlacklisted.isEmpty()) { | 310         if (!FLAGS_dryRun && whyBlacklisted.isEmpty()) { | 
| 303             SkBitmap bitmap; | 311             SkBitmap bitmap; | 
| 304             SkDynamicMemoryWStream stream; | 312             SkDynamicMemoryWStream stream; | 
| 305             Error err = task->sink->draw(*task->src, &bitmap, &stream); | 313             Error err = task->sink->draw(*task->src, &bitmap, &stream, &log); | 
| 306             if (!err.isEmpty()) { | 314             if (!err.isEmpty()) { | 
| 307                 fail(SkStringPrintf("%s %s %s: %s", | 315                 fail(SkStringPrintf("%s %s %s: %s", | 
| 308                                     task->sink.tag, | 316                                     task->sink.tag, | 
| 309                                     task->src.tag, | 317                                     task->src.tag, | 
| 310                                     name.c_str(), | 318                                     name.c_str(), | 
| 311                                     err.c_str())); | 319                                     err.c_str())); | 
| 312             } | 320             } | 
| 313             SkAutoTDelete<SkStreamAsset> data(stream.detachAsStream()); | 321             SkAutoTDelete<SkStreamAsset> data(stream.detachAsStream()); | 
| 314 | 322 | 
| 315             SkString md5; | 323             SkString md5; | 
| (...skipping 29 matching lines...) Expand all  Loading... | 
| 345                     SkASSERT(bitmap.drawsNothing()); | 353                     SkASSERT(bitmap.drawsNothing()); | 
| 346                 } else if (!bitmap.drawsNothing()) { | 354                 } else if (!bitmap.drawsNothing()) { | 
| 347                     WriteToDisk(*task, md5, ext, NULL, 0, &bitmap); | 355                     WriteToDisk(*task, md5, ext, NULL, 0, &bitmap); | 
| 348                 } | 356                 } | 
| 349             } | 357             } | 
| 350         } | 358         } | 
| 351         timer.end(); | 359         timer.end(); | 
| 352         if (!whyBlacklisted.isEmpty()) { | 360         if (!whyBlacklisted.isEmpty()) { | 
| 353             name.appendf(" (--blacklist, %s)", whyBlacklisted.c_str()); | 361             name.appendf(" (--blacklist, %s)", whyBlacklisted.c_str()); | 
| 354         } | 362         } | 
| 355         done(timer.fWall, task->sink.tag, task->src.tag, name); | 363         done(timer.fWall, task->sink.tag, task->src.tag, name, log); | 
| 356     } | 364     } | 
| 357 | 365 | 
| 358     static void WriteToDisk(const Task& task, | 366     static void WriteToDisk(const Task& task, | 
| 359                             SkString md5, | 367                             SkString md5, | 
| 360                             const char* ext, | 368                             const char* ext, | 
| 361                             SkStream* data, size_t len, | 369                             SkStream* data, size_t len, | 
| 362                             const SkBitmap* bitmap) { | 370                             const SkBitmap* bitmap) { | 
| 363         JsonWriter::BitmapResult result; | 371         JsonWriter::BitmapResult result; | 
| 364         result.name       = task.src->name(); | 372         result.name       = task.src->name(); | 
| 365         result.config     = task.sink.tag; | 373         result.config     = task.sink.tag; | 
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 466         } | 474         } | 
| 467         bool verbose() const SK_OVERRIDE { return FLAGS_veryVerbose; } | 475         bool verbose() const SK_OVERRIDE { return FLAGS_veryVerbose; } | 
| 468     } reporter; | 476     } reporter; | 
| 469     WallTimer timer; | 477     WallTimer timer; | 
| 470     timer.start(); | 478     timer.start(); | 
| 471     if (!FLAGS_dryRun) { | 479     if (!FLAGS_dryRun) { | 
| 472         GrContextFactory factory; | 480         GrContextFactory factory; | 
| 473         test->proc(&reporter, &factory); | 481         test->proc(&reporter, &factory); | 
| 474     } | 482     } | 
| 475     timer.end(); | 483     timer.end(); | 
| 476     done(timer.fWall, "unit", "test", test->name); | 484     done(timer.fWall, "unit", "test", test->name, ""); | 
| 477 } | 485 } | 
| 478 | 486 | 
| 479 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     ~~~~~~~~~~~~~~~~*/ | 487 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     ~~~~~~~~~~~~~~~~*/ | 
| 480 | 488 | 
| 481 // If we're isolating all GPU-bound work to one thread (the default), this funct
     ion runs all that. | 489 // If we're isolating all GPU-bound work to one thread (the default), this funct
     ion runs all that. | 
| 482 static void run_enclave_and_gpu_tests(SkTArray<Task>* tasks) { | 490 static void run_enclave_and_gpu_tests(SkTArray<Task>* tasks) { | 
| 483     run_enclave(tasks); | 491     run_enclave(tasks); | 
| 484     for (int i = 0; i < gGPUTests.count(); i++) { | 492     for (int i = 0; i < gGPUTests.count(); i++) { | 
| 485         run_test(&gGPUTests[i]); | 493         run_test(&gGPUTests[i]); | 
| 486     } | 494     } | 
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 549     } | 557     } | 
| 550     return 0; | 558     return 0; | 
| 551 } | 559 } | 
| 552 | 560 | 
| 553 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) | 561 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) | 
| 554 int main(int argc, char** argv) { | 562 int main(int argc, char** argv) { | 
| 555     SkCommandLineFlags::Parse(argc, argv); | 563     SkCommandLineFlags::Parse(argc, argv); | 
| 556     return dm_main(); | 564     return dm_main(); | 
| 557 } | 565 } | 
| 558 #endif | 566 #endif | 
| OLD | NEW | 
|---|