From 44df651ebefc284acc2f66425dff3ea0b0e14b36 Mon Sep 17 00:00:00 2001 From: msarett Date: Thu, 25 Aug 2016 13:54:30 -0700 Subject: Add drawRegion() API to SkCanvas This will allow us to optimize for the RectGrid macrobench. Currently, SkiaGL is much slower than OpenGL. SkiaGL 12 items/s OpenGL 160 items/s This contains everything except for the fast implementation on GPU. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2277053002 Review-Url: https://codereview.chromium.org/2277053002 --- gm/drawregion.cpp | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 gm/drawregion.cpp (limited to 'gm/drawregion.cpp') diff --git a/gm/drawregion.cpp b/gm/drawregion.cpp new file mode 100644 index 0000000000..1e9d6c55e2 --- /dev/null +++ b/gm/drawregion.cpp @@ -0,0 +1,54 @@ +/* + * 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 "gm.h" +#include "SkCanvas.h" + +/** + * This is very similar to the RectGrid macrobench in Android. + */ +class DrawRegionGM : public skiagm::GM { +public: + DrawRegionGM() {} + +protected: + SkString onShortName() override { + return SkString("drawregion"); + } + + SkISize onISize() override { + return SkISize::Make(500, 500); + } + + bool runAsBench() const override { + return true; + } + + void onOnceBeforeDraw() override { + for (int x = 50; x < 250; x+=2) { + for (int y = 50; y < 250; y+=2) { + fRegion.op(x, y, x + 1, y + 1, SkRegion::kUnion_Op); + } + } + } + + void onDraw(SkCanvas* canvas) override { + SkPaint paint; + paint.setStyle(SkPaint::kFill_Style); + paint.setColor(0xFFFF00FF); + canvas->drawRect(SkRect::MakeLTRB(50.0f, 50.0f, 250.0f, 250.0f), paint); + + paint.setColor(0xFF00FFFF); + canvas->drawRegion(fRegion, paint); + } + + SkRegion fRegion; + +private: + typedef skiagm::GM INHERITED; +}; +DEF_GM( return new DrawRegionGM; ) -- cgit v1.2.3