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

Side by Side Diff: dm/DMTileGridTask.cpp

Issue 214953003: split SkPictureRecorder out of SkPicture (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: update to ToT (again) Created 6 years, 8 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 | Annotate | Revision Log
OLDNEW
1 #include "DMTileGridTask.h" 1 #include "DMTileGridTask.h"
2 #include "DMWriteTask.h" 2 #include "DMWriteTask.h"
3 #include "DMUtil.h" 3 #include "DMUtil.h"
4 4
5 #include "SkCommandLineFlags.h" 5 #include "SkCommandLineFlags.h"
6 #include "SkPicture.h" 6 #include "SkPicture.h"
7 #include "SkTileGridPicture.h" 7 #include "SkTileGridPicture.h"
8 8
9 // TODO(mtklein): Tile grid tests are currently failing. (Skia issue 1198). Wh en fixed, -> true. 9 // TODO(mtklein): Tile grid tests are currently failing. (Skia issue 1198). Wh en fixed, -> true.
10 DEFINE_bool(tileGrid, false, "If true, run picture replay tests with a tile grid ."); 10 DEFINE_bool(tileGrid, false, "If true, run picture replay tests with a tile grid .");
(...skipping 11 matching lines...) Expand all
22 static int tiles_needed(int fullDimension, int tileDimension) { 22 static int tiles_needed(int fullDimension, int tileDimension) {
23 return (fullDimension + tileDimension - 1) / tileDimension; 23 return (fullDimension + tileDimension - 1) / tileDimension;
24 } 24 }
25 25
26 void TileGridTask::draw() { 26 void TileGridTask::draw() {
27 const SkTileGridPicture::TileGridInfo info = { 27 const SkTileGridPicture::TileGridInfo info = {
28 fTileSize, 28 fTileSize,
29 SkISize::Make(0,0), // Overlap between adjacent tiles. 29 SkISize::Make(0,0), // Overlap between adjacent tiles.
30 SkIPoint::Make(0,0), // Offset. 30 SkIPoint::Make(0,0), // Offset.
31 }; 31 };
32 const SkISize size = fGM->getISize(); 32 SkAutoTUnref<SkPictureFactory> factory(SkNEW_ARGS(SkTileGridPictureFactory, (info)));
33 SkTileGridPicture recorded(size.width(), size.height(), info); 33 SkAutoTUnref<SkPicture> recorded(RecordPicture(fGM.get(),
34 RecordPicture(fGM.get(), &recorded, SkPicture::kUsePathBoundsForClip_Recordi ngFlag); 34 SkPicture::kUsePathBoundsForC lip_RecordingFlag,
35 factory));
35 36
36 SkBitmap full; 37 SkBitmap full;
37 SetupBitmap(fReference.colorType(), fGM.get(), &full); 38 SetupBitmap(fReference.colorType(), fGM.get(), &full);
38 SkCanvas fullCanvas(full); 39 SkCanvas fullCanvas(full);
39 40
40 SkBitmap tile; 41 SkBitmap tile;
41 tile.allocPixels(SkImageInfo::Make(fTileSize.width(), fTileSize.height(), 42 tile.allocPixels(SkImageInfo::Make(fTileSize.width(), fTileSize.height(),
42 fReference.colorType(), kPremul_SkAlphaTy pe)); 43 fReference.colorType(), kPremul_SkAlphaTy pe));
43 SkCanvas tileCanvas(tile); 44 SkCanvas tileCanvas(tile);
44 45
45 SkPaint paint; 46 SkPaint paint;
46 paint.setXfermodeMode(SkXfermode::kSrc_Mode); 47 paint.setXfermodeMode(SkXfermode::kSrc_Mode);
47 48
48 for (int y = 0; y < tiles_needed(full.height(), tile.height()); y++) { 49 for (int y = 0; y < tiles_needed(full.height(), tile.height()); y++) {
49 for (int x = 0; x < tiles_needed(full.width(), tile.width()); x++) { 50 for (int x = 0; x < tiles_needed(full.width(), tile.width()); x++) {
50 SkAutoCanvasRestore ar(&tileCanvas, true/*also save now*/); 51 SkAutoCanvasRestore ar(&tileCanvas, true/*also save now*/);
51 52
52 const SkScalar xOffset = SkIntToScalar(x * tile.width()), 53 const SkScalar xOffset = SkIntToScalar(x * tile.width()),
53 yOffset = SkIntToScalar(y * tile.height()); 54 yOffset = SkIntToScalar(y * tile.height());
54 SkMatrix matrix = tileCanvas.getTotalMatrix(); 55 SkMatrix matrix = tileCanvas.getTotalMatrix();
55 matrix.postTranslate(-xOffset, -yOffset); 56 matrix.postTranslate(-xOffset, -yOffset);
56 tileCanvas.setMatrix(matrix); 57 tileCanvas.setMatrix(matrix);
57 58
58 recorded.draw(&tileCanvas); 59 recorded->draw(&tileCanvas);
59 tileCanvas.flush(); 60 tileCanvas.flush();
60 fullCanvas.drawBitmap(tile, xOffset, yOffset, &paint); 61 fullCanvas.drawBitmap(tile, xOffset, yOffset, &paint);
61 } 62 }
62 } 63 }
63 64
64 if (!BitmapsEqual(full, fReference)) { 65 if (!BitmapsEqual(full, fReference)) {
65 this->fail(); 66 this->fail();
66 this->spawnChild(SkNEW_ARGS(WriteTask, (*this, full))); 67 this->spawnChild(SkNEW_ARGS(WriteTask, (*this, full)));
67 } 68 }
68 } 69 }
69 70
70 bool TileGridTask::shouldSkip() const { 71 bool TileGridTask::shouldSkip() const {
71 if (fGM->getFlags() & skiagm::GM::kSkipPicture_Flag) { 72 if (fGM->getFlags() & skiagm::GM::kSkipPicture_Flag) {
72 return true; 73 return true;
73 } 74 }
74 if (fGM->getFlags() & skiagm::GM::kSkipTiled_Flag) { 75 if (fGM->getFlags() & skiagm::GM::kSkipTiled_Flag) {
75 return true; 76 return true;
76 } 77 }
77 return !FLAGS_tileGrid; 78 return !FLAGS_tileGrid;
78 } 79 }
79 80
80 } // namespace DM 81 } // namespace DM
OLDNEW
« no previous file with comments | « dm/DMSerializeTask.cpp ('k') | dm/DMUtil.h » ('j') | samplecode/SampleTiling.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698