Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(59)

Side by Side Diff: cc/surfaces/referenced_surface_tracker_unittest.cc

Issue 2811813004: Surface Synchronization: Distinguish between dependencies and references (Closed)
Patch Set: Addressed Vlad's comments Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/surfaces/referenced_surface_tracker.h" 5 #include "cc/surfaces/referenced_surface_tracker.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 DISALLOW_COPY_AND_ASSIGN(ReferencedSurfaceTrackerTest); 56 DISALLOW_COPY_AND_ASSIGN(ReferencedSurfaceTrackerTest);
57 }; 57 };
58 58
59 TEST_F(ReferencedSurfaceTrackerTest, SetCurrentSurfaceId) { 59 TEST_F(ReferencedSurfaceTrackerTest, SetCurrentSurfaceId) {
60 const SurfaceId parent_id = MakeSurfaceId(kParentFrameSink, 1); 60 const SurfaceId parent_id = MakeSurfaceId(kParentFrameSink, 1);
61 61
62 // Initially current_surface_id() should be invalid. 62 // Initially current_surface_id() should be invalid.
63 EXPECT_FALSE(tracker().current_surface_id().is_valid()); 63 EXPECT_FALSE(tracker().current_surface_id().is_valid());
64 64
65 // After setting current SurfaceId then current_surface_id() should be valid. 65 // After setting current SurfaceId then current_surface_id() should be valid.
66 tracker().UpdateReferences(parent_id.local_surface_id(), nullptr, nullptr); 66 tracker().UpdateReferences(parent_id.local_surface_id(), nullptr);
67 EXPECT_EQ(parent_id, tracker().current_surface_id()); 67 EXPECT_EQ(parent_id, tracker().current_surface_id());
68 } 68 }
69 69
70 TEST_F(ReferencedSurfaceTrackerTest, RefSurface) { 70 TEST_F(ReferencedSurfaceTrackerTest, RefSurface) {
71 const SurfaceId parent_id = MakeSurfaceId(kParentFrameSink, 1); 71 const SurfaceId parent_id = MakeSurfaceId(kParentFrameSink, 1);
72 const SurfaceId child_id1 = MakeSurfaceId(kChildFrameSink1, 1); 72 const SurfaceId child_id1 = MakeSurfaceId(kChildFrameSink1, 1);
73 const SurfaceReference reference(parent_id, child_id1); 73 const SurfaceReference reference(parent_id, child_id1);
74 74
75 // First frame has a reference to |child_id1|, check that reference is added. 75 // First frame has a reference to |child_id1|, check that reference is added.
76 std::vector<SurfaceId> active_referenced_surfaces = {child_id1}; 76 std::vector<SurfaceId> active_referenced_surfaces = {child_id1};
77 tracker().UpdateReferences(parent_id.local_surface_id(), 77 tracker().UpdateReferences(parent_id.local_surface_id(),
78 &active_referenced_surfaces, 78 &active_referenced_surfaces);
79 nullptr /* pending_referenced_surfaces */);
80 EXPECT_THAT(tracker().references_to_add(), UnorderedElementsAre(reference)); 79 EXPECT_THAT(tracker().references_to_add(), UnorderedElementsAre(reference));
81 EXPECT_THAT(tracker().references_to_remove(), IsEmpty()); 80 EXPECT_THAT(tracker().references_to_remove(), IsEmpty());
82 } 81 }
83 82
84 TEST_F(ReferencedSurfaceTrackerTest, NoChangeToReferences) { 83 TEST_F(ReferencedSurfaceTrackerTest, NoChangeToReferences) {
85 const SurfaceId parent_id = MakeSurfaceId(kParentFrameSink, 1); 84 const SurfaceId parent_id = MakeSurfaceId(kParentFrameSink, 1);
86 const SurfaceId child_id1 = MakeSurfaceId(kChildFrameSink1, 1); 85 const SurfaceId child_id1 = MakeSurfaceId(kChildFrameSink1, 1);
87 const SurfaceReference reference(parent_id, child_id1); 86 const SurfaceReference reference(parent_id, child_id1);
88 87
89 // First frame has a reference to |child_id1|, check that reference is added. 88 // First frame has a reference to |child_id1|, check that reference is added.
90 std::vector<SurfaceId> active_referenced_surfaces = {child_id1}; 89 std::vector<SurfaceId> active_referenced_surfaces = {child_id1};
91 tracker().UpdateReferences(parent_id.local_surface_id(), 90 tracker().UpdateReferences(parent_id.local_surface_id(),
92 &active_referenced_surfaces, 91 &active_referenced_surfaces);
93 nullptr /* pending_referenced_surfaces */);
94 EXPECT_THAT(tracker().references_to_remove(), IsEmpty()); 92 EXPECT_THAT(tracker().references_to_remove(), IsEmpty());
95 EXPECT_THAT(tracker().references_to_add(), UnorderedElementsAre(reference)); 93 EXPECT_THAT(tracker().references_to_add(), UnorderedElementsAre(reference));
96 94
97 // Second frame has same reference, check that no references are added or 95 // Second frame has same reference, check that no references are added or
98 // removed. 96 // removed.
99 tracker().UpdateReferences(parent_id.local_surface_id(), 97 tracker().UpdateReferences(parent_id.local_surface_id(),
100 &active_referenced_surfaces, 98 &active_referenced_surfaces);
101 nullptr /* pending_referenced_surfaces */);
102 EXPECT_THAT(tracker().references_to_remove(), IsEmpty()); 99 EXPECT_THAT(tracker().references_to_remove(), IsEmpty());
103 EXPECT_THAT(tracker().references_to_add(), IsEmpty()); 100 EXPECT_THAT(tracker().references_to_add(), IsEmpty());
104 } 101 }
105 102
106 TEST_F(ReferencedSurfaceTrackerTest, UnrefSurface) { 103 TEST_F(ReferencedSurfaceTrackerTest, UnrefSurface) {
107 const SurfaceId parent_id = MakeSurfaceId(kParentFrameSink, 1); 104 const SurfaceId parent_id = MakeSurfaceId(kParentFrameSink, 1);
108 const SurfaceId child_id1 = MakeSurfaceId(kChildFrameSink1, 1); 105 const SurfaceId child_id1 = MakeSurfaceId(kChildFrameSink1, 1);
109 const SurfaceReference reference(parent_id, child_id1); 106 const SurfaceReference reference(parent_id, child_id1);
110 107
111 std::vector<SurfaceId> active_referenced_surfaces = {child_id1}; 108 std::vector<SurfaceId> active_referenced_surfaces = {child_id1};
112 tracker().UpdateReferences(parent_id.local_surface_id(), 109 tracker().UpdateReferences(parent_id.local_surface_id(),
113 &active_referenced_surfaces, 110 &active_referenced_surfaces);
114 nullptr /* pending_referenced_surfaces */);
115 111
116 // Second frame no longer references |child_id1|, check that reference to is 112 // Second frame no longer references |child_id1|, check that reference to is
117 // removed. 113 // removed.
118 tracker().UpdateReferences(parent_id.local_surface_id(), 114 tracker().UpdateReferences(parent_id.local_surface_id(),
119 nullptr /* active_referenced_surfaces */, 115 nullptr /* active_referenced_surfaces */);
120 nullptr /* pending_referenced_surfaces */);
121 EXPECT_THAT(tracker().references_to_add(), IsEmpty()); 116 EXPECT_THAT(tracker().references_to_add(), IsEmpty());
122 EXPECT_THAT(tracker().references_to_remove(), 117 EXPECT_THAT(tracker().references_to_remove(),
123 UnorderedElementsAre(reference)); 118 UnorderedElementsAre(reference));
124 } 119 }
125 120
126 TEST_F(ReferencedSurfaceTrackerTest, RefNewSurfaceForFrameSink) { 121 TEST_F(ReferencedSurfaceTrackerTest, RefNewSurfaceForFrameSink) {
127 const SurfaceId parent_id = MakeSurfaceId(kParentFrameSink, 1); 122 const SurfaceId parent_id = MakeSurfaceId(kParentFrameSink, 1);
128 const SurfaceId child_id1_first = MakeSurfaceId(kChildFrameSink1, 1); 123 const SurfaceId child_id1_first = MakeSurfaceId(kChildFrameSink1, 1);
129 const SurfaceId child_id1_second = MakeSurfaceId(kChildFrameSink1, 2); 124 const SurfaceId child_id1_second = MakeSurfaceId(kChildFrameSink1, 2);
130 const SurfaceReference reference_first(parent_id, child_id1_first); 125 const SurfaceReference reference_first(parent_id, child_id1_first);
131 const SurfaceReference reference_second(parent_id, child_id1_second); 126 const SurfaceReference reference_second(parent_id, child_id1_second);
132 127
133 // First frame has reference to |child_id1_first|. 128 // First frame has reference to |child_id1_first|.
134 std::vector<SurfaceId> active_referenced_surfaces1 = {child_id1_first}; 129 std::vector<SurfaceId> active_referenced_surfaces1 = {child_id1_first};
135 tracker().UpdateReferences(parent_id.local_surface_id(), 130 tracker().UpdateReferences(parent_id.local_surface_id(),
136 &active_referenced_surfaces1, 131 &active_referenced_surfaces1);
137 nullptr /* pending_referenced_surfaces */);
138 EXPECT_THAT(tracker().references_to_add(), 132 EXPECT_THAT(tracker().references_to_add(),
139 UnorderedElementsAre(reference_first)); 133 UnorderedElementsAre(reference_first));
140 134
141 // Second frame has reference to |child_id1_second| which has the same 135 // Second frame has reference to |child_id1_second| which has the same
142 // FrameSinkId but different LocalSurfaceId. Check that first reference is 136 // FrameSinkId but different LocalSurfaceId. Check that first reference is
143 // removed and second reference is added. 137 // removed and second reference is added.
144 std::vector<SurfaceId> active_referenced_surfaces2 = {child_id1_second}; 138 std::vector<SurfaceId> active_referenced_surfaces2 = {child_id1_second};
145 tracker().UpdateReferences(parent_id.local_surface_id(), 139 tracker().UpdateReferences(parent_id.local_surface_id(),
146 &active_referenced_surfaces2, 140 &active_referenced_surfaces2);
147 nullptr /* pending_referenced_surfaces */);
148 EXPECT_THAT(tracker().references_to_remove(), 141 EXPECT_THAT(tracker().references_to_remove(),
149 UnorderedElementsAre(reference_first)); 142 UnorderedElementsAre(reference_first));
150 EXPECT_THAT(tracker().references_to_add(), 143 EXPECT_THAT(tracker().references_to_add(),
151 UnorderedElementsAre(reference_second)); 144 UnorderedElementsAre(reference_second));
152 } 145 }
153 146
154 TEST_F(ReferencedSurfaceTrackerTest, UpdateParentSurfaceId) { 147 TEST_F(ReferencedSurfaceTrackerTest, UpdateParentSurfaceId) {
155 const SurfaceId parent_id_first = MakeSurfaceId(kParentFrameSink, 1); 148 const SurfaceId parent_id_first = MakeSurfaceId(kParentFrameSink, 1);
156 const SurfaceId parent_id_second = MakeSurfaceId(kParentFrameSink, 2); 149 const SurfaceId parent_id_second = MakeSurfaceId(kParentFrameSink, 2);
157 const SurfaceId child_id1 = MakeSurfaceId(kChildFrameSink1, 1); 150 const SurfaceId child_id1 = MakeSurfaceId(kChildFrameSink1, 1);
158 const SurfaceReference reference(parent_id_second, child_id1); 151 const SurfaceReference reference(parent_id_second, child_id1);
159 152
160 // First frame references |child_id1|. 153 // First frame references |child_id1|.
161 std::vector<SurfaceId> active_referenced_surfaces = {child_id1}; 154 std::vector<SurfaceId> active_referenced_surfaces = {child_id1};
162 tracker().UpdateReferences(parent_id_first.local_surface_id(), 155 tracker().UpdateReferences(parent_id_first.local_surface_id(),
163 &active_referenced_surfaces, 156 &active_referenced_surfaces);
164 nullptr /* pending_referenced_surfaces */);
165 EXPECT_THAT(tracker().references_to_add(), SizeIs(1)); 157 EXPECT_THAT(tracker().references_to_add(), SizeIs(1));
166 158
167 // Second frame still reference |child_id1| but the parent SurfaceId has 159 // Second frame still reference |child_id1| but the parent SurfaceId has
168 // changed. The new parent SurfaceId should have a reference added to 160 // changed. The new parent SurfaceId should have a reference added to
169 // |child_id1|. 161 // |child_id1|.
170 tracker().UpdateReferences(parent_id_second.local_surface_id(), 162 tracker().UpdateReferences(parent_id_second.local_surface_id(),
171 &active_referenced_surfaces, 163 &active_referenced_surfaces);
172 nullptr /* pending_referenced_surfaces */);
173 EXPECT_THAT(tracker().references_to_add(), UnorderedElementsAre(reference)); 164 EXPECT_THAT(tracker().references_to_add(), UnorderedElementsAre(reference));
174 EXPECT_THAT(tracker().references_to_remove(), IsEmpty()); 165 EXPECT_THAT(tracker().references_to_remove(), IsEmpty());
175 } 166 }
176 167
177 TEST_F(ReferencedSurfaceTrackerTest, RefTwoThenUnrefOneSurface) { 168 TEST_F(ReferencedSurfaceTrackerTest, RefTwoThenUnrefOneSurface) {
178 const SurfaceId parent_id = MakeSurfaceId(kParentFrameSink, 1); 169 const SurfaceId parent_id = MakeSurfaceId(kParentFrameSink, 1);
179 const SurfaceId child_id1 = MakeSurfaceId(kChildFrameSink1, 1); 170 const SurfaceId child_id1 = MakeSurfaceId(kChildFrameSink1, 1);
180 const SurfaceId child_id2 = MakeSurfaceId(kChildFrameSink2, 2); 171 const SurfaceId child_id2 = MakeSurfaceId(kChildFrameSink2, 2);
181 const SurfaceReference reference1(parent_id, child_id1); 172 const SurfaceReference reference1(parent_id, child_id1);
182 const SurfaceReference reference2(parent_id, child_id2); 173 const SurfaceReference reference2(parent_id, child_id2);
183 174
184 // First frame references both surfaces. 175 // First frame references both surfaces.
185 std::vector<SurfaceId> active_referenced_surfaces1 = {child_id1, child_id2}; 176 std::vector<SurfaceId> active_referenced_surfaces1 = {child_id1, child_id2};
186 tracker().UpdateReferences(parent_id.local_surface_id(), 177 tracker().UpdateReferences(parent_id.local_surface_id(),
187 &active_referenced_surfaces1, 178 &active_referenced_surfaces1);
188 nullptr /* pending_referenced_surfaces */);
189 EXPECT_THAT(tracker().references_to_add(), 179 EXPECT_THAT(tracker().references_to_add(),
190 UnorderedElementsAre(reference1, reference2)); 180 UnorderedElementsAre(reference1, reference2));
191 181
192 // Second frame references only |child_id2|, check that reference to 182 // Second frame references only |child_id2|, check that reference to
193 // |child_id1| is removed. 183 // |child_id1| is removed.
194 std::vector<SurfaceId> active_referenced_surfaces2 = {child_id2}; 184 std::vector<SurfaceId> active_referenced_surfaces2 = {child_id2};
195 tracker().UpdateReferences(parent_id.local_surface_id(), 185 tracker().UpdateReferences(parent_id.local_surface_id(),
196 &active_referenced_surfaces2, 186 &active_referenced_surfaces2);
197 nullptr /* pending_referenced_surfaces */);
198 EXPECT_THAT(tracker().references_to_remove(), 187 EXPECT_THAT(tracker().references_to_remove(),
199 UnorderedElementsAre(reference1)); 188 UnorderedElementsAre(reference1));
200 EXPECT_THAT(tracker().references_to_add(), IsEmpty()); 189 EXPECT_THAT(tracker().references_to_add(), IsEmpty());
201 } 190 }
202 191
203 } // namespace test 192 } // namespace test
204 } // namespace cc 193 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698