summaryrefslogtreecommitdiff
path: root/libs/hwui/pipeline/skia/SkiaPipeline.cpp
diff options
context:
space:
mode:
authorStan Iliev <stani@google.com>2016-12-15 18:17:42 -0500
committerStan Iliev <stani@google.com>2016-12-16 14:42:33 -0500
commitb66b8bb4a089593ee7c20ad7f59980c16dde9cc9 (patch)
tree454386539a3a2acfa32078bfb524c6a3c74b9c18 /libs/hwui/pipeline/skia/SkiaPipeline.cpp
parent6df179cd73674f81501b302f4a3a97b5ec3eab9b (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.cpp7
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);
}