Index: bench/PictureRecordBench.cpp |
diff --git a/bench/PictureRecordBench.cpp b/bench/PictureRecordBench.cpp |
index 5a183e14ed1ffb5619f293860a3e3507053272ce..87e7240ca9713106f1c34360fc1d1a8d03bb08b4 100644 |
--- a/bench/PictureRecordBench.cpp |
+++ b/bench/PictureRecordBench.cpp |
@@ -26,29 +26,17 @@ public: |
PICTURE_HEIGHT = 4000, |
}; |
protected: |
- virtual const char* onGetName() { |
+ virtual const char* onGetName() SK_OVERRIDE { |
return fName.c_str(); |
} |
- |
- virtual void onDraw(SkCanvas*) { |
- SkPicture picture; |
- |
- SkCanvas* pCanvas = picture.beginRecording(PICTURE_WIDTH, PICTURE_HEIGHT); |
- recordCanvas(pCanvas); |
- |
- // we don't need to draw the picture as the endRecording step will |
- // do the work of transferring the recorded content into a playback |
- // object. |
- picture.endRecording(); |
- } |
- |
- virtual void recordCanvas(SkCanvas* canvas) = 0; |
- |
- SkString fName; |
private: |
+ SkString fName; |
typedef SkBenchmark INHERITED; |
}; |
+ |
+static const int kMaxLoopsPerCanvas = 10000; |
+ |
/* |
* An SkPicture has internal dictionaries to store bitmaps, matrices, paints, |
* and regions. This bench populates those dictionaries to test the speed of |
@@ -56,15 +44,20 @@ private: |
*/ |
class DictionaryRecordBench : public PictureRecordBench { |
public: |
- DictionaryRecordBench() |
- : INHERITED("dictionaries") { } |
+ DictionaryRecordBench() : INHERITED("dictionaries") {} |
protected: |
- virtual void recordCanvas(SkCanvas* canvas) { |
+ virtual void onDraw(SkCanvas*) SK_OVERRIDE { |
+ SkAutoTDelete<SkPicture> picture; |
+ SkCanvas* canvas = NULL; |
const SkPoint translateDelta = getTranslateDelta(this->getLoops()); |
for (int i = 0; i < this->getLoops(); i++) { |
+ if (0 == i % kMaxLoopsPerCanvas) { |
+ picture.reset(SkNEW(SkPicture)); |
+ canvas = picture->beginRecording(PICTURE_WIDTH, PICTURE_HEIGHT); |
+ } |
SkColor color = SK_ColorYELLOW + (i % 255); |
SkIRect rect = SkIRect::MakeWH(i % PICTURE_WIDTH, i % PICTURE_HEIGHT); |
@@ -118,22 +111,16 @@ private: |
*/ |
class UniquePaintDictionaryRecordBench : public PictureRecordBench { |
public: |
- UniquePaintDictionaryRecordBench() |
- : INHERITED("unique_paint_dictionary") { } |
+ UniquePaintDictionaryRecordBench() : INHERITED("unique_paint_dictionary") { } |
protected: |
- virtual void recordCanvas(SkCanvas* /*ignored*/) { |
- // We ignore the parent's canvas (which is just there for our |
- // convenience) because we've got to have more careful control over it. |
- // We start a new one every so often to prevent unbounded memory growth. |
- |
+ virtual void onDraw(SkCanvas*) SK_OVERRIDE { |
SkRandom rand; |
SkPaint paint; |
SkAutoTDelete<SkPicture> picture; |
SkCanvas* canvas = NULL; |
- const int kMaxPaintsPerCanvas = 10000; |
for (int i = 0; i < this->getLoops(); i++) { |
- if (0 == i % kMaxPaintsPerCanvas) { |
+ if (0 == i % kMaxLoopsPerCanvas) { |
picture.reset(SkNEW(SkPicture)); |
canvas = picture->beginRecording(PICTURE_WIDTH, PICTURE_HEIGHT); |
} |
@@ -156,8 +143,7 @@ private: |
*/ |
class RecurringPaintDictionaryRecordBench : public PictureRecordBench { |
public: |
- RecurringPaintDictionaryRecordBench() |
- : INHERITED("recurring_paint_dictionary") { |
+ RecurringPaintDictionaryRecordBench() : INHERITED("recurring_paint_dictionary") { |
SkRandom rand; |
for (int i = 0; i < ObjCount; i++) { |
fPaint[i].setColor(rand.nextU()); |
@@ -168,8 +154,9 @@ public: |
ObjCount = 100, // number of unique paint objects |
}; |
protected: |
- virtual void recordCanvas(SkCanvas* canvas) { |
- |
+ virtual void onDraw(SkCanvas*) SK_OVERRIDE { |
+ SkPicture picture; |
+ SkCanvas* canvas = picture.beginRecording(PICTURE_WIDTH, PICTURE_HEIGHT); |
for (int i = 0; i < this->getLoops(); i++) { |
canvas->drawPaint(fPaint[i % ObjCount]); |
} |