Index: ui/ozone/platform/dri/hardware_display_plane_manager_unittest.cc |
diff --git a/ui/ozone/platform/dri/hardware_display_plane_manager_unittest.cc b/ui/ozone/platform/dri/hardware_display_plane_manager_unittest.cc |
index 76ca8d49ae6331a6edc1e16732ba5379381db87f..0a1f20a44bab700d6604cc44ce66e3daf52e7f65 100644 |
--- a/ui/ozone/platform/dri/hardware_display_plane_manager_unittest.cc |
+++ b/ui/ozone/platform/dri/hardware_display_plane_manager_unittest.cc |
@@ -6,11 +6,14 @@ |
#include "base/memory/scoped_ptr.h" |
#include "testing/gtest/include/gtest/gtest.h" |
+#include "ui/ozone/platform/dri/crtc_controller.h" |
#include "ui/ozone/platform/dri/hardware_display_controller.h" |
#include "ui/ozone/platform/dri/hardware_display_plane.h" |
#include "ui/ozone/platform/dri/hardware_display_plane_manager.h" |
+#include "ui/ozone/platform/dri/hardware_display_plane_manager_legacy.h" |
#include "ui/ozone/platform/dri/overlay_plane.h" |
#include "ui/ozone/platform/dri/scanout_buffer.h" |
+#include "ui/ozone/platform/dri/test/mock_dri_wrapper.h" |
namespace { |
@@ -28,7 +31,7 @@ class FakeScanoutBuffer : public ui::ScanoutBuffer { |
FakeScanoutBuffer() {} |
// ui::ScanoutBuffer: |
- uint32_t GetFramebufferId() const override { return 0; } |
+ uint32_t GetFramebufferId() const override { return 1; } |
uint32_t GetHandle() const override { return 0; } |
gfx::Size GetSize() const override { return gfx::Size(1, 1); } |
@@ -184,6 +187,7 @@ TEST_F(HardwareDisplayPlaneManagerTest, MultipleFrames) { |
default_crtcs_[0], nullptr)); |
EXPECT_EQ(1, plane_manager_->plane_count()); |
// Pretend we committed the frame. |
+ state_.committed = true; |
state_.plane_list.swap(state_.old_plane_list); |
ui::HardwareDisplayPlane* old_plane = state_.old_plane_list[0]; |
// The same plane should be used. |
@@ -225,4 +229,26 @@ TEST_F(HardwareDisplayPlaneManagerTest, SharedPlanes) { |
default_crtcs_[0], nullptr)); |
} |
+TEST(HardwareDisplayPlaneManagerLegacyTest, UnusedPlanesAreReleased) { |
+ std::vector<uint32_t> crtcs; |
+ crtcs.push_back(100); |
+ ui::MockDriWrapper drm(3, false, crtcs, 2); |
+ ui::OverlayPlaneList assigns; |
+ scoped_refptr<FakeScanoutBuffer> fake_buffer = new FakeScanoutBuffer(); |
+ assigns.push_back(ui::OverlayPlane(fake_buffer)); |
+ assigns.push_back(ui::OverlayPlane(fake_buffer)); |
+ ui::HardwareDisplayPlaneList hdpl; |
+ ui::CrtcController crtc(&drm, crtcs[0], 0); |
+ EXPECT_TRUE(drm.plane_manager()->AssignOverlayPlanes(&hdpl, assigns, crtcs[0], |
+ &crtc)); |
+ EXPECT_TRUE(drm.plane_manager()->Commit(&hdpl)); |
+ assigns.clear(); |
+ assigns.push_back(ui::OverlayPlane(fake_buffer)); |
+ EXPECT_TRUE(drm.plane_manager()->AssignOverlayPlanes(&hdpl, assigns, crtcs[0], |
+ &crtc)); |
+ EXPECT_EQ(0, drm.get_overlay_clear_call_count()); |
+ EXPECT_TRUE(drm.plane_manager()->Commit(&hdpl)); |
+ EXPECT_EQ(1, drm.get_overlay_clear_call_count()); |
+} |
+ |
} // namespace |