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

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

Issue 2383373002: Reduce SurfaceIdAllocator usage and tie SurfaceFactory to a single FrameSinkId (Closed)
Patch Set: Rebased Created 4 years, 2 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_factory_unittest.cc ('k') | cc/surfaces/surface_id_allocator.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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 <stddef.h> 5 #include <stddef.h>
6 6
7 #include "cc/output/compositor_frame.h" 7 #include "cc/output/compositor_frame.h"
8 #include "cc/surfaces/surface.h" 8 #include "cc/surfaces/surface.h"
9 #include "cc/surfaces/surface_factory.h" 9 #include "cc/surfaces/surface_factory.h"
10 #include "cc/surfaces/surface_factory_client.h" 10 #include "cc/surfaces/surface_factory_client.h"
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 56
57 } // namespace 57 } // namespace
58 58
59 using namespace test; 59 using namespace test;
60 60
61 // This test verifies that hit testing on a surface that does not exist does 61 // This test verifies that hit testing on a surface that does not exist does
62 // not crash. 62 // not crash.
63 TEST(SurfaceHittestTest, Hittest_BadCompositorFrameDoesNotCrash) { 63 TEST(SurfaceHittestTest, Hittest_BadCompositorFrameDoesNotCrash) {
64 SurfaceManager manager; 64 SurfaceManager manager;
65 EmptySurfaceFactoryClient client; 65 EmptySurfaceFactoryClient client;
66 SurfaceFactory factory(&manager, &client); 66 FrameSinkId root_frame_sink_id(kArbitraryFrameSinkId);
67 SurfaceFactory root_factory(root_frame_sink_id, &manager, &client);
67 68
68 // Creates a root surface. 69 // Creates a root surface.
69 gfx::Rect root_rect(300, 300); 70 gfx::Rect root_rect(300, 300);
70 RenderPass* root_pass = nullptr; 71 RenderPass* root_pass = nullptr;
71 CompositorFrame root_frame = CreateCompositorFrame(root_rect, &root_pass); 72 CompositorFrame root_frame = CreateCompositorFrame(root_rect, &root_pass);
72 73
73 // Add a reference to a non-existant child surface on the root surface. 74 // Add a reference to a non-existant child surface on the root surface.
74 SurfaceId child_surface_id(kArbitraryFrameSinkId, 0xdeadbeef, 0); 75 SurfaceId child_surface_id(kArbitraryFrameSinkId, 0xdeadbeef, 0);
75 gfx::Rect child_rect(200, 200); 76 gfx::Rect child_rect(200, 200);
76 CreateSurfaceDrawQuad(root_pass, 77 CreateSurfaceDrawQuad(root_pass,
77 gfx::Transform(), 78 gfx::Transform(),
78 root_rect, 79 root_rect,
79 child_rect, 80 child_rect,
80 child_surface_id); 81 child_surface_id);
81 82
82 // Submit the root frame. 83 // Submit the root frame.
83 SurfaceIdAllocator root_allocator(FrameSinkId(2, 2)); 84 SurfaceIdAllocator root_allocator(root_frame_sink_id);
84 SurfaceId root_surface_id = root_allocator.GenerateId(); 85 SurfaceId root_surface_id = root_allocator.GenerateId();
85 factory.Create(root_surface_id); 86 root_factory.Create(root_surface_id);
86 factory.SubmitCompositorFrame(root_surface_id, std::move(root_frame), 87 root_factory.SubmitCompositorFrame(root_surface_id, std::move(root_frame),
87 SurfaceFactory::DrawCallback()); 88 SurfaceFactory::DrawCallback());
88 89
89 { 90 {
90 SurfaceHittest hittest(nullptr, &manager); 91 SurfaceHittest hittest(nullptr, &manager);
91 // It is expected this test will complete without crashes. 92 // It is expected this test will complete without crashes.
92 gfx::Transform transform; 93 gfx::Transform transform;
93 EXPECT_EQ(root_surface_id, 94 EXPECT_EQ(root_surface_id,
94 hittest.GetTargetSurfaceAtPoint( 95 hittest.GetTargetSurfaceAtPoint(
95 root_surface_id, gfx::Point(100, 100), &transform)); 96 root_surface_id, gfx::Point(100, 100), &transform));
96 } 97 }
97 98
98 factory.Destroy(root_surface_id); 99 root_factory.Destroy(root_surface_id);
99 } 100 }
100 101
101 TEST(SurfaceHittestTest, Hittest_SingleSurface) { 102 TEST(SurfaceHittestTest, Hittest_SingleSurface) {
102 SurfaceManager manager; 103 SurfaceManager manager;
103 EmptySurfaceFactoryClient client; 104
104 SurfaceFactory factory(&manager, &client); 105 // Set up root FrameSink.
106 EmptySurfaceFactoryClient root_client;
107 FrameSinkId root_frame_sink_id(1, 1);
108 SurfaceFactory root_factory(root_frame_sink_id, &manager, &root_client);
105 109
106 // Creates a root surface. 110 // Creates a root surface.
107 gfx::Rect root_rect(300, 300); 111 gfx::Rect root_rect(300, 300);
108 RenderPass* root_pass = nullptr; 112 RenderPass* root_pass = nullptr;
109 CompositorFrame root_frame = CreateCompositorFrame(root_rect, &root_pass); 113 CompositorFrame root_frame = CreateCompositorFrame(root_rect, &root_pass);
110 114
111 // Submit the root frame. 115 // Submit the root frame.
112 SurfaceIdAllocator root_allocator(FrameSinkId(2, 2)); 116 SurfaceIdAllocator root_allocator(root_frame_sink_id);
113 SurfaceId root_surface_id = root_allocator.GenerateId(); 117 SurfaceId root_surface_id = root_allocator.GenerateId();
114 factory.Create(root_surface_id); 118 root_factory.Create(root_surface_id);
115 factory.SubmitCompositorFrame(root_surface_id, std::move(root_frame), 119 root_factory.SubmitCompositorFrame(root_surface_id, std::move(root_frame),
116 SurfaceFactory::DrawCallback()); 120 SurfaceFactory::DrawCallback());
117 TestCase tests[] = { 121 TestCase tests[] = {
118 { 122 {
119 root_surface_id, 123 root_surface_id,
120 gfx::Point(100, 100), 124 gfx::Point(100, 100),
121 root_surface_id, 125 root_surface_id,
122 gfx::Point(100, 100) 126 gfx::Point(100, 100)
123 }, 127 },
124 }; 128 };
125 129
126 RunTests(nullptr, &manager, tests, arraysize(tests)); 130 RunTests(nullptr, &manager, tests, arraysize(tests));
127 131
128 factory.Destroy(root_surface_id); 132 root_factory.Destroy(root_surface_id);
129 } 133 }
130 134
131 TEST(SurfaceHittestTest, Hittest_ChildSurface) { 135 TEST(SurfaceHittestTest, Hittest_ChildSurface) {
132 SurfaceManager manager; 136 SurfaceManager manager;
133 EmptySurfaceFactoryClient client; 137
134 SurfaceFactory factory(&manager, &client); 138 // Set up root FrameSink.
139 EmptySurfaceFactoryClient root_client;
140 FrameSinkId root_frame_sink_id(1, 1);
141 SurfaceFactory root_factory(root_frame_sink_id, &manager, &root_client);
142
143 // Set up child FrameSink.
144 EmptySurfaceFactoryClient child_client;
145 FrameSinkId child_frame_sink_id(2, 2);
146 SurfaceFactory child_factory(child_frame_sink_id, &manager, &child_client);
135 147
136 // Creates a root surface. 148 // Creates a root surface.
137 gfx::Rect root_rect(300, 300); 149 gfx::Rect root_rect(300, 300);
138 RenderPass* root_pass = nullptr; 150 RenderPass* root_pass = nullptr;
139 CompositorFrame root_frame = CreateCompositorFrame(root_rect, &root_pass); 151 CompositorFrame root_frame = CreateCompositorFrame(root_rect, &root_pass);
140 152
141 // Add a reference to the child surface on the root surface. 153 // Add a reference to the child surface on the root surface.
142 SurfaceIdAllocator child_allocator(FrameSinkId(3, 3)); 154 SurfaceIdAllocator child_allocator(child_frame_sink_id);
143 SurfaceId child_surface_id = child_allocator.GenerateId(); 155 SurfaceId child_surface_id = child_allocator.GenerateId();
144 gfx::Rect child_rect(200, 200); 156 gfx::Rect child_rect(200, 200);
145 CreateSurfaceDrawQuad(root_pass, 157 CreateSurfaceDrawQuad(root_pass,
146 gfx::Transform(1.0f, 0.0f, 0.0f, 50.0f, 158 gfx::Transform(1.0f, 0.0f, 0.0f, 50.0f,
147 0.0f, 1.0f, 0.0f, 50.0f, 159 0.0f, 1.0f, 0.0f, 50.0f,
148 0.0f, 0.0f, 1.0f, 0.0f, 160 0.0f, 0.0f, 1.0f, 0.0f,
149 0.0f, 0.0f, 0.0f, 1.0f), 161 0.0f, 0.0f, 0.0f, 1.0f),
150 root_rect, 162 root_rect,
151 child_rect, 163 child_rect,
152 child_surface_id); 164 child_surface_id);
153 165
154 // Submit the root frame. 166 // Submit the root frame.
155 SurfaceIdAllocator root_allocator(FrameSinkId(2, 2)); 167 SurfaceIdAllocator root_allocator(root_frame_sink_id);
156 SurfaceId root_surface_id = root_allocator.GenerateId(); 168 SurfaceId root_surface_id = root_allocator.GenerateId();
157 factory.Create(root_surface_id); 169 root_factory.Create(root_surface_id);
158 factory.SubmitCompositorFrame(root_surface_id, std::move(root_frame), 170 root_factory.SubmitCompositorFrame(root_surface_id, std::move(root_frame),
159 SurfaceFactory::DrawCallback()); 171 SurfaceFactory::DrawCallback());
160 172
161 // Creates a child surface. 173 // Creates a child surface.
162 RenderPass* child_pass = nullptr; 174 RenderPass* child_pass = nullptr;
163 CompositorFrame child_frame = CreateCompositorFrame(child_rect, &child_pass); 175 CompositorFrame child_frame = CreateCompositorFrame(child_rect, &child_pass);
164 176
165 // Add a solid quad in the child surface. 177 // Add a solid quad in the child surface.
166 gfx::Rect child_solid_quad_rect(100, 100); 178 gfx::Rect child_solid_quad_rect(100, 100);
167 CreateSolidColorDrawQuad( 179 CreateSolidColorDrawQuad(
168 child_pass, 180 child_pass,
169 gfx::Transform(1.0f, 0.0f, 0.0f, 50.0f, 181 gfx::Transform(1.0f, 0.0f, 0.0f, 50.0f,
170 0.0f, 1.0f, 0.0f, 50.0f, 182 0.0f, 1.0f, 0.0f, 50.0f,
171 0.0f, 0.0f, 1.0f, 0.0f, 183 0.0f, 0.0f, 1.0f, 0.0f,
172 0.0f, 0.0f, 0.0f, 1.0f), 184 0.0f, 0.0f, 0.0f, 1.0f),
173 root_rect, child_solid_quad_rect); 185 root_rect, child_solid_quad_rect);
174 186
175 // Submit the frame. 187 // Submit the frame.
176 factory.Create(child_surface_id); 188 child_factory.Create(child_surface_id);
177 factory.SubmitCompositorFrame(child_surface_id, std::move(child_frame), 189 child_factory.SubmitCompositorFrame(child_surface_id, std::move(child_frame),
178 SurfaceFactory::DrawCallback()); 190 SurfaceFactory::DrawCallback());
179 191
180 TestCase tests[] = { 192 TestCase tests[] = {
181 { 193 {
182 root_surface_id, 194 root_surface_id,
183 gfx::Point(10, 10), 195 gfx::Point(10, 10),
184 root_surface_id, 196 root_surface_id,
185 gfx::Point(10, 10) 197 gfx::Point(10, 10)
186 }, 198 },
187 { 199 {
188 root_surface_id, 200 root_surface_id,
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 // Submit another root frame, with a slightly perturbed child Surface. 233 // Submit another root frame, with a slightly perturbed child Surface.
222 root_frame = CreateCompositorFrame(root_rect, &root_pass); 234 root_frame = CreateCompositorFrame(root_rect, &root_pass);
223 CreateSurfaceDrawQuad(root_pass, 235 CreateSurfaceDrawQuad(root_pass,
224 gfx::Transform(1.0f, 0.0f, 0.0f, 75.0f, 236 gfx::Transform(1.0f, 0.0f, 0.0f, 75.0f,
225 0.0f, 1.0f, 0.0f, 75.0f, 237 0.0f, 1.0f, 0.0f, 75.0f,
226 0.0f, 0.0f, 1.0f, 0.0f, 238 0.0f, 0.0f, 1.0f, 0.0f,
227 0.0f, 0.0f, 0.0f, 1.0f), 239 0.0f, 0.0f, 0.0f, 1.0f),
228 root_rect, 240 root_rect,
229 child_rect, 241 child_rect,
230 child_surface_id); 242 child_surface_id);
231 factory.SubmitCompositorFrame(root_surface_id, std::move(root_frame), 243 root_factory.SubmitCompositorFrame(root_surface_id, std::move(root_frame),
232 SurfaceFactory::DrawCallback()); 244 SurfaceFactory::DrawCallback());
233 245
234 // Verify that point (100, 100) no longer falls on the child surface. 246 // Verify that point (100, 100) no longer falls on the child surface.
235 // Verify that the transform to the child surface's space has also shifted. 247 // Verify that the transform to the child surface's space has also shifted.
236 { 248 {
237 SurfaceHittest hittest(nullptr, &manager); 249 SurfaceHittest hittest(nullptr, &manager);
238 250
239 gfx::Point point(100, 100); 251 gfx::Point point(100, 100);
240 gfx::Transform transform; 252 gfx::Transform transform;
241 EXPECT_EQ(root_surface_id, 253 EXPECT_EQ(root_surface_id,
242 hittest.GetTargetSurfaceAtPoint(root_surface_id, point, 254 hittest.GetTargetSurfaceAtPoint(root_surface_id, point,
243 &transform)); 255 &transform));
244 transform.TransformPoint(&point); 256 transform.TransformPoint(&point);
245 EXPECT_EQ(gfx::Point(100, 100), point); 257 EXPECT_EQ(gfx::Point(100, 100), point);
246 258
247 gfx::Point point_in_target_space(100, 100); 259 gfx::Point point_in_target_space(100, 100);
248 gfx::Transform target_transform; 260 gfx::Transform target_transform;
249 EXPECT_TRUE(hittest.GetTransformToTargetSurface( 261 EXPECT_TRUE(hittest.GetTransformToTargetSurface(
250 root_surface_id, child_surface_id, &target_transform)); 262 root_surface_id, child_surface_id, &target_transform));
251 target_transform.TransformPoint(&point_in_target_space); 263 target_transform.TransformPoint(&point_in_target_space);
252 EXPECT_NE(transform, target_transform); 264 EXPECT_NE(transform, target_transform);
253 EXPECT_EQ(gfx::Point(25, 25), point_in_target_space); 265 EXPECT_EQ(gfx::Point(25, 25), point_in_target_space);
254 } 266 }
255 267
256 factory.Destroy(root_surface_id); 268 root_factory.Destroy(root_surface_id);
257 factory.Destroy(child_surface_id); 269 child_factory.Destroy(child_surface_id);
258 } 270 }
259 271
260 // This test verifies that hit testing will progress to the next quad if it 272 // This test verifies that hit testing will progress to the next quad if it
261 // encounters an invalid RenderPassDrawQuad for whatever reason. 273 // encounters an invalid RenderPassDrawQuad for whatever reason.
262 TEST(SurfaceHittestTest, Hittest_InvalidRenderPassDrawQuad) { 274 TEST(SurfaceHittestTest, Hittest_InvalidRenderPassDrawQuad) {
263 SurfaceManager manager; 275 SurfaceManager manager;
264 EmptySurfaceFactoryClient client; 276
265 SurfaceFactory factory(&manager, &client); 277 // Set up root FrameSink.
278 EmptySurfaceFactoryClient root_client;
279 FrameSinkId root_frame_sink_id(1, 1);
280 SurfaceFactory root_factory(root_frame_sink_id, &manager, &root_client);
281
282 // Set up child FrameSink.
283 EmptySurfaceFactoryClient child_client;
284 FrameSinkId child_frame_sink_id(2, 2);
285 SurfaceFactory child_factory(child_frame_sink_id, &manager, &child_client);
266 286
267 // Creates a root surface. 287 // Creates a root surface.
268 gfx::Rect root_rect(300, 300); 288 gfx::Rect root_rect(300, 300);
269 RenderPass* root_pass = nullptr; 289 RenderPass* root_pass = nullptr;
270 CompositorFrame root_frame = CreateCompositorFrame(root_rect, &root_pass); 290 CompositorFrame root_frame = CreateCompositorFrame(root_rect, &root_pass);
271 291
272 // Create a RenderPassDrawQuad to a non-existant RenderPass. 292 // Create a RenderPassDrawQuad to a non-existant RenderPass.
273 CreateRenderPassDrawQuad(root_pass, 293 CreateRenderPassDrawQuad(root_pass,
274 gfx::Transform(), 294 gfx::Transform(),
275 root_rect, 295 root_rect,
276 root_rect, 296 root_rect,
277 RenderPassId(1337, 1337)); 297 RenderPassId(1337, 1337));
278 298
279 // Add a reference to the child surface on the root surface. 299 // Add a reference to the child surface on the root surface.
280 SurfaceIdAllocator child_allocator(FrameSinkId(3, 3)); 300 SurfaceIdAllocator child_allocator(child_frame_sink_id);
281 SurfaceId child_surface_id = child_allocator.GenerateId(); 301 SurfaceId child_surface_id = child_allocator.GenerateId();
282 gfx::Rect child_rect(200, 200); 302 gfx::Rect child_rect(200, 200);
283 CreateSurfaceDrawQuad(root_pass, 303 CreateSurfaceDrawQuad(root_pass,
284 gfx::Transform(1.0f, 0.0f, 0.0f, 50.0f, 304 gfx::Transform(1.0f, 0.0f, 0.0f, 50.0f,
285 0.0f, 1.0f, 0.0f, 50.0f, 305 0.0f, 1.0f, 0.0f, 50.0f,
286 0.0f, 0.0f, 1.0f, 0.0f, 306 0.0f, 0.0f, 1.0f, 0.0f,
287 0.0f, 0.0f, 0.0f, 1.0f), 307 0.0f, 0.0f, 0.0f, 1.0f),
288 root_rect, 308 root_rect,
289 child_rect, 309 child_rect,
290 child_surface_id); 310 child_surface_id);
291 311
292 // Submit the root frame. 312 // Submit the root frame.
293 SurfaceIdAllocator root_allocator(FrameSinkId(2, 2)); 313 SurfaceIdAllocator root_allocator(root_frame_sink_id);
294 SurfaceId root_surface_id = root_allocator.GenerateId(); 314 SurfaceId root_surface_id = root_allocator.GenerateId();
295 factory.Create(root_surface_id); 315 root_factory.Create(root_surface_id);
296 factory.SubmitCompositorFrame(root_surface_id, std::move(root_frame), 316 root_factory.SubmitCompositorFrame(root_surface_id, std::move(root_frame),
297 SurfaceFactory::DrawCallback()); 317 SurfaceFactory::DrawCallback());
298 318
299 // Creates a child surface. 319 // Creates a child surface.
300 RenderPass* child_pass = nullptr; 320 RenderPass* child_pass = nullptr;
301 CompositorFrame child_frame = CreateCompositorFrame(child_rect, &child_pass); 321 CompositorFrame child_frame = CreateCompositorFrame(child_rect, &child_pass);
302 322
303 // Add a solid quad in the child surface. 323 // Add a solid quad in the child surface.
304 gfx::Rect child_solid_quad_rect(100, 100); 324 gfx::Rect child_solid_quad_rect(100, 100);
305 CreateSolidColorDrawQuad(child_pass, 325 CreateSolidColorDrawQuad(child_pass,
306 gfx::Transform(1.0f, 0.0f, 0.0f, 50.0f, 326 gfx::Transform(1.0f, 0.0f, 0.0f, 50.0f,
307 0.0f, 1.0f, 0.0f, 50.0f, 327 0.0f, 1.0f, 0.0f, 50.0f,
308 0.0f, 0.0f, 1.0f, 0.0f, 328 0.0f, 0.0f, 1.0f, 0.0f,
309 0.0f, 0.0f, 0.0f, 1.0f), 329 0.0f, 0.0f, 0.0f, 1.0f),
310 root_rect, 330 root_rect,
311 child_solid_quad_rect); 331 child_solid_quad_rect);
312 332
313 // Submit the frame. 333 // Submit the frame.
314 factory.Create(child_surface_id); 334 child_factory.Create(child_surface_id);
315 factory.SubmitCompositorFrame(child_surface_id, std::move(child_frame), 335 child_factory.SubmitCompositorFrame(child_surface_id, std::move(child_frame),
316 SurfaceFactory::DrawCallback()); 336 SurfaceFactory::DrawCallback());
317 337
318 TestCase tests[] = { 338 TestCase tests[] = {
319 { 339 {
320 root_surface_id, 340 root_surface_id,
321 gfx::Point(10, 10), 341 gfx::Point(10, 10),
322 root_surface_id, 342 root_surface_id,
323 gfx::Point(10, 10) 343 gfx::Point(10, 10)
324 }, 344 },
325 { 345 {
326 root_surface_id, 346 root_surface_id,
(...skipping 22 matching lines...) Expand all
349 { 369 {
350 root_surface_id, 370 root_surface_id,
351 gfx::Point(290, 290), 371 gfx::Point(290, 290),
352 root_surface_id, 372 root_surface_id,
353 gfx::Point(290, 290) 373 gfx::Point(290, 290)
354 } 374 }
355 }; 375 };
356 376
357 RunTests(nullptr, &manager, tests, arraysize(tests)); 377 RunTests(nullptr, &manager, tests, arraysize(tests));
358 378
359 factory.Destroy(root_surface_id); 379 root_factory.Destroy(root_surface_id);
360 factory.Destroy(child_surface_id); 380 child_factory.Destroy(child_surface_id);
361 } 381 }
362 382
363 TEST(SurfaceHittestTest, Hittest_RenderPassDrawQuad) { 383 TEST(SurfaceHittestTest, Hittest_RenderPassDrawQuad) {
364 SurfaceManager manager; 384 SurfaceManager manager;
365 EmptySurfaceFactoryClient client; 385 EmptySurfaceFactoryClient client;
366 SurfaceFactory factory(&manager, &client); 386 SurfaceFactory factory(kArbitraryFrameSinkId, &manager, &client);
367 387
368 // Create a CompostiorFrame with two RenderPasses. 388 // Create a CompostiorFrame with two RenderPasses.
369 gfx::Rect root_rect(300, 300); 389 gfx::Rect root_rect(300, 300);
370 RenderPassList render_pass_list; 390 RenderPassList render_pass_list;
371 391
372 // Create a child RenderPass. 392 // Create a child RenderPass.
373 RenderPassId child_render_pass_id(1, 3); 393 RenderPassId child_render_pass_id(1, 3);
374 gfx::Transform transform_to_root_target(1.0f, 0.0f, 0.0f, 50.0f, 394 gfx::Transform transform_to_root_target(1.0f, 0.0f, 0.0f, 50.0f,
375 0.0f, 1.0f, 0.0f, 50.0f, 395 0.0f, 1.0f, 0.0f, 50.0f,
376 0.0f, 0.0f, 1.0f, 0.0f, 396 0.0f, 0.0f, 1.0f, 0.0f,
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
458 } 478 }
459 }; 479 };
460 480
461 RunTests(nullptr, &manager, tests, arraysize(tests)); 481 RunTests(nullptr, &manager, tests, arraysize(tests));
462 482
463 factory.Destroy(root_surface_id); 483 factory.Destroy(root_surface_id);
464 } 484 }
465 485
466 TEST(SurfaceHittestTest, Hittest_SingleSurface_WithInsetsDelegate) { 486 TEST(SurfaceHittestTest, Hittest_SingleSurface_WithInsetsDelegate) {
467 SurfaceManager manager; 487 SurfaceManager manager;
468 EmptySurfaceFactoryClient client; 488
469 SurfaceFactory factory(&manager, &client); 489 // Set up root FrameSink.
490 EmptySurfaceFactoryClient root_client;
491 FrameSinkId root_frame_sink_id(1, 1);
492 SurfaceFactory root_factory(root_frame_sink_id, &manager, &root_client);
493
494 // Set up child FrameSink.
495 EmptySurfaceFactoryClient child_client;
496 FrameSinkId child_frame_sink_id(2, 2);
497 SurfaceFactory child_factory(child_frame_sink_id, &manager, &child_client);
470 498
471 // Creates a root surface. 499 // Creates a root surface.
472 gfx::Rect root_rect(300, 300); 500 gfx::Rect root_rect(300, 300);
473 RenderPass* root_pass = nullptr; 501 RenderPass* root_pass = nullptr;
474 CompositorFrame root_frame = CreateCompositorFrame(root_rect, &root_pass); 502 CompositorFrame root_frame = CreateCompositorFrame(root_rect, &root_pass);
475 503
476 // Add a reference to the child surface on the root surface. 504 // Add a reference to the child surface on the root surface.
477 SurfaceIdAllocator child_allocator(FrameSinkId(3, 3)); 505 SurfaceIdAllocator child_allocator(child_frame_sink_id);
478 SurfaceId child_surface_id = child_allocator.GenerateId(); 506 SurfaceId child_surface_id = child_allocator.GenerateId();
479 gfx::Rect child_rect(200, 200); 507 gfx::Rect child_rect(200, 200);
480 CreateSurfaceDrawQuad( 508 CreateSurfaceDrawQuad(
481 root_pass, 509 root_pass,
482 gfx::Transform(1.0f, 0.0f, 0.0f, 50.0f, 510 gfx::Transform(1.0f, 0.0f, 0.0f, 50.0f,
483 0.0f, 1.0f, 0.0f, 50.0f, 511 0.0f, 1.0f, 0.0f, 50.0f,
484 0.0f, 0.0f, 1.0f, 0.0f, 512 0.0f, 0.0f, 1.0f, 0.0f,
485 0.0f, 0.0f, 0.0f, 1.0f), 513 0.0f, 0.0f, 0.0f, 1.0f),
486 root_rect, child_rect, child_surface_id); 514 root_rect, child_rect, child_surface_id);
487 515
488 // Submit the root frame. 516 // Submit the root frame.
489 SurfaceIdAllocator root_allocator(FrameSinkId(2, 2)); 517 SurfaceIdAllocator root_allocator(root_frame_sink_id);
490 SurfaceId root_surface_id = root_allocator.GenerateId(); 518 SurfaceId root_surface_id = root_allocator.GenerateId();
491 factory.Create(root_surface_id); 519 root_factory.Create(root_surface_id);
492 factory.SubmitCompositorFrame(root_surface_id, std::move(root_frame), 520 root_factory.SubmitCompositorFrame(root_surface_id, std::move(root_frame),
493 SurfaceFactory::DrawCallback()); 521 SurfaceFactory::DrawCallback());
494 522
495 // Creates a child surface. 523 // Creates a child surface.
496 RenderPass* child_pass = nullptr; 524 RenderPass* child_pass = nullptr;
497 CompositorFrame child_frame = CreateCompositorFrame(child_rect, &child_pass); 525 CompositorFrame child_frame = CreateCompositorFrame(child_rect, &child_pass);
498 526
499 // Add a solid quad in the child surface. 527 // Add a solid quad in the child surface.
500 gfx::Rect child_solid_quad_rect(190, 190); 528 gfx::Rect child_solid_quad_rect(190, 190);
501 CreateSolidColorDrawQuad( 529 CreateSolidColorDrawQuad(
502 child_pass, 530 child_pass,
503 gfx::Transform(1.0f, 0.0f, 0.0f, 5.0f, 0.0f, 1.0f, 0.0f, 5.0f, 0.0f, 0.0f, 531 gfx::Transform(1.0f, 0.0f, 0.0f, 5.0f, 0.0f, 1.0f, 0.0f, 5.0f, 0.0f, 0.0f,
504 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f), 532 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f),
505 root_rect, child_solid_quad_rect); 533 root_rect, child_solid_quad_rect);
506 534
507 // Submit the frame. 535 // Submit the frame.
508 factory.Create(child_surface_id); 536 child_factory.Create(child_surface_id);
509 factory.SubmitCompositorFrame(child_surface_id, std::move(child_frame), 537 child_factory.SubmitCompositorFrame(child_surface_id, std::move(child_frame),
510 SurfaceFactory::DrawCallback()); 538 SurfaceFactory::DrawCallback());
511 539
512 TestCase test_expectations_without_insets[] = { 540 TestCase test_expectations_without_insets[] = {
513 {root_surface_id, gfx::Point(55, 55), child_surface_id, gfx::Point(5, 5)}, 541 {root_surface_id, gfx::Point(55, 55), child_surface_id, gfx::Point(5, 5)},
514 {root_surface_id, gfx::Point(60, 60), child_surface_id, 542 {root_surface_id, gfx::Point(60, 60), child_surface_id,
515 gfx::Point(10, 10)}, 543 gfx::Point(10, 10)},
516 {root_surface_id, gfx::Point(239, 239), child_surface_id, 544 {root_surface_id, gfx::Point(239, 239), child_surface_id,
517 gfx::Point(189, 189)}, 545 gfx::Point(189, 189)},
518 {root_surface_id, gfx::Point(244, 244), child_surface_id, 546 {root_surface_id, gfx::Point(244, 244), child_surface_id,
519 gfx::Point(194, 194)}, 547 gfx::Point(194, 194)},
520 {root_surface_id, gfx::Point(50, 50), root_surface_id, 548 {root_surface_id, gfx::Point(50, 50), root_surface_id,
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
579 TestSurfaceHittestDelegate accept_delegate; 607 TestSurfaceHittestDelegate accept_delegate;
580 accept_delegate.AddInsetsForAcceptSurface(child_surface_id, 608 accept_delegate.AddInsetsForAcceptSurface(child_surface_id,
581 gfx::Insets(5, 5, 5, 5)); 609 gfx::Insets(5, 5, 5, 5));
582 RunTests(&accept_delegate, &manager, test_expectations_with_accept_insets, 610 RunTests(&accept_delegate, &manager, test_expectations_with_accept_insets,
583 arraysize(test_expectations_with_accept_insets)); 611 arraysize(test_expectations_with_accept_insets));
584 612
585 // Verify that insets have affected hit targeting. 613 // Verify that insets have affected hit targeting.
586 EXPECT_EQ(0, accept_delegate.reject_target_overrides()); 614 EXPECT_EQ(0, accept_delegate.reject_target_overrides());
587 EXPECT_EQ(2, accept_delegate.accept_target_overrides()); 615 EXPECT_EQ(2, accept_delegate.accept_target_overrides());
588 616
589 factory.Destroy(root_surface_id); 617 root_factory.Destroy(root_surface_id);
618 child_factory.Destroy(child_surface_id);
590 } 619 }
591 620
592 } // namespace cc 621 } // namespace cc
OLDNEW
« no previous file with comments | « cc/surfaces/surface_factory_unittest.cc ('k') | cc/surfaces/surface_id_allocator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698