diff options
author | Stan Iliev <stani@google.com> | 2016-12-15 18:17:42 -0500 |
---|---|---|
committer | Stan Iliev <stani@google.com> | 2016-12-16 14:42:33 -0500 |
commit | b66b8bb4a089593ee7c20ad7f59980c16dde9cc9 (patch) | |
tree | 454386539a3a2acfa32078bfb524c6a3c74b9c18 /libs/hwui/pipeline/skia/SkiaPipeline.cpp | |
parent | 6df179cd73674f81501b302f4a3a97b5ec3eab9b (diff) |
Ensure root render node clip cannot expand beyond dirty area
Use new Skia API to enfore clip restriction for root render node.
This brings Skia pipeline in line with HWUI. Unit test is
updated to reflect the new behaviour.
Test: Built and ran angler-eng, ran HWUI unit tests.
Change-Id: Iffce70fd37b6aff45eb6a23c8b1a64f45b5f1463
Diffstat (limited to 'libs/hwui/pipeline/skia/SkiaPipeline.cpp')
-rw-r--r-- | libs/hwui/pipeline/skia/SkiaPipeline.cpp | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/libs/hwui/pipeline/skia/SkiaPipeline.cpp b/libs/hwui/pipeline/skia/SkiaPipeline.cpp index 376346f05e1b..430d6bea70c1 100644 --- a/libs/hwui/pipeline/skia/SkiaPipeline.cpp +++ b/libs/hwui/pipeline/skia/SkiaPipeline.cpp @@ -100,7 +100,7 @@ void SkiaPipeline::renderLayersImpl(const LayerUpdateQueue& layers, bool opaque) int saveCount = layerCanvas->save(); SkASSERT(saveCount == 1); - layerCanvas->clipRect(layerDamage.toSkRect(), SkClipOp::kReplace); + layerCanvas->androidFramework_setDeviceClipRestriction(layerDamage.toSkIRect()); auto savedLightCenter = mLightCenter; // map current light center into RenderNode's coordinate space @@ -233,8 +233,8 @@ static Rect nodeBounds(RenderNode& node) { void SkiaPipeline::renderFrameImpl(const LayerUpdateQueue& layers, const SkRect& clip, const std::vector<sp<RenderNode>>& nodes, bool opaque, const Rect &contentDrawBounds, SkCanvas* canvas) { - - canvas->clipRect(clip, SkClipOp::kReplace); + SkAutoCanvasRestore saver(canvas, true); + canvas->androidFramework_setDeviceClipRestriction(clip.roundOut()); if (!opaque) { canvas->clear(SK_ColorTRANSPARENT); @@ -242,7 +242,6 @@ void SkiaPipeline::renderFrameImpl(const LayerUpdateQueue& layers, const SkRect& if (1 == nodes.size()) { if (!nodes[0]->nothingToDraw()) { - SkAutoCanvasRestore acr(canvas, true); RenderNodeDrawable root(nodes[0].get(), canvas); root.draw(canvas); } |