| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright 2013 Google Inc. | 2  * Copyright 2013 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 "CrashHandler.h" | 8 #include "CrashHandler.h" | 
| 9 #include "DMJsonWriter.h" | 9 #include "DMJsonWriter.h" | 
| 10 #include "DMSrcSink.h" | 10 #include "DMSrcSink.h" | 
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 68 | 68 | 
| 69 DEFINE_int32(shards, 1, "We're splitting source data into this many shards."); | 69 DEFINE_int32(shards, 1, "We're splitting source data into this many shards."); | 
| 70 DEFINE_int32(shard,  0, "Which shard do I run?"); | 70 DEFINE_int32(shard,  0, "Which shard do I run?"); | 
| 71 DEFINE_bool2(pre_log, p, false, "Log before running each test. May be incomprehe
      nsible when threading"); | 71 DEFINE_bool2(pre_log, p, false, "Log before running each test. May be incomprehe
      nsible when threading"); | 
| 72 | 72 | 
| 73 __SK_FORCE_IMAGE_DECODER_LINKING; | 73 __SK_FORCE_IMAGE_DECODER_LINKING; | 
| 74 using namespace DM; | 74 using namespace DM; | 
| 75 | 75 | 
| 76 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      ~~~~~~~~~~~~~~~~*/ | 76 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      ~~~~~~~~~~~~~~~~*/ | 
| 77 | 77 | 
|  | 78 static double now_ms() { return SkTime::GetNSecs() * 1e-6; } | 
|  | 79 | 
| 78 SK_DECLARE_STATIC_MUTEX(gFailuresMutex); | 80 SK_DECLARE_STATIC_MUTEX(gFailuresMutex); | 
| 79 static SkTArray<SkString> gFailures; | 81 static SkTArray<SkString> gFailures; | 
| 80 | 82 | 
| 81 static void fail(ImplicitString err) { | 83 static void fail(ImplicitString err) { | 
| 82     SkAutoMutexAcquire lock(gFailuresMutex); | 84     SkAutoMutexAcquire lock(gFailuresMutex); | 
| 83     SkDebugf("\n\nFAILURE: %s\n\n", err.c_str()); | 85     SkDebugf("\n\nFAILURE: %s\n\n", err.c_str()); | 
| 84     gFailures.push_back(err); | 86     gFailures.push_back(err); | 
| 85 } | 87 } | 
| 86 | 88 | 
| 87 static int32_t gPending = 0;  // Atomic.  Total number of running and queued tas
      ks. | 89 static int32_t gPending = 0;  // Atomic.  Total number of running and queued tas
      ks. | 
| (...skipping 735 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 823         //   - this Src / Sink combination is on the blacklist; | 825         //   - this Src / Sink combination is on the blacklist; | 
| 824         //   - it's a dry run. | 826         //   - it's a dry run. | 
| 825         SkString note(task->src->veto(task->sink->flags()) ? " (veto)" : ""); | 827         SkString note(task->src->veto(task->sink->flags()) ? " (veto)" : ""); | 
| 826         SkString whyBlacklisted = is_blacklisted(task->sink.tag, task->src.tag.c
      _str(), | 828         SkString whyBlacklisted = is_blacklisted(task->sink.tag, task->src.tag.c
      _str(), | 
| 827                                                  task->src.options.c_str(), name
      .c_str()); | 829                                                  task->src.options.c_str(), name
      .c_str()); | 
| 828         if (!whyBlacklisted.isEmpty()) { | 830         if (!whyBlacklisted.isEmpty()) { | 
| 829             note.appendf(" (--blacklist %s)", whyBlacklisted.c_str()); | 831             note.appendf(" (--blacklist %s)", whyBlacklisted.c_str()); | 
| 830         } | 832         } | 
| 831 | 833 | 
| 832         SkString log; | 834         SkString log; | 
| 833         WallTimer timer; | 835         auto timerStart = now_ms(); | 
| 834         timer.start(); |  | 
| 835         if (!FLAGS_dryRun && note.isEmpty()) { | 836         if (!FLAGS_dryRun && note.isEmpty()) { | 
| 836             SkBitmap bitmap; | 837             SkBitmap bitmap; | 
| 837             SkDynamicMemoryWStream stream; | 838             SkDynamicMemoryWStream stream; | 
| 838             if (FLAGS_pre_log) { | 839             if (FLAGS_pre_log) { | 
| 839                 SkDebugf("\nRunning %s->%s", name.c_str(), task->sink.tag); | 840                 SkDebugf("\nRunning %s->%s", name.c_str(), task->sink.tag); | 
| 840             } | 841             } | 
| 841             start(task->sink.tag, task->src.tag, task->src.options, name.c_str()
      ); | 842             start(task->sink.tag, task->src.tag, task->src.options, name.c_str()
      ); | 
| 842             Error err = task->sink->draw(*task->src, &bitmap, &stream, &log); | 843             Error err = task->sink->draw(*task->src, &bitmap, &stream, &log); | 
| 843             if (!err.isEmpty()) { | 844             if (!err.isEmpty()) { | 
| 844                 timer.end(); | 845                 auto elapsed = now_ms() - timerStart; | 
| 845                 if (err.isFatal()) { | 846                 if (err.isFatal()) { | 
| 846                     fail(SkStringPrintf("%s %s %s %s: %s", | 847                     fail(SkStringPrintf("%s %s %s %s: %s", | 
| 847                                         task->sink.tag, | 848                                         task->sink.tag, | 
| 848                                         task->src.tag.c_str(), | 849                                         task->src.tag.c_str(), | 
| 849                                         task->src.options.c_str(), | 850                                         task->src.options.c_str(), | 
| 850                                         name.c_str(), | 851                                         name.c_str(), | 
| 851                                         err.c_str())); | 852                                         err.c_str())); | 
| 852                 } else { | 853                 } else { | 
| 853                     note.appendf(" (skipped: %s)", err.c_str()); | 854                     note.appendf(" (skipped: %s)", err.c_str()); | 
| 854                 } | 855                 } | 
| 855                 done(timer.fWall, task->sink.tag, task->src.tag, task->src.optio
      ns, | 856                 done(elapsed, task->sink.tag, task->src.tag, task->src.options, | 
| 856                      name, note, log); | 857                      name, note, log); | 
| 857                 return; | 858                 return; | 
| 858             } | 859             } | 
| 859             SkAutoTDelete<SkStreamAsset> data(stream.detachAsStream()); | 860             SkAutoTDelete<SkStreamAsset> data(stream.detachAsStream()); | 
| 860 | 861 | 
| 861             SkString md5; | 862             SkString md5; | 
| 862             if (!FLAGS_writePath.isEmpty() || !FLAGS_readPath.isEmpty()) { | 863             if (!FLAGS_writePath.isEmpty() || !FLAGS_readPath.isEmpty()) { | 
| 863                 SkMD5 hash; | 864                 SkMD5 hash; | 
| 864                 if (data->getLength()) { | 865                 if (data->getLength()) { | 
| 865                     hash.writeStream(data, data->getLength()); | 866                     hash.writeStream(data, data->getLength()); | 
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 899             if (!FLAGS_writePath.isEmpty()) { | 900             if (!FLAGS_writePath.isEmpty()) { | 
| 900                 const char* ext = task->sink->fileExtension(); | 901                 const char* ext = task->sink->fileExtension(); | 
| 901                 if (data->getLength()) { | 902                 if (data->getLength()) { | 
| 902                     WriteToDisk(*task, md5, ext, data, data->getLength(), nullpt
      r); | 903                     WriteToDisk(*task, md5, ext, data, data->getLength(), nullpt
      r); | 
| 903                     SkASSERT(bitmap.drawsNothing()); | 904                     SkASSERT(bitmap.drawsNothing()); | 
| 904                 } else if (!bitmap.drawsNothing()) { | 905                 } else if (!bitmap.drawsNothing()) { | 
| 905                     WriteToDisk(*task, md5, ext, nullptr, 0, &bitmap); | 906                     WriteToDisk(*task, md5, ext, nullptr, 0, &bitmap); | 
| 906                 } | 907                 } | 
| 907             } | 908             } | 
| 908         } | 909         } | 
| 909         timer.end(); | 910         done(now_ms()-timerStart, task->sink.tag, task->src.tag.c_str(), task->s
      rc.options.c_str(), | 
| 910         done(timer.fWall, task->sink.tag, task->src.tag.c_str(), task->src.optio
      ns.c_str(), name, | 911              name, note, log); | 
| 911                 note, log); |  | 
| 912     } | 912     } | 
| 913 | 913 | 
| 914     static void WriteToDisk(const Task& task, | 914     static void WriteToDisk(const Task& task, | 
| 915                             SkString md5, | 915                             SkString md5, | 
| 916                             const char* ext, | 916                             const char* ext, | 
| 917                             SkStream* data, size_t len, | 917                             SkStream* data, size_t len, | 
| 918                             const SkBitmap* bitmap) { | 918                             const SkBitmap* bitmap) { | 
| 919         JsonWriter::BitmapResult result; | 919         JsonWriter::BitmapResult result; | 
| 920         result.name          = task.src->name(); | 920         result.name          = task.src->name(); | 
| 921         result.config        = task.sink.tag; | 921         result.config        = task.sink.tag; | 
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1025         } | 1025         } | 
| 1026         bool verbose() const override { return FLAGS_veryVerbose; } | 1026         bool verbose() const override { return FLAGS_veryVerbose; } | 
| 1027     } reporter; | 1027     } reporter; | 
| 1028 | 1028 | 
| 1029     SkString note; | 1029     SkString note; | 
| 1030     SkString whyBlacklisted = is_blacklisted("_", "tests", "_", test->name); | 1030     SkString whyBlacklisted = is_blacklisted("_", "tests", "_", test->name); | 
| 1031     if (!whyBlacklisted.isEmpty()) { | 1031     if (!whyBlacklisted.isEmpty()) { | 
| 1032         note.appendf(" (--blacklist %s)", whyBlacklisted.c_str()); | 1032         note.appendf(" (--blacklist %s)", whyBlacklisted.c_str()); | 
| 1033     } | 1033     } | 
| 1034 | 1034 | 
| 1035     WallTimer timer; | 1035     auto timerStart = now_ms(); | 
| 1036     timer.start(); |  | 
| 1037     if (!FLAGS_dryRun && whyBlacklisted.isEmpty()) { | 1036     if (!FLAGS_dryRun && whyBlacklisted.isEmpty()) { | 
| 1038         start("unit", "test", "", test->name); | 1037         start("unit", "test", "", test->name); | 
| 1039         GrContextFactory factory; | 1038         GrContextFactory factory; | 
| 1040         if (FLAGS_pre_log) { | 1039         if (FLAGS_pre_log) { | 
| 1041             SkDebugf("\nRunning test %s", test->name); | 1040             SkDebugf("\nRunning test %s", test->name); | 
| 1042         } | 1041         } | 
| 1043         test->proc(&reporter, &factory); | 1042         test->proc(&reporter, &factory); | 
| 1044     } | 1043     } | 
| 1045     timer.end(); | 1044     done(now_ms()-timerStart, "unit", "test", "", test->name, note, ""); | 
| 1046     done(timer.fWall, "unit", "test", "", test->name, note, ""); |  | 
| 1047 } | 1045 } | 
| 1048 | 1046 | 
| 1049 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      ~~~~~~~~~~~~~~~~*/ | 1047 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      ~~~~~~~~~~~~~~~~*/ | 
| 1050 | 1048 | 
| 1051 // If we're isolating all GPU-bound work to one thread (the default), this funct
      ion runs all that. | 1049 // If we're isolating all GPU-bound work to one thread (the default), this funct
      ion runs all that. | 
