| OLD | NEW |
| (Empty) |
| 1 /* | |
| 2 * Copyright 2013 Google Inc. | |
| 3 * | |
| 4 * Use of this source code is governed by a BSD-style license that can be | |
| 5 * found in the LICENSE file. | |
| 6 */ | |
| 7 | |
| 8 #ifndef SkTrackDevice_DEFINED | |
| 9 #define SkTrackDevice_DEFINED | |
| 10 | |
| 11 #include "SkBitmapDevice.h" | |
| 12 #include "SkTracker.h" | |
| 13 | |
| 14 /** \class SkTrackDevice | |
| 15 * | |
| 16 * A Track Device is used to track the callstack of an operation that affected
some pixels. | |
| 17 * It can be used with SampleApp to investigate bugs (CL not checked in yet). | |
| 18 * | |
| 19 * every drawFoo is implemented as such: | |
| 20 * before(); // - collects state of interesting pixels | |
| 21 * INHERITED::drawFoo(...); | |
| 22 * after(); // - checks if pixels of interest, and issue a breakpoint. | |
| 23 * | |
| 24 */ | |
| 25 // TODO: can this be derived from SkBaseDevice instead? | |
| 26 class SkTrackDevice : public SkBitmapDevice { | |
| 27 public: | |
| 28 SkTrackDevice(const SkBitmap& bitmap) | |
| 29 : INHERITED(bitmap, SkSurfaceProps(0, kUnknown_SkPixelGeometry)) | |
| 30 , fTracker(NULL) { | |
| 31 } | |
| 32 | |
| 33 virtual ~SkTrackDevice() {} | |
| 34 | |
| 35 // Install a tracker - we can reuse the tracker between multiple devices, an
d the state of the | |
| 36 // tracker is preserved - number and location of poinbts, ... | |
| 37 void installTracker(SkTracker* tracker) { | |
| 38 fTracker = tracker; | |
| 39 fTracker->newFrame(); | |
| 40 } | |
| 41 | |
| 42 protected: | |
| 43 #if 0 // clear is deprecated (and private) | |
| 44 virtual void clear(SkColor color) { | |
| 45 before(); | |
| 46 INHERITED::clear(color); | |
| 47 after(); | |
| 48 } | |
| 49 #endif | |
| 50 | |
| 51 void drawPaint(const SkDraw& dummy1, const SkPaint& paint) override { | |
| 52 before(); | |
| 53 INHERITED::drawPaint(dummy1, paint); | |
| 54 after(); | |
| 55 } | |
| 56 | |
| 57 void drawPoints(const SkDraw& dummy1, SkCanvas::PointMode mode, size_t count
, | |
| 58 const SkPoint dummy2[], const SkPaint& paint) override { | |
| 59 before(); | |
| 60 INHERITED::drawPoints(dummy1, mode, count, dummy2, paint); | |
| 61 after(); | |
| 62 } | |
| 63 | |
| 64 void drawRect(const SkDraw& dummy1, const SkRect& r, const SkPaint& paint) o
verride { | |
| 65 before(); | |
| 66 INHERITED::drawRect(dummy1, r, paint); | |
| 67 after(); | |
| 68 } | |
| 69 | |
| 70 | |
| 71 void drawOval(const SkDraw& dummy1, const SkRect& oval, const SkPaint& paint
) override { | |
| 72 before(); | |
| 73 INHERITED::drawOval(dummy1, oval, paint); | |
| 74 after(); | |
| 75 } | |
| 76 | |
| 77 void drawRRect(const SkDraw& dummy1, const SkRRect& rr, const SkPaint& paint
) override { | |
| 78 before(); | |
| 79 INHERITED::drawRRect(dummy1, rr, paint); | |
| 80 after(); | |
| 81 } | |
| 82 | |
| 83 void drawPath(const SkDraw& dummy1, const SkPath& path, | |
| 84 const SkPaint& paint, | |
| 85 const SkMatrix* prePathMatrix = NULL, | |
| 86 bool pathIsMutable = false) override { | |
| 87 before(); | |
| 88 INHERITED::drawPath(dummy1, path, paint, prePathMatrix, pathIsMutable); | |
| 89 after(); | |
| 90 } | |
| 91 | |
| 92 void drawBitmap(const SkDraw& dummy1, const SkBitmap& bitmap, | |
| 93 const SkMatrix& matrix, const SkPaint& paint) override { | |
| 94 before(); | |
| 95 INHERITED::drawBitmap(dummy1, bitmap, matrix, paint); | |
| 96 after(); | |
| 97 } | |
| 98 | |
| 99 void drawSprite(const SkDraw& dummy1, const SkBitmap& bitmap, | |
| 100 int x, int y, const SkPaint& paint) override { | |
| 101 before(); | |
| 102 INHERITED::drawSprite(dummy1, bitmap, x, y, paint); | |
| 103 after(); | |
| 104 } | |
| 105 | |
| 106 void drawBitmapRect(const SkDraw& dummy1, const SkBitmap& dummy2, | |
| 107 const SkRect* srcOrNull, const SkRect& dst, | |
| 108 const SkPaint& paint, | |
| 109 SK_VIRTUAL_CONSTRAINT_TYPE flags) override { | |
| 110 before(); | |
| 111 INHERITED::drawBitmapRect(dummy1, dummy2, srcOrNull, dst, paint, flags); | |
| 112 after(); | |
| 113 } | |
| 114 | |
| 115 void drawText(const SkDraw& dummy1, const void* text, size_t len, | |
| 116 SkScalar x, SkScalar y, const SkPaint& paint) override { | |
| 117 before(); | |
| 118 INHERITED::drawText(dummy1, text, len, x, y, paint); | |
| 119 after(); | |
| 120 } | |
| 121 | |
| 122 void drawPosText(const SkDraw& dummy1, const void* text, size_t len, | |
| 123 const SkScalar pos[], int scalarsPerPos, | |
| 124 const SkPoint& offset, const SkPaint& paint) override { | |
| 125 before(); | |
| 126 INHERITED::drawPosText(dummy1, text, len, pos, scalarsPerPos, offset, pa
int); | |
| 127 after(); | |
| 128 } | |
| 129 | |
| 130 void drawTextOnPath(const SkDraw& dummy1, const void* text, size_t len, | |
| 131 const SkPath& path, const SkMatrix* matrix, | |
| 132 const SkPaint& paint) override { | |
| 133 before(); | |
| 134 INHERITED::drawTextOnPath(dummy1, text, len, path, matrix, paint); | |
| 135 after(); | |
| 136 } | |
| 137 | |
| 138 void drawVertices(const SkDraw& dummy1, SkCanvas::VertexMode dummy2, int ver
texCount, | |
| 139 const SkPoint verts[], const SkPoint texs[], | |
| 140 const SkColor colors[], SkXfermode* xmode, | |
| 141 const uint16_t indices[], int indexCount, | |
| 142 const SkPaint& paint) override { | |
| 143 before(); | |
| 144 INHERITED::drawVertices(dummy1, dummy2, vertexCount,verts, texs,colors,
xmode, indices, | |
| 145 indexCount, paint); | |
| 146 after(); | |
| 147 } | |
| 148 | |
| 149 void drawDevice(const SkDraw& dummy1, SkBaseDevice* dummy2, int x, int y, | |
| 150 const SkPaint& dummy3) override { | |
| 151 before(); | |
| 152 INHERITED::drawDevice(dummy1, dummy2, x, y, dummy3); | |
| 153 after(); | |
| 154 } | |
| 155 | |
| 156 private: | |
| 157 void before() { | |
| 158 if (fTracker) { | |
| 159 fTracker->before(accessBitmap(false)); | |
| 160 } | |
| 161 } | |
| 162 | |
| 163 // any/all of the expected touched has to be changed, and all expected untou
ched must be intact | |
| 164 void after() { | |
| 165 if (fTracker) { | |
| 166 fTracker->after(accessBitmap(false)); | |
| 167 } | |
| 168 } | |
| 169 | |
| 170 private: | |
| 171 SkTracker* fTracker; | |
| 172 | |
| 173 typedef SkBitmapDevice INHERITED; | |
| 174 }; | |
| 175 | |
| 176 #endif // SkTrackDevice_DEFINED | |
| OLD | NEW |