35TEST(ViewSlicerTest, CanSlicerNonOverlappingViews) {
38 std::vector<int64_t> composition_order = {1};
39 std::unordered_map<int64_t, std::unique_ptr<EmbedderViewSlice>> slices;
42 std::unordered_map<int64_t, DlRect> view_rects = {
45 auto computed_overlays =
46 SliceViews(&builder, composition_order, slices, view_rects, {});
48 EXPECT_TRUE(computed_overlays.empty());
51TEST(ViewSlicerTest, IgnoresFractionalOverlaps) {
54 std::vector<int64_t> composition_order = {1};
55 std::unordered_map<int64_t, std::unique_ptr<EmbedderViewSlice>> slices;
58 std::unordered_map<int64_t, DlRect> view_rects = {
61 auto computed_overlays =
62 SliceViews(&builder, composition_order, slices, view_rects, {});
64 EXPECT_TRUE(computed_overlays.empty());
67TEST(ViewSlicerTest, ComputesOverlapWith1PV) {
70 std::vector<int64_t> composition_order = {1};
71 std::unordered_map<int64_t, std::unique_ptr<EmbedderViewSlice>> slices;
74 std::unordered_map<int64_t, DlRect> view_rects = {
77 auto computed_overlays =
78 SliceViews(&builder, composition_order, slices, view_rects, {});
80 EXPECT_EQ(computed_overlays.size(), 1u);
81 auto overlay = computed_overlays.find(1);
82 ASSERT_NE(overlay, computed_overlays.end());
87TEST(ViewSlicerTest, ComputesOverlapWith2PV) {
90 std::vector<int64_t> composition_order = {1, 2};
91 std::unordered_map<int64_t, std::unique_ptr<EmbedderViewSlice>> slices;
95 std::unordered_map<int64_t, DlRect> view_rects = {
100 auto computed_overlays =
101 SliceViews(&builder, composition_order, slices, view_rects, {});
103 EXPECT_EQ(computed_overlays.size(), 2u);
105 auto overlay = computed_overlays.find(1);
106 ASSERT_NE(overlay, computed_overlays.end());
110 overlay = computed_overlays.find(2);
111 ASSERT_NE(overlay, computed_overlays.end());
115TEST(ViewSlicerTest, OverlappingTwoPVs) {
118 std::vector<int64_t> composition_order = {1, 2};
119 std::unordered_map<int64_t, std::unique_ptr<EmbedderViewSlice>> slices;
129 std::unordered_map<int64_t, DlRect> view_rects = {
134 auto computed_overlays =
135 SliceViews(&builder, composition_order, slices, view_rects, {});
137 EXPECT_EQ(computed_overlays.size(), 1u);
139 auto overlay = computed_overlays.find(2);
140 ASSERT_NE(overlay, computed_overlays.end());
146TEST(ViewSlicerTest, PreservesUnderlayForSelectedViews) {
147 std::vector<int64_t> composition_order = {1};
148 std::unordered_map<int64_t, DlRect> view_rects = {
151 std::unordered_map<int64_t, std::unique_ptr<EmbedderViewSlice>>
155 auto baseline_overlays =
SliceViews(&baseline_builder, composition_order,
156 baseline_slices, view_rects, {});
157 EXPECT_EQ(baseline_overlays.size(), 1u);
158 auto baseline_dl = baseline_builder.
Build();
159 EXPECT_TRUE(ContainsClipDifferenceRect(baseline_dl));
161 std::unordered_map<int64_t, std::unique_ptr<EmbedderViewSlice>>
164 std::unordered_set<int64_t> views_with_underlay_preserved = {1};
166 auto preserve_overlays =
167 SliceViews(&preserve_builder, composition_order, preserve_slices,
168 view_rects, views_with_underlay_preserved);
169 EXPECT_EQ(preserve_overlays.size(), 1u);
170 auto preserve_dl = preserve_builder.
Build();
171 EXPECT_FALSE(ContainsClipDifferenceRect(preserve_dl));
std::unordered_map< int64_t, DlRect > SliceViews(DlCanvas *background_canvas, const std::vector< int64_t > &composition_order, const std::unordered_map< int64_t, std::unique_ptr< EmbedderViewSlice > > &slices, const std::unordered_map< int64_t, DlRect > &view_rects, const std::unordered_set< int64_t > &views_with_underlay_preserved)
Compute the required overlay layers and clip the view slices according to the size and position of th...