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

Unified Diff: ui/ozone/platform/drm/gpu/hardware_display_controller_unittest.cc

Issue 1279703004: Ozone: HDC should only keep track of planes owned by it’s crtc controllers (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add comments to clarify what test is doing Created 5 years, 4 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/drm/gpu/hardware_display_controller_unittest.cc
diff --git a/ui/ozone/platform/drm/gpu/hardware_display_controller_unittest.cc b/ui/ozone/platform/drm/gpu/hardware_display_controller_unittest.cc
index 761438ef80b04ab81fe117e4ee9623ddb52c4153..eb4f0914bf9b01e3c81158d332afc04b54dcdc78 100644
--- a/ui/ozone/platform/drm/gpu/hardware_display_controller_unittest.cc
+++ b/ui/ozone/platform/drm/gpu/hardware_display_controller_unittest.cc
@@ -273,10 +273,92 @@ TEST_F(HardwareDisplayControllerTest, PlaneStateAfterRemoveCrtc) {
owned_plane = plane;
ASSERT_TRUE(owned_plane != nullptr);
EXPECT_EQ(kPrimaryCrtc, owned_plane->owning_crtc());
- // Removing the crtc should free the plane.
+ // Removing the crtc should not free the plane or change ownership.
scoped_ptr<ui::CrtcController> crtc =
controller_->RemoveCrtc(drm_, kPrimaryCrtc);
+ EXPECT_TRUE(owned_plane->in_use());
+ EXPECT_EQ(kPrimaryCrtc, owned_plane->owning_crtc());
+ // Check that controller doesn't effect the state of removed plane in
+ // subsequent page flip.
+ EXPECT_TRUE(controller_->SchedulePageFlip(
+ planes, false, false,
+ base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
+ base::Unretained(this))));
+ drm_->RunCallbacks();
+ EXPECT_TRUE(owned_plane->in_use());
+ EXPECT_EQ(kPrimaryCrtc, owned_plane->owning_crtc());
+}
+
+TEST_F(HardwareDisplayControllerTest, PlaneStateAfterDestroyingCrtc) {
+ ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
+ new MockScanoutBuffer(kDefaultModeSize)));
+ EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
+ std::vector<ui::OverlayPlane> planes =
+ std::vector<ui::OverlayPlane>(1, plane1);
+ EXPECT_TRUE(controller_->SchedulePageFlip(
+ planes, false, false,
+ base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
+ base::Unretained(this))));
+ drm_->RunCallbacks();
+
+ const ui::HardwareDisplayPlane* owned_plane = nullptr;
+ for (const auto& plane : drm_->plane_manager()->planes())
+ if (plane->in_use())
+ owned_plane = plane;
+ ASSERT_TRUE(owned_plane != nullptr);
+ EXPECT_EQ(kPrimaryCrtc, owned_plane->owning_crtc());
+ scoped_ptr<ui::CrtcController> crtc =
+ controller_->RemoveCrtc(drm_, kPrimaryCrtc);
+ // Destroying crtc should free the plane.
+ crtc.reset();
+ uint32_t crtc_nullid = 0;
EXPECT_FALSE(owned_plane->in_use());
+ EXPECT_EQ(crtc_nullid, owned_plane->owning_crtc());
+}
+
+TEST_F(HardwareDisplayControllerTest, PlaneStateAfterAddCrtc) {
+ ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
+ new MockScanoutBuffer(kDefaultModeSize)));
+ EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
+ std::vector<ui::OverlayPlane> planes =
+ std::vector<ui::OverlayPlane>(1, plane1);
+ EXPECT_TRUE(controller_->SchedulePageFlip(
+ planes, false, false,
+ base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
+ base::Unretained(this))));
+ drm_->RunCallbacks();
+
+ ui::HardwareDisplayPlane* primary_crtc_plane = nullptr;
+ for (const auto& plane : drm_->plane_manager()->planes()) {
+ if (plane->in_use() && kPrimaryCrtc == plane->owning_crtc())
+ primary_crtc_plane = plane;
+ }
+
+ ASSERT_TRUE(primary_crtc_plane != nullptr);
+
+ scoped_ptr<ui::HardwareDisplayController> hdc_controller;
+ hdc_controller.reset(new ui::HardwareDisplayController(
+ controller_->RemoveCrtc(drm_, kPrimaryCrtc), controller_->origin()));
+ EXPECT_TRUE(controller_->SchedulePageFlip(
+ planes, false, false,
+ base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
+ base::Unretained(this))));
+ drm_->RunCallbacks();
+ EXPECT_TRUE(primary_crtc_plane->in_use());
+ EXPECT_EQ(kPrimaryCrtc, primary_crtc_plane->owning_crtc());
+
+ // We reset state of plane here to test that the plane was actually added to
+ // hdc_controller. In which case, the right state should be set to plane
+ // after page flip call is handled by the controller.
+ primary_crtc_plane->set_in_use(false);
+ primary_crtc_plane->set_owning_crtc(0);
+ EXPECT_TRUE(hdc_controller->SchedulePageFlip(
+ planes, false, false,
+ base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
+ base::Unretained(this))));
+ drm_->RunCallbacks();
+ EXPECT_TRUE(primary_crtc_plane->in_use());
+ EXPECT_EQ(kPrimaryCrtc, primary_crtc_plane->owning_crtc());
}
TEST_F(HardwareDisplayControllerTest, ModesetWhilePageFlipping) {
« no previous file with comments | « ui/ozone/platform/drm/gpu/hardware_display_controller.cc ('k') | ui/ozone/platform/drm/gpu/hardware_display_plane_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698