From a9afaa8101bf57a64f00e3b68db8e34c5e09f44e Mon Sep 17 00:00:00 2001 From: Matej Knopp Date: Wed, 17 Nov 2021 14:46:52 +0100 Subject: [PATCH 1/2] PhysicalShapeLayer: Only push cull rect during diff if clipping (#29783) --- flow/layers/physical_shape_layer.cc | 3 +- flow/layers/physical_shape_layer_unittests.cc | 39 +++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/flow/layers/physical_shape_layer.cc b/flow/layers/physical_shape_layer.cc index d443448ed97e6..8215f3d6e592f 100644 --- a/flow/layers/physical_shape_layer.cc +++ b/flow/layers/physical_shape_layer.cc @@ -46,7 +46,8 @@ void PhysicalShapeLayer::Diff(DiffContext* context, const Layer* old_layer) { context->AddLayerBounds(bounds); - if (context->PushCullRect(bounds)) { + // Only push cull rect if there is clip. + if (clip_behavior_ == Clip::none || context->PushCullRect(bounds)) { DiffChildren(context, prev); } context->SetLayerPaintRegion(this, context->CurrentSubtreeRegion()); diff --git a/flow/layers/physical_shape_layer_unittests.cc b/flow/layers/physical_shape_layer_unittests.cc index e81c28080ea53..9a9bafb8f6895 100644 --- a/flow/layers/physical_shape_layer_unittests.cc +++ b/flow/layers/physical_shape_layer_unittests.cc @@ -4,6 +4,7 @@ #include "flutter/flow/layers/physical_shape_layer.h" +#include "flutter/flow/testing/diff_context_test.h" #include "flutter/flow/testing/layer_test.h" #include "flutter/flow/testing/mock_layer.h" #include "flutter/fml/macros.h" @@ -350,5 +351,43 @@ TEST_F(PhysicalShapeLayerTest, Readback) { EXPECT_TRUE(ReadbackResult(context, save_layer, reader, true)); } +using PhysicalShapeLayerDiffTest = DiffContextTest; + +TEST_F(PhysicalShapeLayerDiffTest, NoClipPaintRegion) { + MockLayerTree tree1; + const SkPath layer_path = SkPath().addRect(SkRect::MakeXYWH(0, 0, 100, 100)); + auto layer = + std::make_shared(SK_ColorGREEN, SK_ColorBLACK, + 0.0f, // elevation + layer_path, Clip::none); + + const SkPath layer_path2 = + SkPath().addRect(SkRect::MakeXYWH(200, 200, 200, 200)); + auto layer2 = std::make_shared(layer_path2); + layer->Add(layer2); + tree1.root()->Add(layer); + + auto damage = DiffLayerTree(tree1, MockLayerTree()); + EXPECT_EQ(damage.frame_damage, SkIRect::MakeLTRB(0, 0, 400, 400)); +} + +TEST_F(PhysicalShapeLayerDiffTest, ClipPaintRegion) { + MockLayerTree tree1; + const SkPath layer_path = SkPath().addRect(SkRect::MakeXYWH(0, 0, 100, 100)); + auto layer = + std::make_shared(SK_ColorGREEN, SK_ColorBLACK, + 0.0f, // elevation + layer_path, Clip::hardEdge); + + const SkPath layer_path2 = + SkPath().addRect(SkRect::MakeXYWH(200, 200, 200, 200)); + auto layer2 = std::make_shared(layer_path2); + layer->Add(layer2); + tree1.root()->Add(layer); + + auto damage = DiffLayerTree(tree1, MockLayerTree()); + EXPECT_EQ(damage.frame_damage, SkIRect::MakeLTRB(0, 0, 100, 100)); +} + } // namespace testing } // namespace flutter From fcecae56327197f637d787aaa8227ab605a8cba9 Mon Sep 17 00:00:00 2001 From: Xiao Yu Date: Thu, 18 Nov 2021 22:34:34 -0800 Subject: [PATCH 2/2] add branch to test for CI --- .ci.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.ci.yaml b/.ci.yaml index 12abdde9297e9..fd3edaee9cca2 100644 --- a/.ci.yaml +++ b/.ci.yaml @@ -11,6 +11,7 @@ enabled_branches: - dev - beta - stable + - flutter-2.8-candidate.6 platform_properties: linux: