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

Side by Side Diff: cc/output/overlay_unittest.cc

Issue 440193002: Let OverlayStrategySingleOnTop select non-topmost quad (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: split patch Created 6 years, 4 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/output/overlay_strategy_single_on_top.cc ('k') | no next file » | 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/base/scoped_ptr_vector.h" 5 #include "cc/base/scoped_ptr_vector.h"
6 #include "cc/output/gl_renderer.h" 6 #include "cc/output/gl_renderer.h"
7 #include "cc/output/output_surface.h" 7 #include "cc/output/output_surface.h"
8 #include "cc/output/output_surface_client.h" 8 #include "cc/output/output_surface_client.h"
9 #include "cc/output/overlay_candidate_validator.h" 9 #include "cc/output/overlay_candidate_validator.h"
10 #include "cc/output/overlay_processor.h" 10 #include "cc/output/overlay_processor.h"
(...skipping 10 matching lines...) Expand all
21 #include "testing/gmock/include/gmock/gmock.h" 21 #include "testing/gmock/include/gmock/gmock.h"
22 #include "testing/gtest/include/gtest/gtest.h" 22 #include "testing/gtest/include/gtest/gtest.h"
23 23
24 using testing::_; 24 using testing::_;
25 using testing::Mock; 25 using testing::Mock;
26 26
27 namespace cc { 27 namespace cc {
28 namespace { 28 namespace {
29 29
30 const gfx::Rect kOverlayRect(0, 0, 128, 128); 30 const gfx::Rect kOverlayRect(0, 0, 128, 128);
31 const gfx::Rect kOverlayTopLeftRect(0, 0, 64, 64);
32 const gfx::Rect kOverlayBottomRightRect(64, 64, 64, 64);
31 const gfx::PointF kUVTopLeft(0.1f, 0.2f); 33 const gfx::PointF kUVTopLeft(0.1f, 0.2f);
32 const gfx::PointF kUVBottomRight(1.0f, 1.0f); 34 const gfx::PointF kUVBottomRight(1.0f, 1.0f);
33 35
34 void MailboxReleased(unsigned sync_point, bool lost_resource) {} 36 void MailboxReleased(unsigned sync_point, bool lost_resource) {}
35 37
36 class SingleOverlayValidator : public OverlayCandidateValidator { 38 class SingleOverlayValidator : public OverlayCandidateValidator {
37 public: 39 public:
38 virtual void CheckOverlaySupport(OverlayCandidateList* surfaces) OVERRIDE; 40 virtual void CheckOverlaySupport(OverlayCandidateList* surfaces) OVERRIDE;
39 }; 41 };
40 42
41 void SingleOverlayValidator::CheckOverlaySupport( 43 void SingleOverlayValidator::CheckOverlaySupport(
42 OverlayCandidateList* surfaces) { 44 OverlayCandidateList* surfaces) {
43 ASSERT_EQ(2U, surfaces->size()); 45 ASSERT_EQ(2U, surfaces->size());
44 46
45 OverlayCandidate& candidate = surfaces->back(); 47 OverlayCandidate& candidate = surfaces->back();
46 EXPECT_EQ(kOverlayRect.ToString(), candidate.display_rect.ToString()); 48 if (candidate.display_rect.width() == 64)
49 EXPECT_EQ(kOverlayBottomRightRect, candidate.display_rect);
50 else
51 EXPECT_EQ(kOverlayRect, candidate.display_rect);
47 EXPECT_EQ(BoundingRect(kUVTopLeft, kUVBottomRight).ToString(), 52 EXPECT_EQ(BoundingRect(kUVTopLeft, kUVBottomRight).ToString(),
48 candidate.uv_rect.ToString()); 53 candidate.uv_rect.ToString());
49 candidate.overlay_handled = true; 54 candidate.overlay_handled = true;
50 } 55 }
51 56
52 class SingleOverlayProcessor : public OverlayProcessor { 57 class SingleOverlayProcessor : public OverlayProcessor {
53 public: 58 public:
54 SingleOverlayProcessor(OutputSurface* surface, 59 SingleOverlayProcessor(OutputSurface* surface,
55 ResourceProvider* resource_provider); 60 ResourceProvider* resource_provider);
56 // Virtual to allow testing different strategies. 61 // Virtual to allow testing different strategies.
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 TextureMailbox mailbox = 127 TextureMailbox mailbox =
123 TextureMailbox(gpu::Mailbox::Generate(), GL_TEXTURE_2D, sync_point); 128 TextureMailbox(gpu::Mailbox::Generate(), GL_TEXTURE_2D, sync_point);
124 mailbox.set_allow_overlay(true); 129 mailbox.set_allow_overlay(true);
125 scoped_ptr<SingleReleaseCallback> release_callback = 130 scoped_ptr<SingleReleaseCallback> release_callback =
126 SingleReleaseCallback::Create(base::Bind(&MailboxReleased)); 131 SingleReleaseCallback::Create(base::Bind(&MailboxReleased));
127 132
128 return resource_provider->CreateResourceFromTextureMailbox( 133 return resource_provider->CreateResourceFromTextureMailbox(
129 mailbox, release_callback.Pass()); 134 mailbox, release_callback.Pass());
130 } 135 }
131 136
132 TextureDrawQuad* CreateCandidateQuad(ResourceProvider* resource_provider, 137 TextureDrawQuad* CreateCandidateQuadAt(ResourceProvider* resource_provider,
133 const SharedQuadState* shared_quad_state, 138 const SharedQuadState* shared_quad_state,
134 RenderPass* render_pass) { 139 RenderPass* render_pass,
140 const gfx::Rect& rect) {
135 ResourceProvider::ResourceId resource_id = CreateResource(resource_provider); 141 ResourceProvider::ResourceId resource_id = CreateResource(resource_provider);
136 bool premultiplied_alpha = false; 142 bool premultiplied_alpha = false;
137 bool flipped = false; 143 bool flipped = false;
138 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; 144 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f};
139 145
140 TextureDrawQuad* overlay_quad = 146 TextureDrawQuad* overlay_quad =
141 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); 147 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
142 overlay_quad->SetNew(shared_quad_state, 148 overlay_quad->SetNew(shared_quad_state,
143 kOverlayRect, 149 rect,
144 kOverlayRect, 150 rect,
145 kOverlayRect, 151 rect,
146 resource_id, 152 resource_id,
147 premultiplied_alpha, 153 premultiplied_alpha,
148 kUVTopLeft, 154 kUVTopLeft,
149 kUVBottomRight, 155 kUVBottomRight,
150 SK_ColorTRANSPARENT, 156 SK_ColorTRANSPARENT,
151 vertex_opacity, 157 vertex_opacity,
152 flipped); 158 flipped);
153 159
154 return overlay_quad; 160 return overlay_quad;
155 } 161 }
156 162
157 void CreateCheckeredQuad(ResourceProvider* resource_provider, 163 TextureDrawQuad* CreateFullscreenCandidateQuad(
158 const SharedQuadState* shared_quad_state, 164 ResourceProvider* resource_provider,
159 RenderPass* render_pass) { 165 const SharedQuadState* shared_quad_state,
166 RenderPass* render_pass) {
167 return CreateCandidateQuadAt(
168 resource_provider, shared_quad_state, render_pass, kOverlayRect);
169 }
170
171 void CreateCheckeredQuadAt(ResourceProvider* resource_provider,
172 const SharedQuadState* shared_quad_state,
173 RenderPass* render_pass,
174 const gfx::Rect& rect) {
160 CheckerboardDrawQuad* checkerboard_quad = 175 CheckerboardDrawQuad* checkerboard_quad =
161 render_pass->CreateAndAppendDrawQuad<CheckerboardDrawQuad>(); 176 render_pass->CreateAndAppendDrawQuad<CheckerboardDrawQuad>();
162 checkerboard_quad->SetNew( 177 checkerboard_quad->SetNew(shared_quad_state, rect, rect, SkColor());
163 shared_quad_state, kOverlayRect, kOverlayRect, SkColor()); 178 }
179
180 void CreateFullscreenCheckeredQuad(ResourceProvider* resource_provider,
181 const SharedQuadState* shared_quad_state,
182 RenderPass* render_pass) {
183 CreateCheckeredQuadAt(
184 resource_provider, shared_quad_state, render_pass, kOverlayRect);
164 } 185 }
165 186
166 static void CompareRenderPassLists(const RenderPassList& expected_list, 187 static void CompareRenderPassLists(const RenderPassList& expected_list,
167 const RenderPassList& actual_list) { 188 const RenderPassList& actual_list) {
168 EXPECT_EQ(expected_list.size(), actual_list.size()); 189 EXPECT_EQ(expected_list.size(), actual_list.size());
169 for (size_t i = 0; i < actual_list.size(); ++i) { 190 for (size_t i = 0; i < actual_list.size(); ++i) {
170 RenderPass* expected = expected_list[i]; 191 RenderPass* expected = expected_list[i];
171 RenderPass* actual = actual_list[i]; 192 RenderPass* actual = actual_list[i];
172 193
173 EXPECT_EQ(expected->id, actual->id); 194 EXPECT_EQ(expected->id, actual->id);
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 scoped_ptr<OverlayOutputSurface> output_surface_; 264 scoped_ptr<OverlayOutputSurface> output_surface_;
244 FakeOutputSurfaceClient client_; 265 FakeOutputSurfaceClient client_;
245 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_; 266 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_;
246 scoped_ptr<ResourceProvider> resource_provider_; 267 scoped_ptr<ResourceProvider> resource_provider_;
247 scoped_ptr<SingleOverlayProcessor> overlay_processor_; 268 scoped_ptr<SingleOverlayProcessor> overlay_processor_;
248 }; 269 };
249 270
250 TEST_F(SingleOverlayOnTopTest, SuccessfullOverlay) { 271 TEST_F(SingleOverlayOnTopTest, SuccessfullOverlay) {
251 scoped_ptr<RenderPass> pass = CreateRenderPass(); 272 scoped_ptr<RenderPass> pass = CreateRenderPass();
252 TextureDrawQuad* original_quad = 273 TextureDrawQuad* original_quad =
253 CreateCandidateQuad(resource_provider_.get(), 274 CreateFullscreenCandidateQuad(resource_provider_.get(),
254 pass->shared_quad_state_list.back(), 275 pass->shared_quad_state_list.back(),
255 pass.get()); 276 pass.get());
256 unsigned original_resource_id = original_quad->resource_id; 277 unsigned original_resource_id = original_quad->resource_id;
257 278
258 // Add something behind it. 279 // Add something behind it.
259 CreateCheckeredQuad(resource_provider_.get(), 280 CreateFullscreenCheckeredQuad(resource_provider_.get(),
260 pass->shared_quad_state_list.back(), 281 pass->shared_quad_state_list.back(),
261 pass.get()); 282 pass.get());
262 CreateCheckeredQuad(resource_provider_.get(), 283 CreateFullscreenCheckeredQuad(resource_provider_.get(),
263 pass->shared_quad_state_list.back(), 284 pass->shared_quad_state_list.back(),
264 pass.get()); 285 pass.get());
265 286
266 RenderPassList pass_list; 287 RenderPassList pass_list;
267 pass_list.push_back(pass.Pass()); 288 pass_list.push_back(pass.Pass());
268 289
269 // Check for potential candidates. 290 // Check for potential candidates.
270 OverlayCandidateList candidate_list; 291 OverlayCandidateList candidate_list;
271 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); 292 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
272 293
273 ASSERT_EQ(1U, pass_list.size()); 294 ASSERT_EQ(1U, pass_list.size());
274 ASSERT_EQ(2U, candidate_list.size()); 295 ASSERT_EQ(2U, candidate_list.size());
275 296
276 RenderPass* main_pass = pass_list.back(); 297 RenderPass* main_pass = pass_list.back();
277 // Check that the quad is gone. 298 // Check that the quad is gone.
278 EXPECT_EQ(2U, main_pass->quad_list.size()); 299 EXPECT_EQ(2U, main_pass->quad_list.size());
279 const QuadList& quad_list = main_pass->quad_list; 300 const QuadList& quad_list = main_pass->quad_list;
280 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); 301 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin();
281 it != quad_list.BackToFrontEnd(); 302 it != quad_list.BackToFrontEnd();
282 ++it) { 303 ++it) {
283 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, (*it)->material); 304 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, (*it)->material);
284 } 305 }
285 306
286 // Check that the right resource id got extracted. 307 // Check that the right resource id got extracted.
287 EXPECT_EQ(original_resource_id, candidate_list.back().resource_id); 308 EXPECT_EQ(original_resource_id, candidate_list.back().resource_id);
288 } 309 }
289 310
290 TEST_F(SingleOverlayOnTopTest, NoCandidates) { 311 TEST_F(SingleOverlayOnTopTest, NoCandidates) {
291 scoped_ptr<RenderPass> pass = CreateRenderPass(); 312 scoped_ptr<RenderPass> pass = CreateRenderPass();
292 CreateCheckeredQuad(resource_provider_.get(), 313 CreateFullscreenCheckeredQuad(resource_provider_.get(),
293 pass->shared_quad_state_list.back(), 314 pass->shared_quad_state_list.back(),
294 pass.get()); 315 pass.get());
295 CreateCheckeredQuad(resource_provider_.get(), 316 CreateFullscreenCheckeredQuad(resource_provider_.get(),
296 pass->shared_quad_state_list.back(), 317 pass->shared_quad_state_list.back(),
297 pass.get()); 318 pass.get());
298 319
299 RenderPassList pass_list; 320 RenderPassList pass_list;
300 pass_list.push_back(pass.Pass()); 321 pass_list.push_back(pass.Pass());
301 322
302 RenderPassList original_pass_list; 323 RenderPassList original_pass_list;
303 RenderPass::CopyAll(pass_list, &original_pass_list); 324 RenderPass::CopyAll(pass_list, &original_pass_list);
304 325
305 OverlayCandidateList candidate_list; 326 OverlayCandidateList candidate_list;
306 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); 327 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
307 EXPECT_EQ(0U, candidate_list.size()); 328 EXPECT_EQ(0U, candidate_list.size());
308 // There should be nothing new here. 329 // There should be nothing new here.
309 CompareRenderPassLists(pass_list, original_pass_list); 330 CompareRenderPassLists(pass_list, original_pass_list);
310 } 331 }
311 332
312 TEST_F(SingleOverlayOnTopTest, OccludedCandidates) { 333 TEST_F(SingleOverlayOnTopTest, OccludedCandidates) {
313 scoped_ptr<RenderPass> pass = CreateRenderPass(); 334 scoped_ptr<RenderPass> pass = CreateRenderPass();
314 CreateCheckeredQuad(resource_provider_.get(), 335 CreateFullscreenCheckeredQuad(resource_provider_.get(),
315 pass->shared_quad_state_list.back(), 336 pass->shared_quad_state_list.back(),
316 pass.get()); 337 pass.get());
317 CreateCheckeredQuad(resource_provider_.get(), 338 CreateFullscreenCheckeredQuad(resource_provider_.get(),
318 pass->shared_quad_state_list.back(), 339 pass->shared_quad_state_list.back(),
319 pass.get()); 340 pass.get());
320 341
321 CreateCandidateQuad(resource_provider_.get(), 342 CreateFullscreenCandidateQuad(resource_provider_.get(),
322 pass->shared_quad_state_list.back(), 343 pass->shared_quad_state_list.back(),
323 pass.get()); 344 pass.get());
324 345
325 RenderPassList pass_list; 346 RenderPassList pass_list;
326 pass_list.push_back(pass.Pass()); 347 pass_list.push_back(pass.Pass());
327 348
328 RenderPassList original_pass_list; 349 RenderPassList original_pass_list;
329 RenderPass::CopyAll(pass_list, &original_pass_list); 350 RenderPass::CopyAll(pass_list, &original_pass_list);
330 351
331 OverlayCandidateList candidate_list; 352 OverlayCandidateList candidate_list;
332 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); 353 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
333 EXPECT_EQ(0U, candidate_list.size()); 354 EXPECT_EQ(0U, candidate_list.size());
334 // There should be nothing new here. 355 // There should be nothing new here.
335 CompareRenderPassLists(pass_list, original_pass_list); 356 CompareRenderPassLists(pass_list, original_pass_list);
336 } 357 }
337 358
338 // Test with multiple render passes. 359 // Test with multiple render passes.
339 TEST_F(SingleOverlayOnTopTest, MultipleRenderPasses) { 360 TEST_F(SingleOverlayOnTopTest, MultipleRenderPasses) {
340 RenderPassList pass_list; 361 RenderPassList pass_list;
341 pass_list.push_back(CreateRenderPass()); 362 pass_list.push_back(CreateRenderPass());
342 363
343 scoped_ptr<RenderPass> pass = CreateRenderPass(); 364 scoped_ptr<RenderPass> pass = CreateRenderPass();
344 CreateCandidateQuad(resource_provider_.get(), 365 CreateFullscreenCandidateQuad(resource_provider_.get(),
345 pass->shared_quad_state_list.back(), 366 pass->shared_quad_state_list.back(),
346 pass.get()); 367 pass.get());
347 368
348 // Add something behind it. 369 // Add something behind it.
349 CreateCheckeredQuad(resource_provider_.get(), 370 CreateFullscreenCheckeredQuad(resource_provider_.get(),
350 pass->shared_quad_state_list.back(), 371 pass->shared_quad_state_list.back(),
351 pass.get()); 372 pass.get());
352 CreateCheckeredQuad(resource_provider_.get(), 373 CreateFullscreenCheckeredQuad(resource_provider_.get(),
353 pass->shared_quad_state_list.back(), 374 pass->shared_quad_state_list.back(),
354 pass.get()); 375 pass.get());
355 376
356 pass_list.push_back(pass.Pass()); 377 pass_list.push_back(pass.Pass());
357 378
358 RenderPassList original_pass_list; 379 RenderPassList original_pass_list;
359 RenderPass::CopyAll(pass_list, &original_pass_list); 380 RenderPass::CopyAll(pass_list, &original_pass_list);
360 381
361 // Check for potential candidates. 382 // Check for potential candidates.
362 OverlayCandidateList candidate_list; 383 OverlayCandidateList candidate_list;
363 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); 384 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
364 EXPECT_EQ(2U, candidate_list.size()); 385 EXPECT_EQ(2U, candidate_list.size());
365 386
366 // This should be the same. 387 // This should be the same.
367 ASSERT_EQ(2U, pass_list.size()); 388 ASSERT_EQ(2U, pass_list.size());
368 } 389 }
369 390
370 TEST_F(SingleOverlayOnTopTest, RejectPremultipliedAlpha) { 391 TEST_F(SingleOverlayOnTopTest, RejectPremultipliedAlpha) {
371 scoped_ptr<RenderPass> pass = CreateRenderPass(); 392 scoped_ptr<RenderPass> pass = CreateRenderPass();
372 TextureDrawQuad* quad = 393 TextureDrawQuad* quad =
373 CreateCandidateQuad(resource_provider_.get(), 394 CreateFullscreenCandidateQuad(resource_provider_.get(),
374 pass->shared_quad_state_list.back(), 395 pass->shared_quad_state_list.back(),
375 pass.get()); 396 pass.get());
376 quad->premultiplied_alpha = true; 397 quad->premultiplied_alpha = true;
377 398
378 RenderPassList pass_list; 399 RenderPassList pass_list;
379 pass_list.push_back(pass.Pass()); 400 pass_list.push_back(pass.Pass());
380 OverlayCandidateList candidate_list; 401 OverlayCandidateList candidate_list;
381 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); 402 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
382 EXPECT_EQ(1U, pass_list.size()); 403 EXPECT_EQ(1U, pass_list.size());
383 EXPECT_EQ(0U, candidate_list.size()); 404 EXPECT_EQ(0U, candidate_list.size());
384 } 405 }
385 406
386 TEST_F(SingleOverlayOnTopTest, RejectBlending) { 407 TEST_F(SingleOverlayOnTopTest, RejectBlending) {
387 scoped_ptr<RenderPass> pass = CreateRenderPass(); 408 scoped_ptr<RenderPass> pass = CreateRenderPass();
388 TextureDrawQuad* quad = 409 TextureDrawQuad* quad =
389 CreateCandidateQuad(resource_provider_.get(), 410 CreateFullscreenCandidateQuad(resource_provider_.get(),
390 pass->shared_quad_state_list.back(), 411 pass->shared_quad_state_list.back(),
391 pass.get()); 412 pass.get());
392 quad->needs_blending = true; 413 quad->needs_blending = true;
393 414
394 RenderPassList pass_list; 415 RenderPassList pass_list;
395 pass_list.push_back(pass.Pass()); 416 pass_list.push_back(pass.Pass());
396 OverlayCandidateList candidate_list; 417 OverlayCandidateList candidate_list;
397 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); 418 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
398 ASSERT_EQ(1U, pass_list.size()); 419 ASSERT_EQ(1U, pass_list.size());
399 EXPECT_EQ(0U, candidate_list.size()); 420 EXPECT_EQ(0U, candidate_list.size());
400 } 421 }
401 422
402 TEST_F(SingleOverlayOnTopTest, RejectBackgroundColor) { 423 TEST_F(SingleOverlayOnTopTest, RejectBackgroundColor) {
403 scoped_ptr<RenderPass> pass = CreateRenderPass(); 424 scoped_ptr<RenderPass> pass = CreateRenderPass();
404 TextureDrawQuad* quad = 425 TextureDrawQuad* quad =
405 CreateCandidateQuad(resource_provider_.get(), 426 CreateFullscreenCandidateQuad(resource_provider_.get(),
406 pass->shared_quad_state_list.back(), 427 pass->shared_quad_state_list.back(),
407 pass.get()); 428 pass.get());
408 quad->background_color = SK_ColorBLACK; 429 quad->background_color = SK_ColorBLACK;
409 430
410 RenderPassList pass_list; 431 RenderPassList pass_list;
411 pass_list.push_back(pass.Pass()); 432 pass_list.push_back(pass.Pass());
412 OverlayCandidateList candidate_list; 433 OverlayCandidateList candidate_list;
413 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); 434 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
414 ASSERT_EQ(1U, pass_list.size()); 435 ASSERT_EQ(1U, pass_list.size());
415 EXPECT_EQ(0U, candidate_list.size()); 436 EXPECT_EQ(0U, candidate_list.size());
416 } 437 }
417 438
418 TEST_F(SingleOverlayOnTopTest, RejectBlendMode) { 439 TEST_F(SingleOverlayOnTopTest, RejectBlendMode) {
419 scoped_ptr<RenderPass> pass = CreateRenderPass(); 440 scoped_ptr<RenderPass> pass = CreateRenderPass();
420 CreateCandidateQuad(resource_provider_.get(), 441 CreateFullscreenCandidateQuad(resource_provider_.get(),
421 pass->shared_quad_state_list.back(), 442 pass->shared_quad_state_list.back(),
422 pass.get()); 443 pass.get());
423 pass->shared_quad_state_list.back()->blend_mode = SkXfermode::kScreen_Mode; 444 pass->shared_quad_state_list.back()->blend_mode = SkXfermode::kScreen_Mode;
424 445
425 RenderPassList pass_list; 446 RenderPassList pass_list;
426 pass_list.push_back(pass.Pass()); 447 pass_list.push_back(pass.Pass());
427 OverlayCandidateList candidate_list; 448 OverlayCandidateList candidate_list;
428 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); 449 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
429 ASSERT_EQ(1U, pass_list.size()); 450 ASSERT_EQ(1U, pass_list.size());
430 EXPECT_EQ(0U, candidate_list.size()); 451 EXPECT_EQ(0U, candidate_list.size());
431 } 452 }
432 453
433 TEST_F(SingleOverlayOnTopTest, RejectOpacity) { 454 TEST_F(SingleOverlayOnTopTest, RejectOpacity) {
434 scoped_ptr<RenderPass> pass = CreateRenderPass(); 455 scoped_ptr<RenderPass> pass = CreateRenderPass();
435 CreateCandidateQuad(resource_provider_.get(), 456 CreateFullscreenCandidateQuad(resource_provider_.get(),
436 pass->shared_quad_state_list.back(), 457 pass->shared_quad_state_list.back(),
437 pass.get()); 458 pass.get());
438 pass->shared_quad_state_list.back()->opacity = 0.5f; 459 pass->shared_quad_state_list.back()->opacity = 0.5f;
439 460
440 RenderPassList pass_list; 461 RenderPassList pass_list;
441 pass_list.push_back(pass.Pass()); 462 pass_list.push_back(pass.Pass());
442 OverlayCandidateList candidate_list; 463 OverlayCandidateList candidate_list;
443 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); 464 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
444 ASSERT_EQ(1U, pass_list.size()); 465 ASSERT_EQ(1U, pass_list.size());
445 EXPECT_EQ(0U, candidate_list.size()); 466 EXPECT_EQ(0U, candidate_list.size());
446 } 467 }
447 468
448 TEST_F(SingleOverlayOnTopTest, RejectTransform) { 469 TEST_F(SingleOverlayOnTopTest, RejectTransform) {
449 scoped_ptr<RenderPass> pass = CreateRenderPass(); 470 scoped_ptr<RenderPass> pass = CreateRenderPass();
450 CreateCandidateQuad(resource_provider_.get(), 471 CreateFullscreenCandidateQuad(resource_provider_.get(),
451 pass->shared_quad_state_list.back(), 472 pass->shared_quad_state_list.back(),
452 pass.get()); 473 pass.get());
453 pass->shared_quad_state_list.back()->content_to_target_transform.Scale(2.f, 474 pass->shared_quad_state_list.back()->content_to_target_transform.Scale(2.f,
454 2.f); 475 2.f);
455 476
456 RenderPassList pass_list; 477 RenderPassList pass_list;
457 pass_list.push_back(pass.Pass()); 478 pass_list.push_back(pass.Pass());
458 OverlayCandidateList candidate_list; 479 OverlayCandidateList candidate_list;
459 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); 480 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
460 ASSERT_EQ(1U, pass_list.size()); 481 ASSERT_EQ(1U, pass_list.size());
461 EXPECT_EQ(0U, candidate_list.size()); 482 EXPECT_EQ(0U, candidate_list.size());
462 } 483 }
463 484
485 TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) {
486 scoped_ptr<RenderPass> pass = CreateRenderPass();
487 CreateCheckeredQuadAt(resource_provider_.get(),
488 pass->shared_quad_state_list.back(),
489 pass.get(),
490 kOverlayTopLeftRect);
491 CreateCandidateQuadAt(resource_provider_.get(),
492 pass->shared_quad_state_list.back(),
493 pass.get(),
494 kOverlayBottomRightRect);
495
496 RenderPassList pass_list;
497 pass_list.push_back(pass.Pass());
498
499 RenderPassList original_pass_list;
500 RenderPass::CopyAll(pass_list, &original_pass_list);
501
502 OverlayCandidateList candidate_list;
503 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
504 EXPECT_EQ(1U, pass_list.size());
505 EXPECT_EQ(2U, candidate_list.size());
506 }
507
464 class OverlayInfoRendererGL : public GLRenderer { 508 class OverlayInfoRendererGL : public GLRenderer {
465 public: 509 public:
466 OverlayInfoRendererGL(RendererClient* client, 510 OverlayInfoRendererGL(RendererClient* client,
467 const LayerTreeSettings* settings, 511 const LayerTreeSettings* settings,
468 OutputSurface* output_surface, 512 OutputSurface* output_surface,
469 ResourceProvider* resource_provider) 513 ResourceProvider* resource_provider)
470 : GLRenderer(client, 514 : GLRenderer(client,
471 settings, 515 settings,
472 output_surface, 516 output_surface,
473 resource_provider, 517 resource_provider,
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
552 }; 596 };
553 597
554 TEST_F(GLRendererWithOverlaysTest, OverlayQuadNotDrawn) { 598 TEST_F(GLRendererWithOverlaysTest, OverlayQuadNotDrawn) {
555 bool use_validator = true; 599 bool use_validator = true;
556 Init(use_validator); 600 Init(use_validator);
557 renderer_->set_expect_overlays(true); 601 renderer_->set_expect_overlays(true);
558 gfx::Rect viewport_rect(16, 16); 602 gfx::Rect viewport_rect(16, 16);
559 603
560 scoped_ptr<RenderPass> pass = CreateRenderPass(); 604 scoped_ptr<RenderPass> pass = CreateRenderPass();
561 605
562 CreateCandidateQuad(resource_provider_.get(), 606 CreateFullscreenCandidateQuad(resource_provider_.get(),
563 pass->shared_quad_state_list.back(), 607 pass->shared_quad_state_list.back(),
564 pass.get()); 608 pass.get());
565 609
566 CreateCheckeredQuad(resource_provider_.get(), 610 CreateFullscreenCheckeredQuad(resource_provider_.get(),
567 pass->shared_quad_state_list.back(), 611 pass->shared_quad_state_list.back(),
568 pass.get()); 612 pass.get());
569 CreateCheckeredQuad(resource_provider_.get(), 613 CreateFullscreenCheckeredQuad(resource_provider_.get(),
570 pass->shared_quad_state_list.back(), 614 pass->shared_quad_state_list.back(),
571 pass.get()); 615 pass.get());
572 616
573 RenderPassList pass_list; 617 RenderPassList pass_list;
574 pass_list.push_back(pass.Pass()); 618 pass_list.push_back(pass.Pass());
575 619
576 // Candidate pass was taken out and extra skipped pass added, 620 // Candidate pass was taken out and extra skipped pass added,
577 // so only draw 2 quads. 621 // so only draw 2 quads.
578 EXPECT_CALL(*renderer_, DoDrawQuad(_, _)).Times(2); 622 EXPECT_CALL(*renderer_, DoDrawQuad(_, _)).Times(2);
579 EXPECT_CALL(scheduler_, 623 EXPECT_CALL(scheduler_,
580 Schedule(1, 624 Schedule(1,
581 gfx::OVERLAY_TRANSFORM_NONE, 625 gfx::OVERLAY_TRANSFORM_NONE,
582 _, 626 _,
583 kOverlayRect, 627 kOverlayRect,
584 BoundingRect(kUVTopLeft, kUVBottomRight))).Times(1); 628 BoundingRect(kUVTopLeft, kUVBottomRight))).Times(1);
585 renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false); 629 renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false);
586 630
587 SwapBuffers(); 631 SwapBuffers();
588 632
589 Mock::VerifyAndClearExpectations(renderer_.get()); 633 Mock::VerifyAndClearExpectations(renderer_.get());
590 Mock::VerifyAndClearExpectations(&scheduler_); 634 Mock::VerifyAndClearExpectations(&scheduler_);
591 } 635 }
592 636
593 TEST_F(GLRendererWithOverlaysTest, OccludedQuadDrawn) { 637 TEST_F(GLRendererWithOverlaysTest, OccludedQuadDrawn) {
594 bool use_validator = true; 638 bool use_validator = true;
595 Init(use_validator); 639 Init(use_validator);
596 renderer_->set_expect_overlays(false); 640 renderer_->set_expect_overlays(false);
597 gfx::Rect viewport_rect(16, 16); 641 gfx::Rect viewport_rect(16, 16);
598 642
599 scoped_ptr<RenderPass> pass = CreateRenderPass(); 643 scoped_ptr<RenderPass> pass = CreateRenderPass();
600 644
601 CreateCheckeredQuad(resource_provider_.get(), 645 CreateFullscreenCheckeredQuad(resource_provider_.get(),
602 pass->shared_quad_state_list.back(), 646 pass->shared_quad_state_list.back(),
603 pass.get()); 647 pass.get());
604 CreateCheckeredQuad(resource_provider_.get(), 648 CreateFullscreenCheckeredQuad(resource_provider_.get(),
605 pass->shared_quad_state_list.back(), 649 pass->shared_quad_state_list.back(),
606 pass.get()); 650 pass.get());
607 651
608 CreateCandidateQuad(resource_provider_.get(), 652 CreateFullscreenCandidateQuad(resource_provider_.get(),
609 pass->shared_quad_state_list.back(), 653 pass->shared_quad_state_list.back(),
610 pass.get()); 654 pass.get());
611 655
612 RenderPassList pass_list; 656 RenderPassList pass_list;
613 pass_list.push_back(pass.Pass()); 657 pass_list.push_back(pass.Pass());
614 658
615 // 3 quads in the pass, all should draw. 659 // 3 quads in the pass, all should draw.
616 EXPECT_CALL(*renderer_, DoDrawQuad(_, _)).Times(3); 660 EXPECT_CALL(*renderer_, DoDrawQuad(_, _)).Times(3);
617 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0); 661 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0);
618 renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false); 662 renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false);
619 663
620 SwapBuffers(); 664 SwapBuffers();
621 665
622 Mock::VerifyAndClearExpectations(renderer_.get()); 666 Mock::VerifyAndClearExpectations(renderer_.get());
623 Mock::VerifyAndClearExpectations(&scheduler_); 667 Mock::VerifyAndClearExpectations(&scheduler_);
624 } 668 }
625 669
626 TEST_F(GLRendererWithOverlaysTest, NoValidatorNoOverlay) { 670 TEST_F(GLRendererWithOverlaysTest, NoValidatorNoOverlay) {
627 bool use_validator = false; 671 bool use_validator = false;
628 Init(use_validator); 672 Init(use_validator);
629 renderer_->set_expect_overlays(false); 673 renderer_->set_expect_overlays(false);
630 gfx::Rect viewport_rect(16, 16); 674 gfx::Rect viewport_rect(16, 16);
631 675
632 scoped_ptr<RenderPass> pass = CreateRenderPass(); 676 scoped_ptr<RenderPass> pass = CreateRenderPass();
633 677
634 CreateCandidateQuad(resource_provider_.get(), 678 CreateFullscreenCandidateQuad(resource_provider_.get(),
635 pass->shared_quad_state_list.back(), 679 pass->shared_quad_state_list.back(),
636 pass.get()); 680 pass.get());
637 681
638 CreateCheckeredQuad(resource_provider_.get(), 682 CreateFullscreenCheckeredQuad(resource_provider_.get(),
639 pass->shared_quad_state_list.back(), 683 pass->shared_quad_state_list.back(),
640 pass.get()); 684 pass.get());
641 CreateCheckeredQuad(resource_provider_.get(), 685 CreateFullscreenCheckeredQuad(resource_provider_.get(),
642 pass->shared_quad_state_list.back(), 686 pass->shared_quad_state_list.back(),
643 pass.get()); 687 pass.get());
644 688
645 RenderPassList pass_list; 689 RenderPassList pass_list;
646 pass_list.push_back(pass.Pass()); 690 pass_list.push_back(pass.Pass());
647 691
648 // Should see no overlays. 692 // Should see no overlays.
649 EXPECT_CALL(*renderer_, DoDrawQuad(_, _)).Times(3); 693 EXPECT_CALL(*renderer_, DoDrawQuad(_, _)).Times(3);
650 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0); 694 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0);
651 renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false); 695 renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false);
652 696
653 SwapBuffers(); 697 SwapBuffers();
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
731 renderer_->set_expect_overlays(false); 775 renderer_->set_expect_overlays(false);
732 renderer_->FinishDrawingFrame(&frame3); 776 renderer_->FinishDrawingFrame(&frame3);
733 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); 777 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1));
734 SwapBuffers(); 778 SwapBuffers();
735 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); 779 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1));
736 Mock::VerifyAndClearExpectations(&scheduler_); 780 Mock::VerifyAndClearExpectations(&scheduler_);
737 } 781 }
738 782
739 } // namespace 783 } // namespace
740 } // namespace cc 784 } // namespace cc
OLDNEW
« no previous file with comments | « cc/output/overlay_strategy_single_on_top.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698