diff options
author | 2016-08-25 13:54:30 -0700 | |
---|---|---|
committer | 2016-08-25 13:54:30 -0700 | |
commit | 44df651ebefc284acc2f66425dff3ea0b0e14b36 (patch) | |
tree | 324bcf1b278ed44e168f0a6c548fd9a194014b6c /src/core/SkCanvas.cpp | |
parent | 4d866dfc46bc381da1761d05ce8b5a3bb0cd7f00 (diff) |
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
Diffstat (limited to 'src/core/SkCanvas.cpp')
-rw-r--r-- | src/core/SkCanvas.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp index 8f9a576761..4cf40e9c5a 100644 --- a/src/core/SkCanvas.cpp +++ b/src/core/SkCanvas.cpp @@ -2250,6 +2250,26 @@ void SkCanvas::onDrawRect(const SkRect& r, const SkPaint& paint) { } } +void SkCanvas::onDrawRegion(const SkRegion& region, const SkPaint& paint) { + SkRect storage; + SkRect regionRect = SkRect::Make(region.getBounds()); + const SkRect* bounds = nullptr; + if (paint.canComputeFastBounds()) { + if (this->quickReject(paint.computeFastBounds(regionRect, &storage))) { + return; + } + bounds = ®ionRect; + } + + LOOPER_BEGIN(paint, SkDrawFilter::kRect_Type, bounds) + + while (iter.next()) { + iter.fDevice->drawRegion(iter, region, looper.paint()); + } + + LOOPER_END +} + void SkCanvas::onDrawOval(const SkRect& oval, const SkPaint& paint) { TRACE_EVENT0("disabled-by-default-skia", "SkCanvas::drawOval()"); SkRect storage; |