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

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

Issue 2661543002: Rename LocalFrameId to LocalSurfaceId (Closed)
Patch Set: c Created 3 years, 10 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
« no previous file with comments | « cc/surfaces/surface_aggregator_perftest.cc ('k') | cc/surfaces/surface_factory.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/surface_aggregator.h" 5 #include "cc/surfaces/surface_aggregator.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <utility> 10 #include <utility>
(...skipping 24 matching lines...) Expand all
35 namespace { 35 namespace {
36 36
37 static constexpr FrameSinkId kArbitraryRootFrameSinkId(1, 1); 37 static constexpr FrameSinkId kArbitraryRootFrameSinkId(1, 1);
38 static constexpr FrameSinkId kArbitraryChildFrameSinkId(2, 2); 38 static constexpr FrameSinkId kArbitraryChildFrameSinkId(2, 2);
39 static constexpr FrameSinkId kArbitraryMiddleFrameSinkId(3, 3); 39 static constexpr FrameSinkId kArbitraryMiddleFrameSinkId(3, 3);
40 static const base::UnguessableToken kArbitraryToken = 40 static const base::UnguessableToken kArbitraryToken =
41 base::UnguessableToken::Create(); 41 base::UnguessableToken::Create();
42 42
43 SurfaceId InvalidSurfaceId() { 43 SurfaceId InvalidSurfaceId() {
44 static SurfaceId invalid(kArbitraryRootFrameSinkId, 44 static SurfaceId invalid(kArbitraryRootFrameSinkId,
45 LocalFrameId(0xdeadbeef, kArbitraryToken)); 45 LocalSurfaceId(0xdeadbeef, kArbitraryToken));
46 return invalid; 46 return invalid;
47 } 47 }
48 48
49 gfx::Size SurfaceSize() { 49 gfx::Size SurfaceSize() {
50 static gfx::Size size(100, 100); 50 static gfx::Size size(100, 100);
51 return size; 51 return size;
52 } 52 }
53 53
54 class EmptySurfaceFactoryClient : public SurfaceFactoryClient { 54 class EmptySurfaceFactoryClient : public SurfaceFactoryClient {
55 public: 55 public:
56 void ReturnResources(const ReturnedResourceArray& resources) override {} 56 void ReturnResources(const ReturnedResourceArray& resources) override {}
57 57
58 void WillDrawSurface(const LocalFrameId& id, 58 void WillDrawSurface(const LocalSurfaceId& id,
59 const gfx::Rect& damage_rect) override { 59 const gfx::Rect& damage_rect) override {
60 last_local_frame_id_ = id; 60 last_local_surface_id_ = id;
61 last_damage_rect_ = damage_rect; 61 last_damage_rect_ = damage_rect;
62 } 62 }
63 63
64 void SetBeginFrameSource(BeginFrameSource* begin_frame_source) override {} 64 void SetBeginFrameSource(BeginFrameSource* begin_frame_source) override {}
65 65
66 gfx::Rect last_damage_rect_; 66 gfx::Rect last_damage_rect_;
67 LocalFrameId last_local_frame_id_; 67 LocalSurfaceId last_local_surface_id_;
68 }; 68 };
69 69
70 class SurfaceAggregatorTest : public testing::Test { 70 class SurfaceAggregatorTest : public testing::Test {
71 public: 71 public:
72 explicit SurfaceAggregatorTest(bool use_damage_rect) 72 explicit SurfaceAggregatorTest(bool use_damage_rect)
73 : factory_(kArbitraryRootFrameSinkId, &manager_, &empty_client_), 73 : factory_(kArbitraryRootFrameSinkId, &manager_, &empty_client_),
74 aggregator_(&manager_, NULL, use_damage_rect) {} 74 aggregator_(&manager_, NULL, use_damage_rect) {}
75 75
76 SurfaceAggregatorTest() : SurfaceAggregatorTest(false) {} 76 SurfaceAggregatorTest() : SurfaceAggregatorTest(false) {}
77 77
78 void TearDown() override { 78 void TearDown() override {
79 factory_.EvictSurface(); 79 factory_.EvictSurface();
80 testing::Test::TearDown(); 80 testing::Test::TearDown();
81 } 81 }
82 82
83 protected: 83 protected:
84 SurfaceManager manager_; 84 SurfaceManager manager_;
85 EmptySurfaceFactoryClient empty_client_; 85 EmptySurfaceFactoryClient empty_client_;
86 SurfaceFactory factory_; 86 SurfaceFactory factory_;
87 SurfaceAggregator aggregator_; 87 SurfaceAggregator aggregator_;
88 }; 88 };
89 89
90 TEST_F(SurfaceAggregatorTest, ValidSurfaceNoFrame) { 90 TEST_F(SurfaceAggregatorTest, ValidSurfaceNoFrame) {
91 LocalFrameId local_frame_id(7, base::UnguessableToken::Create()); 91 LocalSurfaceId local_surface_id(7, base::UnguessableToken::Create());
92 SurfaceId one_id(kArbitraryRootFrameSinkId, local_frame_id); 92 SurfaceId one_id(kArbitraryRootFrameSinkId, local_surface_id);
93 factory_.SubmitCompositorFrame(local_frame_id, CompositorFrame(), 93 factory_.SubmitCompositorFrame(local_surface_id, CompositorFrame(),
94 SurfaceFactory::DrawCallback()); 94 SurfaceFactory::DrawCallback());
95 95
96 CompositorFrame frame = aggregator_.Aggregate(one_id); 96 CompositorFrame frame = aggregator_.Aggregate(one_id);
97 EXPECT_TRUE(frame.render_pass_list.empty()); 97 EXPECT_TRUE(frame.render_pass_list.empty());
98 } 98 }
99 99
100 class SurfaceAggregatorValidSurfaceTest : public SurfaceAggregatorTest { 100 class SurfaceAggregatorValidSurfaceTest : public SurfaceAggregatorTest {
101 public: 101 public:
102 explicit SurfaceAggregatorValidSurfaceTest(bool use_damage_rect) 102 explicit SurfaceAggregatorValidSurfaceTest(bool use_damage_rect)
103 : SurfaceAggregatorTest(use_damage_rect), 103 : SurfaceAggregatorTest(use_damage_rect),
104 child_factory_(kArbitraryChildFrameSinkId, 104 child_factory_(kArbitraryChildFrameSinkId,
105 &manager_, 105 &manager_,
106 &empty_child_client_) {} 106 &empty_child_client_) {}
107 SurfaceAggregatorValidSurfaceTest() 107 SurfaceAggregatorValidSurfaceTest()
108 : SurfaceAggregatorValidSurfaceTest(false) {} 108 : SurfaceAggregatorValidSurfaceTest(false) {}
109 109
110 void SetUp() override { 110 void SetUp() override {
111 SurfaceAggregatorTest::SetUp(); 111 SurfaceAggregatorTest::SetUp();
112 root_local_frame_id_ = allocator_.GenerateId(); 112 root_local_surface_id_ = allocator_.GenerateId();
113 root_surface_ = manager_.GetSurfaceForId( 113 root_surface_ = manager_.GetSurfaceForId(
114 SurfaceId(factory_.frame_sink_id(), root_local_frame_id_)); 114 SurfaceId(factory_.frame_sink_id(), root_local_surface_id_));
115 } 115 }
116 116
117 void TearDown() override { 117 void TearDown() override {
118 child_factory_.EvictSurface(); 118 child_factory_.EvictSurface();
119 SurfaceAggregatorTest::TearDown(); 119 SurfaceAggregatorTest::TearDown();
120 } 120 }
121 121
122 void AggregateAndVerify(test::Pass* expected_passes, 122 void AggregateAndVerify(test::Pass* expected_passes,
123 size_t expected_pass_count, 123 size_t expected_pass_count,
124 SurfaceId* surface_ids, 124 SurfaceId* surface_ids,
125 size_t expected_surface_count) { 125 size_t expected_surface_count) {
126 CompositorFrame aggregated_frame = aggregator_.Aggregate( 126 CompositorFrame aggregated_frame = aggregator_.Aggregate(
127 SurfaceId(factory_.frame_sink_id(), root_local_frame_id_)); 127 SurfaceId(factory_.frame_sink_id(), root_local_surface_id_));
128 128
129 TestPassesMatchExpectations(expected_passes, expected_pass_count, 129 TestPassesMatchExpectations(expected_passes, expected_pass_count,
130 &aggregated_frame.render_pass_list); 130 &aggregated_frame.render_pass_list);
131 131
132 // Ensure no duplicate pass ids output. 132 // Ensure no duplicate pass ids output.
133 std::set<int> used_passes; 133 std::set<int> used_passes;
134 for (const auto& pass : aggregated_frame.render_pass_list) { 134 for (const auto& pass : aggregated_frame.render_pass_list) {
135 EXPECT_TRUE(used_passes.insert(pass->id).second); 135 EXPECT_TRUE(used_passes.insert(pass->id).second);
136 } 136 }
137 137
138 EXPECT_EQ(expected_surface_count, 138 EXPECT_EQ(expected_surface_count,
139 aggregator_.previous_contained_surfaces().size()); 139 aggregator_.previous_contained_surfaces().size());
140 for (size_t i = 0; i < expected_surface_count; i++) { 140 for (size_t i = 0; i < expected_surface_count; i++) {
141 EXPECT_TRUE( 141 EXPECT_TRUE(
142 aggregator_.previous_contained_surfaces().find(surface_ids[i]) != 142 aggregator_.previous_contained_surfaces().find(surface_ids[i]) !=
143 aggregator_.previous_contained_surfaces().end()); 143 aggregator_.previous_contained_surfaces().end());
144 } 144 }
145 } 145 }
146 146
147 void SubmitPassListAsFrame(SurfaceFactory* factory, 147 void SubmitPassListAsFrame(SurfaceFactory* factory,
148 const LocalFrameId& local_frame_id, 148 const LocalSurfaceId& local_surface_id,
149 RenderPassList* pass_list) { 149 RenderPassList* pass_list) {
150 CompositorFrame frame; 150 CompositorFrame frame;
151 pass_list->swap(frame.render_pass_list); 151 pass_list->swap(frame.render_pass_list);
152 152
153 factory->SubmitCompositorFrame(local_frame_id, std::move(frame), 153 factory->SubmitCompositorFrame(local_surface_id, std::move(frame),
154 SurfaceFactory::DrawCallback()); 154 SurfaceFactory::DrawCallback());
155 } 155 }
156 156
157 void SubmitCompositorFrame(SurfaceFactory* factory, 157 void SubmitCompositorFrame(SurfaceFactory* factory,
158 test::Pass* passes, 158 test::Pass* passes,
159 size_t pass_count, 159 size_t pass_count,
160 const LocalFrameId& local_frame_id) { 160 const LocalSurfaceId& local_surface_id) {
161 RenderPassList pass_list; 161 RenderPassList pass_list;
162 AddPasses(&pass_list, gfx::Rect(SurfaceSize()), passes, pass_count); 162 AddPasses(&pass_list, gfx::Rect(SurfaceSize()), passes, pass_count);
163 SubmitPassListAsFrame(factory, local_frame_id, &pass_list); 163 SubmitPassListAsFrame(factory, local_surface_id, &pass_list);
164 } 164 }
165 165
166 void QueuePassAsFrame(std::unique_ptr<RenderPass> pass, 166 void QueuePassAsFrame(std::unique_ptr<RenderPass> pass,
167 const LocalFrameId& local_frame_id, 167 const LocalSurfaceId& local_surface_id,
168 SurfaceFactory* factory) { 168 SurfaceFactory* factory) {
169 CompositorFrame child_frame; 169 CompositorFrame child_frame;
170 child_frame.render_pass_list.push_back(std::move(pass)); 170 child_frame.render_pass_list.push_back(std::move(pass));
171 171
172 factory->SubmitCompositorFrame(local_frame_id, std::move(child_frame), 172 factory->SubmitCompositorFrame(local_surface_id, std::move(child_frame),
173 SurfaceFactory::DrawCallback()); 173 SurfaceFactory::DrawCallback());
174 } 174 }
175 175
176 protected: 176 protected:
177 LocalFrameId root_local_frame_id_; 177 LocalSurfaceId root_local_surface_id_;
178 Surface* root_surface_; 178 Surface* root_surface_;
179 SurfaceIdAllocator allocator_; 179 SurfaceIdAllocator allocator_;
180 EmptySurfaceFactoryClient empty_child_client_; 180 EmptySurfaceFactoryClient empty_child_client_;
181 SurfaceFactory child_factory_; 181 SurfaceFactory child_factory_;
182 SurfaceIdAllocator child_allocator_; 182 SurfaceIdAllocator child_allocator_;
183 }; 183 };
184 184
185 // Tests that a very simple frame containing only two solid color quads makes it 185 // Tests that a very simple frame containing only two solid color quads makes it
186 // through the aggregator correctly. 186 // through the aggregator correctly.
187 TEST_F(SurfaceAggregatorValidSurfaceTest, SimpleFrame) { 187 TEST_F(SurfaceAggregatorValidSurfaceTest, SimpleFrame) {
188 test::Quad quads[] = {test::Quad::SolidColorQuad(SK_ColorRED), 188 test::Quad quads[] = {test::Quad::SolidColorQuad(SK_ColorRED),
189 test::Quad::SolidColorQuad(SK_ColorBLUE)}; 189 test::Quad::SolidColorQuad(SK_ColorBLUE)};
190 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; 190 test::Pass passes[] = {test::Pass(quads, arraysize(quads))};
191 191
192 SubmitCompositorFrame(&factory_, passes, arraysize(passes), 192 SubmitCompositorFrame(&factory_, passes, arraysize(passes),
193 root_local_frame_id_); 193 root_local_surface_id_);
194 194
195 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); 195 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_);
196 SurfaceId ids[] = {root_surface_id}; 196 SurfaceId ids[] = {root_surface_id};
197 197
198 AggregateAndVerify(passes, arraysize(passes), ids, arraysize(ids)); 198 AggregateAndVerify(passes, arraysize(passes), ids, arraysize(ids));
199 199
200 // Check that WillDrawSurface was called. 200 // Check that WillDrawSurface was called.
201 EXPECT_EQ(gfx::Rect(SurfaceSize()), empty_client_.last_damage_rect_); 201 EXPECT_EQ(gfx::Rect(SurfaceSize()), empty_client_.last_damage_rect_);
202 EXPECT_EQ(root_local_frame_id_, empty_client_.last_local_frame_id_); 202 EXPECT_EQ(root_local_surface_id_, empty_client_.last_local_surface_id_);
203 } 203 }
204 204
205 TEST_F(SurfaceAggregatorValidSurfaceTest, OpacityCopied) { 205 TEST_F(SurfaceAggregatorValidSurfaceTest, OpacityCopied) {
206 SurfaceFactory embedded_factory(kArbitraryChildFrameSinkId, &manager_, 206 SurfaceFactory embedded_factory(kArbitraryChildFrameSinkId, &manager_,
207 &empty_client_); 207 &empty_client_);
208 LocalFrameId embedded_local_frame_id = allocator_.GenerateId(); 208 LocalSurfaceId embedded_local_surface_id = allocator_.GenerateId();
209 SurfaceId embedded_surface_id(embedded_factory.frame_sink_id(), 209 SurfaceId embedded_surface_id(embedded_factory.frame_sink_id(),
210 embedded_local_frame_id); 210 embedded_local_surface_id);
211 211
212 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), 212 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN),
213 test::Quad::SolidColorQuad(SK_ColorBLUE)}; 213 test::Quad::SolidColorQuad(SK_ColorBLUE)};
214 test::Pass embedded_passes[] = { 214 test::Pass embedded_passes[] = {
215 test::Pass(embedded_quads, arraysize(embedded_quads))}; 215 test::Pass(embedded_quads, arraysize(embedded_quads))};
216 216
217 SubmitCompositorFrame(&embedded_factory, embedded_passes, 217 SubmitCompositorFrame(&embedded_factory, embedded_passes,
218 arraysize(embedded_passes), embedded_local_frame_id); 218 arraysize(embedded_passes), embedded_local_surface_id);
219 219
220 test::Quad quads[] = {test::Quad::SurfaceQuad(embedded_surface_id, .5f)}; 220 test::Quad quads[] = {test::Quad::SurfaceQuad(embedded_surface_id, .5f)};
221 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; 221 test::Pass passes[] = {test::Pass(quads, arraysize(quads))};
222 222
223 SubmitCompositorFrame(&factory_, passes, arraysize(passes), 223 SubmitCompositorFrame(&factory_, passes, arraysize(passes),
224 root_local_frame_id_); 224 root_local_surface_id_);
225 225
226 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); 226 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_);
227 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); 227 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
228 228
229 RenderPassList& render_pass_list(aggregated_frame.render_pass_list); 229 RenderPassList& render_pass_list(aggregated_frame.render_pass_list);
230 ASSERT_EQ(2u, render_pass_list.size()); 230 ASSERT_EQ(2u, render_pass_list.size());
231 SharedQuadStateList& shared_quad_state_list( 231 SharedQuadStateList& shared_quad_state_list(
232 render_pass_list[0]->shared_quad_state_list); 232 render_pass_list[0]->shared_quad_state_list);
233 ASSERT_EQ(2u, shared_quad_state_list.size()); 233 ASSERT_EQ(2u, shared_quad_state_list.size());
234 EXPECT_EQ(1.f, shared_quad_state_list.ElementAt(0)->opacity); 234 EXPECT_EQ(1.f, shared_quad_state_list.ElementAt(0)->opacity);
235 EXPECT_EQ(1.f, shared_quad_state_list.ElementAt(1)->opacity); 235 EXPECT_EQ(1.f, shared_quad_state_list.ElementAt(1)->opacity);
236 236
237 SharedQuadStateList& shared_quad_state_list2( 237 SharedQuadStateList& shared_quad_state_list2(
238 render_pass_list[1]->shared_quad_state_list); 238 render_pass_list[1]->shared_quad_state_list);
239 ASSERT_EQ(1u, shared_quad_state_list2.size()); 239 ASSERT_EQ(1u, shared_quad_state_list2.size());
240 EXPECT_EQ(.5f, shared_quad_state_list2.ElementAt(0)->opacity); 240 EXPECT_EQ(.5f, shared_quad_state_list2.ElementAt(0)->opacity);
241 241
242 embedded_factory.EvictSurface(); 242 embedded_factory.EvictSurface();
243 } 243 }
244 244
245 TEST_F(SurfaceAggregatorValidSurfaceTest, MultiPassSimpleFrame) { 245 TEST_F(SurfaceAggregatorValidSurfaceTest, MultiPassSimpleFrame) {
246 test::Quad quads[][2] = {{test::Quad::SolidColorQuad(SK_ColorWHITE), 246 test::Quad quads[][2] = {{test::Quad::SolidColorQuad(SK_ColorWHITE),
247 test::Quad::SolidColorQuad(SK_ColorLTGRAY)}, 247 test::Quad::SolidColorQuad(SK_ColorLTGRAY)},
248 {test::Quad::SolidColorQuad(SK_ColorGRAY), 248 {test::Quad::SolidColorQuad(SK_ColorGRAY),
249 test::Quad::SolidColorQuad(SK_ColorDKGRAY)}}; 249 test::Quad::SolidColorQuad(SK_ColorDKGRAY)}};
250 test::Pass passes[] = {test::Pass(quads[0], arraysize(quads[0]), 1), 250 test::Pass passes[] = {test::Pass(quads[0], arraysize(quads[0]), 1),
251 test::Pass(quads[1], arraysize(quads[1]), 2)}; 251 test::Pass(quads[1], arraysize(quads[1]), 2)};
252 252
253 SubmitCompositorFrame(&factory_, passes, arraysize(passes), 253 SubmitCompositorFrame(&factory_, passes, arraysize(passes),
254 root_local_frame_id_); 254 root_local_surface_id_);
255 255
256 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); 256 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_);
257 SurfaceId ids[] = {root_surface_id}; 257 SurfaceId ids[] = {root_surface_id};
258 258
259 AggregateAndVerify(passes, arraysize(passes), ids, arraysize(ids)); 259 AggregateAndVerify(passes, arraysize(passes), ids, arraysize(ids));
260 } 260 }
261 261
262 // Ensure that the render pass ID map properly keeps and deletes entries. 262 // Ensure that the render pass ID map properly keeps and deletes entries.
263 TEST_F(SurfaceAggregatorValidSurfaceTest, MultiPassDeallocation) { 263 TEST_F(SurfaceAggregatorValidSurfaceTest, MultiPassDeallocation) {
264 test::Quad quads[][2] = {{test::Quad::SolidColorQuad(SK_ColorWHITE), 264 test::Quad quads[][2] = {{test::Quad::SolidColorQuad(SK_ColorWHITE),
265 test::Quad::SolidColorQuad(SK_ColorLTGRAY)}, 265 test::Quad::SolidColorQuad(SK_ColorLTGRAY)},
266 {test::Quad::SolidColorQuad(SK_ColorGRAY), 266 {test::Quad::SolidColorQuad(SK_ColorGRAY),
267 test::Quad::SolidColorQuad(SK_ColorDKGRAY)}}; 267 test::Quad::SolidColorQuad(SK_ColorDKGRAY)}};
268 test::Pass passes[] = {test::Pass(quads[0], arraysize(quads[0]), 2), 268 test::Pass passes[] = {test::Pass(quads[0], arraysize(quads[0]), 2),
269 test::Pass(quads[1], arraysize(quads[1]), 1)}; 269 test::Pass(quads[1], arraysize(quads[1]), 1)};
270 270
271 SubmitCompositorFrame(&factory_, passes, arraysize(passes), 271 SubmitCompositorFrame(&factory_, passes, arraysize(passes),
272 root_local_frame_id_); 272 root_local_surface_id_);
273 273
274 SurfaceId surface_id(factory_.frame_sink_id(), root_local_frame_id_); 274 SurfaceId surface_id(factory_.frame_sink_id(), root_local_surface_id_);
275 275
276 CompositorFrame aggregated_frame; 276 CompositorFrame aggregated_frame;
277 aggregated_frame = aggregator_.Aggregate(surface_id); 277 aggregated_frame = aggregator_.Aggregate(surface_id);
278 auto id0 = aggregated_frame.render_pass_list[0]->id; 278 auto id0 = aggregated_frame.render_pass_list[0]->id;
279 auto id1 = aggregated_frame.render_pass_list[1]->id; 279 auto id1 = aggregated_frame.render_pass_list[1]->id;
280 EXPECT_NE(id1, id0); 280 EXPECT_NE(id1, id0);
281 281
282 // Aggregated RenderPass ids should remain the same between frames. 282 // Aggregated RenderPass ids should remain the same between frames.
283 aggregated_frame = aggregator_.Aggregate(surface_id); 283 aggregated_frame = aggregator_.Aggregate(surface_id);
284 EXPECT_EQ(id0, aggregated_frame.render_pass_list[0]->id); 284 EXPECT_EQ(id0, aggregated_frame.render_pass_list[0]->id);
285 EXPECT_EQ(id1, aggregated_frame.render_pass_list[1]->id); 285 EXPECT_EQ(id1, aggregated_frame.render_pass_list[1]->id);
286 286
287 test::Pass passes2[] = {test::Pass(quads[0], arraysize(quads[0]), 3), 287 test::Pass passes2[] = {test::Pass(quads[0], arraysize(quads[0]), 3),
288 test::Pass(quads[1], arraysize(quads[1]), 1)}; 288 test::Pass(quads[1], arraysize(quads[1]), 1)};
289 289
290 SubmitCompositorFrame(&factory_, passes2, arraysize(passes2), 290 SubmitCompositorFrame(&factory_, passes2, arraysize(passes2),
291 root_local_frame_id_); 291 root_local_surface_id_);
292 292
293 // The RenderPass that still exists should keep the same ID. 293 // The RenderPass that still exists should keep the same ID.
294 aggregated_frame = aggregator_.Aggregate(surface_id); 294 aggregated_frame = aggregator_.Aggregate(surface_id);
295 auto id2 = aggregated_frame.render_pass_list[0]->id; 295 auto id2 = aggregated_frame.render_pass_list[0]->id;
296 EXPECT_NE(id2, id1); 296 EXPECT_NE(id2, id1);
297 EXPECT_NE(id2, id0); 297 EXPECT_NE(id2, id0);
298 EXPECT_EQ(id1, aggregated_frame.render_pass_list[1]->id); 298 EXPECT_EQ(id1, aggregated_frame.render_pass_list[1]->id);
299 299
300 SubmitCompositorFrame(&factory_, passes, arraysize(passes), 300 SubmitCompositorFrame(&factory_, passes, arraysize(passes),
301 root_local_frame_id_); 301 root_local_surface_id_);
302 302
303 // |id1| didn't exist in the previous frame, so it should be 303 // |id1| didn't exist in the previous frame, so it should be
304 // mapped to a new ID. 304 // mapped to a new ID.
305 aggregated_frame = aggregator_.Aggregate(surface_id); 305 aggregated_frame = aggregator_.Aggregate(surface_id);
306 auto id3 = aggregated_frame.render_pass_list[0]->id; 306 auto id3 = aggregated_frame.render_pass_list[0]->id;
307 EXPECT_NE(id3, id2); 307 EXPECT_NE(id3, id2);
308 EXPECT_NE(id3, id1); 308 EXPECT_NE(id3, id1);
309 EXPECT_NE(id3, id0); 309 EXPECT_NE(id3, id0);
310 EXPECT_EQ(id1, aggregated_frame.render_pass_list[1]->id); 310 EXPECT_EQ(id1, aggregated_frame.render_pass_list[1]->id);
311 } 311 }
312 312
313 // This tests very simple embedding. root_surface has a frame containing a few 313 // This tests very simple embedding. root_surface has a frame containing a few
314 // solid color quads and a surface quad referencing embedded_surface. 314 // solid color quads and a surface quad referencing embedded_surface.
315 // embedded_surface has a frame containing only a solid color quad. The solid 315 // embedded_surface has a frame containing only a solid color quad. The solid
316 // color quad should be aggregated into the final frame. 316 // color quad should be aggregated into the final frame.
317 TEST_F(SurfaceAggregatorValidSurfaceTest, SimpleSurfaceReference) { 317 TEST_F(SurfaceAggregatorValidSurfaceTest, SimpleSurfaceReference) {
318 SurfaceFactory embedded_factory(kArbitraryChildFrameSinkId, &manager_, 318 SurfaceFactory embedded_factory(kArbitraryChildFrameSinkId, &manager_,
319 &empty_client_); 319 &empty_client_);
320 LocalFrameId embedded_local_frame_id = allocator_.GenerateId(); 320 LocalSurfaceId embedded_local_surface_id = allocator_.GenerateId();
321 SurfaceId embedded_surface_id(embedded_factory.frame_sink_id(), 321 SurfaceId embedded_surface_id(embedded_factory.frame_sink_id(),
322 embedded_local_frame_id); 322 embedded_local_surface_id);
323 323
324 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)}; 324 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)};
325 test::Pass embedded_passes[] = { 325 test::Pass embedded_passes[] = {
326 test::Pass(embedded_quads, arraysize(embedded_quads))}; 326 test::Pass(embedded_quads, arraysize(embedded_quads))};
327 327
328 SubmitCompositorFrame(&embedded_factory, embedded_passes, 328 SubmitCompositorFrame(&embedded_factory, embedded_passes,
329 arraysize(embedded_passes), embedded_local_frame_id); 329 arraysize(embedded_passes), embedded_local_surface_id);
330 330
331 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), 331 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE),
332 test::Quad::SurfaceQuad(embedded_surface_id, 1.f), 332 test::Quad::SurfaceQuad(embedded_surface_id, 1.f),
333 test::Quad::SolidColorQuad(SK_ColorBLACK)}; 333 test::Quad::SolidColorQuad(SK_ColorBLACK)};
334 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; 334 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))};
335 335
336 SubmitCompositorFrame(&factory_, root_passes, arraysize(root_passes), 336 SubmitCompositorFrame(&factory_, root_passes, arraysize(root_passes),
337 root_local_frame_id_); 337 root_local_surface_id_);
338 338
339 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), 339 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE),
340 test::Quad::SolidColorQuad(SK_ColorGREEN), 340 test::Quad::SolidColorQuad(SK_ColorGREEN),
341 test::Quad::SolidColorQuad(SK_ColorBLACK)}; 341 test::Quad::SolidColorQuad(SK_ColorBLACK)};
342 test::Pass expected_passes[] = { 342 test::Pass expected_passes[] = {
343 test::Pass(expected_quads, arraysize(expected_quads))}; 343 test::Pass(expected_quads, arraysize(expected_quads))};
344 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); 344 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_);
345 SurfaceId ids[] = {root_surface_id, embedded_surface_id}; 345 SurfaceId ids[] = {root_surface_id, embedded_surface_id};
346 AggregateAndVerify( 346 AggregateAndVerify(
347 expected_passes, arraysize(expected_passes), ids, arraysize(ids)); 347 expected_passes, arraysize(expected_passes), ids, arraysize(ids));
348 348
349 embedded_factory.EvictSurface(); 349 embedded_factory.EvictSurface();
350 } 350 }
351 351
352 TEST_F(SurfaceAggregatorValidSurfaceTest, CopyRequest) { 352 TEST_F(SurfaceAggregatorValidSurfaceTest, CopyRequest) {
353 SurfaceFactory embedded_factory(kArbitraryChildFrameSinkId, &manager_, 353 SurfaceFactory embedded_factory(kArbitraryChildFrameSinkId, &manager_,
354 &empty_client_); 354 &empty_client_);
355 LocalFrameId embedded_local_frame_id = allocator_.GenerateId(); 355 LocalSurfaceId embedded_local_surface_id = allocator_.GenerateId();
356 SurfaceId embedded_surface_id(embedded_factory.frame_sink_id(), 356 SurfaceId embedded_surface_id(embedded_factory.frame_sink_id(),
357 embedded_local_frame_id); 357 embedded_local_surface_id);
358 358
359 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)}; 359 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)};
360 test::Pass embedded_passes[] = { 360 test::Pass embedded_passes[] = {
361 test::Pass(embedded_quads, arraysize(embedded_quads))}; 361 test::Pass(embedded_quads, arraysize(embedded_quads))};
362 362
363 SubmitCompositorFrame(&embedded_factory, embedded_passes, 363 SubmitCompositorFrame(&embedded_factory, embedded_passes,
364 arraysize(embedded_passes), embedded_local_frame_id); 364 arraysize(embedded_passes), embedded_local_surface_id);
365 std::unique_ptr<CopyOutputRequest> copy_request( 365 std::unique_ptr<CopyOutputRequest> copy_request(
366 CopyOutputRequest::CreateEmptyRequest()); 366 CopyOutputRequest::CreateEmptyRequest());
367 CopyOutputRequest* copy_request_ptr = copy_request.get(); 367 CopyOutputRequest* copy_request_ptr = copy_request.get();
368 embedded_factory.RequestCopyOfSurface(std::move(copy_request)); 368 embedded_factory.RequestCopyOfSurface(std::move(copy_request));
369 369
370 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), 370 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE),
371 test::Quad::SurfaceQuad(embedded_surface_id, 1.f), 371 test::Quad::SurfaceQuad(embedded_surface_id, 1.f),
372 test::Quad::SolidColorQuad(SK_ColorBLACK)}; 372 test::Quad::SolidColorQuad(SK_ColorBLACK)};
373 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; 373 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))};
374 374
375 SubmitCompositorFrame(&factory_, root_passes, arraysize(root_passes), 375 SubmitCompositorFrame(&factory_, root_passes, arraysize(root_passes),
376 root_local_frame_id_); 376 root_local_surface_id_);
377 377
378 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); 378 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_);
379 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); 379 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
380 380
381 test::Quad expected_quads[] = { 381 test::Quad expected_quads[] = {
382 test::Quad::SolidColorQuad(SK_ColorWHITE), 382 test::Quad::SolidColorQuad(SK_ColorWHITE),
383 test::Quad::RenderPassQuad(aggregated_frame.render_pass_list[0]->id), 383 test::Quad::RenderPassQuad(aggregated_frame.render_pass_list[0]->id),
384 test::Quad::SolidColorQuad(SK_ColorBLACK)}; 384 test::Quad::SolidColorQuad(SK_ColorBLACK)};
385 test::Pass expected_passes[] = { 385 test::Pass expected_passes[] = {
386 test::Pass(embedded_quads, arraysize(embedded_quads)), 386 test::Pass(embedded_quads, arraysize(embedded_quads)),
387 test::Pass(expected_quads, arraysize(expected_quads))}; 387 test::Pass(expected_quads, arraysize(expected_quads))};
388 TestPassesMatchExpectations(expected_passes, arraysize(expected_passes), 388 TestPassesMatchExpectations(expected_passes, arraysize(expected_passes),
(...skipping 12 matching lines...) Expand all
401 aggregator_.previous_contained_surfaces().end()); 401 aggregator_.previous_contained_surfaces().end());
402 } 402 }
403 403
404 embedded_factory.EvictSurface(); 404 embedded_factory.EvictSurface();
405 } 405 }
406 406
407 // Root surface may contain copy requests. 407 // Root surface may contain copy requests.
408 TEST_F(SurfaceAggregatorValidSurfaceTest, RootCopyRequest) { 408 TEST_F(SurfaceAggregatorValidSurfaceTest, RootCopyRequest) {
409 SurfaceFactory embedded_factory(kArbitraryChildFrameSinkId, &manager_, 409 SurfaceFactory embedded_factory(kArbitraryChildFrameSinkId, &manager_,
410 &empty_client_); 410 &empty_client_);
411 LocalFrameId embedded_local_frame_id = allocator_.GenerateId(); 411 LocalSurfaceId embedded_local_surface_id = allocator_.GenerateId();
412 SurfaceId embedded_surface_id(embedded_factory.frame_sink_id(), 412 SurfaceId embedded_surface_id(embedded_factory.frame_sink_id(),
413 embedded_local_frame_id); 413 embedded_local_surface_id);
414 414
415 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)}; 415 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)};
416 test::Pass embedded_passes[] = { 416 test::Pass embedded_passes[] = {
417 test::Pass(embedded_quads, arraysize(embedded_quads))}; 417 test::Pass(embedded_quads, arraysize(embedded_quads))};
418 418
419 SubmitCompositorFrame(&embedded_factory, embedded_passes, 419 SubmitCompositorFrame(&embedded_factory, embedded_passes,
420 arraysize(embedded_passes), embedded_local_frame_id); 420 arraysize(embedded_passes), embedded_local_surface_id);
421 std::unique_ptr<CopyOutputRequest> copy_request( 421 std::unique_ptr<CopyOutputRequest> copy_request(
422 CopyOutputRequest::CreateEmptyRequest()); 422 CopyOutputRequest::CreateEmptyRequest());
423 CopyOutputRequest* copy_request_ptr = copy_request.get(); 423 CopyOutputRequest* copy_request_ptr = copy_request.get();
424 std::unique_ptr<CopyOutputRequest> copy_request2( 424 std::unique_ptr<CopyOutputRequest> copy_request2(
425 CopyOutputRequest::CreateEmptyRequest()); 425 CopyOutputRequest::CreateEmptyRequest());
426 CopyOutputRequest* copy_request2_ptr = copy_request2.get(); 426 CopyOutputRequest* copy_request2_ptr = copy_request2.get();
427 427
428 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), 428 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE),
429 test::Quad::SurfaceQuad(embedded_surface_id, 1.f), 429 test::Quad::SurfaceQuad(embedded_surface_id, 1.f),
430 test::Quad::SolidColorQuad(SK_ColorBLACK)}; 430 test::Quad::SolidColorQuad(SK_ColorBLACK)};
431 test::Quad root_quads2[] = {test::Quad::SolidColorQuad(SK_ColorRED)}; 431 test::Quad root_quads2[] = {test::Quad::SolidColorQuad(SK_ColorRED)};
432 test::Pass root_passes[] = { 432 test::Pass root_passes[] = {
433 test::Pass(root_quads, arraysize(root_quads), 1), 433 test::Pass(root_quads, arraysize(root_quads), 1),
434 test::Pass(root_quads2, arraysize(root_quads2), 2)}; 434 test::Pass(root_quads2, arraysize(root_quads2), 2)};
435 { 435 {
436 CompositorFrame frame; 436 CompositorFrame frame;
437 AddPasses(&frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes, 437 AddPasses(&frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes,
438 arraysize(root_passes)); 438 arraysize(root_passes));
439 frame.render_pass_list[0]->copy_requests.push_back(std::move(copy_request)); 439 frame.render_pass_list[0]->copy_requests.push_back(std::move(copy_request));
440 frame.render_pass_list[1]->copy_requests.push_back( 440 frame.render_pass_list[1]->copy_requests.push_back(
441 std::move(copy_request2)); 441 std::move(copy_request2));
442 442
443 factory_.SubmitCompositorFrame(root_local_frame_id_, std::move(frame), 443 factory_.SubmitCompositorFrame(root_local_surface_id_, std::move(frame),
444 SurfaceFactory::DrawCallback()); 444 SurfaceFactory::DrawCallback());
445 } 445 }
446 446
447 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); 447 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_);
448 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); 448 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
449 449
450 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), 450 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE),
451 test::Quad::SolidColorQuad(SK_ColorGREEN), 451 test::Quad::SolidColorQuad(SK_ColorGREEN),
452 test::Quad::SolidColorQuad(SK_ColorBLACK)}; 452 test::Quad::SolidColorQuad(SK_ColorBLACK)};
453 test::Pass expected_passes[] = { 453 test::Pass expected_passes[] = {
454 test::Pass(expected_quads, arraysize(expected_quads)), 454 test::Pass(expected_quads, arraysize(expected_quads)),
455 test::Pass(root_quads2, arraysize(root_quads2))}; 455 test::Pass(root_quads2, arraysize(root_quads2))};
456 TestPassesMatchExpectations(expected_passes, arraysize(expected_passes), 456 TestPassesMatchExpectations(expected_passes, arraysize(expected_passes),
457 &aggregated_frame.render_pass_list); 457 &aggregated_frame.render_pass_list);
(...skipping 23 matching lines...) Expand all
481 DCHECK(original_pass_list[1]->copy_requests.empty()); 481 DCHECK(original_pass_list[1]->copy_requests.empty());
482 482
483 embedded_factory.EvictSurface(); 483 embedded_factory.EvictSurface();
484 } 484 }
485 485
486 TEST_F(SurfaceAggregatorValidSurfaceTest, UnreferencedSurface) { 486 TEST_F(SurfaceAggregatorValidSurfaceTest, UnreferencedSurface) {
487 SurfaceFactory embedded_factory(kArbitraryChildFrameSinkId, &manager_, 487 SurfaceFactory embedded_factory(kArbitraryChildFrameSinkId, &manager_,
488 &empty_client_); 488 &empty_client_);
489 SurfaceFactory parent_factory(kArbitraryRootFrameSinkId, &manager_, 489 SurfaceFactory parent_factory(kArbitraryRootFrameSinkId, &manager_,
490 &empty_client_); 490 &empty_client_);
491 LocalFrameId embedded_local_frame_id = allocator_.GenerateId(); 491 LocalSurfaceId embedded_local_surface_id = allocator_.GenerateId();
492 SurfaceId embedded_surface_id(embedded_factory.frame_sink_id(), 492 SurfaceId embedded_surface_id(embedded_factory.frame_sink_id(),
493 embedded_local_frame_id); 493 embedded_local_surface_id);
494 SurfaceId nonexistent_surface_id(factory_.frame_sink_id(), 494 SurfaceId nonexistent_surface_id(factory_.frame_sink_id(),
495 allocator_.GenerateId()); 495 allocator_.GenerateId());
496 496
497 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)}; 497 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)};
498 test::Pass embedded_passes[] = { 498 test::Pass embedded_passes[] = {
499 test::Pass(embedded_quads, arraysize(embedded_quads))}; 499 test::Pass(embedded_quads, arraysize(embedded_quads))};
500 500
501 SubmitCompositorFrame(&embedded_factory, embedded_passes, 501 SubmitCompositorFrame(&embedded_factory, embedded_passes,
502 arraysize(embedded_passes), embedded_local_frame_id); 502 arraysize(embedded_passes), embedded_local_surface_id);
503 std::unique_ptr<CopyOutputRequest> copy_request( 503 std::unique_ptr<CopyOutputRequest> copy_request(
504 CopyOutputRequest::CreateEmptyRequest()); 504 CopyOutputRequest::CreateEmptyRequest());
505 CopyOutputRequest* copy_request_ptr = copy_request.get(); 505 CopyOutputRequest* copy_request_ptr = copy_request.get();
506 embedded_factory.RequestCopyOfSurface(std::move(copy_request)); 506 embedded_factory.RequestCopyOfSurface(std::move(copy_request));
507 507
508 LocalFrameId parent_local_frame_id = allocator_.GenerateId(); 508 LocalSurfaceId parent_local_surface_id = allocator_.GenerateId();
509 SurfaceId parent_surface_id(parent_factory.frame_sink_id(), 509 SurfaceId parent_surface_id(parent_factory.frame_sink_id(),
510 parent_local_frame_id); 510 parent_local_surface_id);
511 511
512 test::Quad parent_quads[] = { 512 test::Quad parent_quads[] = {
513 test::Quad::SolidColorQuad(SK_ColorWHITE), 513 test::Quad::SolidColorQuad(SK_ColorWHITE),
514 test::Quad::SurfaceQuad(embedded_surface_id, 1.f), 514 test::Quad::SurfaceQuad(embedded_surface_id, 1.f),
515 test::Quad::SolidColorQuad(SK_ColorBLACK)}; 515 test::Quad::SolidColorQuad(SK_ColorBLACK)};
516 test::Pass parent_passes[] = { 516 test::Pass parent_passes[] = {
517 test::Pass(parent_quads, arraysize(parent_quads))}; 517 test::Pass(parent_quads, arraysize(parent_quads))};
518 518
519 { 519 {
520 CompositorFrame frame; 520 CompositorFrame frame;
521 521
522 AddPasses(&frame.render_pass_list, gfx::Rect(SurfaceSize()), parent_passes, 522 AddPasses(&frame.render_pass_list, gfx::Rect(SurfaceSize()), parent_passes,
523 arraysize(parent_passes)); 523 arraysize(parent_passes));
524 524
525 frame.metadata.referenced_surfaces.push_back(embedded_surface_id); 525 frame.metadata.referenced_surfaces.push_back(embedded_surface_id);
526 526
527 parent_factory.SubmitCompositorFrame(parent_local_frame_id, 527 parent_factory.SubmitCompositorFrame(parent_local_surface_id,
528 std::move(frame), 528 std::move(frame),
529 SurfaceFactory::DrawCallback()); 529 SurfaceFactory::DrawCallback());
530 } 530 }
531 531
532 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), 532 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE),
533 test::Quad::SolidColorQuad(SK_ColorBLACK)}; 533 test::Quad::SolidColorQuad(SK_ColorBLACK)};
534 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; 534 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))};
535 535
536 { 536 {
537 CompositorFrame frame; 537 CompositorFrame frame;
538 AddPasses(&frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes, 538 AddPasses(&frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes,
539 arraysize(root_passes)); 539 arraysize(root_passes));
540 540
541 frame.metadata.referenced_surfaces.push_back(parent_surface_id); 541 frame.metadata.referenced_surfaces.push_back(parent_surface_id);
542 // Reference to Surface ID of a Surface that doesn't exist should be 542 // Reference to Surface ID of a Surface that doesn't exist should be
543 // included in previous_contained_surfaces, but otherwise ignored. 543 // included in previous_contained_surfaces, but otherwise ignored.
544 frame.metadata.referenced_surfaces.push_back(nonexistent_surface_id); 544 frame.metadata.referenced_surfaces.push_back(nonexistent_surface_id);
545 545
546 factory_.SubmitCompositorFrame(root_local_frame_id_, std::move(frame), 546 factory_.SubmitCompositorFrame(root_local_surface_id_, std::move(frame),
547 SurfaceFactory::DrawCallback()); 547 SurfaceFactory::DrawCallback());
548 } 548 }
549 549
550 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); 550 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_);
551 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); 551 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
552 552
553 // First pass should come from surface that had a copy request but was not 553 // First pass should come from surface that had a copy request but was not
554 // referenced directly. The second pass comes from the root surface. 554 // referenced directly. The second pass comes from the root surface.
555 // parent_quad should be ignored because it is neither referenced through a 555 // parent_quad should be ignored because it is neither referenced through a
556 // SurfaceDrawQuad nor has a copy request on it. 556 // SurfaceDrawQuad nor has a copy request on it.
557 test::Pass expected_passes[] = { 557 test::Pass expected_passes[] = {
558 test::Pass(embedded_quads, arraysize(embedded_quads)), 558 test::Pass(embedded_quads, arraysize(embedded_quads)),
559 test::Pass(root_quads, arraysize(root_quads))}; 559 test::Pass(root_quads, arraysize(root_quads))};
560 TestPassesMatchExpectations(expected_passes, arraysize(expected_passes), 560 TestPassesMatchExpectations(expected_passes, arraysize(expected_passes),
561 &aggregated_frame.render_pass_list); 561 &aggregated_frame.render_pass_list);
562 ASSERT_EQ(2u, aggregated_frame.render_pass_list.size()); 562 ASSERT_EQ(2u, aggregated_frame.render_pass_list.size());
563 ASSERT_EQ(1u, aggregated_frame.render_pass_list[0]->copy_requests.size()); 563 ASSERT_EQ(1u, aggregated_frame.render_pass_list[0]->copy_requests.size());
564 DCHECK_EQ(copy_request_ptr, 564 DCHECK_EQ(copy_request_ptr,
565 aggregated_frame.render_pass_list[0]->copy_requests[0].get()); 565 aggregated_frame.render_pass_list[0]->copy_requests[0].get());
566 566
567 SurfaceId surface_ids[] = { 567 SurfaceId surface_ids[] = {
568 SurfaceId(factory_.frame_sink_id(), root_local_frame_id_), 568 SurfaceId(factory_.frame_sink_id(), root_local_surface_id_),
569 parent_surface_id, embedded_surface_id, nonexistent_surface_id}; 569 parent_surface_id, embedded_surface_id, nonexistent_surface_id};
570 EXPECT_EQ(arraysize(surface_ids), 570 EXPECT_EQ(arraysize(surface_ids),
571 aggregator_.previous_contained_surfaces().size()); 571 aggregator_.previous_contained_surfaces().size());
572 for (size_t i = 0; i < arraysize(surface_ids); i++) { 572 for (size_t i = 0; i < arraysize(surface_ids); i++) {
573 EXPECT_TRUE( 573 EXPECT_TRUE(
574 aggregator_.previous_contained_surfaces().find(surface_ids[i]) != 574 aggregator_.previous_contained_surfaces().find(surface_ids[i]) !=
575 aggregator_.previous_contained_surfaces().end()); 575 aggregator_.previous_contained_surfaces().end());
576 } 576 }
577 577
578 embedded_factory.EvictSurface(); 578 embedded_factory.EvictSurface();
579 parent_factory.EvictSurface(); 579 parent_factory.EvictSurface();
580 } 580 }
581 581
582 // This tests referencing a surface that has multiple render passes. 582 // This tests referencing a surface that has multiple render passes.
583 TEST_F(SurfaceAggregatorValidSurfaceTest, MultiPassSurfaceReference) { 583 TEST_F(SurfaceAggregatorValidSurfaceTest, MultiPassSurfaceReference) {
584 LocalFrameId embedded_local_frame_id = child_allocator_.GenerateId(); 584 LocalSurfaceId embedded_local_surface_id = child_allocator_.GenerateId();
585 SurfaceId embedded_surface_id(child_factory_.frame_sink_id(), 585 SurfaceId embedded_surface_id(child_factory_.frame_sink_id(),
586 embedded_local_frame_id); 586 embedded_local_surface_id);
587 587
588 int pass_ids[] = {1, 2, 3}; 588 int pass_ids[] = {1, 2, 3};
589 589
590 test::Quad embedded_quads[][2] = { 590 test::Quad embedded_quads[][2] = {
591 {test::Quad::SolidColorQuad(1), test::Quad::SolidColorQuad(2)}, 591 {test::Quad::SolidColorQuad(1), test::Quad::SolidColorQuad(2)},
592 {test::Quad::SolidColorQuad(3), test::Quad::RenderPassQuad(pass_ids[0])}, 592 {test::Quad::SolidColorQuad(3), test::Quad::RenderPassQuad(pass_ids[0])},
593 {test::Quad::SolidColorQuad(4), test::Quad::RenderPassQuad(pass_ids[1])}}; 593 {test::Quad::SolidColorQuad(4), test::Quad::RenderPassQuad(pass_ids[1])}};
594 test::Pass embedded_passes[] = { 594 test::Pass embedded_passes[] = {
595 test::Pass(embedded_quads[0], arraysize(embedded_quads[0]), pass_ids[0]), 595 test::Pass(embedded_quads[0], arraysize(embedded_quads[0]), pass_ids[0]),
596 test::Pass(embedded_quads[1], arraysize(embedded_quads[1]), pass_ids[1]), 596 test::Pass(embedded_quads[1], arraysize(embedded_quads[1]), pass_ids[1]),
597 test::Pass(embedded_quads[2], arraysize(embedded_quads[2]), pass_ids[2])}; 597 test::Pass(embedded_quads[2], arraysize(embedded_quads[2]), pass_ids[2])};
598 598
599 SubmitCompositorFrame(&child_factory_, embedded_passes, 599 SubmitCompositorFrame(&child_factory_, embedded_passes,
600 arraysize(embedded_passes), embedded_local_frame_id); 600 arraysize(embedded_passes), embedded_local_surface_id);
601 601
602 test::Quad root_quads[][2] = { 602 test::Quad root_quads[][2] = {
603 {test::Quad::SolidColorQuad(5), test::Quad::SolidColorQuad(6)}, 603 {test::Quad::SolidColorQuad(5), test::Quad::SolidColorQuad(6)},
604 {test::Quad::SurfaceQuad(embedded_surface_id, 1.f), 604 {test::Quad::SurfaceQuad(embedded_surface_id, 1.f),
605 test::Quad::RenderPassQuad(pass_ids[0])}, 605 test::Quad::RenderPassQuad(pass_ids[0])},
606 {test::Quad::SolidColorQuad(7), test::Quad::RenderPassQuad(pass_ids[1])}}; 606 {test::Quad::SolidColorQuad(7), test::Quad::RenderPassQuad(pass_ids[1])}};
607 test::Pass root_passes[] = { 607 test::Pass root_passes[] = {
608 test::Pass(root_quads[0], arraysize(root_quads[0]), pass_ids[0]), 608 test::Pass(root_quads[0], arraysize(root_quads[0]), pass_ids[0]),
609 test::Pass(root_quads[1], arraysize(root_quads[1]), pass_ids[1]), 609 test::Pass(root_quads[1], arraysize(root_quads[1]), pass_ids[1]),
610 test::Pass(root_quads[2], arraysize(root_quads[2]), pass_ids[2])}; 610 test::Pass(root_quads[2], arraysize(root_quads[2]), pass_ids[2])};
611 611
612 SubmitCompositorFrame(&factory_, root_passes, arraysize(root_passes), 612 SubmitCompositorFrame(&factory_, root_passes, arraysize(root_passes),
613 root_local_frame_id_); 613 root_local_surface_id_);
614 614
615 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); 615 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_);
616 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); 616 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
617 617
618 const RenderPassList& aggregated_pass_list = 618 const RenderPassList& aggregated_pass_list =
619 aggregated_frame.render_pass_list; 619 aggregated_frame.render_pass_list;
620 620
621 ASSERT_EQ(5u, aggregated_pass_list.size()); 621 ASSERT_EQ(5u, aggregated_pass_list.size());
622 int actual_pass_ids[] = { 622 int actual_pass_ids[] = {
623 aggregated_pass_list[0]->id, aggregated_pass_list[1]->id, 623 aggregated_pass_list[0]->id, aggregated_pass_list[1]->id,
624 aggregated_pass_list[2]->id, aggregated_pass_list[3]->id, 624 aggregated_pass_list[2]->id, aggregated_pass_list[3]->id,
625 aggregated_pass_list[4]->id}; 625 aggregated_pass_list[4]->id};
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
717 717
718 // Tests an invalid surface reference in a frame. The surface quad should just 718 // Tests an invalid surface reference in a frame. The surface quad should just
719 // be dropped. 719 // be dropped.
720 TEST_F(SurfaceAggregatorValidSurfaceTest, InvalidSurfaceReference) { 720 TEST_F(SurfaceAggregatorValidSurfaceTest, InvalidSurfaceReference) {
721 test::Quad quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), 721 test::Quad quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN),
722 test::Quad::SurfaceQuad(InvalidSurfaceId(), 1.f), 722 test::Quad::SurfaceQuad(InvalidSurfaceId(), 1.f),
723 test::Quad::SolidColorQuad(SK_ColorBLUE)}; 723 test::Quad::SolidColorQuad(SK_ColorBLUE)};
724 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; 724 test::Pass passes[] = {test::Pass(quads, arraysize(quads))};
725 725
726 SubmitCompositorFrame(&factory_, passes, arraysize(passes), 726 SubmitCompositorFrame(&factory_, passes, arraysize(passes),
727 root_local_frame_id_); 727 root_local_surface_id_);
728 728
729 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), 729 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN),
730 test::Quad::SolidColorQuad(SK_ColorBLUE)}; 730 test::Quad::SolidColorQuad(SK_ColorBLUE)};
731 test::Pass expected_passes[] = { 731 test::Pass expected_passes[] = {
732 test::Pass(expected_quads, arraysize(expected_quads))}; 732 test::Pass(expected_quads, arraysize(expected_quads))};
733 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); 733 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_);
734 SurfaceId ids[] = {root_surface_id, InvalidSurfaceId()}; 734 SurfaceId ids[] = {root_surface_id, InvalidSurfaceId()};
735 735
736 AggregateAndVerify( 736 AggregateAndVerify(
737 expected_passes, arraysize(expected_passes), ids, arraysize(ids)); 737 expected_passes, arraysize(expected_passes), ids, arraysize(ids));
738 } 738 }
739 739
740 // Tests a reference to a valid surface with no submitted frame. This quad 740 // Tests a reference to a valid surface with no submitted frame. This quad
741 // should also just be dropped. 741 // should also just be dropped.
742 TEST_F(SurfaceAggregatorValidSurfaceTest, ValidSurfaceReferenceWithNoFrame) { 742 TEST_F(SurfaceAggregatorValidSurfaceTest, ValidSurfaceReferenceWithNoFrame) {
743 LocalFrameId empty_local_frame_id = allocator_.GenerateId(); 743 LocalSurfaceId empty_local_surface_id = allocator_.GenerateId();
744 SurfaceId surface_with_no_frame_id(factory_.frame_sink_id(), 744 SurfaceId surface_with_no_frame_id(factory_.frame_sink_id(),
745 empty_local_frame_id); 745 empty_local_surface_id);
746 746
747 test::Quad quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), 747 test::Quad quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN),
748 test::Quad::SurfaceQuad(surface_with_no_frame_id, 1.f), 748 test::Quad::SurfaceQuad(surface_with_no_frame_id, 1.f),
749 test::Quad::SolidColorQuad(SK_ColorBLUE)}; 749 test::Quad::SolidColorQuad(SK_ColorBLUE)};
750 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; 750 test::Pass passes[] = {test::Pass(quads, arraysize(quads))};
751 751
752 SubmitCompositorFrame(&factory_, passes, arraysize(passes), 752 SubmitCompositorFrame(&factory_, passes, arraysize(passes),
753 root_local_frame_id_); 753 root_local_surface_id_);
754 754
755 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), 755 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN),
756 test::Quad::SolidColorQuad(SK_ColorBLUE)}; 756 test::Quad::SolidColorQuad(SK_ColorBLUE)};
757 test::Pass expected_passes[] = { 757 test::Pass expected_passes[] = {
758 test::Pass(expected_quads, arraysize(expected_quads))}; 758 test::Pass(expected_quads, arraysize(expected_quads))};
759 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); 759 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_);
760 SurfaceId ids[] = {root_surface_id, surface_with_no_frame_id}; 760 SurfaceId ids[] = {root_surface_id, surface_with_no_frame_id};
761 AggregateAndVerify( 761 AggregateAndVerify(
762 expected_passes, arraysize(expected_passes), ids, arraysize(ids)); 762 expected_passes, arraysize(expected_passes), ids, arraysize(ids));
763 } 763 }
764 764
765 // Tests a surface quad referencing itself, generating a trivial cycle. 765 // Tests a surface quad referencing itself, generating a trivial cycle.
766 // The quad creating the cycle should be dropped from the final frame. 766 // The quad creating the cycle should be dropped from the final frame.
767 TEST_F(SurfaceAggregatorValidSurfaceTest, SimpleCyclicalReference) { 767 TEST_F(SurfaceAggregatorValidSurfaceTest, SimpleCyclicalReference) {
768 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); 768 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_);
769 test::Quad quads[] = {test::Quad::SurfaceQuad(root_surface_id, 1.f), 769 test::Quad quads[] = {test::Quad::SurfaceQuad(root_surface_id, 1.f),
770 test::Quad::SolidColorQuad(SK_ColorYELLOW)}; 770 test::Quad::SolidColorQuad(SK_ColorYELLOW)};
771 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; 771 test::Pass passes[] = {test::Pass(quads, arraysize(quads))};
772 772
773 SubmitCompositorFrame(&factory_, passes, arraysize(passes), 773 SubmitCompositorFrame(&factory_, passes, arraysize(passes),
774 root_local_frame_id_); 774 root_local_surface_id_);
775 775
776 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorYELLOW)}; 776 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorYELLOW)};
777 test::Pass expected_passes[] = { 777 test::Pass expected_passes[] = {
778 test::Pass(expected_quads, arraysize(expected_quads))}; 778 test::Pass(expected_quads, arraysize(expected_quads))};
779 SurfaceId ids[] = {root_surface_id}; 779 SurfaceId ids[] = {root_surface_id};
780 AggregateAndVerify( 780 AggregateAndVerify(
781 expected_passes, arraysize(expected_passes), ids, arraysize(ids)); 781 expected_passes, arraysize(expected_passes), ids, arraysize(ids));
782 } 782 }
783 783
784 // Tests a more complex cycle with one intermediate surface. 784 // Tests a more complex cycle with one intermediate surface.
785 TEST_F(SurfaceAggregatorValidSurfaceTest, TwoSurfaceCyclicalReference) { 785 TEST_F(SurfaceAggregatorValidSurfaceTest, TwoSurfaceCyclicalReference) {
786 LocalFrameId child_local_frame_id = allocator_.GenerateId(); 786 LocalSurfaceId child_local_surface_id = allocator_.GenerateId();
787 SurfaceId child_surface_id(child_factory_.frame_sink_id(), 787 SurfaceId child_surface_id(child_factory_.frame_sink_id(),
788 child_local_frame_id); 788 child_local_surface_id);
789 789
790 test::Quad parent_quads[] = {test::Quad::SolidColorQuad(SK_ColorBLUE), 790 test::Quad parent_quads[] = {test::Quad::SolidColorQuad(SK_ColorBLUE),
791 test::Quad::SurfaceQuad(child_surface_id, 1.f), 791 test::Quad::SurfaceQuad(child_surface_id, 1.f),
792 test::Quad::SolidColorQuad(SK_ColorCYAN)}; 792 test::Quad::SolidColorQuad(SK_ColorCYAN)};
793 test::Pass parent_passes[] = { 793 test::Pass parent_passes[] = {
794 test::Pass(parent_quads, arraysize(parent_quads))}; 794 test::Pass(parent_quads, arraysize(parent_quads))};
795 795
796 SubmitCompositorFrame(&factory_, parent_passes, arraysize(parent_passes), 796 SubmitCompositorFrame(&factory_, parent_passes, arraysize(parent_passes),
797 root_local_frame_id_); 797 root_local_surface_id_);
798 798
799 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); 799 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_);
800 test::Quad child_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), 800 test::Quad child_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN),
801 test::Quad::SurfaceQuad(root_surface_id, 1.f), 801 test::Quad::SurfaceQuad(root_surface_id, 1.f),
802 test::Quad::SolidColorQuad(SK_ColorMAGENTA)}; 802 test::Quad::SolidColorQuad(SK_ColorMAGENTA)};
803 test::Pass child_passes[] = {test::Pass(child_quads, arraysize(child_quads))}; 803 test::Pass child_passes[] = {test::Pass(child_quads, arraysize(child_quads))};
804 804
805 SubmitCompositorFrame(&child_factory_, child_passes, arraysize(child_passes), 805 SubmitCompositorFrame(&child_factory_, child_passes, arraysize(child_passes),
806 child_local_frame_id); 806 child_local_surface_id);
807 807
808 // The child surface's reference to the root_surface_ will be dropped, so 808 // The child surface's reference to the root_surface_ will be dropped, so
809 // we'll end up with: 809 // we'll end up with:
810 // SK_ColorBLUE from the parent 810 // SK_ColorBLUE from the parent
811 // SK_ColorGREEN from the child 811 // SK_ColorGREEN from the child
812 // SK_ColorMAGENTA from the child 812 // SK_ColorMAGENTA from the child
813 // SK_ColorCYAN from the parent 813 // SK_ColorCYAN from the parent
814 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorBLUE), 814 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorBLUE),
815 test::Quad::SolidColorQuad(SK_ColorGREEN), 815 test::Quad::SolidColorQuad(SK_ColorGREEN),
816 test::Quad::SolidColorQuad(SK_ColorMAGENTA), 816 test::Quad::SolidColorQuad(SK_ColorMAGENTA),
817 test::Quad::SolidColorQuad(SK_ColorCYAN)}; 817 test::Quad::SolidColorQuad(SK_ColorCYAN)};
818 test::Pass expected_passes[] = { 818 test::Pass expected_passes[] = {
819 test::Pass(expected_quads, arraysize(expected_quads))}; 819 test::Pass(expected_quads, arraysize(expected_quads))};
820 SurfaceId ids[] = {root_surface_id, child_surface_id}; 820 SurfaceId ids[] = {root_surface_id, child_surface_id};
821 AggregateAndVerify( 821 AggregateAndVerify(
822 expected_passes, arraysize(expected_passes), ids, arraysize(ids)); 822 expected_passes, arraysize(expected_passes), ids, arraysize(ids));
823 } 823 }
824 824
825 // Tests that we map render pass IDs from different surfaces into a unified 825 // Tests that we map render pass IDs from different surfaces into a unified
826 // namespace and update RenderPassDrawQuad's id references to match. 826 // namespace and update RenderPassDrawQuad's id references to match.
827 TEST_F(SurfaceAggregatorValidSurfaceTest, RenderPassIdMapping) { 827 TEST_F(SurfaceAggregatorValidSurfaceTest, RenderPassIdMapping) {
828 LocalFrameId child_local_frame_id = allocator_.GenerateId(); 828 LocalSurfaceId child_local_surface_id = allocator_.GenerateId();
829 SurfaceId child_surface_id(child_factory_.frame_sink_id(), 829 SurfaceId child_surface_id(child_factory_.frame_sink_id(),
830 child_local_frame_id); 830 child_local_surface_id);
831 831
832 int child_pass_id[] = {1, 2}; 832 int child_pass_id[] = {1, 2};
833 test::Quad child_quad[][1] = {{test::Quad::SolidColorQuad(SK_ColorGREEN)}, 833 test::Quad child_quad[][1] = {{test::Quad::SolidColorQuad(SK_ColorGREEN)},
834 {test::Quad::RenderPassQuad(child_pass_id[0])}}; 834 {test::Quad::RenderPassQuad(child_pass_id[0])}};
835 test::Pass surface_passes[] = { 835 test::Pass surface_passes[] = {
836 test::Pass(child_quad[0], arraysize(child_quad[0]), child_pass_id[0]), 836 test::Pass(child_quad[0], arraysize(child_quad[0]), child_pass_id[0]),
837 test::Pass(child_quad[1], arraysize(child_quad[1]), child_pass_id[1])}; 837 test::Pass(child_quad[1], arraysize(child_quad[1]), child_pass_id[1])};
838 838
839 SubmitCompositorFrame(&child_factory_, surface_passes, 839 SubmitCompositorFrame(&child_factory_, surface_passes,
840 arraysize(surface_passes), child_local_frame_id); 840 arraysize(surface_passes), child_local_surface_id);
841 841
842 // Pass IDs from the parent surface may collide with ones from the child. 842 // Pass IDs from the parent surface may collide with ones from the child.
843 int parent_pass_id[] = {3, 2}; 843 int parent_pass_id[] = {3, 2};
844 test::Quad parent_quad[][1] = { 844 test::Quad parent_quad[][1] = {
845 {test::Quad::SurfaceQuad(child_surface_id, 1.f)}, 845 {test::Quad::SurfaceQuad(child_surface_id, 1.f)},
846 {test::Quad::RenderPassQuad(parent_pass_id[0])}}; 846 {test::Quad::RenderPassQuad(parent_pass_id[0])}};
847 test::Pass parent_passes[] = { 847 test::Pass parent_passes[] = {
848 test::Pass(parent_quad[0], arraysize(parent_quad[0]), parent_pass_id[0]), 848 test::Pass(parent_quad[0], arraysize(parent_quad[0]), parent_pass_id[0]),
849 test::Pass(parent_quad[1], arraysize(parent_quad[1]), parent_pass_id[1])}; 849 test::Pass(parent_quad[1], arraysize(parent_quad[1]), parent_pass_id[1])};
850 850
851 SubmitCompositorFrame(&factory_, parent_passes, arraysize(parent_passes), 851 SubmitCompositorFrame(&factory_, parent_passes, arraysize(parent_passes),
852 root_local_frame_id_); 852 root_local_surface_id_);
853 853
854 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); 854 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_);
855 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); 855 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
856 856
857 const RenderPassList& aggregated_pass_list = 857 const RenderPassList& aggregated_pass_list =
858 aggregated_frame.render_pass_list; 858 aggregated_frame.render_pass_list;
859 859
860 ASSERT_EQ(3u, aggregated_pass_list.size()); 860 ASSERT_EQ(3u, aggregated_pass_list.size());
861 int actual_pass_ids[] = {aggregated_pass_list[0]->id, 861 int actual_pass_ids[] = {aggregated_pass_list[0]->id,
862 aggregated_pass_list[1]->id, 862 aggregated_pass_list[1]->id,
863 aggregated_pass_list[2]->id}; 863 aggregated_pass_list[2]->id};
864 // Make sure the aggregated frame's pass IDs are all unique. 864 // Make sure the aggregated frame's pass IDs are all unique.
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
944 SkBlendMode::kDstIn, // 6 944 SkBlendMode::kDstIn, // 6
945 }; 945 };
946 946
947 SurfaceFactory grandchild_factory(FrameSinkId(2, 2), &manager_, 947 SurfaceFactory grandchild_factory(FrameSinkId(2, 2), &manager_,
948 &empty_client_); 948 &empty_client_);
949 SurfaceFactory child_one_factory(FrameSinkId(3, 3), &manager_, 949 SurfaceFactory child_one_factory(FrameSinkId(3, 3), &manager_,
950 &empty_client_); 950 &empty_client_);
951 SurfaceFactory child_two_factory(FrameSinkId(4, 4), &manager_, 951 SurfaceFactory child_two_factory(FrameSinkId(4, 4), &manager_,
952 &empty_client_); 952 &empty_client_);
953 int pass_id = 1; 953 int pass_id = 1;
954 LocalFrameId grandchild_local_frame_id = allocator_.GenerateId(); 954 LocalSurfaceId grandchild_local_surface_id = allocator_.GenerateId();
955 SurfaceId grandchild_surface_id(grandchild_factory.frame_sink_id(), 955 SurfaceId grandchild_surface_id(grandchild_factory.frame_sink_id(),
956 grandchild_local_frame_id); 956 grandchild_local_surface_id);
957 grandchild_factory.SubmitCompositorFrame(grandchild_local_frame_id, 957 grandchild_factory.SubmitCompositorFrame(grandchild_local_surface_id,
958 CompositorFrame(), 958 CompositorFrame(),
959 SurfaceFactory::DrawCallback()); 959 SurfaceFactory::DrawCallback());
960 std::unique_ptr<RenderPass> grandchild_pass = RenderPass::Create(); 960 std::unique_ptr<RenderPass> grandchild_pass = RenderPass::Create();
961 gfx::Rect output_rect(SurfaceSize()); 961 gfx::Rect output_rect(SurfaceSize());
962 gfx::Rect damage_rect(SurfaceSize()); 962 gfx::Rect damage_rect(SurfaceSize());
963 gfx::Transform transform_to_root_target; 963 gfx::Transform transform_to_root_target;
964 grandchild_pass->SetNew(pass_id, output_rect, damage_rect, 964 grandchild_pass->SetNew(pass_id, output_rect, damage_rect,
965 transform_to_root_target); 965 transform_to_root_target);
966 AddSolidColorQuadWithBlendMode( 966 AddSolidColorQuadWithBlendMode(
967 SurfaceSize(), grandchild_pass.get(), blend_modes[2]); 967 SurfaceSize(), grandchild_pass.get(), blend_modes[2]);
968 QueuePassAsFrame(std::move(grandchild_pass), grandchild_local_frame_id, 968 QueuePassAsFrame(std::move(grandchild_pass), grandchild_local_surface_id,
969 &grandchild_factory); 969 &grandchild_factory);
970 970
971 LocalFrameId child_one_local_frame_id = allocator_.GenerateId(); 971 LocalSurfaceId child_one_local_surface_id = allocator_.GenerateId();
972 SurfaceId child_one_surface_id(child_one_factory.frame_sink_id(), 972 SurfaceId child_one_surface_id(child_one_factory.frame_sink_id(),
973 child_one_local_frame_id); 973 child_one_local_surface_id);
974 child_one_factory.SubmitCompositorFrame(child_one_local_frame_id, 974 child_one_factory.SubmitCompositorFrame(child_one_local_surface_id,
975 CompositorFrame(), 975 CompositorFrame(),
976 SurfaceFactory::DrawCallback()); 976 SurfaceFactory::DrawCallback());
977 977
978 std::unique_ptr<RenderPass> child_one_pass = RenderPass::Create(); 978 std::unique_ptr<RenderPass> child_one_pass = RenderPass::Create();
979 child_one_pass->SetNew(pass_id, output_rect, damage_rect, 979 child_one_pass->SetNew(pass_id, output_rect, damage_rect,
980 transform_to_root_target); 980 transform_to_root_target);
981 AddSolidColorQuadWithBlendMode( 981 AddSolidColorQuadWithBlendMode(
982 SurfaceSize(), child_one_pass.get(), blend_modes[1]); 982 SurfaceSize(), child_one_pass.get(), blend_modes[1]);
983 SurfaceDrawQuad* grandchild_surface_quad = 983 SurfaceDrawQuad* grandchild_surface_quad =
984 child_one_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); 984 child_one_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>();
985 grandchild_surface_quad->SetNew(child_one_pass->shared_quad_state_list.back(), 985 grandchild_surface_quad->SetNew(child_one_pass->shared_quad_state_list.back(),
986 gfx::Rect(SurfaceSize()), 986 gfx::Rect(SurfaceSize()),
987 gfx::Rect(SurfaceSize()), 987 gfx::Rect(SurfaceSize()),
988 grandchild_surface_id); 988 grandchild_surface_id);
989 AddSolidColorQuadWithBlendMode( 989 AddSolidColorQuadWithBlendMode(
990 SurfaceSize(), child_one_pass.get(), blend_modes[3]); 990 SurfaceSize(), child_one_pass.get(), blend_modes[3]);
991 QueuePassAsFrame(std::move(child_one_pass), child_one_local_frame_id, 991 QueuePassAsFrame(std::move(child_one_pass), child_one_local_surface_id,
992 &child_one_factory); 992 &child_one_factory);
993 993
994 LocalFrameId child_two_local_frame_id = allocator_.GenerateId(); 994 LocalSurfaceId child_two_local_surface_id = allocator_.GenerateId();
995 SurfaceId child_two_surface_id(child_two_factory.frame_sink_id(), 995 SurfaceId child_two_surface_id(child_two_factory.frame_sink_id(),
996 child_two_local_frame_id); 996 child_two_local_surface_id);
997 child_two_factory.SubmitCompositorFrame(child_two_local_frame_id, 997 child_two_factory.SubmitCompositorFrame(child_two_local_surface_id,
998 CompositorFrame(), 998 CompositorFrame(),
999 SurfaceFactory::DrawCallback()); 999 SurfaceFactory::DrawCallback());
1000 1000
1001 std::unique_ptr<RenderPass> child_two_pass = RenderPass::Create(); 1001 std::unique_ptr<RenderPass> child_two_pass = RenderPass::Create();
1002 child_two_pass->SetNew(pass_id, output_rect, damage_rect, 1002 child_two_pass->SetNew(pass_id, output_rect, damage_rect,
1003 transform_to_root_target); 1003 transform_to_root_target);
1004 AddSolidColorQuadWithBlendMode( 1004 AddSolidColorQuadWithBlendMode(
1005 SurfaceSize(), child_two_pass.get(), blend_modes[5]); 1005 SurfaceSize(), child_two_pass.get(), blend_modes[5]);
1006 QueuePassAsFrame(std::move(child_two_pass), child_two_local_frame_id, 1006 QueuePassAsFrame(std::move(child_two_pass), child_two_local_surface_id,
1007 &child_two_factory); 1007 &child_two_factory);
1008 1008
1009 std::unique_ptr<RenderPass> root_pass = RenderPass::Create(); 1009 std::unique_ptr<RenderPass> root_pass = RenderPass::Create();
1010 root_pass->SetNew(pass_id, output_rect, damage_rect, 1010 root_pass->SetNew(pass_id, output_rect, damage_rect,
1011 transform_to_root_target); 1011 transform_to_root_target);
1012 1012
1013 AddSolidColorQuadWithBlendMode( 1013 AddSolidColorQuadWithBlendMode(
1014 SurfaceSize(), root_pass.get(), blend_modes[0]); 1014 SurfaceSize(), root_pass.get(), blend_modes[0]);
1015 SurfaceDrawQuad* child_one_surface_quad = 1015 SurfaceDrawQuad* child_one_surface_quad =
1016 root_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); 1016 root_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>();
1017 child_one_surface_quad->SetNew(root_pass->shared_quad_state_list.back(), 1017 child_one_surface_quad->SetNew(root_pass->shared_quad_state_list.back(),
1018 gfx::Rect(SurfaceSize()), 1018 gfx::Rect(SurfaceSize()),
1019 gfx::Rect(SurfaceSize()), 1019 gfx::Rect(SurfaceSize()),
1020 child_one_surface_id); 1020 child_one_surface_id);
1021 AddSolidColorQuadWithBlendMode( 1021 AddSolidColorQuadWithBlendMode(
1022 SurfaceSize(), root_pass.get(), blend_modes[4]); 1022 SurfaceSize(), root_pass.get(), blend_modes[4]);
1023 SurfaceDrawQuad* child_two_surface_quad = 1023 SurfaceDrawQuad* child_two_surface_quad =
1024 root_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); 1024 root_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>();
1025 child_two_surface_quad->SetNew(root_pass->shared_quad_state_list.back(), 1025 child_two_surface_quad->SetNew(root_pass->shared_quad_state_list.back(),
1026 gfx::Rect(SurfaceSize()), 1026 gfx::Rect(SurfaceSize()),
1027 gfx::Rect(SurfaceSize()), 1027 gfx::Rect(SurfaceSize()),
1028 child_two_surface_id); 1028 child_two_surface_id);
1029 AddSolidColorQuadWithBlendMode( 1029 AddSolidColorQuadWithBlendMode(
1030 SurfaceSize(), root_pass.get(), blend_modes[6]); 1030 SurfaceSize(), root_pass.get(), blend_modes[6]);
1031 1031
1032 QueuePassAsFrame(std::move(root_pass), root_local_frame_id_, &factory_); 1032 QueuePassAsFrame(std::move(root_pass), root_local_surface_id_, &factory_);
1033 1033
1034 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); 1034 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_);
1035 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); 1035 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
1036 1036
1037 const RenderPassList& aggregated_pass_list = 1037 const RenderPassList& aggregated_pass_list =
1038 aggregated_frame.render_pass_list; 1038 aggregated_frame.render_pass_list;
1039 1039
1040 ASSERT_EQ(1u, aggregated_pass_list.size()); 1040 ASSERT_EQ(1u, aggregated_pass_list.size());
1041 1041
1042 const QuadList& aggregated_quad_list = aggregated_pass_list[0]->quad_list; 1042 const QuadList& aggregated_quad_list = aggregated_pass_list[0]->quad_list;
1043 1043
1044 ASSERT_EQ(7u, aggregated_quad_list.size()); 1044 ASSERT_EQ(7u, aggregated_quad_list.size());
(...skipping 25 matching lines...) Expand all
1070 // pass id and a transform of +8 in the x direction. 1070 // pass id and a transform of +8 in the x direction.
1071 // 1071 //
1072 // After aggregation, the child surface's root pass quad should have all 1072 // After aggregation, the child surface's root pass quad should have all
1073 // transforms concatenated for a total transform of +23 x, +10 y. The 1073 // transforms concatenated for a total transform of +23 x, +10 y. The
1074 // contributing render pass' transform in the aggregate frame should not be 1074 // contributing render pass' transform in the aggregate frame should not be
1075 // affected. 1075 // affected.
1076 TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateMultiplePassWithTransform) { 1076 TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateMultiplePassWithTransform) {
1077 SurfaceFactory middle_factory(kArbitraryMiddleFrameSinkId, &manager_, 1077 SurfaceFactory middle_factory(kArbitraryMiddleFrameSinkId, &manager_,
1078 &empty_client_); 1078 &empty_client_);
1079 // Innermost child surface. 1079 // Innermost child surface.
1080 LocalFrameId child_local_frame_id = allocator_.GenerateId(); 1080 LocalSurfaceId child_local_surface_id = allocator_.GenerateId();
1081 SurfaceId child_surface_id(child_factory_.frame_sink_id(), 1081 SurfaceId child_surface_id(child_factory_.frame_sink_id(),
1082 child_local_frame_id); 1082 child_local_surface_id);
1083 { 1083 {
1084 int child_pass_id[] = {1, 2}; 1084 int child_pass_id[] = {1, 2};
1085 test::Quad child_quads[][1] = { 1085 test::Quad child_quads[][1] = {
1086 {test::Quad::SolidColorQuad(SK_ColorGREEN)}, 1086 {test::Quad::SolidColorQuad(SK_ColorGREEN)},
1087 {test::Quad::RenderPassQuad(child_pass_id[0])}, 1087 {test::Quad::RenderPassQuad(child_pass_id[0])},
1088 }; 1088 };
1089 test::Pass child_passes[] = { 1089 test::Pass child_passes[] = {
1090 test::Pass(child_quads[0], arraysize(child_quads[0]), child_pass_id[0]), 1090 test::Pass(child_quads[0], arraysize(child_quads[0]), child_pass_id[0]),
1091 test::Pass(child_quads[1], arraysize(child_quads[1]), 1091 test::Pass(child_quads[1], arraysize(child_quads[1]),
1092 child_pass_id[1])}; 1092 child_pass_id[1])};
1093 1093
1094 CompositorFrame child_frame; 1094 CompositorFrame child_frame;
1095 AddPasses(&child_frame.render_pass_list, gfx::Rect(SurfaceSize()), 1095 AddPasses(&child_frame.render_pass_list, gfx::Rect(SurfaceSize()),
1096 child_passes, arraysize(child_passes)); 1096 child_passes, arraysize(child_passes));
1097 1097
1098 RenderPass* child_nonroot_pass = child_frame.render_pass_list[0].get(); 1098 RenderPass* child_nonroot_pass = child_frame.render_pass_list[0].get();
1099 child_nonroot_pass->transform_to_root_target.Translate(8, 0); 1099 child_nonroot_pass->transform_to_root_target.Translate(8, 0);
1100 SharedQuadState* child_nonroot_pass_sqs = 1100 SharedQuadState* child_nonroot_pass_sqs =
1101 child_nonroot_pass->shared_quad_state_list.front(); 1101 child_nonroot_pass->shared_quad_state_list.front();
1102 child_nonroot_pass_sqs->quad_to_target_transform.Translate(5, 0); 1102 child_nonroot_pass_sqs->quad_to_target_transform.Translate(5, 0);
1103 1103
1104 RenderPass* child_root_pass = child_frame.render_pass_list[1].get(); 1104 RenderPass* child_root_pass = child_frame.render_pass_list[1].get();
1105 SharedQuadState* child_root_pass_sqs = 1105 SharedQuadState* child_root_pass_sqs =
1106 child_root_pass->shared_quad_state_list.front(); 1106 child_root_pass->shared_quad_state_list.front();
1107 child_root_pass_sqs->quad_to_target_transform.Translate(8, 0); 1107 child_root_pass_sqs->quad_to_target_transform.Translate(8, 0);
1108 child_root_pass_sqs->is_clipped = true; 1108 child_root_pass_sqs->is_clipped = true;
1109 child_root_pass_sqs->clip_rect = gfx::Rect(0, 0, 5, 5); 1109 child_root_pass_sqs->clip_rect = gfx::Rect(0, 0, 5, 5);
1110 1110
1111 child_factory_.SubmitCompositorFrame(child_local_frame_id, 1111 child_factory_.SubmitCompositorFrame(child_local_surface_id,
1112 std::move(child_frame), 1112 std::move(child_frame),
1113 SurfaceFactory::DrawCallback()); 1113 SurfaceFactory::DrawCallback());
1114 } 1114 }
1115 1115
1116 // Middle child surface. 1116 // Middle child surface.
1117 LocalFrameId middle_local_frame_id = allocator_.GenerateId(); 1117 LocalSurfaceId middle_local_surface_id = allocator_.GenerateId();
1118 SurfaceId middle_surface_id(middle_factory.frame_sink_id(), 1118 SurfaceId middle_surface_id(middle_factory.frame_sink_id(),
1119 middle_local_frame_id); 1119 middle_local_surface_id);
1120 { 1120 {
1121 test::Quad middle_quads[] = { 1121 test::Quad middle_quads[] = {
1122 test::Quad::SurfaceQuad(child_surface_id, 1.f)}; 1122 test::Quad::SurfaceQuad(child_surface_id, 1.f)};
1123 test::Pass middle_passes[] = { 1123 test::Pass middle_passes[] = {
1124 test::Pass(middle_quads, arraysize(middle_quads)), 1124 test::Pass(middle_quads, arraysize(middle_quads)),
1125 }; 1125 };
1126 1126
1127 CompositorFrame middle_frame; 1127 CompositorFrame middle_frame;
1128 AddPasses(&middle_frame.render_pass_list, gfx::Rect(SurfaceSize()), 1128 AddPasses(&middle_frame.render_pass_list, gfx::Rect(SurfaceSize()),
1129 middle_passes, arraysize(middle_passes)); 1129 middle_passes, arraysize(middle_passes));
1130 1130
1131 RenderPass* middle_root_pass = middle_frame.render_pass_list[0].get(); 1131 RenderPass* middle_root_pass = middle_frame.render_pass_list[0].get();
1132 middle_root_pass->quad_list.ElementAt(0)->visible_rect = 1132 middle_root_pass->quad_list.ElementAt(0)->visible_rect =
1133 gfx::Rect(0, 1, 100, 7); 1133 gfx::Rect(0, 1, 100, 7);
1134 SharedQuadState* middle_root_pass_sqs = 1134 SharedQuadState* middle_root_pass_sqs =
1135 middle_root_pass->shared_quad_state_list.front(); 1135 middle_root_pass->shared_quad_state_list.front();
1136 middle_root_pass_sqs->quad_to_target_transform.Scale(2, 3); 1136 middle_root_pass_sqs->quad_to_target_transform.Scale(2, 3);
1137 1137
1138 middle_factory.SubmitCompositorFrame(middle_local_frame_id, 1138 middle_factory.SubmitCompositorFrame(middle_local_surface_id,
1139 std::move(middle_frame), 1139 std::move(middle_frame),
1140 SurfaceFactory::DrawCallback()); 1140 SurfaceFactory::DrawCallback());
1141 } 1141 }
1142 1142
1143 // Root surface. 1143 // Root surface.
1144 test::Quad secondary_quads[] = { 1144 test::Quad secondary_quads[] = {
1145 test::Quad::SolidColorQuad(1), 1145 test::Quad::SolidColorQuad(1),
1146 test::Quad::SurfaceQuad(middle_surface_id, 1.f)}; 1146 test::Quad::SurfaceQuad(middle_surface_id, 1.f)};
1147 test::Quad root_quads[] = {test::Quad::SolidColorQuad(1)}; 1147 test::Quad root_quads[] = {test::Quad::SolidColorQuad(1)};
1148 test::Pass root_passes[] = { 1148 test::Pass root_passes[] = {
1149 test::Pass(secondary_quads, arraysize(secondary_quads)), 1149 test::Pass(secondary_quads, arraysize(secondary_quads)),
1150 test::Pass(root_quads, arraysize(root_quads))}; 1150 test::Pass(root_quads, arraysize(root_quads))};
1151 1151
1152 CompositorFrame root_frame; 1152 CompositorFrame root_frame;
1153 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes, 1153 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes,
1154 arraysize(root_passes)); 1154 arraysize(root_passes));
1155 1155
1156 root_frame.render_pass_list[0] 1156 root_frame.render_pass_list[0]
1157 ->shared_quad_state_list.front() 1157 ->shared_quad_state_list.front()
1158 ->quad_to_target_transform.Translate(0, 7); 1158 ->quad_to_target_transform.Translate(0, 7);
1159 root_frame.render_pass_list[0] 1159 root_frame.render_pass_list[0]
1160 ->shared_quad_state_list.ElementAt(1) 1160 ->shared_quad_state_list.ElementAt(1)
1161 ->quad_to_target_transform.Translate(0, 10); 1161 ->quad_to_target_transform.Translate(0, 10);
1162 root_frame.render_pass_list[0]->quad_list.ElementAt(1)->visible_rect = 1162 root_frame.render_pass_list[0]->quad_list.ElementAt(1)->visible_rect =
1163 gfx::Rect(0, 0, 8, 100); 1163 gfx::Rect(0, 0, 8, 100);
1164 1164
1165 root_frame.render_pass_list[0]->transform_to_root_target.Translate(10, 5); 1165 root_frame.render_pass_list[0]->transform_to_root_target.Translate(10, 5);
1166 1166
1167 factory_.SubmitCompositorFrame(root_local_frame_id_, std::move(root_frame), 1167 factory_.SubmitCompositorFrame(root_local_surface_id_, std::move(root_frame),
1168 SurfaceFactory::DrawCallback()); 1168 SurfaceFactory::DrawCallback());
1169 1169
1170 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); 1170 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_);
1171 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); 1171 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
1172 1172
1173 const RenderPassList& aggregated_pass_list = 1173 const RenderPassList& aggregated_pass_list =
1174 aggregated_frame.render_pass_list; 1174 aggregated_frame.render_pass_list;
1175 1175
1176 ASSERT_EQ(3u, aggregated_pass_list.size()); 1176 ASSERT_EQ(3u, aggregated_pass_list.size());
1177 1177
1178 ASSERT_EQ(1u, aggregated_pass_list[0]->shared_quad_state_list.size()); 1178 ASSERT_EQ(1u, aggregated_pass_list[0]->shared_quad_state_list.size());
1179 1179
1180 // The first pass should have one shared quad state for the one solid color 1180 // The first pass should have one shared quad state for the one solid color
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
1253 1253
1254 CompositorFrame child_frame; 1254 CompositorFrame child_frame;
1255 AddPasses(&child_frame.render_pass_list, gfx::Rect(SurfaceSize()), 1255 AddPasses(&child_frame.render_pass_list, gfx::Rect(SurfaceSize()),
1256 child_passes, arraysize(child_passes)); 1256 child_passes, arraysize(child_passes));
1257 1257
1258 RenderPass* child_root_pass = child_frame.render_pass_list[0].get(); 1258 RenderPass* child_root_pass = child_frame.render_pass_list[0].get();
1259 SharedQuadState* child_root_pass_sqs = 1259 SharedQuadState* child_root_pass_sqs =
1260 child_root_pass->shared_quad_state_list.front(); 1260 child_root_pass->shared_quad_state_list.front();
1261 child_root_pass_sqs->quad_to_target_transform.Translate(8, 0); 1261 child_root_pass_sqs->quad_to_target_transform.Translate(8, 0);
1262 1262
1263 LocalFrameId child_local_frame_id = allocator_.GenerateId(); 1263 LocalSurfaceId child_local_surface_id = allocator_.GenerateId();
1264 SurfaceId child_surface_id(child_factory_.frame_sink_id(), 1264 SurfaceId child_surface_id(child_factory_.frame_sink_id(),
1265 child_local_frame_id); 1265 child_local_surface_id);
1266 child_factory_.SubmitCompositorFrame(child_local_frame_id, 1266 child_factory_.SubmitCompositorFrame(child_local_surface_id,
1267 std::move(child_frame), 1267 std::move(child_frame),
1268 SurfaceFactory::DrawCallback()); 1268 SurfaceFactory::DrawCallback());
1269 1269
1270 test::Quad parent_surface_quads[] = { 1270 test::Quad parent_surface_quads[] = {
1271 test::Quad::SurfaceQuad(child_surface_id, 1.f)}; 1271 test::Quad::SurfaceQuad(child_surface_id, 1.f)};
1272 test::Pass parent_surface_passes[] = { 1272 test::Pass parent_surface_passes[] = {
1273 test::Pass(parent_surface_quads, arraysize(parent_surface_quads), 1)}; 1273 test::Pass(parent_surface_quads, arraysize(parent_surface_quads), 1)};
1274 1274
1275 // Parent surface is only used to test if the transform is applied correctly 1275 // Parent surface is only used to test if the transform is applied correctly
1276 // to the child surface's damage. 1276 // to the child surface's damage.
1277 CompositorFrame parent_surface_frame; 1277 CompositorFrame parent_surface_frame;
1278 AddPasses(&parent_surface_frame.render_pass_list, gfx::Rect(SurfaceSize()), 1278 AddPasses(&parent_surface_frame.render_pass_list, gfx::Rect(SurfaceSize()),
1279 parent_surface_passes, arraysize(parent_surface_passes)); 1279 parent_surface_passes, arraysize(parent_surface_passes));
1280 1280
1281 LocalFrameId parent_local_frame_id = allocator_.GenerateId(); 1281 LocalSurfaceId parent_local_surface_id = allocator_.GenerateId();
1282 SurfaceId parent_surface_id(parent_factory.frame_sink_id(), 1282 SurfaceId parent_surface_id(parent_factory.frame_sink_id(),
1283 parent_local_frame_id); 1283 parent_local_surface_id);
1284 parent_factory.SubmitCompositorFrame(parent_local_frame_id, 1284 parent_factory.SubmitCompositorFrame(parent_local_surface_id,
1285 std::move(parent_surface_frame), 1285 std::move(parent_surface_frame),
1286 SurfaceFactory::DrawCallback()); 1286 SurfaceFactory::DrawCallback());
1287 1287
1288 test::Quad root_surface_quads[] = { 1288 test::Quad root_surface_quads[] = {
1289 test::Quad::SurfaceQuad(parent_surface_id, 1.f)}; 1289 test::Quad::SurfaceQuad(parent_surface_id, 1.f)};
1290 test::Quad root_render_pass_quads[] = {test::Quad::RenderPassQuad(1)}; 1290 test::Quad root_render_pass_quads[] = {test::Quad::RenderPassQuad(1)};
1291 1291
1292 test::Pass root_passes[] = { 1292 test::Pass root_passes[] = {
1293 test::Pass(root_surface_quads, arraysize(root_surface_quads), 1), 1293 test::Pass(root_surface_quads, arraysize(root_surface_quads), 1),
1294 test::Pass(root_render_pass_quads, arraysize(root_render_pass_quads), 2)}; 1294 test::Pass(root_render_pass_quads, arraysize(root_render_pass_quads), 2)};
1295 1295
1296 CompositorFrame root_frame; 1296 CompositorFrame root_frame;
1297 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes, 1297 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes,
1298 arraysize(root_passes)); 1298 arraysize(root_passes));
1299 1299
1300 root_frame.render_pass_list[0] 1300 root_frame.render_pass_list[0]
1301 ->shared_quad_state_list.front() 1301 ->shared_quad_state_list.front()
1302 ->quad_to_target_transform.Translate(0, 10); 1302 ->quad_to_target_transform.Translate(0, 10);
1303 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(5, 5, 10, 10); 1303 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(5, 5, 10, 10);
1304 root_frame.render_pass_list[1]->damage_rect = gfx::Rect(5, 5, 100, 100); 1304 root_frame.render_pass_list[1]->damage_rect = gfx::Rect(5, 5, 100, 100);
1305 1305
1306 factory_.SubmitCompositorFrame(root_local_frame_id_, std::move(root_frame), 1306 factory_.SubmitCompositorFrame(root_local_surface_id_, std::move(root_frame),
1307 SurfaceFactory::DrawCallback()); 1307 SurfaceFactory::DrawCallback());
1308 1308
1309 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); 1309 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_);
1310 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); 1310 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
1311 1311
1312 const RenderPassList& aggregated_pass_list = 1312 const RenderPassList& aggregated_pass_list =
1313 aggregated_frame.render_pass_list; 1313 aggregated_frame.render_pass_list;
1314 1314
1315 ASSERT_EQ(2u, aggregated_pass_list.size()); 1315 ASSERT_EQ(2u, aggregated_pass_list.size());
1316 1316
1317 // Damage rect for first aggregation should contain entire root surface. 1317 // Damage rect for first aggregation should contain entire root surface.
1318 EXPECT_TRUE( 1318 EXPECT_TRUE(
1319 aggregated_pass_list[1]->damage_rect.Contains(gfx::Rect(SurfaceSize()))); 1319 aggregated_pass_list[1]->damage_rect.Contains(gfx::Rect(SurfaceSize())));
1320 1320
1321 { 1321 {
1322 CompositorFrame child_frame; 1322 CompositorFrame child_frame;
1323 AddPasses(&child_frame.render_pass_list, gfx::Rect(SurfaceSize()), 1323 AddPasses(&child_frame.render_pass_list, gfx::Rect(SurfaceSize()),
1324 child_passes, arraysize(child_passes)); 1324 child_passes, arraysize(child_passes));
1325 1325
1326 RenderPass* child_root_pass = child_frame.render_pass_list[0].get(); 1326 RenderPass* child_root_pass = child_frame.render_pass_list[0].get();
1327 SharedQuadState* child_root_pass_sqs = 1327 SharedQuadState* child_root_pass_sqs =
1328 child_root_pass->shared_quad_state_list.front(); 1328 child_root_pass->shared_quad_state_list.front();
1329 child_root_pass_sqs->quad_to_target_transform.Translate(8, 0); 1329 child_root_pass_sqs->quad_to_target_transform.Translate(8, 0);
1330 child_root_pass->damage_rect = gfx::Rect(10, 10, 10, 10); 1330 child_root_pass->damage_rect = gfx::Rect(10, 10, 10, 10);
1331 1331
1332 child_factory_.SubmitCompositorFrame(child_local_frame_id, 1332 child_factory_.SubmitCompositorFrame(child_local_surface_id,
1333 std::move(child_frame), 1333 std::move(child_frame),
1334 SurfaceFactory::DrawCallback()); 1334 SurfaceFactory::DrawCallback());
1335 1335
1336 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); 1336 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_);
1337 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); 1337 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
1338 1338
1339 const RenderPassList& aggregated_pass_list = 1339 const RenderPassList& aggregated_pass_list =
1340 aggregated_frame.render_pass_list; 1340 aggregated_frame.render_pass_list;
1341 1341
1342 ASSERT_EQ(2u, aggregated_pass_list.size()); 1342 ASSERT_EQ(2u, aggregated_pass_list.size());
1343 1343
1344 // Outer surface didn't change, so transformed inner damage rect should be 1344 // Outer surface didn't change, so transformed inner damage rect should be
1345 // used. 1345 // used.
1346 EXPECT_EQ(gfx::Rect(10, 20, 10, 10).ToString(), 1346 EXPECT_EQ(gfx::Rect(10, 20, 10, 10).ToString(),
1347 aggregated_pass_list[1]->damage_rect.ToString()); 1347 aggregated_pass_list[1]->damage_rect.ToString());
1348 } 1348 }
1349 1349
1350 { 1350 {
1351 CompositorFrame root_frame; 1351 CompositorFrame root_frame;
1352 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), 1352 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()),
1353 root_passes, arraysize(root_passes)); 1353 root_passes, arraysize(root_passes));
1354 1354
1355 root_frame.render_pass_list[0] 1355 root_frame.render_pass_list[0]
1356 ->shared_quad_state_list.front() 1356 ->shared_quad_state_list.front()
1357 ->quad_to_target_transform.Translate(0, 10); 1357 ->quad_to_target_transform.Translate(0, 10);
1358 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(0, 0, 1, 1); 1358 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(0, 0, 1, 1);
1359 1359
1360 factory_.SubmitCompositorFrame(root_local_frame_id_, std::move(root_frame), 1360 factory_.SubmitCompositorFrame(root_local_surface_id_,
1361 std::move(root_frame),
1361 SurfaceFactory::DrawCallback()); 1362 SurfaceFactory::DrawCallback());
1362 } 1363 }
1363 1364
1364 { 1365 {
1365 CompositorFrame root_frame; 1366 CompositorFrame root_frame;
1366 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), 1367 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()),
1367 root_passes, arraysize(root_passes)); 1368 root_passes, arraysize(root_passes));
1368 1369
1369 root_frame.render_pass_list[0] 1370 root_frame.render_pass_list[0]
1370 ->shared_quad_state_list.front() 1371 ->shared_quad_state_list.front()
1371 ->quad_to_target_transform.Translate(0, 10); 1372 ->quad_to_target_transform.Translate(0, 10);
1372 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(1, 1, 1, 1); 1373 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(1, 1, 1, 1);
1373 1374
1374 factory_.SubmitCompositorFrame(root_local_frame_id_, std::move(root_frame), 1375 factory_.SubmitCompositorFrame(root_local_surface_id_,
1376 std::move(root_frame),
1375 SurfaceFactory::DrawCallback()); 1377 SurfaceFactory::DrawCallback());
1376 1378
1377 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); 1379 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_);
1378 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); 1380 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
1379 1381
1380 const RenderPassList& aggregated_pass_list = 1382 const RenderPassList& aggregated_pass_list =
1381 aggregated_frame.render_pass_list; 1383 aggregated_frame.render_pass_list;
1382 1384
1383 ASSERT_EQ(2u, aggregated_pass_list.size()); 1385 ASSERT_EQ(2u, aggregated_pass_list.size());
1384 1386
1385 // The root surface was enqueued without being aggregated once, so it should 1387 // The root surface was enqueued without being aggregated once, so it should
1386 // be treated as completely damaged. 1388 // be treated as completely damaged.
1387 EXPECT_TRUE(aggregated_pass_list[1]->damage_rect.Contains( 1389 EXPECT_TRUE(aggregated_pass_list[1]->damage_rect.Contains(
1388 gfx::Rect(SurfaceSize()))); 1390 gfx::Rect(SurfaceSize())));
1389 } 1391 }
1390 1392
1391 // No Surface changed, so no damage should be given. 1393 // No Surface changed, so no damage should be given.
1392 { 1394 {
1393 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); 1395 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_);
1394 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); 1396 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
1395 1397
1396 const RenderPassList& aggregated_pass_list = 1398 const RenderPassList& aggregated_pass_list =
1397 aggregated_frame.render_pass_list; 1399 aggregated_frame.render_pass_list;
1398 1400
1399 ASSERT_EQ(2u, aggregated_pass_list.size()); 1401 ASSERT_EQ(2u, aggregated_pass_list.size());
1400 1402
1401 EXPECT_TRUE(aggregated_pass_list[1]->damage_rect.IsEmpty()); 1403 EXPECT_TRUE(aggregated_pass_list[1]->damage_rect.IsEmpty());
1402 } 1404 }
1403 1405
(...skipping 21 matching lines...) Expand all
1425 1427
1426 test::Pass root_passes[] = { 1428 test::Pass root_passes[] = {
1427 test::Pass(root_render_pass_quads, arraysize(root_render_pass_quads), 2)}; 1429 test::Pass(root_render_pass_quads, arraysize(root_render_pass_quads), 2)};
1428 1430
1429 CompositorFrame root_frame; 1431 CompositorFrame root_frame;
1430 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes, 1432 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes,
1431 arraysize(root_passes)); 1433 arraysize(root_passes));
1432 1434
1433 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(5, 5, 100, 100); 1435 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(5, 5, 100, 100);
1434 1436
1435 factory_.SubmitCompositorFrame(root_local_frame_id_, std::move(root_frame), 1437 factory_.SubmitCompositorFrame(root_local_surface_id_, std::move(root_frame),
1436 SurfaceFactory::DrawCallback()); 1438 SurfaceFactory::DrawCallback());
1437 1439
1438 { 1440 {
1439 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); 1441 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_);
1440 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); 1442 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
1441 1443
1442 const RenderPassList& aggregated_pass_list = 1444 const RenderPassList& aggregated_pass_list =
1443 aggregated_frame.render_pass_list; 1445 aggregated_frame.render_pass_list;
1444 1446
1445 ASSERT_EQ(1u, aggregated_pass_list.size()); 1447 ASSERT_EQ(1u, aggregated_pass_list.size());
1446 1448
1447 // Damage rect for first aggregation should contain entire root surface. 1449 // Damage rect for first aggregation should contain entire root surface.
1448 EXPECT_TRUE(aggregated_pass_list[0]->damage_rect.Contains( 1450 EXPECT_TRUE(aggregated_pass_list[0]->damage_rect.Contains(
1449 gfx::Rect(SurfaceSize()))); 1451 gfx::Rect(SurfaceSize())));
1450 } 1452 }
1451 1453
1452 LocalFrameId second_root_local_frame_id = allocator_.GenerateId(); 1454 LocalSurfaceId second_root_local_surface_id = allocator_.GenerateId();
1453 SurfaceId second_root_surface_id(factory_.frame_sink_id(), 1455 SurfaceId second_root_surface_id(factory_.frame_sink_id(),
1454 second_root_local_frame_id); 1456 second_root_local_surface_id);
1455 { 1457 {
1456 test::Quad root_render_pass_quads[] = {test::Quad::SolidColorQuad(1)}; 1458 test::Quad root_render_pass_quads[] = {test::Quad::SolidColorQuad(1)};
1457 1459
1458 test::Pass root_passes[] = {test::Pass( 1460 test::Pass root_passes[] = {test::Pass(
1459 root_render_pass_quads, arraysize(root_render_pass_quads), 2)}; 1461 root_render_pass_quads, arraysize(root_render_pass_quads), 2)};
1460 1462
1461 CompositorFrame root_frame; 1463 CompositorFrame root_frame;
1462 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), 1464 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()),
1463 root_passes, arraysize(root_passes)); 1465 root_passes, arraysize(root_passes));
1464 1466
1465 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(1, 2, 3, 4); 1467 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(1, 2, 3, 4);
1466 1468
1467 factory_.SubmitCompositorFrame(second_root_local_frame_id, 1469 factory_.SubmitCompositorFrame(second_root_local_surface_id,
1468 std::move(root_frame), 1470 std::move(root_frame),
1469 SurfaceFactory::DrawCallback()); 1471 SurfaceFactory::DrawCallback());
1470 } 1472 }
1471 { 1473 {
1472 CompositorFrame aggregated_frame = 1474 CompositorFrame aggregated_frame =
1473 aggregator_.Aggregate(second_root_surface_id); 1475 aggregator_.Aggregate(second_root_surface_id);
1474 1476
1475 const RenderPassList& aggregated_pass_list = 1477 const RenderPassList& aggregated_pass_list =
1476 aggregated_frame.render_pass_list; 1478 aggregated_frame.render_pass_list;
1477 1479
(...skipping 17 matching lines...) Expand all
1495 1497
1496 class SurfaceAggregatorPartialSwapTest 1498 class SurfaceAggregatorPartialSwapTest
1497 : public SurfaceAggregatorValidSurfaceTest { 1499 : public SurfaceAggregatorValidSurfaceTest {
1498 public: 1500 public:
1499 SurfaceAggregatorPartialSwapTest() 1501 SurfaceAggregatorPartialSwapTest()
1500 : SurfaceAggregatorValidSurfaceTest(true) {} 1502 : SurfaceAggregatorValidSurfaceTest(true) {}
1501 }; 1503 };
1502 1504
1503 // Tests that quads outside the damage rect are ignored. 1505 // Tests that quads outside the damage rect are ignored.
1504 TEST_F(SurfaceAggregatorPartialSwapTest, IgnoreOutside) { 1506 TEST_F(SurfaceAggregatorPartialSwapTest, IgnoreOutside) {
1505 LocalFrameId child_local_frame_id = allocator_.GenerateId(); 1507 LocalSurfaceId child_local_surface_id = allocator_.GenerateId();
1506 SurfaceId child_surface_id(child_factory_.frame_sink_id(), 1508 SurfaceId child_surface_id(child_factory_.frame_sink_id(),
1507 child_local_frame_id); 1509 child_local_surface_id);
1508 // The child surface has three quads, one with a visible rect of 13,13 4x4 and 1510 // The child surface has three quads, one with a visible rect of 13,13 4x4 and
1509 // the other other with a visible rect of 10,10 2x2 (relative to root target 1511 // the other other with a visible rect of 10,10 2x2 (relative to root target
1510 // space), and one with a non-invertible transform. 1512 // space), and one with a non-invertible transform.
1511 { 1513 {
1512 int child_pass_id = 1; 1514 int child_pass_id = 1;
1513 test::Quad child_quads1[] = {test::Quad::RenderPassQuad(child_pass_id)}; 1515 test::Quad child_quads1[] = {test::Quad::RenderPassQuad(child_pass_id)};
1514 test::Quad child_quads2[] = {test::Quad::RenderPassQuad(child_pass_id)}; 1516 test::Quad child_quads2[] = {test::Quad::RenderPassQuad(child_pass_id)};
1515 test::Quad child_quads3[] = {test::Quad::RenderPassQuad(child_pass_id)}; 1517 test::Quad child_quads3[] = {test::Quad::RenderPassQuad(child_pass_id)};
1516 test::Pass child_passes[] = { 1518 test::Pass child_passes[] = {
1517 test::Pass(child_quads1, arraysize(child_quads1), child_pass_id), 1519 test::Pass(child_quads1, arraysize(child_quads1), child_pass_id),
(...skipping 16 matching lines...) Expand all
1534 1536
1535 SharedQuadState* child_noninvertible_sqs = 1537 SharedQuadState* child_noninvertible_sqs =
1536 child_pass_list[2]->shared_quad_state_list.ElementAt(0u); 1538 child_pass_list[2]->shared_quad_state_list.ElementAt(0u);
1537 child_noninvertible_sqs->quad_to_target_transform.matrix().setDouble(0, 0, 1539 child_noninvertible_sqs->quad_to_target_transform.matrix().setDouble(0, 0,
1538 0.0); 1540 0.0);
1539 EXPECT_FALSE( 1541 EXPECT_FALSE(
1540 child_noninvertible_sqs->quad_to_target_transform.IsInvertible()); 1542 child_noninvertible_sqs->quad_to_target_transform.IsInvertible());
1541 child_pass_list[2]->quad_list.ElementAt(0)->visible_rect = 1543 child_pass_list[2]->quad_list.ElementAt(0)->visible_rect =
1542 gfx::Rect(0, 0, 2, 2); 1544 gfx::Rect(0, 0, 2, 2);
1543 1545
1544 SubmitPassListAsFrame(&child_factory_, child_local_frame_id, 1546 SubmitPassListAsFrame(&child_factory_, child_local_surface_id,
1545 &child_pass_list); 1547 &child_pass_list);
1546 } 1548 }
1547 1549
1548 { 1550 {
1549 test::Quad root_quads[] = {test::Quad::SurfaceQuad(child_surface_id, 1.f)}; 1551 test::Quad root_quads[] = {test::Quad::SurfaceQuad(child_surface_id, 1.f)};
1550 1552
1551 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; 1553 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))};
1552 1554
1553 RenderPassList root_pass_list; 1555 RenderPassList root_pass_list;
1554 AddPasses(&root_pass_list, gfx::Rect(SurfaceSize()), root_passes, 1556 AddPasses(&root_pass_list, gfx::Rect(SurfaceSize()), root_passes,
1555 arraysize(root_passes)); 1557 arraysize(root_passes));
1556 1558
1557 RenderPass* root_pass = root_pass_list[0].get(); 1559 RenderPass* root_pass = root_pass_list[0].get();
1558 root_pass->shared_quad_state_list.front() 1560 root_pass->shared_quad_state_list.front()
1559 ->quad_to_target_transform.Translate(10, 10); 1561 ->quad_to_target_transform.Translate(10, 10);
1560 root_pass->damage_rect = gfx::Rect(0, 0, 1, 1); 1562 root_pass->damage_rect = gfx::Rect(0, 0, 1, 1);
1561 1563
1562 SubmitPassListAsFrame(&factory_, root_local_frame_id_, &root_pass_list); 1564 SubmitPassListAsFrame(&factory_, root_local_surface_id_, &root_pass_list);
1563 } 1565 }
1564 1566
1565 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); 1567 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_);
1566 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); 1568 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
1567 1569
1568 const RenderPassList& aggregated_pass_list = 1570 const RenderPassList& aggregated_pass_list =
1569 aggregated_frame.render_pass_list; 1571 aggregated_frame.render_pass_list;
1570 1572
1571 ASSERT_EQ(3u, aggregated_pass_list.size()); 1573 ASSERT_EQ(3u, aggregated_pass_list.size());
1572 1574
1573 // Damage rect for first aggregation should contain entire root surface. 1575 // Damage rect for first aggregation should contain entire root surface.
1574 EXPECT_EQ(gfx::Rect(SurfaceSize()), aggregated_pass_list[2]->damage_rect); 1576 EXPECT_EQ(gfx::Rect(SurfaceSize()), aggregated_pass_list[2]->damage_rect);
1575 EXPECT_EQ(1u, aggregated_pass_list[0]->quad_list.size()); 1577 EXPECT_EQ(1u, aggregated_pass_list[0]->quad_list.size());
1576 EXPECT_EQ(1u, aggregated_pass_list[1]->quad_list.size()); 1578 EXPECT_EQ(1u, aggregated_pass_list[1]->quad_list.size());
1577 EXPECT_EQ(1u, aggregated_pass_list[2]->quad_list.size()); 1579 EXPECT_EQ(1u, aggregated_pass_list[2]->quad_list.size());
1578 1580
1579 // Create a root surface with a smaller damage rect. 1581 // Create a root surface with a smaller damage rect.
1580 { 1582 {
1581 test::Quad root_quads[] = {test::Quad::SurfaceQuad(child_surface_id, 1.f)}; 1583 test::Quad root_quads[] = {test::Quad::SurfaceQuad(child_surface_id, 1.f)};
1582 1584
1583 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; 1585 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))};
1584 1586
1585 RenderPassList root_pass_list; 1587 RenderPassList root_pass_list;
1586 AddPasses(&root_pass_list, gfx::Rect(SurfaceSize()), root_passes, 1588 AddPasses(&root_pass_list, gfx::Rect(SurfaceSize()), root_passes,
1587 arraysize(root_passes)); 1589 arraysize(root_passes));
1588 1590
1589 RenderPass* root_pass = root_pass_list[0].get(); 1591 RenderPass* root_pass = root_pass_list[0].get();
1590 root_pass->shared_quad_state_list.front() 1592 root_pass->shared_quad_state_list.front()
1591 ->quad_to_target_transform.Translate(10, 10); 1593 ->quad_to_target_transform.Translate(10, 10);
1592 root_pass->damage_rect = gfx::Rect(10, 10, 2, 2); 1594 root_pass->damage_rect = gfx::Rect(10, 10, 2, 2);
1593 SubmitPassListAsFrame(&factory_, root_local_frame_id_, &root_pass_list); 1595 SubmitPassListAsFrame(&factory_, root_local_surface_id_, &root_pass_list);
1594 } 1596 }
1595 1597
1596 { 1598 {
1597 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); 1599 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
1598 1600
1599 const RenderPassList& aggregated_pass_list = 1601 const RenderPassList& aggregated_pass_list =
1600 aggregated_frame.render_pass_list; 1602 aggregated_frame.render_pass_list;
1601 1603
1602 ASSERT_EQ(3u, aggregated_pass_list.size()); 1604 ASSERT_EQ(3u, aggregated_pass_list.size());
1603 1605
(...skipping 29 matching lines...) Expand all
1633 child_sqs->quad_to_target_transform.Scale(2, 2); 1635 child_sqs->quad_to_target_transform.Scale(2, 2);
1634 1636
1635 child_pass_list[1]->quad_list.ElementAt(0)->visible_rect = 1637 child_pass_list[1]->quad_list.ElementAt(0)->visible_rect =
1636 gfx::Rect(0, 0, 2, 2); 1638 gfx::Rect(0, 0, 2, 2);
1637 1639
1638 RenderPass* child_root_pass = child_pass_list[1].get(); 1640 RenderPass* child_root_pass = child_pass_list[1].get();
1639 1641
1640 child_root_pass->copy_requests.push_back( 1642 child_root_pass->copy_requests.push_back(
1641 CopyOutputRequest::CreateEmptyRequest()); 1643 CopyOutputRequest::CreateEmptyRequest());
1642 child_root_pass->damage_rect = gfx::Rect(); 1644 child_root_pass->damage_rect = gfx::Rect();
1643 SubmitPassListAsFrame(&child_factory_, child_local_frame_id, 1645 SubmitPassListAsFrame(&child_factory_, child_local_surface_id,
1644 &child_pass_list); 1646 &child_pass_list);
1645 } 1647 }
1646 1648
1647 { 1649 {
1648 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); 1650 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
1649 1651
1650 const RenderPassList& aggregated_pass_list = 1652 const RenderPassList& aggregated_pass_list =
1651 aggregated_frame.render_pass_list; 1653 aggregated_frame.render_pass_list;
1652 1654
1653 // Output frame should have no damage, but all quads included. 1655 // Output frame should have no damage, but all quads included.
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1692 RenderPassList root_pass_list; 1694 RenderPassList root_pass_list;
1693 AddPasses(&root_pass_list, gfx::Rect(SurfaceSize()), root_passes, 1695 AddPasses(&root_pass_list, gfx::Rect(SurfaceSize()), root_passes,
1694 arraysize(root_passes)); 1696 arraysize(root_passes));
1695 1697
1696 RenderPass* filter_pass = root_pass_list[1].get(); 1698 RenderPass* filter_pass = root_pass_list[1].get();
1697 filter_pass->shared_quad_state_list.front() 1699 filter_pass->shared_quad_state_list.front()
1698 ->quad_to_target_transform.Translate(10, 10); 1700 ->quad_to_target_transform.Translate(10, 10);
1699 RenderPass* root_pass = root_pass_list[2].get(); 1701 RenderPass* root_pass = root_pass_list[2].get();
1700 filter_pass->filters.Append(FilterOperation::CreateBlurFilter(2)); 1702 filter_pass->filters.Append(FilterOperation::CreateBlurFilter(2));
1701 root_pass->damage_rect = gfx::Rect(10, 10, 2, 2); 1703 root_pass->damage_rect = gfx::Rect(10, 10, 2, 2);
1702 SubmitPassListAsFrame(&factory_, root_local_frame_id_, &root_pass_list); 1704 SubmitPassListAsFrame(&factory_, root_local_surface_id_, &root_pass_list);
1703 } 1705 }
1704 1706
1705 { 1707 {
1706 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); 1708 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
1707 1709
1708 const RenderPassList& aggregated_pass_list = 1710 const RenderPassList& aggregated_pass_list =
1709 aggregated_frame.render_pass_list; 1711 aggregated_frame.render_pass_list;
1710 1712
1711 ASSERT_EQ(4u, aggregated_pass_list.size()); 1713 ASSERT_EQ(4u, aggregated_pass_list.size());
1712 1714
(...skipping 26 matching lines...) Expand all
1739 RenderPassList root_pass_list; 1741 RenderPassList root_pass_list;
1740 AddPasses(&root_pass_list, gfx::Rect(SurfaceSize()), root_passes, 1742 AddPasses(&root_pass_list, gfx::Rect(SurfaceSize()), root_passes,
1741 arraysize(root_passes)); 1743 arraysize(root_passes));
1742 1744
1743 RenderPass* pass = root_pass_list[0].get(); 1745 RenderPass* pass = root_pass_list[0].get();
1744 RenderPass* root_pass = root_pass_list[1].get(); 1746 RenderPass* root_pass = root_pass_list[1].get();
1745 root_pass->shared_quad_state_list.ElementAt(1) 1747 root_pass->shared_quad_state_list.ElementAt(1)
1746 ->quad_to_target_transform.Translate(10, 10); 1748 ->quad_to_target_transform.Translate(10, 10);
1747 pass->background_filters.Append(FilterOperation::CreateBlurFilter(2)); 1749 pass->background_filters.Append(FilterOperation::CreateBlurFilter(2));
1748 root_pass->damage_rect = gfx::Rect(10, 10, 2, 2); 1750 root_pass->damage_rect = gfx::Rect(10, 10, 2, 2);
1749 SubmitPassListAsFrame(&factory_, root_local_frame_id_, &root_pass_list); 1751 SubmitPassListAsFrame(&factory_, root_local_surface_id_, &root_pass_list);
1750 } 1752 }
1751 1753
1752 { 1754 {
1753 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); 1755 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
1754 1756
1755 const RenderPassList& aggregated_pass_list = 1757 const RenderPassList& aggregated_pass_list =
1756 aggregated_frame.render_pass_list; 1758 aggregated_frame.render_pass_list;
1757 1759
1758 ASSERT_EQ(3u, aggregated_pass_list.size()); 1760 ASSERT_EQ(3u, aggregated_pass_list.size());
1759 1761
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
1847 const float vertex_opacity[4] = {0.f, 0.f, 1.f, 1.f}; 1849 const float vertex_opacity[4] = {0.f, 0.f, 1.f, 1.f};
1848 bool flipped = false; 1850 bool flipped = false;
1849 bool nearest_neighbor = false; 1851 bool nearest_neighbor = false;
1850 bool secure_output_only = true; 1852 bool secure_output_only = true;
1851 quad->SetAll(sqs, rect, opaque_rect, visible_rect, needs_blending, 1853 quad->SetAll(sqs, rect, opaque_rect, visible_rect, needs_blending,
1852 resource_ids[i], gfx::Size(), premultiplied_alpha, uv_top_left, 1854 resource_ids[i], gfx::Size(), premultiplied_alpha, uv_top_left,
1853 uv_bottom_right, background_color, vertex_opacity, flipped, 1855 uv_bottom_right, background_color, vertex_opacity, flipped,
1854 nearest_neighbor, secure_output_only); 1856 nearest_neighbor, secure_output_only);
1855 } 1857 }
1856 frame.render_pass_list.push_back(std::move(pass)); 1858 frame.render_pass_list.push_back(std::move(pass));
1857 factory->SubmitCompositorFrame(surface_id.local_frame_id(), std::move(frame), 1859 factory->SubmitCompositorFrame(surface_id.local_surface_id(),
1860 std::move(frame),
1858 SurfaceFactory::DrawCallback()); 1861 SurfaceFactory::DrawCallback());
1859 } 1862 }
1860 1863
1861 TEST_F(SurfaceAggregatorWithResourcesTest, TakeResourcesOneSurface) { 1864 TEST_F(SurfaceAggregatorWithResourcesTest, TakeResourcesOneSurface) {
1862 ResourceTrackingSurfaceFactoryClient client; 1865 ResourceTrackingSurfaceFactoryClient client;
1863 SurfaceFactory factory(kArbitraryRootFrameSinkId, &manager_, &client); 1866 SurfaceFactory factory(kArbitraryRootFrameSinkId, &manager_, &client);
1864 LocalFrameId local_frame_id(7u, base::UnguessableToken::Create()); 1867 LocalSurfaceId local_surface_id(7u, base::UnguessableToken::Create());
1865 SurfaceId surface_id(factory.frame_sink_id(), local_frame_id); 1868 SurfaceId surface_id(factory.frame_sink_id(), local_surface_id);
1866 1869
1867 ResourceId ids[] = {11, 12, 13}; 1870 ResourceId ids[] = {11, 12, 13};
1868 SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(), 1871 SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(),
1869 &factory, surface_id); 1872 &factory, surface_id);
1870 1873
1871 CompositorFrame frame = aggregator_->Aggregate(surface_id); 1874 CompositorFrame frame = aggregator_->Aggregate(surface_id);
1872 1875
1873 // Nothing should be available to be returned yet. 1876 // Nothing should be available to be returned yet.
1874 EXPECT_TRUE(client.returned_resources().empty()); 1877 EXPECT_TRUE(client.returned_resources().empty());
1875 1878
1876 SubmitCompositorFrameWithResources(NULL, 0u, true, SurfaceId(), &factory, 1879 SubmitCompositorFrameWithResources(NULL, 0u, true, SurfaceId(), &factory,
1877 surface_id); 1880 surface_id);
1878 1881
1879 frame = aggregator_->Aggregate(surface_id); 1882 frame = aggregator_->Aggregate(surface_id);
1880 1883
1881 ASSERT_EQ(3u, client.returned_resources().size()); 1884 ASSERT_EQ(3u, client.returned_resources().size());
1882 ResourceId returned_ids[3]; 1885 ResourceId returned_ids[3];
1883 for (size_t i = 0; i < 3; ++i) { 1886 for (size_t i = 0; i < 3; ++i) {
1884 returned_ids[i] = client.returned_resources()[i].id; 1887 returned_ids[i] = client.returned_resources()[i].id;
1885 } 1888 }
1886 EXPECT_THAT(returned_ids, 1889 EXPECT_THAT(returned_ids,
1887 testing::WhenSorted(testing::ElementsAreArray(ids))); 1890 testing::WhenSorted(testing::ElementsAreArray(ids)));
1888 1891
1889 factory.EvictSurface(); 1892 factory.EvictSurface();
1890 } 1893 }
1891 1894
1892 TEST_F(SurfaceAggregatorWithResourcesTest, TakeInvalidResources) { 1895 TEST_F(SurfaceAggregatorWithResourcesTest, TakeInvalidResources) {
1893 ResourceTrackingSurfaceFactoryClient client; 1896 ResourceTrackingSurfaceFactoryClient client;
1894 SurfaceFactory factory(kArbitraryRootFrameSinkId, &manager_, &client); 1897 SurfaceFactory factory(kArbitraryRootFrameSinkId, &manager_, &client);
1895 LocalFrameId local_frame_id(7u, base::UnguessableToken::Create()); 1898 LocalSurfaceId local_surface_id(7u, base::UnguessableToken::Create());
1896 SurfaceId surface_id(factory.frame_sink_id(), local_frame_id); 1899 SurfaceId surface_id(factory.frame_sink_id(), local_surface_id);
1897 1900
1898 CompositorFrame frame; 1901 CompositorFrame frame;
1899 std::unique_ptr<RenderPass> pass = RenderPass::Create(); 1902 std::unique_ptr<RenderPass> pass = RenderPass::Create();
1900 pass->id = 1; 1903 pass->id = 1;
1901 TransferableResource resource; 1904 TransferableResource resource;
1902 resource.id = 11; 1905 resource.id = 11;
1903 // ResourceProvider is software but resource is not, so it should be 1906 // ResourceProvider is software but resource is not, so it should be
1904 // ignored. 1907 // ignored.
1905 resource.is_software = false; 1908 resource.is_software = false;
1906 frame.resource_list.push_back(resource); 1909 frame.resource_list.push_back(resource);
1907 frame.render_pass_list.push_back(std::move(pass)); 1910 frame.render_pass_list.push_back(std::move(pass));
1908 factory.SubmitCompositorFrame(local_frame_id, std::move(frame), 1911 factory.SubmitCompositorFrame(local_surface_id, std::move(frame),
1909 SurfaceFactory::DrawCallback()); 1912 SurfaceFactory::DrawCallback());
1910 1913
1911 CompositorFrame returned_frame = aggregator_->Aggregate(surface_id); 1914 CompositorFrame returned_frame = aggregator_->Aggregate(surface_id);
1912 1915
1913 // Nothing should be available to be returned yet. 1916 // Nothing should be available to be returned yet.
1914 EXPECT_TRUE(client.returned_resources().empty()); 1917 EXPECT_TRUE(client.returned_resources().empty());
1915 1918
1916 SubmitCompositorFrameWithResources(NULL, 0, true, SurfaceId(), &factory, 1919 SubmitCompositorFrameWithResources(NULL, 0, true, SurfaceId(), &factory,
1917 surface_id); 1920 surface_id);
1918 ASSERT_EQ(1u, client.returned_resources().size()); 1921 ASSERT_EQ(1u, client.returned_resources().size());
1919 EXPECT_EQ(11u, client.returned_resources()[0].id); 1922 EXPECT_EQ(11u, client.returned_resources()[0].id);
1920 1923
1921 factory.EvictSurface(); 1924 factory.EvictSurface();
1922 } 1925 }
1923 1926
1924 TEST_F(SurfaceAggregatorWithResourcesTest, TwoSurfaces) { 1927 TEST_F(SurfaceAggregatorWithResourcesTest, TwoSurfaces) {
1925 ResourceTrackingSurfaceFactoryClient client; 1928 ResourceTrackingSurfaceFactoryClient client;
1926 SurfaceFactory factory1(FrameSinkId(1, 1), &manager_, &client); 1929 SurfaceFactory factory1(FrameSinkId(1, 1), &manager_, &client);
1927 SurfaceFactory factory2(FrameSinkId(2, 2), &manager_, &client); 1930 SurfaceFactory factory2(FrameSinkId(2, 2), &manager_, &client);
1928 LocalFrameId local_frame1_id(7u, base::UnguessableToken::Create()); 1931 LocalSurfaceId local_frame1_id(7u, base::UnguessableToken::Create());
1929 SurfaceId surface1_id(factory1.frame_sink_id(), local_frame1_id); 1932 SurfaceId surface1_id(factory1.frame_sink_id(), local_frame1_id);
1930 1933
1931 LocalFrameId local_frame2_id(8u, base::UnguessableToken::Create()); 1934 LocalSurfaceId local_frame2_id(8u, base::UnguessableToken::Create());
1932 SurfaceId surface2_id(factory2.frame_sink_id(), local_frame2_id); 1935 SurfaceId surface2_id(factory2.frame_sink_id(), local_frame2_id);
1933 1936
1934 ResourceId ids[] = {11, 12, 13}; 1937 ResourceId ids[] = {11, 12, 13};
1935 SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(), 1938 SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(),
1936 &factory1, surface1_id); 1939 &factory1, surface1_id);
1937 ResourceId ids2[] = {14, 15, 16}; 1940 ResourceId ids2[] = {14, 15, 16};
1938 SubmitCompositorFrameWithResources(ids2, arraysize(ids2), true, SurfaceId(), 1941 SubmitCompositorFrameWithResources(ids2, arraysize(ids2), true, SurfaceId(),
1939 &factory2, surface2_id); 1942 &factory2, surface2_id);
1940 1943
1941 CompositorFrame frame = aggregator_->Aggregate(surface1_id); 1944 CompositorFrame frame = aggregator_->Aggregate(surface1_id);
(...skipping 21 matching lines...) Expand all
1963 } 1966 }
1964 1967
1965 // Ensure that aggregator completely ignores Surfaces that reference invalid 1968 // Ensure that aggregator completely ignores Surfaces that reference invalid
1966 // resources. 1969 // resources.
1967 TEST_F(SurfaceAggregatorWithResourcesTest, InvalidChildSurface) { 1970 TEST_F(SurfaceAggregatorWithResourcesTest, InvalidChildSurface) {
1968 ResourceTrackingSurfaceFactoryClient client; 1971 ResourceTrackingSurfaceFactoryClient client;
1969 SurfaceFactory root_factory(kArbitraryRootFrameSinkId, &manager_, &client); 1972 SurfaceFactory root_factory(kArbitraryRootFrameSinkId, &manager_, &client);
1970 SurfaceFactory middle_factory(kArbitraryMiddleFrameSinkId, &manager_, 1973 SurfaceFactory middle_factory(kArbitraryMiddleFrameSinkId, &manager_,
1971 &client); 1974 &client);
1972 SurfaceFactory child_factory(kArbitraryChildFrameSinkId, &manager_, &client); 1975 SurfaceFactory child_factory(kArbitraryChildFrameSinkId, &manager_, &client);
1973 LocalFrameId root_local_frame_id(7u, kArbitraryToken); 1976 LocalSurfaceId root_local_surface_id(7u, kArbitraryToken);
1974 SurfaceId root_surface_id(root_factory.frame_sink_id(), root_local_frame_id); 1977 SurfaceId root_surface_id(root_factory.frame_sink_id(),
1975 LocalFrameId middle_local_frame_id(8u, kArbitraryToken); 1978 root_local_surface_id);
1979 LocalSurfaceId middle_local_surface_id(8u, kArbitraryToken);
1976 SurfaceId middle_surface_id(middle_factory.frame_sink_id(), 1980 SurfaceId middle_surface_id(middle_factory.frame_sink_id(),
1977 middle_local_frame_id); 1981 middle_local_surface_id);
1978 LocalFrameId child_local_frame_id(9u, kArbitraryToken); 1982 LocalSurfaceId child_local_surface_id(9u, kArbitraryToken);
1979 SurfaceId child_surface_id(child_factory.frame_sink_id(), 1983 SurfaceId child_surface_id(child_factory.frame_sink_id(),
1980 child_local_frame_id); 1984 child_local_surface_id);
1981 1985
1982 ResourceId ids[] = {14, 15, 16}; 1986 ResourceId ids[] = {14, 15, 16};
1983 SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(), 1987 SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(),
1984 &child_factory, child_surface_id); 1988 &child_factory, child_surface_id);
1985 1989
1986 ResourceId ids2[] = {17, 18, 19}; 1990 ResourceId ids2[] = {17, 18, 19};
1987 SubmitCompositorFrameWithResources(ids2, arraysize(ids2), false, 1991 SubmitCompositorFrameWithResources(ids2, arraysize(ids2), false,
1988 child_surface_id, &middle_factory, 1992 child_surface_id, &middle_factory,
1989 middle_surface_id); 1993 middle_surface_id);
1990 1994
(...skipping 22 matching lines...) Expand all
2013 2017
2014 root_factory.EvictSurface(); 2018 root_factory.EvictSurface();
2015 middle_factory.EvictSurface(); 2019 middle_factory.EvictSurface();
2016 child_factory.EvictSurface(); 2020 child_factory.EvictSurface();
2017 } 2021 }
2018 2022
2019 TEST_F(SurfaceAggregatorWithResourcesTest, SecureOutputTexture) { 2023 TEST_F(SurfaceAggregatorWithResourcesTest, SecureOutputTexture) {
2020 ResourceTrackingSurfaceFactoryClient client; 2024 ResourceTrackingSurfaceFactoryClient client;
2021 SurfaceFactory factory1(FrameSinkId(1, 1), &manager_, &client); 2025 SurfaceFactory factory1(FrameSinkId(1, 1), &manager_, &client);
2022 SurfaceFactory factory2(FrameSinkId(2, 2), &manager_, &client); 2026 SurfaceFactory factory2(FrameSinkId(2, 2), &manager_, &client);
2023 LocalFrameId local_frame1_id(7u, base::UnguessableToken::Create()); 2027 LocalSurfaceId local_frame1_id(7u, base::UnguessableToken::Create());
2024 SurfaceId surface1_id(factory1.frame_sink_id(), local_frame1_id); 2028 SurfaceId surface1_id(factory1.frame_sink_id(), local_frame1_id);
2025 2029
2026 LocalFrameId local_frame2_id(8u, base::UnguessableToken::Create()); 2030 LocalSurfaceId local_frame2_id(8u, base::UnguessableToken::Create());
2027 SurfaceId surface2_id(factory2.frame_sink_id(), local_frame2_id); 2031 SurfaceId surface2_id(factory2.frame_sink_id(), local_frame2_id);
2028 2032
2029 ResourceId ids[] = {11, 12, 13}; 2033 ResourceId ids[] = {11, 12, 13};
2030 SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(), 2034 SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(),
2031 &factory1, surface1_id); 2035 &factory1, surface1_id);
2032 2036
2033 CompositorFrame frame = aggregator_->Aggregate(surface1_id); 2037 CompositorFrame frame = aggregator_->Aggregate(surface1_id);
2034 2038
2035 RenderPass* render_pass = frame.render_pass_list.back().get(); 2039 RenderPass* render_pass = frame.render_pass_list.back().get();
2036 2040
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
2078 // Output is insecure, so texture should be drawn. 2082 // Output is insecure, so texture should be drawn.
2079 EXPECT_EQ(DrawQuad::SOLID_COLOR, render_pass->quad_list.back()->material); 2083 EXPECT_EQ(DrawQuad::SOLID_COLOR, render_pass->quad_list.back()->material);
2080 2084
2081 factory1.EvictSurface(); 2085 factory1.EvictSurface();
2082 factory2.EvictSurface(); 2086 factory2.EvictSurface();
2083 } 2087 }
2084 2088
2085 } // namespace 2089 } // namespace
2086 } // namespace cc 2090 } // namespace cc
2087 2091
OLDNEW
« no previous file with comments | « cc/surfaces/surface_aggregator_perftest.cc ('k') | cc/surfaces/surface_factory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698