Index: bench/PictureRecordBench.cpp |
diff --git a/bench/PictureRecordBench.cpp b/bench/PictureRecordBench.cpp |
deleted file mode 100644 |
index 50fabe17704aa93f74161acb8e469f733e6318a2..0000000000000000000000000000000000000000 |
--- a/bench/PictureRecordBench.cpp |
+++ /dev/null |
@@ -1,180 +0,0 @@ |
-/* |
- * Copyright 2012 Google Inc. |
- * |
- * Use of this source code is governed by a BSD-style license that can be |
- * found in the LICENSE file. |
- */ |
-#include "Benchmark.h" |
-#include "SkCanvas.h" |
-#include "SkColor.h" |
-#include "SkPaint.h" |
-#include "SkPicture.h" |
-#include "SkPictureRecorder.h" |
-#include "SkPoint.h" |
-#include "SkRandom.h" |
-#include "SkRect.h" |
-#include "SkString.h" |
- |
-class PictureRecordBench : public Benchmark { |
-public: |
- PictureRecordBench(const char name[]) { |
- fName.printf("picture_record_%s", name); |
- } |
- |
- virtual bool isSuitableFor(Backend backend) SK_OVERRIDE { |
- return backend == kNonRendering_Backend; |
- } |
- |
- enum { |
- PICTURE_WIDTH = 1000, |
- PICTURE_HEIGHT = 4000, |
- }; |
-protected: |
- virtual const char* onGetName() SK_OVERRIDE { |
- return fName.c_str(); |
- } |
-private: |
- SkString fName; |
- typedef Benchmark 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 |
- * reading and writing to those particular dictionary data structures. |
- */ |
-class DictionaryRecordBench : public PictureRecordBench { |
-public: |
- DictionaryRecordBench() : INHERITED("dictionaries") {} |
- |
-protected: |
- virtual void onDraw(const int loops, SkCanvas*) SK_OVERRIDE { |
- SkPictureRecorder recorder; |
- SkCanvas* canvas = recorder.beginRecording(PICTURE_WIDTH, PICTURE_HEIGHT); |
- |
- const SkPoint translateDelta = getTranslateDelta(loops); |
- |
- for (int i = 0; i < loops; i++) { |
- if (0 == i % kMaxLoopsPerCanvas) { |
- SkAutoTUnref<SkPicture> picture(recorder.endRecording()); |
- canvas = recorder.beginRecording(PICTURE_WIDTH, PICTURE_HEIGHT); |
- } |
- |
- SkColor color = SK_ColorYELLOW + (i % 255); |
- SkIRect rect = SkIRect::MakeWH(i % PICTURE_WIDTH, i % PICTURE_HEIGHT); |
- |
- canvas->save(); |
- |
- // set the clip to the given region |
- SkRegion region; |
- region.setRect(rect); |
- canvas->clipRegion(region); |
- |
- // fill the clip with a color |
- SkPaint paint; |
- paint.setColor(color); |
- canvas->drawPaint(paint); |
- |
- // set a matrix on the canvas |
- SkMatrix matrix; |
- matrix.setRotate(SkIntToScalar(i % 360)); |
- canvas->setMatrix(matrix); |
- |
- // create a simple bitmap |
- SkBitmap bitmap; |
- bitmap.allocPixels(SkImageInfo::Make(10, 10, |
- kRGB_565_SkColorType, kOpaque_SkAlphaType)); |
- |
- // draw a single color into the bitmap |
- SkCanvas bitmapCanvas(bitmap); |
- bitmapCanvas.drawColor(SkColorSetA(color, i % 255)); |
- |
- // draw the bitmap onto the canvas |
- canvas->drawBitmapMatrix(bitmap, matrix); |
- |
- canvas->restore(); |
- canvas->translate(translateDelta.fX, translateDelta.fY); |
- } |
- SkAutoTUnref<SkPicture> cleanup(recorder.endRecording()); |
- } |
- |
- SkPoint getTranslateDelta(int M) { |
- SkIPoint canvasSize = onGetSize(); |
- return SkPoint::Make(SkIntToScalar((PICTURE_WIDTH - canvasSize.fX)/M), |
- SkIntToScalar((PICTURE_HEIGHT- canvasSize.fY)/M)); |
- } |
-private: |
- typedef PictureRecordBench INHERITED; |
-}; |
- |
-/* |
- * Populates the SkPaint dictionary with a large number of unique paint |
- * objects that differ only by color |
- */ |
-class UniquePaintDictionaryRecordBench : public PictureRecordBench { |
-public: |
- UniquePaintDictionaryRecordBench() : INHERITED("unique_paint_dictionary") { } |
- |
-protected: |
- virtual void onDraw(const int loops, SkCanvas*) SK_OVERRIDE { |
- SkRandom rand; |
- SkPaint paint; |
- SkPictureRecorder recorder; |
- SkCanvas* canvas = recorder.beginRecording(PICTURE_WIDTH, PICTURE_HEIGHT); |
- for (int i = 0; i < loops; i++) { |
- if (0 == i % kMaxLoopsPerCanvas) { |
- SkAutoTUnref<SkPicture> picture(recorder.endRecording()); |
- canvas = recorder.beginRecording(PICTURE_WIDTH, PICTURE_HEIGHT); |
- } |
- paint.setColor(rand.nextU()); |
- canvas->drawPaint(paint); |
- } |
- SkAutoTUnref<SkPicture> cleanup(recorder.endRecording()); |
- } |
- |
-private: |
- typedef PictureRecordBench INHERITED; |
-}; |
- |
-/* |
- * Populates the SkPaint dictionary with a number of unique paint |
- * objects that get reused repeatedly. |
- * |
- * Re-creating the paint objects in the inner loop slows the benchmark down 10%. |
- * Using setColor(i % objCount) instead of a random color creates a very high rate |
- * of hash conflicts, slowing us down 12%. |
- */ |
-class RecurringPaintDictionaryRecordBench : public PictureRecordBench { |
-public: |
- RecurringPaintDictionaryRecordBench() : INHERITED("recurring_paint_dictionary") { |
- SkRandom rand; |
- for (int i = 0; i < ObjCount; i++) { |
- fPaint[i].setColor(rand.nextU()); |
- } |
- } |
- |
- enum { |
- ObjCount = 100, // number of unique paint objects |
- }; |
-protected: |
- virtual void onDraw(const int loops, SkCanvas*) SK_OVERRIDE { |
- SkPictureRecorder recorder; |
- SkCanvas* canvas = recorder.beginRecording(PICTURE_WIDTH, PICTURE_HEIGHT, NULL, 0); |
- for (int i = 0; i < loops; i++) { |
- canvas->drawPaint(fPaint[i % ObjCount]); |
- } |
- } |
- |
-private: |
- SkPaint fPaint [ObjCount]; |
- typedef PictureRecordBench INHERITED; |
-}; |
- |
-/////////////////////////////////////////////////////////////////////////////// |
- |
-DEF_BENCH( return new DictionaryRecordBench(); ) |
-DEF_BENCH( return new UniquePaintDictionaryRecordBench(); ) |
-DEF_BENCH( return new RecurringPaintDictionaryRecordBench(); ) |