OLD | NEW |
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/layers/surface_layer_impl.h" | 5 #include "cc/layers/surface_layer_impl.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include "cc/layers/append_quads_data.h" | 9 #include "cc/layers/append_quads_data.h" |
10 #include "cc/test/layer_test_common.h" | 10 #include "cc/test/layer_test_common.h" |
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
191 // Obtain layer rect in target space by applying target_space_transform on | 191 // Obtain layer rect in target space by applying target_space_transform on |
192 // layer rect. | 192 // layer rect. |
193 gfx::RectF layer_rect(layer_size.width(), layer_size.height()); | 193 gfx::RectF layer_rect(layer_size.width(), layer_size.height()); |
194 gfx::RectF transformed_layer_rect = | 194 gfx::RectF transformed_layer_rect = |
195 MathUtil::MapClippedRect(target_space_transform, layer_rect); | 195 MathUtil::MapClippedRect(target_space_transform, layer_rect); |
196 | 196 |
197 // Check if quad rect in target space matches layer rect in target space | 197 // Check if quad rect in target space matches layer rect in target space |
198 EXPECT_EQ(transformed_quad_rect, transformed_layer_rect); | 198 EXPECT_EQ(transformed_quad_rect, transformed_layer_rect); |
199 } | 199 } |
200 | 200 |
| 201 // This test verifies that two SurfaceDrawQuads are emitted if a |
| 202 // SurfaceLayerImpl holds both a primary and fallback SurfaceInfo. |
| 203 TEST(SurfaceLayerImplTest, SurfaceLayerImplEmitsTwoDrawQuadsIfUniqueFallback) { |
| 204 LayerTestCommon::LayerImplTest impl; |
| 205 SurfaceLayerImpl* surface_layer_impl = |
| 206 impl.AddChildToRoot<SurfaceLayerImpl>(); |
| 207 |
| 208 // Populate the primary SurfaceInfo. |
| 209 const LocalSurfaceId kArbitraryLocalSurfaceId1( |
| 210 9, base::UnguessableToken::Create()); |
| 211 SurfaceId surface_id1(kArbitraryFrameSinkId, kArbitraryLocalSurfaceId1); |
| 212 float surface_scale1 = 1.f; |
| 213 gfx::Size surface_size1(300, 300); |
| 214 SurfaceInfo primary_surface_info(surface_id1, surface_scale1, surface_size1); |
| 215 |
| 216 // Populate the fallback SurfaceInfo. |
| 217 const LocalSurfaceId kArbitraryLocalSurfaceId2( |
| 218 7, base::UnguessableToken::Create()); |
| 219 SurfaceId surface_id2(kArbitraryFrameSinkId, kArbitraryLocalSurfaceId2); |
| 220 float surface_scale2 = 2.f; |
| 221 gfx::Size surface_size2(400, 400); |
| 222 SurfaceInfo fallback_surface_info(surface_id2, surface_scale2, surface_size2); |
| 223 |
| 224 gfx::Size layer_size(400, 100); |
| 225 |
| 226 // Populate the SurfaceLayerImpl ensuring that the primary and fallback |
| 227 // SurfaceInfos are different. |
| 228 surface_layer_impl->SetBounds(layer_size); |
| 229 surface_layer_impl->SetDrawsContent(true); |
| 230 surface_layer_impl->SetPrimarySurfaceInfo(primary_surface_info); |
| 231 surface_layer_impl->SetFallbackSurfaceInfo(fallback_surface_info); |
| 232 |
| 233 gfx::Size viewport_size(1000, 1000); |
| 234 impl.CalcDrawProps(viewport_size); |
| 235 |
| 236 std::unique_ptr<RenderPass> render_pass = RenderPass::Create(); |
| 237 AppendQuadsData data; |
| 238 surface_layer_impl->AppendQuads(render_pass.get(), &data); |
| 239 |
| 240 ASSERT_EQ(2u, render_pass->quad_list.size()); |
| 241 const SurfaceDrawQuad* surface_draw_quad1 = |
| 242 SurfaceDrawQuad::MaterialCast(render_pass->quad_list.ElementAt(0)); |
| 243 ASSERT_TRUE(surface_draw_quad1); |
| 244 const SurfaceDrawQuad* surface_draw_quad2 = |
| 245 SurfaceDrawQuad::MaterialCast(render_pass->quad_list.ElementAt(1)); |
| 246 ASSERT_TRUE(surface_draw_quad2); |
| 247 |
| 248 EXPECT_EQ(SurfaceDrawQuadType::PRIMARY, |
| 249 surface_draw_quad1->surface_draw_quad_type); |
| 250 EXPECT_EQ(surface_id1, surface_draw_quad1->surface_id); |
| 251 EXPECT_EQ(surface_draw_quad2, surface_draw_quad1->fallback_quad); |
| 252 EXPECT_EQ(SurfaceDrawQuadType::FALLBACK, |
| 253 surface_draw_quad2->surface_draw_quad_type); |
| 254 EXPECT_EQ(surface_id2, surface_draw_quad2->surface_id); |
| 255 } |
| 256 |
| 257 // This test verifies that one SurfaceDrawQuad is emitted if a |
| 258 // SurfaceLayerImpl holds the same surface ID for both the primary |
| 259 // and fallback SurfaceInfo. |
| 260 TEST(SurfaceLayerImplTest, |
| 261 SurfaceLayerImplEmitsOneDrawQuadsIfPrimaryMatchesFallback) { |
| 262 LayerTestCommon::LayerImplTest impl; |
| 263 SurfaceLayerImpl* surface_layer_impl = |
| 264 impl.AddChildToRoot<SurfaceLayerImpl>(); |
| 265 |
| 266 // Populate the primary SurfaceInfo. |
| 267 const LocalSurfaceId kArbitraryLocalSurfaceId1( |
| 268 9, base::UnguessableToken::Create()); |
| 269 SurfaceId surface_id1(kArbitraryFrameSinkId, kArbitraryLocalSurfaceId1); |
| 270 float surface_scale1 = 1.f; |
| 271 gfx::Size surface_size1(300, 300); |
| 272 SurfaceInfo primary_surface_info(surface_id1, surface_scale1, surface_size1); |
| 273 |
| 274 gfx::Size layer_size(400, 100); |
| 275 |
| 276 // Populate the SurfaceLayerImpl ensuring that the primary and fallback |
| 277 // SurfaceInfos are the same. |
| 278 surface_layer_impl->SetBounds(layer_size); |
| 279 surface_layer_impl->SetDrawsContent(true); |
| 280 surface_layer_impl->SetPrimarySurfaceInfo(primary_surface_info); |
| 281 surface_layer_impl->SetFallbackSurfaceInfo(primary_surface_info); |
| 282 |
| 283 gfx::Size viewport_size(1000, 1000); |
| 284 impl.CalcDrawProps(viewport_size); |
| 285 |
| 286 std::unique_ptr<RenderPass> render_pass = RenderPass::Create(); |
| 287 AppendQuadsData data; |
| 288 surface_layer_impl->AppendQuads(render_pass.get(), &data); |
| 289 |
| 290 ASSERT_EQ(1u, render_pass->quad_list.size()); |
| 291 const SurfaceDrawQuad* surface_draw_quad1 = |
| 292 SurfaceDrawQuad::MaterialCast(render_pass->quad_list.ElementAt(0)); |
| 293 ASSERT_TRUE(surface_draw_quad1); |
| 294 |
| 295 EXPECT_EQ(SurfaceDrawQuadType::PRIMARY, |
| 296 surface_draw_quad1->surface_draw_quad_type); |
| 297 EXPECT_EQ(surface_id1, surface_draw_quad1->surface_id); |
| 298 EXPECT_FALSE(surface_draw_quad1->fallback_quad); |
| 299 } |
| 300 |
201 } // namespace | 301 } // namespace |
202 } // namespace cc | 302 } // namespace cc |
OLD | NEW |