| OLD | NEW |
| 1 #include "DMQuiltTask.h" | 1 #include "DMQuiltTask.h" |
| 2 #include "DMUtil.h" | 2 #include "DMUtil.h" |
| 3 #include "DMWriteTask.h" | 3 #include "DMWriteTask.h" |
| 4 | 4 |
| 5 #include "SkBBHFactory.h" | 5 #include "SkBBHFactory.h" |
| 6 #include "SkCommandLineFlags.h" | 6 #include "SkCommandLineFlags.h" |
| 7 #include "SkPicture.h" | 7 #include "SkPicture.h" |
| 8 #include "SkTaskGroup.h" | 8 #include "SkThreadPool.h" |
| 9 | 9 |
| 10 DEFINE_bool(quilt, true, "If true, draw GM via a picture into a quilt of small t
iles and compare."); | 10 DEFINE_bool(quilt, true, "If true, draw GM via a picture into a quilt of small t
iles and compare."); |
| 11 DEFINE_int32(quiltTile, 256, "Dimension of (square) quilt tile."); | 11 DEFINE_int32(quiltTile, 256, "Dimension of (square) quilt tile."); |
| 12 | 12 |
| 13 namespace DM { | 13 namespace DM { |
| 14 | 14 |
| 15 static SkString suffix(QuiltTask::Backend backend, QuiltTask::BBH bbh) { | 15 static SkString suffix(QuiltTask::Backend backend, QuiltTask::BBH bbh) { |
| 16 static const char* kBackends[] = { "default", "skrecord" }; | 16 static const char* kBackends[] = { "default", "skrecord" }; |
| 17 static const char* kBBHs[] = { "nobbh", "rtree", "tilegrid" }; | 17 static const char* kBBHs[] = { "nobbh", "rtree", "tilegrid" }; |
| 18 return SkStringPrintf("%s-%s", kBackends[backend], kBBHs[bbh]); | 18 return SkStringPrintf("%s-%s", kBackends[backend], kBBHs[bbh]); |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 89 SkBitmap full; | 89 SkBitmap full; |
| 90 AllocatePixels(fReference, &full); | 90 AllocatePixels(fReference, &full); |
| 91 | 91 |
| 92 if (fGM->getFlags() & skiagm::GM::kSkipTiled_Flag) { | 92 if (fGM->getFlags() & skiagm::GM::kSkipTiled_Flag) { |
| 93 // Some GMs don't draw exactly the same when tiled. Draw them in one go
. | 93 // Some GMs don't draw exactly the same when tiled. Draw them in one go
. |
| 94 SkCanvas canvas(full); | 94 SkCanvas canvas(full); |
| 95 recorded->draw(&canvas); | 95 recorded->draw(&canvas); |
| 96 canvas.flush(); | 96 canvas.flush(); |
| 97 } else { | 97 } else { |
| 98 // Draw tiles in parallel into the same bitmap, simulating aggressive im
pl-side painting. | 98 // Draw tiles in parallel into the same bitmap, simulating aggressive im
pl-side painting. |
| 99 SkTaskGroup tg; | 99 SkThreadPool pool(SkThreadPool::kThreadPerCore); |
| 100 for (int y = 0; y < tiles_needed(full.height(), FLAGS_quiltTile); y++) { | 100 for (int y = 0; y < tiles_needed(full.height(), FLAGS_quiltTile); y++) { |
| 101 for (int x = 0; x < tiles_needed(full.width(), FLAGS_quiltTile); x++
) { | 101 for (int x = 0; x < tiles_needed(full.width(), FLAGS_quiltTile); x++
) { |
| 102 // Deletes itself when done. | 102 // Deletes itself when done. |
| 103 tg.add(new Tile(x, y, *recorded, &full)); | 103 pool.add(new Tile(x, y, *recorded, &full)); |
| 104 } | 104 } |
| 105 } | 105 } |
| 106 } | 106 } |
| 107 | 107 |
| 108 if (!BitmapsEqual(full, fReference)) { | 108 if (!BitmapsEqual(full, fReference)) { |
| 109 this->fail(); | 109 this->fail(); |
| 110 this->spawnChild(SkNEW_ARGS(WriteTask, (*this, full))); | 110 this->spawnChild(SkNEW_ARGS(WriteTask, (*this, full))); |
| 111 } | 111 } |
| 112 } | 112 } |
| 113 | 113 |
| 114 bool QuiltTask::shouldSkip() const { | 114 bool QuiltTask::shouldSkip() const { |
| 115 if (fGM->getFlags() & skiagm::GM::kSkipPicture_Flag) { | 115 if (fGM->getFlags() & skiagm::GM::kSkipPicture_Flag) { |
| 116 return true; | 116 return true; |
| 117 } | 117 } |
| 118 return !FLAGS_quilt; | 118 return !FLAGS_quilt; |
| 119 } | 119 } |
| 120 | 120 |
| 121 } // namespace DM | 121 } // namespace DM |
| OLD | NEW |