/* * Copyright 2016 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 "SkMaskFilter.h" #include "SkPaint.h" #include "SkRRect.h" #include "SkRect.h" #include "sk_tool_utils.h" class BlurOccludedRRectBench : public Benchmark { public: BlurOccludedRRectBench() {} const char* onGetName() override { return "bluroccludedrrect"; } SkIPoint onGetSize() override { return SkIPoint::Make(1024, 2048); } void onDraw(int loops, SkCanvas* canvas) override { for (int l = 0; l < loops; ++l) { SkPaint opaque; opaque.setAntiAlias(true); opaque.setColor(SK_ColorWHITE); const SkRect r = SkRect::MakeWH(480, 230); const SkRRect rr = SkRRect::MakeRectXY(r, 8, 8); SkRect occRect = sk_tool_utils::compute_central_occluder(rr); for (int i = 0; i < 2; ++i) { canvas->save(); canvas->translate(i*502.0f+20, 10.0f); for (int j = 0; j < 8; ++j) { canvas->save(); canvas->translate(0.0f, j*256.0f); SkPaint firstBlur; firstBlur.setAntiAlias(true); firstBlur.setColor(0x09000000); firstBlur.setMaskFilter(SkMaskFilter::MakeBlur(kNormal_SkBlurStyle, 2.5f, occRect)); canvas->drawRRect(rr, firstBlur); canvas->save(); canvas->translate(1.5f, 1.5f); SkPaint secondBlur; secondBlur.setAntiAlias(true); secondBlur.setColor(0x30000000); secondBlur.setMaskFilter(SkMaskFilter::MakeBlur(kNormal_SkBlurStyle, 6.0f, occRect)); canvas->drawRRect(rr, secondBlur); canvas->restore(); canvas->drawRRect(rr, opaque); canvas->restore(); } canvas->restore(); } } } private: typedef Benchmark INHERITED; }; DEF_BENCH(return new BlurOccludedRRectBench();)