| 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 <vector> | 5 #include <vector> |
| 6 | 6 |
| 7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
| 8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
| 9 #include "ui/ozone/platform/dri/crtc_controller.h" |
| 9 #include "ui/ozone/platform/dri/hardware_display_controller.h" | 10 #include "ui/ozone/platform/dri/hardware_display_controller.h" |
| 10 #include "ui/ozone/platform/dri/hardware_display_plane.h" | 11 #include "ui/ozone/platform/dri/hardware_display_plane.h" |
| 11 #include "ui/ozone/platform/dri/hardware_display_plane_manager.h" | 12 #include "ui/ozone/platform/dri/hardware_display_plane_manager.h" |
| 13 #include "ui/ozone/platform/dri/hardware_display_plane_manager_legacy.h" |
| 12 #include "ui/ozone/platform/dri/overlay_plane.h" | 14 #include "ui/ozone/platform/dri/overlay_plane.h" |
| 13 #include "ui/ozone/platform/dri/scanout_buffer.h" | 15 #include "ui/ozone/platform/dri/scanout_buffer.h" |
| 16 #include "ui/ozone/platform/dri/test/mock_dri_wrapper.h" |
| 14 | 17 |
| 15 namespace { | 18 namespace { |
| 16 | 19 |
| 17 struct FakePlaneInfo { | 20 struct FakePlaneInfo { |
| 18 uint32_t id; | 21 uint32_t id; |
| 19 uint32_t allowed_crtc_mask; | 22 uint32_t allowed_crtc_mask; |
| 20 }; | 23 }; |
| 21 | 24 |
| 22 const FakePlaneInfo kOnePlanePerCrtc[] = {{10, 1}, {20, 2}}; | 25 const FakePlaneInfo kOnePlanePerCrtc[] = {{10, 1}, {20, 2}}; |
| 23 const FakePlaneInfo kTwoPlanesPerCrtc[] = {{10, 1}, {11, 1}, {20, 2}, {21, 2}}; | 26 const FakePlaneInfo kTwoPlanesPerCrtc[] = {{10, 1}, {11, 1}, {20, 2}, {21, 2}}; |
| 24 const FakePlaneInfo kOnePlanePerCrtcWithShared[] = {{10, 1}, {20, 2}, {50, 3}}; | 27 const FakePlaneInfo kOnePlanePerCrtcWithShared[] = {{10, 1}, {20, 2}, {50, 3}}; |
| 25 | 28 |
| 26 class FakeScanoutBuffer : public ui::ScanoutBuffer { | 29 class FakeScanoutBuffer : public ui::ScanoutBuffer { |
| 27 public: | 30 public: |
| 28 FakeScanoutBuffer() {} | 31 FakeScanoutBuffer() {} |
| 29 | 32 |
| 30 // ui::ScanoutBuffer: | 33 // ui::ScanoutBuffer: |
| 31 uint32_t GetFramebufferId() const override { return 0; } | 34 uint32_t GetFramebufferId() const override { return 1; } |
| 32 uint32_t GetHandle() const override { return 0; } | 35 uint32_t GetHandle() const override { return 0; } |
| 33 gfx::Size GetSize() const override { return gfx::Size(1, 1); } | 36 gfx::Size GetSize() const override { return gfx::Size(1, 1); } |
| 34 | 37 |
| 35 protected: | 38 protected: |
| 36 ~FakeScanoutBuffer() override {} | 39 ~FakeScanoutBuffer() override {} |
| 37 }; | 40 }; |
| 38 | 41 |
| 39 class FakePlaneManager : public ui::HardwareDisplayPlaneManager { | 42 class FakePlaneManager : public ui::HardwareDisplayPlaneManager { |
| 40 public: | 43 public: |
| 41 FakePlaneManager() : plane_count_(0) {} | 44 FakePlaneManager() : plane_count_(0) {} |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 177 TEST_F(HardwareDisplayPlaneManagerTest, MultipleFrames) { | 180 TEST_F(HardwareDisplayPlaneManagerTest, MultipleFrames) { |
| 178 ui::OverlayPlaneList assigns; | 181 ui::OverlayPlaneList assigns; |
| 179 assigns.push_back(ui::OverlayPlane(fake_buffer_)); | 182 assigns.push_back(ui::OverlayPlane(fake_buffer_)); |
| 180 plane_manager_->InitForTest(kTwoPlanesPerCrtc, arraysize(kTwoPlanesPerCrtc), | 183 plane_manager_->InitForTest(kTwoPlanesPerCrtc, arraysize(kTwoPlanesPerCrtc), |
| 181 default_crtcs_); | 184 default_crtcs_); |
| 182 | 185 |
| 183 EXPECT_TRUE(plane_manager_->AssignOverlayPlanes(&state_, assigns, | 186 EXPECT_TRUE(plane_manager_->AssignOverlayPlanes(&state_, assigns, |
| 184 default_crtcs_[0], nullptr)); | 187 default_crtcs_[0], nullptr)); |
| 185 EXPECT_EQ(1, plane_manager_->plane_count()); | 188 EXPECT_EQ(1, plane_manager_->plane_count()); |
| 186 // Pretend we committed the frame. | 189 // Pretend we committed the frame. |
| 190 state_.committed = true; |
| 187 state_.plane_list.swap(state_.old_plane_list); | 191 state_.plane_list.swap(state_.old_plane_list); |
| 188 ui::HardwareDisplayPlane* old_plane = state_.old_plane_list[0]; | 192 ui::HardwareDisplayPlane* old_plane = state_.old_plane_list[0]; |
| 189 // The same plane should be used. | 193 // The same plane should be used. |
| 190 EXPECT_TRUE(plane_manager_->AssignOverlayPlanes(&state_, assigns, | 194 EXPECT_TRUE(plane_manager_->AssignOverlayPlanes(&state_, assigns, |
| 191 default_crtcs_[0], nullptr)); | 195 default_crtcs_[0], nullptr)); |
| 192 EXPECT_EQ(2, plane_manager_->plane_count()); | 196 EXPECT_EQ(2, plane_manager_->plane_count()); |
| 193 EXPECT_EQ(state_.plane_list[0], old_plane); | 197 EXPECT_EQ(state_.plane_list[0], old_plane); |
| 194 } | 198 } |
| 195 | 199 |
| 196 TEST_F(HardwareDisplayPlaneManagerTest, MultipleFramesDifferentPlanes) { | 200 TEST_F(HardwareDisplayPlaneManagerTest, MultipleFramesDifferentPlanes) { |
| (...skipping 21 matching lines...) Expand all Loading... |
| 218 default_crtcs_); | 222 default_crtcs_); |
| 219 | 223 |
| 220 EXPECT_TRUE(plane_manager_->AssignOverlayPlanes(&state_, assigns, | 224 EXPECT_TRUE(plane_manager_->AssignOverlayPlanes(&state_, assigns, |
| 221 default_crtcs_[1], nullptr)); | 225 default_crtcs_[1], nullptr)); |
| 222 EXPECT_EQ(2, plane_manager_->plane_count()); | 226 EXPECT_EQ(2, plane_manager_->plane_count()); |
| 223 // The shared plane is now unavailable for use by the other CRTC. | 227 // The shared plane is now unavailable for use by the other CRTC. |
| 224 EXPECT_FALSE(plane_manager_->AssignOverlayPlanes(&state_, assigns, | 228 EXPECT_FALSE(plane_manager_->AssignOverlayPlanes(&state_, assigns, |
| 225 default_crtcs_[0], nullptr)); | 229 default_crtcs_[0], nullptr)); |
| 226 } | 230 } |
| 227 | 231 |
| 232 TEST(HardwareDisplayPlaneManagerLegacyTest, UnusedPlanesAreReleased) { |
| 233 std::vector<uint32_t> crtcs; |
| 234 crtcs.push_back(100); |
| 235 ui::MockDriWrapper drm(3, false, crtcs, 2); |
| 236 ui::OverlayPlaneList assigns; |
| 237 scoped_refptr<FakeScanoutBuffer> fake_buffer = new FakeScanoutBuffer(); |
| 238 assigns.push_back(ui::OverlayPlane(fake_buffer)); |
| 239 assigns.push_back(ui::OverlayPlane(fake_buffer)); |
| 240 ui::HardwareDisplayPlaneList hdpl; |
| 241 ui::CrtcController crtc(&drm, crtcs[0], 0); |
| 242 EXPECT_TRUE(drm.plane_manager()->AssignOverlayPlanes(&hdpl, assigns, crtcs[0], |
| 243 &crtc)); |
| 244 EXPECT_TRUE(drm.plane_manager()->Commit(&hdpl)); |
| 245 assigns.clear(); |
| 246 assigns.push_back(ui::OverlayPlane(fake_buffer)); |
| 247 EXPECT_TRUE(drm.plane_manager()->AssignOverlayPlanes(&hdpl, assigns, crtcs[0], |
| 248 &crtc)); |
| 249 EXPECT_EQ(0, drm.get_overlay_clear_call_count()); |
| 250 EXPECT_TRUE(drm.plane_manager()->Commit(&hdpl)); |
| 251 EXPECT_EQ(1, drm.get_overlay_clear_call_count()); |
| 252 } |
| 253 |
| 228 } // namespace | 254 } // namespace |
| OLD | NEW |