|
6 | 6 | #include "flutter/flow/layers/platform_view_layer.h" |
7 | 7 | #include "flutter/flow/layers/transform_layer.h" |
8 | 8 |
|
| 9 | +#include "flutter/flow/testing/diff_context_test.h" |
9 | 10 | #include "flutter/flow/testing/layer_test.h" |
10 | 11 | #include "flutter/flow/testing/mock_embedder.h" |
11 | 12 | #include "flutter/flow/testing/mock_layer.h" |
@@ -139,5 +140,45 @@ TEST_F(PlatformViewLayerTest, StateTransfer) { |
139 | 140 | transform_layer1->Paint(paint_ctx); |
140 | 141 | } |
141 | 142 |
|
| 143 | +using PlatformViewLayerDiffTest = DiffContextTest; |
| 144 | + |
| 145 | +TEST_F(PlatformViewLayerDiffTest, PlatformViewRetainedLayer) { |
| 146 | + MockLayerTree tree1(SkISize::Make(800, 600)); |
| 147 | + auto container = std::make_shared<ContainerLayer>(); |
| 148 | + tree1.root()->Add(container); |
| 149 | + auto layer = std::make_shared<PlatformViewLayer>(SkPoint::Make(100, 100), |
| 150 | + SkSize::Make(100, 100), 0); |
| 151 | + container->Add(layer); |
| 152 | + |
| 153 | + MockLayerTree tree2(SkISize::Make(800, 600)); |
| 154 | + tree2.root()->Add(container); // retained layer |
| 155 | + |
| 156 | + auto damage = DiffLayerTree(tree1, MockLayerTree(SkISize::Make(800, 600))); |
| 157 | + EXPECT_EQ(damage.frame_damage, SkIRect::MakeLTRB(0, 0, 800, 600)); |
| 158 | + |
| 159 | + damage = DiffLayerTree(tree2, tree1); |
| 160 | + EXPECT_EQ(damage.frame_damage, SkIRect::MakeLTRB(0, 0, 800, 600)); |
| 161 | +} |
| 162 | + |
| 163 | +TEST_F(PlatformViewLayerDiffTest, FullRepaintAfterRemovingLayer) { |
| 164 | + MockLayerTree tree1(SkISize::Make(800, 600)); |
| 165 | + auto container = std::make_shared<ContainerLayer>(); |
| 166 | + tree1.root()->Add(container); |
| 167 | + auto layer = std::make_shared<PlatformViewLayer>(SkPoint::Make(100, 100), |
| 168 | + SkSize::Make(100, 100), 0); |
| 169 | + container->Add(layer); |
| 170 | + |
| 171 | + auto damage = DiffLayerTree(tree1, MockLayerTree(SkISize::Make(800, 600))); |
| 172 | + EXPECT_EQ(damage.frame_damage, SkIRect::MakeLTRB(0, 0, 800, 600)); |
| 173 | + |
| 174 | + // Second layer tree with the PlatformViewLayer removed. |
| 175 | + MockLayerTree tree2(SkISize::Make(800, 600)); |
| 176 | + auto container2 = std::make_shared<ContainerLayer>(); |
| 177 | + tree2.root()->Add(container2); |
| 178 | + |
| 179 | + damage = DiffLayerTree(tree2, tree1); |
| 180 | + EXPECT_EQ(damage.frame_damage, SkIRect::MakeLTRB(0, 0, 800, 600)); |
| 181 | +} |
| 182 | + |
142 | 183 | } // namespace testing |
143 | 184 | } // namespace flutter |
0 commit comments