Index: bench/MergeBench.cpp |
=================================================================== |
--- bench/MergeBench.cpp (revision 0) |
+++ bench/MergeBench.cpp (revision 0) |
@@ -0,0 +1,117 @@ |
+/* |
+ * Copyright 2013 Google Inc. |
+ * |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+#include "SkBenchmark.h" |
+#include "SkBlurImageFilter.h" |
+#include "SkCanvas.h" |
+#include "SkColorFilter.h" |
+#include "SkColorFilterImageFilter.h" |
+#include "SkMergeImageFilter.h" |
+#include "SkOffsetImageFilter.h" |
+#include "SkTestImageFilters.h" |
+ |
+#define FILTER_WIDTH SkIntToScalar(150) |
+#define FILTER_HEIGHT SkIntToScalar(200) |
+ |
+class MergeBench : public SkBenchmark { |
Stephen White
2013/04/15 15:34:21
This bench seems to test a lot more than just Merg
|
+public: |
+ MergeBench(void* param) : INHERITED(param) { |
+ } |
+ |
+protected: |
+ virtual const char* onGetName() SK_OVERRIDE { |
+ return "merge"; |
+ } |
+ |
+ virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { |
+ static SkImageFilter* (*gFilterProc[])() = { |
+ mergeOffsetDown, mergeOffsetDownComposeColor, mergeOffsetBlurComposeColor |
+ }; |
+ |
+ const SkRect bounds = SkRect::MakeWH(FILTER_WIDTH, FILTER_HEIGHT); |
+ |
+ const SkScalar dx = bounds.width() * 8 / 7; |
+ const SkScalar dy = bounds.height() * 8 / 7; |
+ |
+ canvas->translate(SkIntToScalar(8), SkIntToScalar(8)); |
+ |
+ for (size_t i = 0; i < SK_ARRAY_COUNT(gFilterProc); ++i) { |
Stephen White
2013/04/15 15:34:21
Again, should be separate bench test cases.
sugoi1
2013/04/19 18:09:42
I only kept 1, only with bitmaps, to get a better
|
+ int ix = i % 4; |
+ int iy = i / 4; |
+ |
+ SkAutoCanvasRestore acr(canvas, true); |
+ canvas->translate(ix * dx, iy * dy); |
+ |
+ SkPaint p; |
+ p.setStyle(SkPaint::kStroke_Style); |
+ canvas->drawRect(bounds, p); |
+ |
+ SkPaint paint; |
+ paint.setImageFilter(gFilterProc[i]())->unref(); |
+ canvas->saveLayer(&bounds, &paint); |
+ draw(canvas); |
+ } |
+ } |
+ |
+private: |
+ static void draw(SkCanvas* canvas) { |
+ SkPaint p; |
+ p.setAntiAlias(true); |
+ SkRect r = SkRect::MakeWH(FILTER_WIDTH, FILTER_HEIGHT); |
+ r.inset(SK_Scalar1 * 12, SK_Scalar1 * 12); |
+ p.setColor(SK_ColorRED); |
+ canvas->drawOval(r, p); |
+ } |
+ |
+ static SkImageFilter* mergeOffsetDown() { |
+ SkImageFilter* first = new SkOffsetImageFilter(SkIntToScalar(16), SkIntToScalar(16)); |
+ SkImageFilter* second = new SkDownSampleImageFilter(SK_Scalar1 / 5); |
+ SkAutoUnref aur0(first); |
+ SkAutoUnref aur1(second); |
+ return new SkMergeImageFilter(first, second); |
Stephen White
2013/04/15 15:34:21
I think it'd be better to have something that isol
sugoi1
2013/04/19 18:09:42
Removed.
|
+ } |
+ |
+ static SkImageFilter* mergeOffsetDownComposeColor() { |
+ SkImageFilter* outer = new SkOffsetImageFilter(SkIntToScalar(16), SkIntToScalar(16)); |
+ SkImageFilter* inner = new SkDownSampleImageFilter(SK_Scalar1 / 5); |
Stephen White
2013/04/15 15:34:21
I'd test SkDownSampleImageFilter separately in its
sugoi1
2013/04/19 18:09:42
Removed.
|
+ SkAutoUnref aur0(outer); |
+ SkAutoUnref aur1(inner); |
+ SkImageFilter* compose = new SkComposeImageFilter(outer, inner); |
+ SkAutoUnref aur2(compose); |
+ |
+ SkColorFilter* cf = SkColorFilter::CreateModeFilter(0x880000FF, |
+ SkXfermode::kSrcIn_Mode); |
+ SkAutoUnref aur3(cf); |
+ SkImageFilter* blue = SkColorFilterImageFilter::Create(cf); |
+ SkAutoUnref aur4(blue); |
+ |
+ return new SkMergeImageFilter(compose, blue); |
+ } |
+ |
+ static SkImageFilter* mergeOffsetBlurComposeColor() { |
+ SkImageFilter* outer = new SkOffsetImageFilter(SkIntToScalar(16), SkIntToScalar(16)); |
+ SkImageFilter* inner = new SkBlurImageFilter(8, 0); |
Stephen White
2013/04/15 15:34:21
Blur will probably dominate the performance time h
sugoi1
2013/04/19 18:09:42
Removed.
|
+ SkAutoUnref aur0(outer); |
+ SkAutoUnref aur1(inner); |
+ SkImageFilter* compose = new SkComposeImageFilter(outer, inner); |
+ SkAutoUnref aur2(compose); |
+ |
+ SkColorFilter* cf = SkColorFilter::CreateModeFilter(0x880000FF, |
+ SkXfermode::kSrcIn_Mode); |
+ SkAutoUnref aur3(cf); |
+ SkImageFilter* blue = SkColorFilterImageFilter::Create(cf); |
+ SkAutoUnref aur4(blue); |
+ |
+ return new SkMergeImageFilter(compose, blue); |
+ } |
+ |
+ typedef SkBenchmark INHERITED; |
+}; |
+ |
+/////////////////////////////////////////////////////////////////////////////// |
+ |
+DEF_BENCH( return new MergeBench(p); ) |
+ |