2766c00fc0
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
168 lines
5.7 KiB
C++
168 lines
5.7 KiB
C++
|
|
/*
|
|
* Copyright 2011 Google Inc.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
#ifndef SkDumpCanvas_DEFINED
|
|
#define SkDumpCanvas_DEFINED
|
|
|
|
#include "SkCanvas.h"
|
|
|
|
#ifdef SK_DEVELOPER
|
|
|
|
/** This class overrides all the draw methods on SkCanvas, and formats them
|
|
as text, and then sends that to a Dumper helper object.
|
|
|
|
Typical use might be to dump a display list to a log file to see what is
|
|
being drawn.
|
|
*/
|
|
class SkDumpCanvas : public SkCanvas {
|
|
public:
|
|
class Dumper;
|
|
|
|
explicit SkDumpCanvas(Dumper* = 0);
|
|
virtual ~SkDumpCanvas();
|
|
|
|
enum Verb {
|
|
kNULL_Verb,
|
|
|
|
kSave_Verb,
|
|
kRestore_Verb,
|
|
|
|
kMatrix_Verb,
|
|
|
|
kClip_Verb,
|
|
|
|
kDrawPaint_Verb,
|
|
kDrawPoints_Verb,
|
|
kDrawOval_Verb,
|
|
kDrawRect_Verb,
|
|
kDrawRRect_Verb,
|
|
kDrawDRRect_Verb,
|
|
kDrawPath_Verb,
|
|
kDrawBitmap_Verb,
|
|
kDrawText_Verb,
|
|
kDrawPicture_Verb,
|
|
kDrawVertices_Verb,
|
|
kDrawPatch_Verb,
|
|
kDrawData_Verb, // obsolete
|
|
|
|
kCull_Verb
|
|
};
|
|
|
|
/** Subclasses of this are installed on the DumpCanvas, and then called for
|
|
each drawing command.
|
|
*/
|
|
class Dumper : public SkRefCnt {
|
|
public:
|
|
|
|
|
|
virtual void dump(SkDumpCanvas*, SkDumpCanvas::Verb, const char str[],
|
|
const SkPaint*) = 0;
|
|
|
|
private:
|
|
typedef SkRefCnt INHERITED;
|
|
};
|
|
|
|
Dumper* getDumper() const { return fDumper; }
|
|
void setDumper(Dumper*);
|
|
|
|
int getNestLevel() const { return fNestLevel; }
|
|
|
|
protected:
|
|
void willSave() override;
|
|
SaveLayerStrategy willSaveLayer(const SkRect*, const SkPaint*, SaveFlags) override;
|
|
void willRestore() override;
|
|
|
|
void didConcat(const SkMatrix&) override;
|
|
void didSetMatrix(const SkMatrix&) override;
|
|
|
|
void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) override;
|
|
virtual void onDrawText(const void* text, size_t byteLength, SkScalar x, SkScalar y,
|
|
const SkPaint&) override;
|
|
virtual void onDrawPosText(const void* text, size_t byteLength, const SkPoint pos[],
|
|
const SkPaint&) override;
|
|
virtual void onDrawPosTextH(const void* text, size_t byteLength, const SkScalar xpos[],
|
|
SkScalar constY, const SkPaint&) override;
|
|
virtual void onDrawTextOnPath(const void* text, size_t byteLength, const SkPath& path,
|
|
const SkMatrix* matrix, const SkPaint&) override;
|
|
virtual void onDrawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y,
|
|
const SkPaint& paint) override;
|
|
virtual void onDrawPatch(const SkPoint cubics[12], const SkColor colors[4],
|
|
const SkPoint texCoords[4], SkXfermode* xmode,
|
|
const SkPaint& paint) override;
|
|
|
|
void onDrawPaint(const SkPaint&) override;
|
|
void onDrawPoints(PointMode, size_t count, const SkPoint pts[], const SkPaint&) override;
|
|
void onDrawRect(const SkRect&, const SkPaint&) override;
|
|
void onDrawOval(const SkRect&, const SkPaint&) override;
|
|
void onDrawRRect(const SkRRect&, const SkPaint&) override;
|
|
void onDrawPath(const SkPath&, const SkPaint&) override;
|
|
void onDrawBitmap(const SkBitmap&, SkScalar left, SkScalar top, const SkPaint*) override;
|
|
void onDrawBitmapRect(const SkBitmap&, const SkRect* src, const SkRect& dst, const SkPaint*,
|
|
DrawBitmapRectFlags flags) override;
|
|
void onDrawImage(const SkImage*, SkScalar left, SkScalar top, const SkPaint*) override;
|
|
void onDrawImageRect(const SkImage*, const SkRect* src, const SkRect& dst,
|
|
const SkPaint*) override;
|
|
void onDrawBitmapNine(const SkBitmap&, const SkIRect& center, const SkRect& dst,
|
|
const SkPaint*) override;
|
|
void onDrawSprite(const SkBitmap&, int left, int top, const SkPaint*) override;
|
|
void onDrawVertices(VertexMode vmode, int vertexCount,
|
|
const SkPoint vertices[], const SkPoint texs[],
|
|
const SkColor colors[], SkXfermode* xmode,
|
|
const uint16_t indices[], int indexCount,
|
|
const SkPaint&) override;
|
|
|
|
void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) override;
|
|
void onClipRRect(const SkRRect&, SkRegion::Op, ClipEdgeStyle) override;
|
|
void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) override;
|
|
void onClipRegion(const SkRegion&, SkRegion::Op) override;
|
|
|
|
void onDrawPicture(const SkPicture*, const SkMatrix*, const SkPaint*) override;
|
|
|
|
static const char* EdgeStyleToAAString(ClipEdgeStyle edgeStyle);
|
|
|
|
private:
|
|
Dumper* fDumper;
|
|
int fNestLevel; // for nesting recursive elements like pictures
|
|
|
|
void dump(Verb, const SkPaint*, const char format[], ...);
|
|
|
|
typedef SkCanvas INHERITED;
|
|
};
|
|
|
|
/** Formats the draw commands, and send them to a function-pointer provided
|
|
by the caller.
|
|
*/
|
|
class SkFormatDumper : public SkDumpCanvas::Dumper {
|
|
public:
|
|
SkFormatDumper(void (*)(const char text[], void* refcon), void* refcon);
|
|
|
|
// override from baseclass that does the formatting, and in turn calls
|
|
// the function pointer that was passed to the constructor
|
|
virtual void dump(SkDumpCanvas*, SkDumpCanvas::Verb, const char str[],
|
|
const SkPaint*) override;
|
|
|
|
private:
|
|
void (*fProc)(const char*, void*);
|
|
void* fRefcon;
|
|
|
|
typedef SkDumpCanvas::Dumper INHERITED;
|
|
};
|
|
|
|
/** Subclass of Dumper that dumps the drawing command to SkDebugf
|
|
*/
|
|
class SkDebugfDumper : public SkFormatDumper {
|
|
public:
|
|
SkDebugfDumper();
|
|
|
|
private:
|
|
typedef SkFormatDumper INHERITED;
|
|
};
|
|
|
|
#endif
|
|
|
|
#endif
|