| 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 |