Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(99)

Side by Side Diff: dm/DM.cpp

Issue 894013002: patch from issue 886233004 at patchset 40001 (http://crrev.com/886233004#ps40001) (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: rebase Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | dm/DMGpuSupport.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « no previous file | dm/DMGpuSupport.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698