diff options
author | 2015-09-15 10:20:55 -0700 | |
---|---|---|
committer | 2015-09-15 10:20:55 -0700 | |
commit | 30c4cae7d3a26252e7e45adf6e5722b34adf6848 (patch) | |
tree | 51e48fb3326a2a4a76a762d932069357e3b7c56f /gm/blurcircles.cpp | |
parent | de5973b05be6ecc80309cded8541f9c305135d15 (diff) |
Add special case circle blur for Ganesh
This makes the blurcircles bench go from ~33us to ~8us on Windows desktop.
It will require layout test suppressions
Review URL: https://codereview.chromium.org/1311583005
Diffstat (limited to 'gm/blurcircles.cpp')
-rw-r--r-- | gm/blurcircles.cpp | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/gm/blurcircles.cpp b/gm/blurcircles.cpp index e4f956fc43..74490ce424 100644 --- a/gm/blurcircles.cpp +++ b/gm/blurcircles.cpp @@ -14,37 +14,43 @@ class BlurCirclesGM : public skiagm::GM { public: - BlurCirclesGM() - : fName("blurcircles") { - } + BlurCirclesGM() { } protected: + bool runAsBench() const override { return true; } SkString onShortName() override { - return fName; + return SkString("blurcircles"); } SkISize onISize() override { return SkISize::Make(950, 950); } + void onOnceBeforeDraw() override { + const float blurRadii[kNumBlurs] = { 1,5,10,20 }; + + for (int i = 0; i < kNumBlurs; ++i) { + fBlurFilters[i].reset(SkBlurMaskFilter::Create( + kNormal_SkBlurStyle, + SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(blurRadii[i])), + SkBlurMaskFilter::kHighQuality_BlurFlag)); + } + } + void onDraw(SkCanvas* canvas) override { canvas->scale(1.5f, 1.5f); canvas->translate(50,50); - const float blurRadii[] = { 1,5,10,20 }; const int circleRadii[] = { 5,10,25,50 }; - for (size_t i = 0; i < SK_ARRAY_COUNT(blurRadii); ++i) { + + for (size_t i = 0; i < kNumBlurs; ++i) { SkAutoCanvasRestore autoRestore(canvas, true); canvas->translate(0, SkIntToScalar(150*i)); for (size_t j = 0; j < SK_ARRAY_COUNT(circleRadii); ++j) { - SkMaskFilter* filter = SkBlurMaskFilter::Create( - kNormal_SkBlurStyle, - SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(blurRadii[i])), - SkBlurMaskFilter::kHighQuality_BlurFlag); SkPaint paint; paint.setColor(SK_ColorBLACK); - paint.setMaskFilter(filter)->unref(); + paint.setMaskFilter(fBlurFilters[i]); canvas->drawCircle(SkIntToScalar(50),SkIntToScalar(50),SkIntToScalar(circleRadii[j]),paint); canvas->translate(SkIntToScalar(150), 0); @@ -52,7 +58,9 @@ protected: } } private: - const SkString fName; + static const int kNumBlurs = 4; + + SkAutoTUnref<SkMaskFilter> fBlurFilters[kNumBlurs]; typedef skiagm::GM INHERITED; }; |