| Index: ui/ozone/platform/dri/hardware_display_controller_unittest.cc
|
| diff --git a/ui/ozone/platform/dri/hardware_display_controller_unittest.cc b/ui/ozone/platform/dri/hardware_display_controller_unittest.cc
|
| index fb5b932f3f1bbedc3f22a927f167f55dfaf769d0..2e7e908a4afd6135c06028f1042e710669df9522 100644
|
| --- a/ui/ozone/platform/dri/hardware_display_controller_unittest.cc
|
| +++ b/ui/ozone/platform/dri/hardware_display_controller_unittest.cc
|
| @@ -2,6 +2,7 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| +#include "base/bind.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "third_party/skia/include/core/SkCanvas.h"
|
| #include "ui/ozone/platform/dri/crtc_controller.h"
|
| @@ -47,16 +48,20 @@ class MockScanoutBuffer : public ui::ScanoutBuffer {
|
|
|
| class HardwareDisplayControllerTest : public testing::Test {
|
| public:
|
| - HardwareDisplayControllerTest() {}
|
| + HardwareDisplayControllerTest() : page_flips_(0) {}
|
| ~HardwareDisplayControllerTest() override {}
|
|
|
| void SetUp() override;
|
| void TearDown() override;
|
|
|
| + void PageFlipCallback();
|
| +
|
| protected:
|
| scoped_ptr<ui::HardwareDisplayController> controller_;
|
| scoped_ptr<ui::MockDriWrapper> drm_;
|
|
|
| + int page_flips_;
|
| +
|
| private:
|
| DISALLOW_COPY_AND_ASSIGN(HardwareDisplayControllerTest);
|
| };
|
| @@ -65,7 +70,7 @@ void HardwareDisplayControllerTest::SetUp() {
|
| std::vector<uint32_t> crtcs;
|
| crtcs.push_back(kPrimaryCrtc);
|
| crtcs.push_back(kSecondaryCrtc);
|
| - drm_.reset(new ui::MockDriWrapper(3, crtcs, kPlanesPerCrtc));
|
| + drm_.reset(new ui::MockDriWrapper(3, false, crtcs, kPlanesPerCrtc));
|
| controller_.reset(new ui::HardwareDisplayController(
|
| scoped_ptr<ui::CrtcController>(new ui::CrtcController(
|
| drm_.get(), kPrimaryCrtc, kPrimaryConnector))));
|
| @@ -76,6 +81,10 @@ void HardwareDisplayControllerTest::TearDown() {
|
| drm_.reset();
|
| }
|
|
|
| +void HardwareDisplayControllerTest::PageFlipCallback() {
|
| + page_flips_++;
|
| +}
|
| +
|
| TEST_F(HardwareDisplayControllerTest, CheckModesettingResult) {
|
| ui::OverlayPlane plane(scoped_refptr<ui::ScanoutBuffer>(
|
| new MockScanoutBuffer(kDefaultModeSize)));
|
| @@ -93,8 +102,10 @@ TEST_F(HardwareDisplayControllerTest, CheckStateAfterPageFlip) {
|
| ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>(
|
| new MockScanoutBuffer(kDefaultModeSize)));
|
| controller_->QueueOverlayPlane(plane2);
|
| - EXPECT_TRUE(controller_->SchedulePageFlip());
|
| - controller_->WaitForPageFlipEvent();
|
| + EXPECT_TRUE(controller_->SchedulePageFlip(
|
| + base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
|
| + base::Unretained(this))));
|
| + drm_->RunCallbacks();
|
| EXPECT_TRUE(plane1.buffer->HasOneRef());
|
| EXPECT_FALSE(plane2.buffer->HasOneRef());
|
|
|
| @@ -122,11 +133,11 @@ TEST_F(HardwareDisplayControllerTest, CheckStateIfPageFlipFails) {
|
| ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>(
|
| new MockScanoutBuffer(kDefaultModeSize)));
|
| controller_->QueueOverlayPlane(plane2);
|
| - EXPECT_FALSE(controller_->SchedulePageFlip());
|
| - EXPECT_FALSE(plane1.buffer->HasOneRef());
|
| - EXPECT_FALSE(plane2.buffer->HasOneRef());
|
| + EXPECT_FALSE(controller_->SchedulePageFlip(
|
| + base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
|
| + base::Unretained(this))));
|
| + drm_->RunCallbacks();
|
|
|
| - controller_->WaitForPageFlipEvent();
|
| EXPECT_FALSE(plane1.buffer->HasOneRef());
|
| EXPECT_TRUE(plane2.buffer->HasOneRef());
|
| }
|
| @@ -140,14 +151,18 @@ TEST_F(HardwareDisplayControllerTest, VerifyNoDRMCallsWhenDisabled) {
|
| ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>(
|
| new MockScanoutBuffer(kDefaultModeSize)));
|
| controller_->QueueOverlayPlane(plane2);
|
| - EXPECT_TRUE(controller_->SchedulePageFlip());
|
| - controller_->WaitForPageFlipEvent();
|
| + EXPECT_TRUE(controller_->SchedulePageFlip(
|
| + base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
|
| + base::Unretained(this))));
|
| + drm_->RunCallbacks();
|
| EXPECT_EQ(0, drm_->get_page_flip_call_count());
|
|
|
| EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
|
| controller_->QueueOverlayPlane(plane2);
|
| - EXPECT_TRUE(controller_->SchedulePageFlip());
|
| - controller_->WaitForPageFlipEvent();
|
| + EXPECT_TRUE(controller_->SchedulePageFlip(
|
| + base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
|
| + base::Unretained(this))));
|
| + drm_->RunCallbacks();
|
| EXPECT_EQ(1, drm_->get_page_flip_call_count());
|
| }
|
|
|
| @@ -166,8 +181,10 @@ TEST_F(HardwareDisplayControllerTest, CheckOverlayPresent) {
|
| controller_->QueueOverlayPlane(plane1);
|
| controller_->QueueOverlayPlane(plane2);
|
|
|
| - EXPECT_TRUE(controller_->SchedulePageFlip());
|
| - controller_->WaitForPageFlipEvent();
|
| + EXPECT_TRUE(controller_->SchedulePageFlip(
|
| + base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
|
| + base::Unretained(this))));
|
| + drm_->RunCallbacks();
|
| EXPECT_EQ(1, drm_->get_page_flip_call_count());
|
| EXPECT_EQ(1, drm_->get_overlay_flip_call_count());
|
| }
|
| @@ -184,42 +201,12 @@ TEST_F(HardwareDisplayControllerTest, PageflipMirroredControllers) {
|
| ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>(
|
| new MockScanoutBuffer(kDefaultModeSize)));
|
| controller_->QueueOverlayPlane(plane2);
|
| - EXPECT_TRUE(controller_->SchedulePageFlip());
|
| - EXPECT_EQ(2, drm_->get_page_flip_call_count());
|
| -
|
| - controller_->WaitForPageFlipEvent();
|
| - EXPECT_EQ(2, drm_->get_handle_events_count());
|
| -}
|
| -
|
| -TEST_F(HardwareDisplayControllerTest,
|
| - PageflipMirroredControllersWithInvertedCrtcOrder) {
|
| - scoped_ptr<ui::CrtcController> crtc1(
|
| - new ui::CrtcController(drm_.get(), kPrimaryCrtc, kPrimaryConnector));
|
| - scoped_ptr<ui::CrtcController> crtc2(
|
| - new ui::CrtcController(drm_.get(), kSecondaryCrtc, kSecondaryConnector));
|
| -
|
| - // Make sure that if the order is reversed everything is still fine.
|
| - std::queue<ui::CrtcController*> crtc_queue;
|
| - crtc_queue.push(crtc2.get());
|
| - crtc_queue.push(crtc1.get());
|
| -
|
| - controller_.reset(new ui::HardwareDisplayController(crtc1.Pass()));
|
| - controller_->AddCrtc(crtc2.Pass());
|
| -
|
| - ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
|
| - new MockScanoutBuffer(kDefaultModeSize)));
|
| - EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
|
| - EXPECT_EQ(2, drm_->get_set_crtc_call_count());
|
| -
|
| - ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>(
|
| - new MockScanoutBuffer(kDefaultModeSize)));
|
| - controller_->QueueOverlayPlane(plane2);
|
| - EXPECT_TRUE(controller_->SchedulePageFlip());
|
| + EXPECT_TRUE(controller_->SchedulePageFlip(
|
| + base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
|
| + base::Unretained(this))));
|
| + drm_->RunCallbacks();
|
| EXPECT_EQ(2, drm_->get_page_flip_call_count());
|
| -
|
| - drm_->set_controllers(crtc_queue);
|
| - controller_->WaitForPageFlipEvent();
|
| - EXPECT_EQ(2, drm_->get_handle_events_count());
|
| + EXPECT_EQ(1, page_flips_);
|
| }
|
|
|
| TEST_F(HardwareDisplayControllerTest, PlaneStateAfterRemoveCrtc) {
|
| @@ -227,8 +214,10 @@ TEST_F(HardwareDisplayControllerTest, PlaneStateAfterRemoveCrtc) {
|
| new MockScanoutBuffer(kDefaultModeSize)));
|
| EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
|
| controller_->QueueOverlayPlane(plane1);
|
| - EXPECT_TRUE(controller_->SchedulePageFlip());
|
| - controller_->WaitForPageFlipEvent();
|
| + EXPECT_TRUE(controller_->SchedulePageFlip(
|
| + base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
|
| + base::Unretained(this))));
|
| + drm_->RunCallbacks();
|
|
|
| const ui::HardwareDisplayPlane* owned_plane = nullptr;
|
| for (const auto& plane : drm_->plane_manager()->planes())
|
| @@ -240,3 +229,49 @@ TEST_F(HardwareDisplayControllerTest, PlaneStateAfterRemoveCrtc) {
|
| scoped_ptr<ui::CrtcController> crtc = controller_->RemoveCrtc(kPrimaryCrtc);
|
| EXPECT_FALSE(owned_plane->in_use());
|
| }
|
| +
|
| +TEST_F(HardwareDisplayControllerTest, ModesetWhilePageFlipping) {
|
| + ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
|
| + new MockScanoutBuffer(kDefaultModeSize)));
|
| + EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
|
| + controller_->QueueOverlayPlane(plane1);
|
| + EXPECT_TRUE(controller_->SchedulePageFlip(
|
| + base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
|
| + base::Unretained(this))));
|
| +
|
| + EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
|
| + drm_->RunCallbacks();
|
| + EXPECT_EQ(1, page_flips_);
|
| +}
|
| +
|
| +TEST_F(HardwareDisplayControllerTest, AddCrtcMidPageFlip) {
|
| + ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
|
| + new MockScanoutBuffer(kDefaultModeSize)));
|
| + EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
|
| + controller_->QueueOverlayPlane(plane1);
|
| + EXPECT_TRUE(controller_->SchedulePageFlip(
|
| + base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
|
| + base::Unretained(this))));
|
| +
|
| + controller_->AddCrtc(scoped_ptr<ui::CrtcController>(
|
| + new ui::CrtcController(drm_.get(), kSecondaryCrtc, kSecondaryConnector)));
|
| +
|
| + drm_->RunCallbacks();
|
| + EXPECT_EQ(1, page_flips_);
|
| +}
|
| +
|
| +TEST_F(HardwareDisplayControllerTest, RemoveCrtcMidPageFlip) {
|
| + ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
|
| + new MockScanoutBuffer(kDefaultModeSize)));
|
| + EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
|
| + controller_->QueueOverlayPlane(plane1);
|
| + EXPECT_TRUE(controller_->SchedulePageFlip(
|
| + base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
|
| + base::Unretained(this))));
|
| +
|
| + controller_->RemoveCrtc(kPrimaryCrtc);
|
| +
|
| + EXPECT_EQ(1, page_flips_);
|
| + drm_->RunCallbacks();
|
| + EXPECT_EQ(1, page_flips_);
|
| +}
|
|
|