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 <utility> |
| 6 |
5 #include "testing/gtest/include/gtest/gtest.h" | 7 #include "testing/gtest/include/gtest/gtest.h" |
6 #include "ui/ozone/platform/drm/gpu/crtc_controller.h" | 8 #include "ui/ozone/platform/drm/gpu/crtc_controller.h" |
7 #include "ui/ozone/platform/drm/gpu/drm_device_generator.h" | 9 #include "ui/ozone/platform/drm/gpu/drm_device_generator.h" |
8 #include "ui/ozone/platform/drm/gpu/drm_device_manager.h" | 10 #include "ui/ozone/platform/drm/gpu/drm_device_manager.h" |
9 #include "ui/ozone/platform/drm/gpu/drm_window.h" | 11 #include "ui/ozone/platform/drm/gpu/drm_window.h" |
10 #include "ui/ozone/platform/drm/gpu/hardware_display_controller.h" | 12 #include "ui/ozone/platform/drm/gpu/hardware_display_controller.h" |
11 #include "ui/ozone/platform/drm/gpu/mock_buffer_generator.h" | 13 #include "ui/ozone/platform/drm/gpu/mock_buffer_generator.h" |
12 #include "ui/ozone/platform/drm/gpu/mock_drm_device.h" | 14 #include "ui/ozone/platform/drm/gpu/mock_drm_device.h" |
13 #include "ui/ozone/platform/drm/gpu/screen_manager.h" | 15 #include "ui/ozone/platform/drm/gpu/screen_manager.h" |
14 | 16 |
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
368 EXPECT_NE(controller1, controller2); | 370 EXPECT_NE(controller1, controller2); |
369 EXPECT_EQ(drm_, controller1->crtc_controllers()[0]->drm()); | 371 EXPECT_EQ(drm_, controller1->crtc_controllers()[0]->drm()); |
370 EXPECT_EQ(drm2, controller2->crtc_controllers()[0]->drm()); | 372 EXPECT_EQ(drm2, controller2->crtc_controllers()[0]->drm()); |
371 } | 373 } |
372 | 374 |
373 TEST_F(ScreenManagerTest, CheckControllerToWindowMappingWithSameBounds) { | 375 TEST_F(ScreenManagerTest, CheckControllerToWindowMappingWithSameBounds) { |
374 scoped_ptr<ui::DrmWindow> window( | 376 scoped_ptr<ui::DrmWindow> window( |
375 new ui::DrmWindow(1, device_manager_.get(), screen_manager_.get())); | 377 new ui::DrmWindow(1, device_manager_.get(), screen_manager_.get())); |
376 window->Initialize(); | 378 window->Initialize(); |
377 window->SetBounds(GetPrimaryBounds()); | 379 window->SetBounds(GetPrimaryBounds()); |
378 screen_manager_->AddWindow(1, window.Pass()); | 380 screen_manager_->AddWindow(1, std::move(window)); |
379 | 381 |
380 screen_manager_->AddDisplayController(drm_, kPrimaryCrtc, kPrimaryConnector); | 382 screen_manager_->AddDisplayController(drm_, kPrimaryCrtc, kPrimaryConnector); |
381 screen_manager_->ConfigureDisplayController( | 383 screen_manager_->ConfigureDisplayController( |
382 drm_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), | 384 drm_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), |
383 kDefaultMode); | 385 kDefaultMode); |
384 | 386 |
385 EXPECT_TRUE(screen_manager_->GetWindow(1)->GetController()); | 387 EXPECT_TRUE(screen_manager_->GetWindow(1)->GetController()); |
386 | 388 |
387 window = screen_manager_->RemoveWindow(1); | 389 window = screen_manager_->RemoveWindow(1); |
388 window->Shutdown(); | 390 window->Shutdown(); |
389 } | 391 } |
390 | 392 |
391 TEST_F(ScreenManagerTest, CheckControllerToWindowMappingWithDifferentBounds) { | 393 TEST_F(ScreenManagerTest, CheckControllerToWindowMappingWithDifferentBounds) { |
392 scoped_ptr<ui::DrmWindow> window( | 394 scoped_ptr<ui::DrmWindow> window( |
393 new ui::DrmWindow(1, device_manager_.get(), screen_manager_.get())); | 395 new ui::DrmWindow(1, device_manager_.get(), screen_manager_.get())); |
394 window->Initialize(); | 396 window->Initialize(); |
395 gfx::Rect new_bounds = GetPrimaryBounds(); | 397 gfx::Rect new_bounds = GetPrimaryBounds(); |
396 new_bounds.Inset(0, 0, 1, 1); | 398 new_bounds.Inset(0, 0, 1, 1); |
397 window->SetBounds(new_bounds); | 399 window->SetBounds(new_bounds); |
398 screen_manager_->AddWindow(1, window.Pass()); | 400 screen_manager_->AddWindow(1, std::move(window)); |
399 | 401 |
400 screen_manager_->AddDisplayController(drm_, kPrimaryCrtc, kPrimaryConnector); | 402 screen_manager_->AddDisplayController(drm_, kPrimaryCrtc, kPrimaryConnector); |
401 screen_manager_->ConfigureDisplayController( | 403 screen_manager_->ConfigureDisplayController( |
402 drm_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), | 404 drm_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), |
403 kDefaultMode); | 405 kDefaultMode); |
404 | 406 |
405 EXPECT_FALSE(screen_manager_->GetWindow(1)->GetController()); | 407 EXPECT_FALSE(screen_manager_->GetWindow(1)->GetController()); |
406 | 408 |
407 window = screen_manager_->RemoveWindow(1); | 409 window = screen_manager_->RemoveWindow(1); |
408 window->Shutdown(); | 410 window->Shutdown(); |
409 } | 411 } |
410 | 412 |
411 TEST_F(ScreenManagerTest, | 413 TEST_F(ScreenManagerTest, |
412 CheckControllerToWindowMappingWithOverlappingWindows) { | 414 CheckControllerToWindowMappingWithOverlappingWindows) { |
413 const size_t kWindowCount = 2; | 415 const size_t kWindowCount = 2; |
414 for (size_t i = 1; i < kWindowCount + 1; ++i) { | 416 for (size_t i = 1; i < kWindowCount + 1; ++i) { |
415 scoped_ptr<ui::DrmWindow> window( | 417 scoped_ptr<ui::DrmWindow> window( |
416 new ui::DrmWindow(i, device_manager_.get(), screen_manager_.get())); | 418 new ui::DrmWindow(i, device_manager_.get(), screen_manager_.get())); |
417 window->Initialize(); | 419 window->Initialize(); |
418 window->SetBounds(GetPrimaryBounds()); | 420 window->SetBounds(GetPrimaryBounds()); |
419 screen_manager_->AddWindow(i, window.Pass()); | 421 screen_manager_->AddWindow(i, std::move(window)); |
420 } | 422 } |
421 | 423 |
422 screen_manager_->AddDisplayController(drm_, kPrimaryCrtc, kPrimaryConnector); | 424 screen_manager_->AddDisplayController(drm_, kPrimaryCrtc, kPrimaryConnector); |
423 screen_manager_->ConfigureDisplayController( | 425 screen_manager_->ConfigureDisplayController( |
424 drm_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), | 426 drm_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), |
425 kDefaultMode); | 427 kDefaultMode); |
426 | 428 |
427 bool window1_has_controller = screen_manager_->GetWindow(1)->GetController(); | 429 bool window1_has_controller = screen_manager_->GetWindow(1)->GetController(); |
428 bool window2_has_controller = screen_manager_->GetWindow(2)->GetController(); | 430 bool window2_has_controller = screen_manager_->GetWindow(2)->GetController(); |
429 // Only one of the windows can have a controller. | 431 // Only one of the windows can have a controller. |
430 EXPECT_TRUE(window1_has_controller ^ window2_has_controller); | 432 EXPECT_TRUE(window1_has_controller ^ window2_has_controller); |
431 | 433 |
432 for (size_t i = 1; i < kWindowCount + 1; ++i) { | 434 for (size_t i = 1; i < kWindowCount + 1; ++i) { |
433 scoped_ptr<ui::DrmWindow> window = screen_manager_->RemoveWindow(i); | 435 scoped_ptr<ui::DrmWindow> window = screen_manager_->RemoveWindow(i); |
434 window->Shutdown(); | 436 window->Shutdown(); |
435 } | 437 } |
436 } | 438 } |
437 | 439 |
438 TEST_F(ScreenManagerTest, ShouldDissociateWindowOnControllerRemoval) { | 440 TEST_F(ScreenManagerTest, ShouldDissociateWindowOnControllerRemoval) { |
439 gfx::AcceleratedWidget window_id = 1; | 441 gfx::AcceleratedWidget window_id = 1; |
440 scoped_ptr<ui::DrmWindow> window(new ui::DrmWindow( | 442 scoped_ptr<ui::DrmWindow> window(new ui::DrmWindow( |
441 window_id, device_manager_.get(), screen_manager_.get())); | 443 window_id, device_manager_.get(), screen_manager_.get())); |
442 window->Initialize(); | 444 window->Initialize(); |
443 window->SetBounds(GetPrimaryBounds()); | 445 window->SetBounds(GetPrimaryBounds()); |
444 screen_manager_->AddWindow(window_id, window.Pass()); | 446 screen_manager_->AddWindow(window_id, std::move(window)); |
445 | 447 |
446 screen_manager_->AddDisplayController(drm_, kPrimaryCrtc, kPrimaryConnector); | 448 screen_manager_->AddDisplayController(drm_, kPrimaryCrtc, kPrimaryConnector); |
447 screen_manager_->ConfigureDisplayController( | 449 screen_manager_->ConfigureDisplayController( |
448 drm_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), | 450 drm_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), |
449 kDefaultMode); | 451 kDefaultMode); |
450 | 452 |
451 EXPECT_TRUE(screen_manager_->GetWindow(window_id)->GetController()); | 453 EXPECT_TRUE(screen_manager_->GetWindow(window_id)->GetController()); |
452 | 454 |
453 screen_manager_->RemoveDisplayController(drm_, kPrimaryCrtc); | 455 screen_manager_->RemoveDisplayController(drm_, kPrimaryCrtc); |
454 | 456 |
455 EXPECT_FALSE(screen_manager_->GetWindow(window_id)->GetController()); | 457 EXPECT_FALSE(screen_manager_->GetWindow(window_id)->GetController()); |
456 | 458 |
457 window = screen_manager_->RemoveWindow(1); | 459 window = screen_manager_->RemoveWindow(1); |
458 window->Shutdown(); | 460 window->Shutdown(); |
459 } | 461 } |
460 | 462 |
461 TEST_F(ScreenManagerTest, EnableControllerWhenWindowHasNoBuffer) { | 463 TEST_F(ScreenManagerTest, EnableControllerWhenWindowHasNoBuffer) { |
462 scoped_ptr<ui::DrmWindow> window( | 464 scoped_ptr<ui::DrmWindow> window( |
463 new ui::DrmWindow(1, device_manager_.get(), screen_manager_.get())); | 465 new ui::DrmWindow(1, device_manager_.get(), screen_manager_.get())); |
464 window->Initialize(); | 466 window->Initialize(); |
465 window->SetBounds(GetPrimaryBounds()); | 467 window->SetBounds(GetPrimaryBounds()); |
466 screen_manager_->AddWindow(1, window.Pass()); | 468 screen_manager_->AddWindow(1, std::move(window)); |
467 | 469 |
468 screen_manager_->AddDisplayController(drm_, kPrimaryCrtc, kPrimaryConnector); | 470 screen_manager_->AddDisplayController(drm_, kPrimaryCrtc, kPrimaryConnector); |
469 screen_manager_->ConfigureDisplayController( | 471 screen_manager_->ConfigureDisplayController( |
470 drm_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), | 472 drm_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), |
471 kDefaultMode); | 473 kDefaultMode); |
472 | 474 |
473 EXPECT_TRUE(screen_manager_->GetWindow(1)->GetController()); | 475 EXPECT_TRUE(screen_manager_->GetWindow(1)->GetController()); |
474 // There is a buffer after initial config. | 476 // There is a buffer after initial config. |
475 uint32_t framebuffer = drm_->current_framebuffer(); | 477 uint32_t framebuffer = drm_->current_framebuffer(); |
476 EXPECT_NE(0U, framebuffer); | 478 EXPECT_NE(0U, framebuffer); |
(...skipping 13 matching lines...) Expand all Loading... |
490 TEST_F(ScreenManagerTest, EnableControllerWhenWindowHasBuffer) { | 492 TEST_F(ScreenManagerTest, EnableControllerWhenWindowHasBuffer) { |
491 scoped_ptr<ui::DrmWindow> window( | 493 scoped_ptr<ui::DrmWindow> window( |
492 new ui::DrmWindow(1, device_manager_.get(), screen_manager_.get())); | 494 new ui::DrmWindow(1, device_manager_.get(), screen_manager_.get())); |
493 window->Initialize(); | 495 window->Initialize(); |
494 window->SetBounds(GetPrimaryBounds()); | 496 window->SetBounds(GetPrimaryBounds()); |
495 scoped_refptr<ui::ScanoutBuffer> buffer = buffer_generator_->Create( | 497 scoped_refptr<ui::ScanoutBuffer> buffer = buffer_generator_->Create( |
496 drm_, gfx::BufferFormat::BGRA_8888, GetPrimaryBounds().size()); | 498 drm_, gfx::BufferFormat::BGRA_8888, GetPrimaryBounds().size()); |
497 window->SchedulePageFlip( | 499 window->SchedulePageFlip( |
498 std::vector<ui::OverlayPlane>(1, ui::OverlayPlane(buffer)), | 500 std::vector<ui::OverlayPlane>(1, ui::OverlayPlane(buffer)), |
499 base::Bind(&EmptySwapCallback)); | 501 base::Bind(&EmptySwapCallback)); |
500 screen_manager_->AddWindow(1, window.Pass()); | 502 screen_manager_->AddWindow(1, std::move(window)); |
501 | 503 |
502 screen_manager_->AddDisplayController(drm_, kPrimaryCrtc, kPrimaryConnector); | 504 screen_manager_->AddDisplayController(drm_, kPrimaryCrtc, kPrimaryConnector); |
503 screen_manager_->ConfigureDisplayController( | 505 screen_manager_->ConfigureDisplayController( |
504 drm_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), | 506 drm_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), |
505 kDefaultMode); | 507 kDefaultMode); |
506 | 508 |
507 EXPECT_EQ(buffer->GetFramebufferId(), drm_->current_framebuffer()); | 509 EXPECT_EQ(buffer->GetFramebufferId(), drm_->current_framebuffer()); |
508 | 510 |
509 window = screen_manager_->RemoveWindow(1); | 511 window = screen_manager_->RemoveWindow(1); |
510 window->Shutdown(); | 512 window->Shutdown(); |
511 } | 513 } |
OLD | NEW |