| OLD | NEW |
| 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 "cc/output/compositor_frame.h" | 5 #include "cc/output/compositor_frame.h" |
| 6 #include "cc/surfaces/surface.h" | 6 #include "cc/surfaces/surface.h" |
| 7 #include "cc/surfaces/surface_factory.h" | 7 #include "cc/surfaces/surface_factory.h" |
| 8 #include "cc/surfaces/surface_factory_client.h" | 8 #include "cc/surfaces/surface_factory_client.h" |
| 9 #include "cc/surfaces/surface_hittest.h" | 9 #include "cc/surfaces/surface_hittest.h" |
| 10 #include "cc/surfaces/surface_id_allocator.h" | 10 #include "cc/surfaces/surface_id_allocator.h" |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 CreateSurfaceDrawQuad(root_pass, | 72 CreateSurfaceDrawQuad(root_pass, |
| 73 gfx::Transform(), | 73 gfx::Transform(), |
| 74 root_rect, | 74 root_rect, |
| 75 child_rect, | 75 child_rect, |
| 76 child_surface_id); | 76 child_surface_id); |
| 77 | 77 |
| 78 // Submit the root frame. | 78 // Submit the root frame. |
| 79 SurfaceIdAllocator root_allocator(2); | 79 SurfaceIdAllocator root_allocator(2); |
| 80 SurfaceId root_surface_id = root_allocator.GenerateId(); | 80 SurfaceId root_surface_id = root_allocator.GenerateId(); |
| 81 factory.Create(root_surface_id); | 81 factory.Create(root_surface_id); |
| 82 factory.SubmitCompositorFrame(root_surface_id, root_frame.Pass(), | 82 factory.SubmitCompositorFrame(root_surface_id, std::move(root_frame), |
| 83 SurfaceFactory::DrawCallback()); | 83 SurfaceFactory::DrawCallback()); |
| 84 | 84 |
| 85 { | 85 { |
| 86 SurfaceHittest hittest(&manager); | 86 SurfaceHittest hittest(&manager); |
| 87 // It is expected this test will complete without crashes. | 87 // It is expected this test will complete without crashes. |
| 88 gfx::Transform transform; | 88 gfx::Transform transform; |
| 89 EXPECT_EQ(root_surface_id, | 89 EXPECT_EQ(root_surface_id, |
| 90 hittest.GetTargetSurfaceAtPoint( | 90 hittest.GetTargetSurfaceAtPoint( |
| 91 root_surface_id, gfx::Point(100, 100), &transform)); | 91 root_surface_id, gfx::Point(100, 100), &transform)); |
| 92 } | 92 } |
| 93 | 93 |
| 94 factory.Destroy(root_surface_id); | 94 factory.Destroy(root_surface_id); |
| 95 } | 95 } |
| 96 | 96 |
| 97 TEST(SurfaceHittestTest, Hittest_SingleSurface) { | 97 TEST(SurfaceHittestTest, Hittest_SingleSurface) { |
| 98 SurfaceManager manager; | 98 SurfaceManager manager; |
| 99 EmptySurfaceFactoryClient client; | 99 EmptySurfaceFactoryClient client; |
| 100 SurfaceFactory factory(&manager, &client); | 100 SurfaceFactory factory(&manager, &client); |
| 101 | 101 |
| 102 // Creates a root surface. | 102 // Creates a root surface. |
| 103 gfx::Rect root_rect(300, 300); | 103 gfx::Rect root_rect(300, 300); |
| 104 RenderPass* root_pass = nullptr; | 104 RenderPass* root_pass = nullptr; |
| 105 scoped_ptr<CompositorFrame> root_frame = | 105 scoped_ptr<CompositorFrame> root_frame = |
| 106 CreateCompositorFrame(root_rect, &root_pass); | 106 CreateCompositorFrame(root_rect, &root_pass); |
| 107 | 107 |
| 108 // Submit the root frame. | 108 // Submit the root frame. |
| 109 SurfaceIdAllocator root_allocator(2); | 109 SurfaceIdAllocator root_allocator(2); |
| 110 SurfaceId root_surface_id = root_allocator.GenerateId(); | 110 SurfaceId root_surface_id = root_allocator.GenerateId(); |
| 111 factory.Create(root_surface_id); | 111 factory.Create(root_surface_id); |
| 112 factory.SubmitCompositorFrame(root_surface_id, root_frame.Pass(), | 112 factory.SubmitCompositorFrame(root_surface_id, std::move(root_frame), |
| 113 SurfaceFactory::DrawCallback()); | 113 SurfaceFactory::DrawCallback()); |
| 114 TestCase tests[] = { | 114 TestCase tests[] = { |
| 115 { | 115 { |
| 116 root_surface_id, | 116 root_surface_id, |
| 117 gfx::Point(100, 100), | 117 gfx::Point(100, 100), |
| 118 root_surface_id, | 118 root_surface_id, |
| 119 gfx::Point(100, 100) | 119 gfx::Point(100, 100) |
| 120 }, | 120 }, |
| 121 }; | 121 }; |
| 122 | 122 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 146 0.0f, 0.0f, 1.0f, 0.0f, | 146 0.0f, 0.0f, 1.0f, 0.0f, |
| 147 0.0f, 0.0f, 0.0f, 1.0f), | 147 0.0f, 0.0f, 0.0f, 1.0f), |
| 148 root_rect, | 148 root_rect, |
| 149 child_rect, | 149 child_rect, |
| 150 child_surface_id); | 150 child_surface_id); |
| 151 | 151 |
| 152 // Submit the root frame. | 152 // Submit the root frame. |
| 153 SurfaceIdAllocator root_allocator(2); | 153 SurfaceIdAllocator root_allocator(2); |
| 154 SurfaceId root_surface_id = root_allocator.GenerateId(); | 154 SurfaceId root_surface_id = root_allocator.GenerateId(); |
| 155 factory.Create(root_surface_id); | 155 factory.Create(root_surface_id); |
| 156 factory.SubmitCompositorFrame(root_surface_id, root_frame.Pass(), | 156 factory.SubmitCompositorFrame(root_surface_id, std::move(root_frame), |
| 157 SurfaceFactory::DrawCallback()); | 157 SurfaceFactory::DrawCallback()); |
| 158 | 158 |
| 159 // Creates a child surface. | 159 // Creates a child surface. |
| 160 RenderPass* child_pass = nullptr; | 160 RenderPass* child_pass = nullptr; |
| 161 scoped_ptr<CompositorFrame> child_frame = | 161 scoped_ptr<CompositorFrame> child_frame = |
| 162 CreateCompositorFrame(child_rect, &child_pass); | 162 CreateCompositorFrame(child_rect, &child_pass); |
| 163 | 163 |
| 164 // Add a solid quad in the child surface. | 164 // Add a solid quad in the child surface. |
| 165 gfx::Rect child_solid_quad_rect(100, 100); | 165 gfx::Rect child_solid_quad_rect(100, 100); |
| 166 CreateSolidColorDrawQuad( | 166 CreateSolidColorDrawQuad( |
| 167 child_pass, | 167 child_pass, |
| 168 gfx::Transform(1.0f, 0.0f, 0.0f, 50.0f, | 168 gfx::Transform(1.0f, 0.0f, 0.0f, 50.0f, |
| 169 0.0f, 1.0f, 0.0f, 50.0f, | 169 0.0f, 1.0f, 0.0f, 50.0f, |
| 170 0.0f, 0.0f, 1.0f, 0.0f, | 170 0.0f, 0.0f, 1.0f, 0.0f, |
| 171 0.0f, 0.0f, 0.0f, 1.0f), | 171 0.0f, 0.0f, 0.0f, 1.0f), |
| 172 root_rect, child_solid_quad_rect); | 172 root_rect, child_solid_quad_rect); |
| 173 | 173 |
| 174 // Submit the frame. | 174 // Submit the frame. |
| 175 factory.Create(child_surface_id); | 175 factory.Create(child_surface_id); |
| 176 factory.SubmitCompositorFrame(child_surface_id, child_frame.Pass(), | 176 factory.SubmitCompositorFrame(child_surface_id, std::move(child_frame), |
| 177 SurfaceFactory::DrawCallback()); | 177 SurfaceFactory::DrawCallback()); |
| 178 | 178 |
| 179 TestCase tests[] = { | 179 TestCase tests[] = { |
| 180 { | 180 { |
| 181 root_surface_id, | 181 root_surface_id, |
| 182 gfx::Point(10, 10), | 182 gfx::Point(10, 10), |
| 183 root_surface_id, | 183 root_surface_id, |
| 184 gfx::Point(10, 10) | 184 gfx::Point(10, 10) |
| 185 }, | 185 }, |
| 186 { | 186 { |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 220 // Submit another root frame, with a slightly perturbed child Surface. | 220 // Submit another root frame, with a slightly perturbed child Surface. |
| 221 root_frame = CreateCompositorFrame(root_rect, &root_pass); | 221 root_frame = CreateCompositorFrame(root_rect, &root_pass); |
| 222 CreateSurfaceDrawQuad(root_pass, | 222 CreateSurfaceDrawQuad(root_pass, |
| 223 gfx::Transform(1.0f, 0.0f, 0.0f, 75.0f, | 223 gfx::Transform(1.0f, 0.0f, 0.0f, 75.0f, |
| 224 0.0f, 1.0f, 0.0f, 75.0f, | 224 0.0f, 1.0f, 0.0f, 75.0f, |
| 225 0.0f, 0.0f, 1.0f, 0.0f, | 225 0.0f, 0.0f, 1.0f, 0.0f, |
| 226 0.0f, 0.0f, 0.0f, 1.0f), | 226 0.0f, 0.0f, 0.0f, 1.0f), |
| 227 root_rect, | 227 root_rect, |
| 228 child_rect, | 228 child_rect, |
| 229 child_surface_id); | 229 child_surface_id); |
| 230 factory.SubmitCompositorFrame(root_surface_id, root_frame.Pass(), | 230 factory.SubmitCompositorFrame(root_surface_id, std::move(root_frame), |
| 231 SurfaceFactory::DrawCallback()); | 231 SurfaceFactory::DrawCallback()); |
| 232 | 232 |
| 233 // Verify that point (100, 100) no longer falls on the child surface. | 233 // Verify that point (100, 100) no longer falls on the child surface. |
| 234 // Verify that the transform to the child surface's space has also shifted. | 234 // Verify that the transform to the child surface's space has also shifted. |
| 235 { | 235 { |
| 236 SurfaceHittest hittest(&manager); | 236 SurfaceHittest hittest(&manager); |
| 237 | 237 |
| 238 gfx::Point point(100, 100); | 238 gfx::Point point(100, 100); |
| 239 gfx::Transform transform; | 239 gfx::Transform transform; |
| 240 EXPECT_EQ(root_surface_id, | 240 EXPECT_EQ(root_surface_id, |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 286 0.0f, 0.0f, 1.0f, 0.0f, | 286 0.0f, 0.0f, 1.0f, 0.0f, |
| 287 0.0f, 0.0f, 0.0f, 1.0f), | 287 0.0f, 0.0f, 0.0f, 1.0f), |
| 288 root_rect, | 288 root_rect, |
| 289 child_rect, | 289 child_rect, |
| 290 child_surface_id); | 290 child_surface_id); |
| 291 | 291 |
| 292 // Submit the root frame. | 292 // Submit the root frame. |
| 293 SurfaceIdAllocator root_allocator(2); | 293 SurfaceIdAllocator root_allocator(2); |
| 294 SurfaceId root_surface_id = root_allocator.GenerateId(); | 294 SurfaceId root_surface_id = root_allocator.GenerateId(); |
| 295 factory.Create(root_surface_id); | 295 factory.Create(root_surface_id); |
| 296 factory.SubmitCompositorFrame(root_surface_id, root_frame.Pass(), | 296 factory.SubmitCompositorFrame(root_surface_id, std::move(root_frame), |
| 297 SurfaceFactory::DrawCallback()); | 297 SurfaceFactory::DrawCallback()); |
| 298 | 298 |
| 299 // Creates a child surface. | 299 // Creates a child surface. |
| 300 RenderPass* child_pass = nullptr; | 300 RenderPass* child_pass = nullptr; |
| 301 scoped_ptr<CompositorFrame> child_frame = | 301 scoped_ptr<CompositorFrame> child_frame = |
| 302 CreateCompositorFrame(child_rect, &child_pass); | 302 CreateCompositorFrame(child_rect, &child_pass); |
| 303 | 303 |
| 304 // Add a solid quad in the child surface. | 304 // Add a solid quad in the child surface. |
| 305 gfx::Rect child_solid_quad_rect(100, 100); | 305 gfx::Rect child_solid_quad_rect(100, 100); |
| 306 CreateSolidColorDrawQuad(child_pass, | 306 CreateSolidColorDrawQuad(child_pass, |
| 307 gfx::Transform(1.0f, 0.0f, 0.0f, 50.0f, | 307 gfx::Transform(1.0f, 0.0f, 0.0f, 50.0f, |
| 308 0.0f, 1.0f, 0.0f, 50.0f, | 308 0.0f, 1.0f, 0.0f, 50.0f, |
| 309 0.0f, 0.0f, 1.0f, 0.0f, | 309 0.0f, 0.0f, 1.0f, 0.0f, |
| 310 0.0f, 0.0f, 0.0f, 1.0f), | 310 0.0f, 0.0f, 0.0f, 1.0f), |
| 311 root_rect, | 311 root_rect, |
| 312 child_solid_quad_rect); | 312 child_solid_quad_rect); |
| 313 | 313 |
| 314 // Submit the frame. | 314 // Submit the frame. |
| 315 factory.Create(child_surface_id); | 315 factory.Create(child_surface_id); |
| 316 factory.SubmitCompositorFrame(child_surface_id, child_frame.Pass(), | 316 factory.SubmitCompositorFrame(child_surface_id, std::move(child_frame), |
| 317 SurfaceFactory::DrawCallback()); | 317 SurfaceFactory::DrawCallback()); |
| 318 | 318 |
| 319 TestCase tests[] = { | 319 TestCase tests[] = { |
| 320 { | 320 { |
| 321 root_surface_id, | 321 root_surface_id, |
| 322 gfx::Point(10, 10), | 322 gfx::Point(10, 10), |
| 323 root_surface_id, | 323 root_surface_id, |
| 324 gfx::Point(10, 10) | 324 gfx::Point(10, 10) |
| 325 }, | 325 }, |
| 326 { | 326 { |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 405 gfx::Rect child_solid_quad_rect(100, 100); | 405 gfx::Rect child_solid_quad_rect(100, 100); |
| 406 CreateSolidColorDrawQuad(child_render_pass, | 406 CreateSolidColorDrawQuad(child_render_pass, |
| 407 gfx::Transform(), | 407 gfx::Transform(), |
| 408 gfx::Rect(100, 100), | 408 gfx::Rect(100, 100), |
| 409 child_solid_quad_rect); | 409 child_solid_quad_rect); |
| 410 | 410 |
| 411 // Submit the root frame. | 411 // Submit the root frame. |
| 412 SurfaceIdAllocator root_allocator(1); | 412 SurfaceIdAllocator root_allocator(1); |
| 413 SurfaceId root_surface_id = root_allocator.GenerateId(); | 413 SurfaceId root_surface_id = root_allocator.GenerateId(); |
| 414 factory.Create(root_surface_id); | 414 factory.Create(root_surface_id); |
| 415 factory.SubmitCompositorFrame(root_surface_id, root_frame.Pass(), | 415 factory.SubmitCompositorFrame(root_surface_id, std::move(root_frame), |
| 416 SurfaceFactory::DrawCallback()); | 416 SurfaceFactory::DrawCallback()); |
| 417 | 417 |
| 418 TestCase tests[] = { | 418 TestCase tests[] = { |
| 419 // These tests just miss the RenderPassDrawQuad. | 419 // These tests just miss the RenderPassDrawQuad. |
| 420 { | 420 { |
| 421 root_surface_id, | 421 root_surface_id, |
| 422 gfx::Point(49, 49), | 422 gfx::Point(49, 49), |
| 423 root_surface_id, | 423 root_surface_id, |
| 424 gfx::Point(49, 49) | 424 gfx::Point(49, 49) |
| 425 }, | 425 }, |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 458 gfx::Point(100, 100) | 458 gfx::Point(100, 100) |
| 459 } | 459 } |
| 460 }; | 460 }; |
| 461 | 461 |
| 462 RunTests(&manager, tests, arraysize(tests)); | 462 RunTests(&manager, tests, arraysize(tests)); |
| 463 | 463 |
| 464 factory.Destroy(root_surface_id); | 464 factory.Destroy(root_surface_id); |
| 465 } | 465 } |
| 466 | 466 |
| 467 } // namespace cc | 467 } // namespace cc |
| OLD | NEW |