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

Unified Diff: ui/ozone/platform/dri/hardware_display_controller_unittest.cc

Issue 821023003: [Ozone-DRI] Listen for swap events (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@async-swap
Patch Set: . Created 5 years, 11 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 side-by-side diff with in-line comments
Download patch
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_);
+}

Powered by Google App Engine
This is Rietveld 408576698