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

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

Issue 2848223003: Enforce constant size and device scale factor for surfaces (Closed)
Patch Set: Address comments Created 3 years, 7 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/direct_compositor_frame_sink_unittest.cc ('k') | cc/surfaces/surface.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 "cc/surfaces/display.h" 5 #include "cc/surfaces/display.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "base/test/null_task_runner.h" 10 #include "base/test/null_task_runner.h"
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 EXPECT_FALSE(scheduler_->swapped); 200 EXPECT_FALSE(scheduler_->swapped);
201 EXPECT_EQ(0u, output_surface_->num_sent_frames()); 201 EXPECT_EQ(0u, output_surface_->num_sent_frames());
202 EXPECT_EQ(gfx::ColorSpace(), output_surface_->last_reshape_color_space()); 202 EXPECT_EQ(gfx::ColorSpace(), output_surface_->last_reshape_color_space());
203 display_->DrawAndSwap(); 203 display_->DrawAndSwap();
204 EXPECT_EQ(color_space_1, output_surface_->last_reshape_color_space()); 204 EXPECT_EQ(color_space_1, output_surface_->last_reshape_color_space());
205 EXPECT_TRUE(scheduler_->swapped); 205 EXPECT_TRUE(scheduler_->swapped);
206 EXPECT_EQ(1u, output_surface_->num_sent_frames()); 206 EXPECT_EQ(1u, output_surface_->num_sent_frames());
207 EXPECT_EQ(gfx::Size(100, 100), 207 EXPECT_EQ(gfx::Size(100, 100),
208 software_output_device_->viewport_pixel_size()); 208 software_output_device_->viewport_pixel_size());
209 EXPECT_EQ(gfx::Rect(0, 0, 100, 100), software_output_device_->damage_rect()); 209 EXPECT_EQ(gfx::Rect(0, 0, 100, 100), software_output_device_->damage_rect());
210
211 { 210 {
212 // Only damaged portion should be swapped. 211 // Only damaged portion should be swapped.
213 pass = RenderPass::Create(); 212 pass = RenderPass::Create();
214 pass->output_rect = gfx::Rect(0, 0, 100, 100); 213 pass->output_rect = gfx::Rect(0, 0, 100, 100);
215 pass->damage_rect = gfx::Rect(10, 10, 1, 1); 214 pass->damage_rect = gfx::Rect(10, 10, 1, 1);
216 pass->id = 1; 215 pass->id = 1;
217 216
218 pass_list.push_back(std::move(pass)); 217 pass_list.push_back(std::move(pass));
219 scheduler_->ResetDamageForTest(); 218 scheduler_->ResetDamageForTest();
220 SubmitCompositorFrame(&pass_list, local_surface_id); 219 SubmitCompositorFrame(&pass_list, local_surface_id);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 EXPECT_EQ(2u, output_surface_->num_sent_frames()); 253 EXPECT_EQ(2u, output_surface_->num_sent_frames());
255 } 254 }
256 255
257 { 256 {
258 // Pass is wrong size so shouldn't be swapped. 257 // Pass is wrong size so shouldn't be swapped.
259 pass = RenderPass::Create(); 258 pass = RenderPass::Create();
260 pass->output_rect = gfx::Rect(0, 0, 99, 99); 259 pass->output_rect = gfx::Rect(0, 0, 99, 99);
261 pass->damage_rect = gfx::Rect(10, 10, 10, 10); 260 pass->damage_rect = gfx::Rect(10, 10, 10, 10);
262 pass->id = 1; 261 pass->id = 1;
263 262
263 local_surface_id = id_allocator_.GenerateId();
264 display_->SetLocalSurfaceId(local_surface_id, 1.f);
265
264 pass_list.push_back(std::move(pass)); 266 pass_list.push_back(std::move(pass));
265 scheduler_->ResetDamageForTest(); 267 scheduler_->ResetDamageForTest();
266 SubmitCompositorFrame(&pass_list, local_surface_id); 268 SubmitCompositorFrame(&pass_list, local_surface_id);
267 EXPECT_TRUE(scheduler_->damaged); 269 EXPECT_TRUE(scheduler_->damaged);
268 EXPECT_FALSE(scheduler_->display_resized_); 270 EXPECT_FALSE(scheduler_->display_resized_);
269 EXPECT_FALSE(scheduler_->has_new_root_surface); 271 EXPECT_FALSE(scheduler_->has_new_root_surface);
270 272
271 scheduler_->swapped = false; 273 scheduler_->swapped = false;
272 display_->DrawAndSwap(); 274 display_->DrawAndSwap();
273 EXPECT_TRUE(scheduler_->swapped); 275 EXPECT_TRUE(scheduler_->swapped);
274 EXPECT_EQ(2u, output_surface_->num_sent_frames()); 276 EXPECT_EQ(2u, output_surface_->num_sent_frames());
275 } 277 }
276 278
277 { 279 {
278 // Previous frame wasn't swapped, so next swap should have full damage. 280 // Previous frame wasn't swapped, so next swap should have full damage.
279 pass = RenderPass::Create(); 281 pass = RenderPass::Create();
280 pass->output_rect = gfx::Rect(0, 0, 100, 100); 282 pass->output_rect = gfx::Rect(0, 0, 100, 100);
281 pass->damage_rect = gfx::Rect(10, 10, 0, 0); 283 pass->damage_rect = gfx::Rect(10, 10, 0, 0);
282 pass->id = 1; 284 pass->id = 1;
283 285
286 local_surface_id = id_allocator_.GenerateId();
287 display_->SetLocalSurfaceId(local_surface_id, 1.f);
288
284 pass_list.push_back(std::move(pass)); 289 pass_list.push_back(std::move(pass));
285 scheduler_->ResetDamageForTest(); 290 scheduler_->ResetDamageForTest();
286 SubmitCompositorFrame(&pass_list, local_surface_id); 291 SubmitCompositorFrame(&pass_list, local_surface_id);
287 EXPECT_TRUE(scheduler_->damaged); 292 EXPECT_TRUE(scheduler_->damaged);
288 EXPECT_FALSE(scheduler_->display_resized_); 293 EXPECT_FALSE(scheduler_->display_resized_);
289 EXPECT_FALSE(scheduler_->has_new_root_surface); 294 EXPECT_FALSE(scheduler_->has_new_root_surface);
290 295
291 scheduler_->swapped = false; 296 scheduler_->swapped = false;
292 display_->DrawAndSwap(); 297 display_->DrawAndSwap();
293 EXPECT_TRUE(scheduler_->swapped); 298 EXPECT_TRUE(scheduler_->swapped);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 EXPECT_FALSE(scheduler_->has_new_root_surface); 346 EXPECT_FALSE(scheduler_->has_new_root_surface);
342 347
343 scheduler_->swapped = false; 348 scheduler_->swapped = false;
344 display_->DrawAndSwap(); 349 display_->DrawAndSwap();
345 EXPECT_TRUE(scheduler_->swapped); 350 EXPECT_TRUE(scheduler_->swapped);
346 EXPECT_EQ(4u, output_surface_->num_sent_frames()); 351 EXPECT_EQ(4u, output_surface_->num_sent_frames());
347 } 352 }
348 353
349 // Resize should cause a swap if no frame was swapped at the previous size. 354 // Resize should cause a swap if no frame was swapped at the previous size.
350 { 355 {
356 local_surface_id = id_allocator_.GenerateId();
357 display_->SetLocalSurfaceId(local_surface_id, 1.f);
351 scheduler_->swapped = false; 358 scheduler_->swapped = false;
352 display_->Resize(gfx::Size(200, 200)); 359 display_->Resize(gfx::Size(200, 200));
353 EXPECT_FALSE(scheduler_->swapped); 360 EXPECT_FALSE(scheduler_->swapped);
354 EXPECT_EQ(4u, output_surface_->num_sent_frames()); 361 EXPECT_EQ(4u, output_surface_->num_sent_frames());
355 362
356 pass = RenderPass::Create(); 363 pass = RenderPass::Create();
357 pass->output_rect = gfx::Rect(0, 0, 200, 200); 364 pass->output_rect = gfx::Rect(0, 0, 200, 200);
358 pass->damage_rect = gfx::Rect(10, 10, 10, 10); 365 pass->damage_rect = gfx::Rect(10, 10, 10, 10);
359 pass->id = 1; 366 pass->id = 1;
360 367
(...skipping 11 matching lines...) Expand all
372 scheduler_->swapped = false; 379 scheduler_->swapped = false;
373 display_->Resize(gfx::Size(100, 100)); 380 display_->Resize(gfx::Size(100, 100));
374 EXPECT_TRUE(scheduler_->swapped); 381 EXPECT_TRUE(scheduler_->swapped);
375 EXPECT_EQ(5u, output_surface_->num_sent_frames()); 382 EXPECT_EQ(5u, output_surface_->num_sent_frames());
376 383
377 // Latency info from previous frame should be sent now. 384 // Latency info from previous frame should be sent now.
378 EXPECT_EQ(1u, output_surface_->last_sent_frame()->latency_info.size()); 385 EXPECT_EQ(1u, output_surface_->last_sent_frame()->latency_info.size());
379 } 386 }
380 387
381 { 388 {
389 local_surface_id = id_allocator_.GenerateId();
390 display_->SetLocalSurfaceId(local_surface_id, 1.0f);
382 // Surface that's damaged completely should be resized and swapped. 391 // Surface that's damaged completely should be resized and swapped.
383 pass = RenderPass::Create(); 392 pass = RenderPass::Create();
384 pass->output_rect = gfx::Rect(0, 0, 99, 99); 393 pass->output_rect = gfx::Rect(0, 0, 99, 99);
385 pass->damage_rect = gfx::Rect(0, 0, 99, 99); 394 pass->damage_rect = gfx::Rect(0, 0, 99, 99);
386 pass->id = 1; 395 pass->id = 1;
387 396
388 pass_list.push_back(std::move(pass)); 397 pass_list.push_back(std::move(pass));
389 scheduler_->ResetDamageForTest(); 398 scheduler_->ResetDamageForTest();
390 SubmitCompositorFrame(&pass_list, local_surface_id); 399 SubmitCompositorFrame(&pass_list, local_surface_id);
391 EXPECT_TRUE(scheduler_->damaged); 400 EXPECT_TRUE(scheduler_->damaged);
(...skipping 11 matching lines...) Expand all
403 EXPECT_EQ(0u, output_surface_->last_sent_frame()->latency_info.size()); 412 EXPECT_EQ(0u, output_surface_->last_sent_frame()->latency_info.size());
404 } 413 }
405 } 414 }
406 415
407 class MockedContext : public TestWebGraphicsContext3D { 416 class MockedContext : public TestWebGraphicsContext3D {
408 public: 417 public:
409 MOCK_METHOD0(shallowFinishCHROMIUM, void()); 418 MOCK_METHOD0(shallowFinishCHROMIUM, void());
410 }; 419 };
411 420
412 TEST_F(DisplayTest, Finish) { 421 TEST_F(DisplayTest, Finish) {
413 LocalSurfaceId local_surface_id(id_allocator_.GenerateId()); 422 LocalSurfaceId local_surface_id1(id_allocator_.GenerateId());
423 LocalSurfaceId local_surface_id2(id_allocator_.GenerateId());
414 424
415 RendererSettings settings; 425 RendererSettings settings;
416 settings.partial_swap_enabled = true; 426 settings.partial_swap_enabled = true;
417 settings.finish_rendering_on_resize = true; 427 settings.finish_rendering_on_resize = true;
418 428
419 std::unique_ptr<MockedContext> context(new MockedContext()); 429 std::unique_ptr<MockedContext> context(new MockedContext());
420 MockedContext* context_ptr = context.get(); 430 MockedContext* context_ptr = context.get();
421 EXPECT_CALL(*context_ptr, shallowFinishCHROMIUM()).Times(0); 431 EXPECT_CALL(*context_ptr, shallowFinishCHROMIUM()).Times(0);
422 432
423 SetUpDisplay(settings, std::move(context)); 433 SetUpDisplay(settings, std::move(context));
424 434
425 StubDisplayClient client; 435 StubDisplayClient client;
426 display_->Initialize(&client, &manager_); 436 display_->Initialize(&client, &manager_);
427 437
428 display_->SetLocalSurfaceId(local_surface_id, 1.f); 438 display_->SetLocalSurfaceId(local_surface_id1, 1.f);
429 439
430 display_->Resize(gfx::Size(100, 100)); 440 display_->Resize(gfx::Size(100, 100));
431 441
432 { 442 {
433 RenderPassList pass_list; 443 RenderPassList pass_list;
434 std::unique_ptr<RenderPass> pass = RenderPass::Create(); 444 std::unique_ptr<RenderPass> pass = RenderPass::Create();
435 pass->output_rect = gfx::Rect(0, 0, 100, 100); 445 pass->output_rect = gfx::Rect(0, 0, 100, 100);
436 pass->damage_rect = gfx::Rect(10, 10, 1, 1); 446 pass->damage_rect = gfx::Rect(10, 10, 1, 1);
437 pass->id = 1; 447 pass->id = 1;
438 pass_list.push_back(std::move(pass)); 448 pass_list.push_back(std::move(pass));
439 449
440 SubmitCompositorFrame(&pass_list, local_surface_id); 450 SubmitCompositorFrame(&pass_list, local_surface_id1);
441 } 451 }
442 452
443 display_->DrawAndSwap(); 453 display_->DrawAndSwap();
444 454
445 // First resize and draw shouldn't finish. 455 // First resize and draw shouldn't finish.
446 testing::Mock::VerifyAndClearExpectations(context_ptr); 456 testing::Mock::VerifyAndClearExpectations(context_ptr);
447 457
448 EXPECT_CALL(*context_ptr, shallowFinishCHROMIUM()); 458 EXPECT_CALL(*context_ptr, shallowFinishCHROMIUM());
449 display_->Resize(gfx::Size(150, 150)); 459 display_->Resize(gfx::Size(150, 150));
450 testing::Mock::VerifyAndClearExpectations(context_ptr); 460 testing::Mock::VerifyAndClearExpectations(context_ptr);
451 461
452 // Another resize without a swap doesn't need to finish. 462 // Another resize without a swap doesn't need to finish.
453 EXPECT_CALL(*context_ptr, shallowFinishCHROMIUM()).Times(0); 463 EXPECT_CALL(*context_ptr, shallowFinishCHROMIUM()).Times(0);
464 display_->SetLocalSurfaceId(local_surface_id2, 1.f);
454 display_->Resize(gfx::Size(200, 200)); 465 display_->Resize(gfx::Size(200, 200));
455 testing::Mock::VerifyAndClearExpectations(context_ptr); 466 testing::Mock::VerifyAndClearExpectations(context_ptr);
456 467
457 EXPECT_CALL(*context_ptr, shallowFinishCHROMIUM()).Times(0); 468 EXPECT_CALL(*context_ptr, shallowFinishCHROMIUM()).Times(0);
458 { 469 {
459 RenderPassList pass_list; 470 RenderPassList pass_list;
460 std::unique_ptr<RenderPass> pass = RenderPass::Create(); 471 std::unique_ptr<RenderPass> pass = RenderPass::Create();
461 pass->output_rect = gfx::Rect(0, 0, 200, 200); 472 pass->output_rect = gfx::Rect(0, 0, 200, 200);
462 pass->damage_rect = gfx::Rect(10, 10, 1, 1); 473 pass->damage_rect = gfx::Rect(10, 10, 1, 1);
463 pass->id = 1; 474 pass->id = 1;
464 pass_list.push_back(std::move(pass)); 475 pass_list.push_back(std::move(pass));
465 476
466 SubmitCompositorFrame(&pass_list, local_surface_id); 477 SubmitCompositorFrame(&pass_list, local_surface_id2);
467 } 478 }
468 479
469 display_->DrawAndSwap(); 480 display_->DrawAndSwap();
470 481
471 testing::Mock::VerifyAndClearExpectations(context_ptr); 482 testing::Mock::VerifyAndClearExpectations(context_ptr);
472 483
473 EXPECT_CALL(*context_ptr, shallowFinishCHROMIUM()); 484 EXPECT_CALL(*context_ptr, shallowFinishCHROMIUM());
474 display_->Resize(gfx::Size(250, 250)); 485 display_->Resize(gfx::Size(250, 250));
475 testing::Mock::VerifyAndClearExpectations(context_ptr); 486 testing::Mock::VerifyAndClearExpectations(context_ptr);
476 } 487 }
(...skipping 19 matching lines...) Expand all
496 // Verify DidLoseOutputSurface callback is hooked up correctly. 507 // Verify DidLoseOutputSurface callback is hooked up correctly.
497 EXPECT_EQ(0, client.loss_count()); 508 EXPECT_EQ(0, client.loss_count());
498 output_surface_->context_provider()->ContextGL()->LoseContextCHROMIUM( 509 output_surface_->context_provider()->ContextGL()->LoseContextCHROMIUM(
499 GL_GUILTY_CONTEXT_RESET_ARB, GL_INNOCENT_CONTEXT_RESET_ARB); 510 GL_GUILTY_CONTEXT_RESET_ARB, GL_INNOCENT_CONTEXT_RESET_ARB);
500 output_surface_->context_provider()->ContextGL()->Flush(); 511 output_surface_->context_provider()->ContextGL()->Flush();
501 EXPECT_EQ(1, client.loss_count()); 512 EXPECT_EQ(1, client.loss_count());
502 } 513 }
503 514
504 } // namespace 515 } // namespace
505 } // namespace cc 516 } // namespace cc
OLDNEW
« no previous file with comments | « cc/surfaces/direct_compositor_frame_sink_unittest.cc ('k') | cc/surfaces/surface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698