Index: skia/ext/benchmarking_canvas.h |
diff --git a/skia/ext/benchmarking_canvas.h b/skia/ext/benchmarking_canvas.h |
index 50289a5746b57cce5d6f56938e94cf875be6dc02..4f2e25718e5060822ed8ea12a8cbf83952f853f5 100644 |
--- a/skia/ext/benchmarking_canvas.h |
+++ b/skia/ext/benchmarking_canvas.h |
@@ -5,45 +5,86 @@ |
#ifndef SKIA_EXT_BENCHMARKING_CANVAS_H_ |
#define SKIA_EXT_BENCHMARKING_CANVAS_H_ |
-#include "base/compiler_specific.h" |
-#include "skia/ext/refptr.h" |
+#include "base/values.h" |
#include "third_party/skia/include/utils/SkNWayCanvas.h" |
-#include "third_party/skia/src/utils/debugger/SkDebugCanvas.h" |
namespace skia { |
-class TimingCanvas; |
- |
class SK_API BenchmarkingCanvas : public SkNWayCanvas { |
public: |
- BenchmarkingCanvas(int width, int height); |
+ BenchmarkingCanvas(SkCanvas* canvas, unsigned flags = 0); |
~BenchmarkingCanvas() override; |
+ enum Flags { |
+ // TODO(fmalita): add overdraw visualization support |
+ // (http://crbug.com/461534) |
+ kOverdrawVisualization_Flag = 0x01, |
+ }; |
+ |
// Returns the number of draw commands executed on this canvas. |
size_t CommandCount() const; |
- // Get draw command info for a given index. |
- SkDrawCommand* GetCommand(size_t index); |
+ // Returns the list of executed draw commands. |
+ const base::ListValue& Commands() const; |
// Return the recorded render time (milliseconds) for a draw command index. |
double GetTime(size_t index); |
+protected: |
+ // SkCanvas overrides |
+ 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 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 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 onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) override; |
+ void onDrawPath(const SkPath&, const SkPaint&) override; |
+ |
+ void onDrawPicture(const SkPicture*, const SkMatrix*, 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 onDrawText(const void* text, size_t byteLength, SkScalar x, SkScalar y, |
+ const SkPaint&) override; |
+ void onDrawPosText(const void* text, size_t byteLength, const SkPoint pos[], |
+ const SkPaint&) override; |
+ void onDrawPosTextH(const void* text, size_t byteLength, const SkScalar xpos[], |
+ SkScalar constY, const SkPaint&) override; |
+ void onDrawTextOnPath(const void* text, size_t byteLength, const SkPath& path, |
+ const SkMatrix* matrix, const SkPaint&) override; |
+ void onDrawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y, |
+ const SkPaint& paint) override; |
+ |
private: |
- // In order to avoid introducing a Skia version dependency, this |
- // implementation dispatches draw commands in lock-step to two distinct |
- // canvases: |
- // * a SkDebugCanvas used for gathering command info and tracking |
- // the current command index |
- // * a SkiaTimingCanvas used for measuring raster paint times (and relying |
- // on the former for tracking the current command index). |
- // |
- // This way, if the SkCanvas API is extended, we don't need to worry about |
- // updating content::SkiaTimingCanvas to accurately override all new methods |
- // (to avoid timing info indices from getting out of sync), as SkDebugCanvas |
- // already does that for us. |
- |
- skia::RefPtr<SkDebugCanvas> debug_canvas_; |
- skia::RefPtr<TimingCanvas> timing_canvas_; |
+ typedef SkNWayCanvas INHERITED; |
+ |
+ class AutoOp; |
+ |
+ base::ListValue op_records_; |
+ unsigned flags_; |
}; |
} |