| 1052 static void run_enclave_and_gpu_tests(SkTArray<Task>* tasks) { | 1050 static void run_enclave_and_gpu_tests(SkTArray<Task>* tasks) { | 
| 1053     run_enclave(tasks); | 1051     run_enclave(tasks); | 
| 1054     for (int i = 0; i < gGPUTests.count(); i++) { | 1052     for (int i = 0; i < gGPUTests.count(); i++) { | 
| 1055         run_test(&gGPUTests[i]); | 1053         run_test(&gGPUTests[i]); | 
| 1056     } | 1054     } | 
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1165     #endif  // SK_PDF_IMAGE_STATS | 1163     #endif  // SK_PDF_IMAGE_STATS | 
| 1166     return 0; | 1164     return 0; | 
| 1167 } | 1165 } | 
| 1168 | 1166 | 
| 1169 #if !defined(SK_BUILD_FOR_IOS) | 1167 #if !defined(SK_BUILD_FOR_IOS) | 
| 1170 int main(int argc, char** argv) { | 1168 int main(int argc, char** argv) { | 
| 1171     SkCommandLineFlags::Parse(argc, argv); | 1169     SkCommandLineFlags::Parse(argc, argv); | 
| 1172     return dm_main(); | 1170     return dm_main(); | 
| 1173 } | 1171 } | 
| 1174 #endif | 1172 #endif | 
| OLD | NEW | 
|---|