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

Side by Side Diff: cc/layers/surface_layer_impl_unittest.cc

Issue 2696303002: Only emit a fallback SurfaceDrawQuad if differs from primary (Closed)
Patch Set: 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
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/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
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
OLDNEW
« cc/layers/surface_layer_impl.cc ('K') | « cc/layers/surface_layer_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698