skia2/experimental/PdfViewer/SkTrackDevice.h
mtklein 2766c00fc0 remove SkInstCnt
It's been outclassed by Valgrind and leak sanitizer,
and it seems to be causing problems for external folks building Skia.

I'm not sure why our own builds seem unaffected.

Latest thread:
https://groups.google.com/forum/#!topic/skia-discuss/oj9FsQwwSF0

BUG=skia:

Review URL: https://codereview.chromium.org/1217573002
2015-06-26 11:45:03 -07:00

180 lines
5.8 KiB
C++

/*
* Copyright 2013 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SkTrackDevice_DEFINED
#define SkTrackDevice_DEFINED
#include "SkBitmapDevice.h"
#include "SkTracker.h"
/** \class SkTrackDevice
*
* A Track Device is used to track the callstack of an operation that affected some pixels.
* It can be used with SampleApp to investigate bugs (CL not checked in yet).
*
* every drawFoo is implemented as such:
* before(); // - collects state of interesting pixels
* INHERITED::drawFoo(...);
* after(); // - checks if pixels of interest, and issue a breakpoint.
*
*/
// TODO: can this be derived from SkBaseDevice instead?
class SkTrackDevice : public SkBitmapDevice {
public:
SkTrackDevice(const SkBitmap& bitmap)
: INHERITED(bitmap, SkSurfaceProps(0, kUnknown_SkPixelGeometry))
, fTracker(NULL) {
}
virtual ~SkTrackDevice() {}
// Install a tracker - we can reuse the tracker between multiple devices, and the state of the
// tracker is preserved - number and location of poinbts, ...
void installTracker(SkTracker* tracker) {
fTracker = tracker;
fTracker->newFrame();
}
protected:
#if 0 // clear is deprecated (and private)
virtual void clear(SkColor color) {
before();
INHERITED::clear(color);
after();
}
#endif
virtual void drawPaint(const SkDraw& dummy1, const SkPaint& paint) {
before();
INHERITED::drawPaint(dummy1, paint);
after();
}
virtual void drawPoints(const SkDraw& dummy1, SkCanvas::PointMode mode, size_t count,
const SkPoint dummy2[], const SkPaint& paint) {
before();
INHERITED::drawPoints(dummy1, mode, count, dummy2, paint);
after();
}
virtual void drawRect(const SkDraw& dummy1, const SkRect& r,
const SkPaint& paint) {
before();
INHERITED::drawRect(dummy1, r, paint);
after();
}
virtual void drawOval(const SkDraw& dummy1, const SkRect& oval,
const SkPaint& paint) {
before();
INHERITED::drawOval(dummy1, oval, paint);
after();
}
virtual void drawRRect(const SkDraw& dummy1, const SkRRect& rr,
const SkPaint& paint) {
before();
INHERITED::drawRRect(dummy1, rr, paint);
after();
}
virtual void drawPath(const SkDraw& dummy1, const SkPath& path,
const SkPaint& paint,
const SkMatrix* prePathMatrix = NULL,
bool pathIsMutable = false) {
before();
INHERITED::drawPath(dummy1, path, paint, prePathMatrix, pathIsMutable);
after();
}
virtual void drawBitmap(const SkDraw& dummy1, const SkBitmap& bitmap,
const SkMatrix& matrix, const SkPaint& paint) {
before();
INHERITED::drawBitmap(dummy1, bitmap, matrix, paint);
after();
}
virtual void drawSprite(const SkDraw& dummy1, const SkBitmap& bitmap,
int x, int y, const SkPaint& paint) {
before();
INHERITED::drawSprite(dummy1, bitmap, x, y, paint);
after();
}
virtual void drawBitmapRect(const SkDraw& dummy1, const SkBitmap& dummy2,
const SkRect* srcOrNull, const SkRect& dst,
const SkPaint& paint,
SkCanvas::DrawBitmapRectFlags flags) {
before();
INHERITED::drawBitmapRect(dummy1, dummy2, srcOrNull, dst, paint, flags);
after();
}
virtual void drawText(const SkDraw& dummy1, const void* text, size_t len,
SkScalar x, SkScalar y, const SkPaint& paint) {
before();
INHERITED::drawText(dummy1, text, len, x, y, paint);
after();
}
virtual void drawPosText(const SkDraw& dummy1, const void* text, size_t len,
const SkScalar pos[], int scalarsPerPos,
const SkPoint& offset, const SkPaint& paint) {
before();
INHERITED::drawPosText(dummy1, text, len, pos, scalarsPerPos, offset, paint);
after();
}
virtual void drawTextOnPath(const SkDraw& dummy1, const void* text, size_t len,
const SkPath& path, const SkMatrix* matrix,
const SkPaint& paint) {
before();
INHERITED::drawTextOnPath(dummy1, text, len, path, matrix, paint);
after();
}
virtual void drawVertices(const SkDraw& dummy1, SkCanvas::VertexMode dummy2, int vertexCount,
const SkPoint verts[], const SkPoint texs[],
const SkColor colors[], SkXfermode* xmode,
const uint16_t indices[], int indexCount,
const SkPaint& paint) {
before();
INHERITED::drawVertices(dummy1, dummy2, vertexCount,verts, texs,colors, xmode, indices,
indexCount, paint);
after();
}
virtual void drawDevice(const SkDraw& dummy1, SkBaseDevice* dummy2, int x, int y,
const SkPaint& dummy3) {
before();
INHERITED::drawDevice(dummy1, dummy2, x, y, dummy3);
after();
}
private:
void before() {
if (fTracker) {
fTracker->before(accessBitmap(false));
}
}
// any/all of the expected touched has to be changed, and all expected untouched must be intact
void after() {
if (fTracker) {
fTracker->after(accessBitmap(false));
}
}
private:
SkTracker* fTracker;
typedef SkBitmapDevice INHERITED;
};
#endif // SkTrackDevice_DEFINED