| 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 "base/bind.h" | 5 #include "base/bind.h" |
| 6 #include "testing/gtest/include/gtest/gtest.h" | 6 #include "testing/gtest/include/gtest/gtest.h" |
| 7 #include "third_party/skia/include/core/SkCanvas.h" | 7 #include "third_party/skia/include/core/SkCanvas.h" |
| 8 #include "ui/ozone/platform/dri/crtc_controller.h" | 8 #include "ui/ozone/platform/dri/crtc_controller.h" |
| 9 #include "ui/ozone/platform/dri/dri_buffer.h" | 9 #include "ui/ozone/platform/dri/dri_buffer.h" |
| 10 #include "ui/ozone/platform/dri/dri_wrapper.h" | 10 #include "ui/ozone/platform/dri/dri_wrapper.h" |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 TEST_F(HardwareDisplayControllerTest, CheckStateAfterPageFlip) { | 96 TEST_F(HardwareDisplayControllerTest, CheckStateAfterPageFlip) { |
| 97 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( | 97 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( |
| 98 new MockScanoutBuffer(kDefaultModeSize))); | 98 new MockScanoutBuffer(kDefaultModeSize))); |
| 99 | 99 |
| 100 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); | 100 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); |
| 101 | 101 |
| 102 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>( | 102 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>( |
| 103 new MockScanoutBuffer(kDefaultModeSize))); | 103 new MockScanoutBuffer(kDefaultModeSize))); |
| 104 controller_->QueueOverlayPlane(plane2); | 104 controller_->QueueOverlayPlane(plane2); |
| 105 EXPECT_TRUE(controller_->SchedulePageFlip( | 105 EXPECT_TRUE(controller_->SchedulePageFlip( |
| 106 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, | 106 false, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, |
| 107 base::Unretained(this)))); | 107 base::Unretained(this)))); |
| 108 drm_->RunCallbacks(); | 108 drm_->RunCallbacks(); |
| 109 EXPECT_TRUE(plane1.buffer->HasOneRef()); | 109 EXPECT_TRUE(plane1.buffer->HasOneRef()); |
| 110 EXPECT_FALSE(plane2.buffer->HasOneRef()); | 110 EXPECT_FALSE(plane2.buffer->HasOneRef()); |
| 111 | 111 |
| 112 EXPECT_EQ(1, drm_->get_page_flip_call_count()); | 112 EXPECT_EQ(1, drm_->get_page_flip_call_count()); |
| 113 EXPECT_EQ(0, drm_->get_overlay_flip_call_count()); | 113 EXPECT_EQ(0, drm_->get_overlay_flip_call_count()); |
| 114 } | 114 } |
| 115 | 115 |
| 116 TEST_F(HardwareDisplayControllerTest, CheckStateIfModesetFails) { | 116 TEST_F(HardwareDisplayControllerTest, CheckStateIfModesetFails) { |
| 117 drm_->set_set_crtc_expectation(false); | 117 drm_->set_set_crtc_expectation(false); |
| 118 | 118 |
| 119 ui::OverlayPlane plane(scoped_refptr<ui::ScanoutBuffer>(new MockScanoutBuffer( | 119 ui::OverlayPlane plane(scoped_refptr<ui::ScanoutBuffer>(new MockScanoutBuffer( |
| 120 kDefaultModeSize))); | 120 kDefaultModeSize))); |
| 121 | 121 |
| 122 EXPECT_FALSE(controller_->Modeset(plane, kDefaultMode)); | 122 EXPECT_FALSE(controller_->Modeset(plane, kDefaultMode)); |
| 123 } | 123 } |
| 124 | 124 |
| 125 TEST_F(HardwareDisplayControllerTest, CheckStateIfPageFlipFails) { | 125 TEST_F(HardwareDisplayControllerTest, CheckStateIfPageFlipFails) { |
| 126 drm_->set_page_flip_expectation(false); | 126 drm_->set_page_flip_expectation(false); |
| 127 | 127 |
| 128 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( | 128 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( |
| 129 new MockScanoutBuffer(kDefaultModeSize))); | 129 new MockScanoutBuffer(kDefaultModeSize))); |
| 130 | 130 |
| 131 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); | 131 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); |
| 132 | 132 |
| 133 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>( | 133 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>( |
| 134 new MockScanoutBuffer(kDefaultModeSize))); | 134 new MockScanoutBuffer(kDefaultModeSize))); |
| 135 controller_->QueueOverlayPlane(plane2); | 135 controller_->QueueOverlayPlane(plane2); |
| 136 EXPECT_FALSE(controller_->SchedulePageFlip( | 136 EXPECT_FALSE(controller_->SchedulePageFlip( |
| 137 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, | 137 false, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, |
| 138 base::Unretained(this)))); | 138 base::Unretained(this)))); |
| 139 drm_->RunCallbacks(); | 139 drm_->RunCallbacks(); |
| 140 | 140 |
| 141 EXPECT_FALSE(plane1.buffer->HasOneRef()); | 141 EXPECT_FALSE(plane1.buffer->HasOneRef()); |
| 142 EXPECT_TRUE(plane2.buffer->HasOneRef()); | 142 EXPECT_TRUE(plane2.buffer->HasOneRef()); |
| 143 } | 143 } |
| 144 | 144 |
| 145 TEST_F(HardwareDisplayControllerTest, VerifyNoDRMCallsWhenDisabled) { | 145 TEST_F(HardwareDisplayControllerTest, VerifyNoDRMCallsWhenDisabled) { |
| 146 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( | 146 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( |
| 147 new MockScanoutBuffer(kDefaultModeSize))); | 147 new MockScanoutBuffer(kDefaultModeSize))); |
| 148 | 148 |
| 149 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); | 149 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); |
| 150 controller_->Disable(); | 150 controller_->Disable(); |
| 151 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>( | 151 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>( |
| 152 new MockScanoutBuffer(kDefaultModeSize))); | 152 new MockScanoutBuffer(kDefaultModeSize))); |
| 153 controller_->QueueOverlayPlane(plane2); | 153 controller_->QueueOverlayPlane(plane2); |
| 154 EXPECT_TRUE(controller_->SchedulePageFlip( | 154 EXPECT_TRUE(controller_->SchedulePageFlip( |
| 155 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, | 155 false, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, |
| 156 base::Unretained(this)))); | 156 base::Unretained(this)))); |
| 157 drm_->RunCallbacks(); | 157 drm_->RunCallbacks(); |
| 158 EXPECT_EQ(0, drm_->get_page_flip_call_count()); | 158 EXPECT_EQ(0, drm_->get_page_flip_call_count()); |
| 159 | 159 |
| 160 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); | 160 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); |
| 161 controller_->QueueOverlayPlane(plane2); | 161 controller_->QueueOverlayPlane(plane2); |
| 162 EXPECT_TRUE(controller_->SchedulePageFlip( | 162 EXPECT_TRUE(controller_->SchedulePageFlip( |
| 163 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, | 163 false, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, |
| 164 base::Unretained(this)))); | 164 base::Unretained(this)))); |
| 165 drm_->RunCallbacks(); | 165 drm_->RunCallbacks(); |
| 166 EXPECT_EQ(1, drm_->get_page_flip_call_count()); | 166 EXPECT_EQ(1, drm_->get_page_flip_call_count()); |
| 167 } | 167 } |
| 168 | 168 |
| 169 TEST_F(HardwareDisplayControllerTest, CheckOverlayPresent) { | 169 TEST_F(HardwareDisplayControllerTest, CheckOverlayPresent) { |
| 170 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( | 170 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( |
| 171 new MockScanoutBuffer(kDefaultModeSize))); | 171 new MockScanoutBuffer(kDefaultModeSize))); |
| 172 ui::OverlayPlane plane2( | 172 ui::OverlayPlane plane2( |
| 173 scoped_refptr<ui::ScanoutBuffer>(new MockScanoutBuffer(kDefaultModeSize)), | 173 scoped_refptr<ui::ScanoutBuffer>(new MockScanoutBuffer(kDefaultModeSize)), |
| 174 1, | 174 1, |
| 175 gfx::OVERLAY_TRANSFORM_NONE, | 175 gfx::OVERLAY_TRANSFORM_NONE, |
| 176 gfx::Rect(kDefaultModeSize), | 176 gfx::Rect(kDefaultModeSize), |
| 177 gfx::RectF(kDefaultModeSizeF)); | 177 gfx::RectF(kDefaultModeSizeF)); |
| 178 | 178 |
| 179 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); | 179 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); |
| 180 | 180 |
| 181 controller_->QueueOverlayPlane(plane1); | 181 controller_->QueueOverlayPlane(plane1); |
| 182 controller_->QueueOverlayPlane(plane2); | 182 controller_->QueueOverlayPlane(plane2); |
| 183 | 183 |
| 184 EXPECT_TRUE(controller_->SchedulePageFlip( | 184 EXPECT_TRUE(controller_->SchedulePageFlip( |
| 185 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, | 185 false, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, |
| 186 base::Unretained(this)))); | 186 base::Unretained(this)))); |
| 187 drm_->RunCallbacks(); | 187 drm_->RunCallbacks(); |
| 188 EXPECT_EQ(1, drm_->get_page_flip_call_count()); | 188 EXPECT_EQ(1, drm_->get_page_flip_call_count()); |
| 189 EXPECT_EQ(1, drm_->get_overlay_flip_call_count()); | 189 EXPECT_EQ(1, drm_->get_overlay_flip_call_count()); |
| 190 } | 190 } |
| 191 | 191 |
| 192 TEST_F(HardwareDisplayControllerTest, PageflipMirroredControllers) { | 192 TEST_F(HardwareDisplayControllerTest, PageflipMirroredControllers) { |
| 193 controller_->AddCrtc(scoped_ptr<ui::CrtcController>( | 193 controller_->AddCrtc(scoped_ptr<ui::CrtcController>( |
| 194 new ui::CrtcController(drm_.get(), kSecondaryCrtc, kSecondaryConnector))); | 194 new ui::CrtcController(drm_.get(), kSecondaryCrtc, kSecondaryConnector))); |
| 195 | 195 |
| 196 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( | 196 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( |
| 197 new MockScanoutBuffer(kDefaultModeSize))); | 197 new MockScanoutBuffer(kDefaultModeSize))); |
| 198 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); | 198 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); |
| 199 EXPECT_EQ(2, drm_->get_set_crtc_call_count()); | 199 EXPECT_EQ(2, drm_->get_set_crtc_call_count()); |
| 200 | 200 |
| 201 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>( | 201 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>( |
| 202 new MockScanoutBuffer(kDefaultModeSize))); | 202 new MockScanoutBuffer(kDefaultModeSize))); |
| 203 controller_->QueueOverlayPlane(plane2); | 203 controller_->QueueOverlayPlane(plane2); |
| 204 EXPECT_TRUE(controller_->SchedulePageFlip( | 204 EXPECT_TRUE(controller_->SchedulePageFlip( |
| 205 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, | 205 false, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, |
| 206 base::Unretained(this)))); | 206 base::Unretained(this)))); |
| 207 drm_->RunCallbacks(); | 207 drm_->RunCallbacks(); |
| 208 EXPECT_EQ(2, drm_->get_page_flip_call_count()); | 208 EXPECT_EQ(2, drm_->get_page_flip_call_count()); |
| 209 EXPECT_EQ(1, page_flips_); | 209 EXPECT_EQ(1, page_flips_); |
| 210 } | 210 } |
| 211 | 211 |
| 212 TEST_F(HardwareDisplayControllerTest, PlaneStateAfterRemoveCrtc) { | 212 TEST_F(HardwareDisplayControllerTest, PlaneStateAfterRemoveCrtc) { |
| 213 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( | 213 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( |
| 214 new MockScanoutBuffer(kDefaultModeSize))); | 214 new MockScanoutBuffer(kDefaultModeSize))); |
| 215 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); | 215 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); |
| 216 controller_->QueueOverlayPlane(plane1); | 216 controller_->QueueOverlayPlane(plane1); |
| 217 EXPECT_TRUE(controller_->SchedulePageFlip( | 217 EXPECT_TRUE(controller_->SchedulePageFlip( |
| 218 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, | 218 false, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, |
| 219 base::Unretained(this)))); | 219 base::Unretained(this)))); |
| 220 drm_->RunCallbacks(); | 220 drm_->RunCallbacks(); |
| 221 | 221 |
| 222 const ui::HardwareDisplayPlane* owned_plane = nullptr; | 222 const ui::HardwareDisplayPlane* owned_plane = nullptr; |
| 223 for (const auto& plane : drm_->plane_manager()->planes()) | 223 for (const auto& plane : drm_->plane_manager()->planes()) |
| 224 if (plane->in_use()) | 224 if (plane->in_use()) |
| 225 owned_plane = plane; | 225 owned_plane = plane; |
| 226 ASSERT_TRUE(owned_plane != nullptr); | 226 ASSERT_TRUE(owned_plane != nullptr); |
| 227 EXPECT_EQ(kPrimaryCrtc, owned_plane->owning_crtc()); | 227 EXPECT_EQ(kPrimaryCrtc, owned_plane->owning_crtc()); |
| 228 // Removing the crtc should free the plane. | 228 // Removing the crtc should free the plane. |
| 229 scoped_ptr<ui::CrtcController> crtc = | 229 scoped_ptr<ui::CrtcController> crtc = |
| 230 controller_->RemoveCrtc(drm_, kPrimaryCrtc); | 230 controller_->RemoveCrtc(drm_, kPrimaryCrtc); |
| 231 EXPECT_FALSE(owned_plane->in_use()); | 231 EXPECT_FALSE(owned_plane->in_use()); |
| 232 } | 232 } |
| 233 | 233 |
| 234 TEST_F(HardwareDisplayControllerTest, ModesetWhilePageFlipping) { | 234 TEST_F(HardwareDisplayControllerTest, ModesetWhilePageFlipping) { |
| 235 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( | 235 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( |
| 236 new MockScanoutBuffer(kDefaultModeSize))); | 236 new MockScanoutBuffer(kDefaultModeSize))); |
| 237 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); | 237 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); |
| 238 controller_->QueueOverlayPlane(plane1); | 238 controller_->QueueOverlayPlane(plane1); |
| 239 EXPECT_TRUE(controller_->SchedulePageFlip( | 239 EXPECT_TRUE(controller_->SchedulePageFlip( |
| 240 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, | 240 false, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, |
| 241 base::Unretained(this)))); | 241 base::Unretained(this)))); |
| 242 | 242 |
| 243 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); | 243 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); |
| 244 drm_->RunCallbacks(); | 244 drm_->RunCallbacks(); |
| 245 EXPECT_EQ(1, page_flips_); | 245 EXPECT_EQ(1, page_flips_); |
| 246 } | 246 } |
| 247 | 247 |
| 248 TEST_F(HardwareDisplayControllerTest, AddCrtcMidPageFlip) { | 248 TEST_F(HardwareDisplayControllerTest, AddCrtcMidPageFlip) { |
| 249 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( | 249 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( |
| 250 new MockScanoutBuffer(kDefaultModeSize))); | 250 new MockScanoutBuffer(kDefaultModeSize))); |
| 251 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); | 251 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); |
| 252 controller_->QueueOverlayPlane(plane1); | 252 controller_->QueueOverlayPlane(plane1); |
| 253 EXPECT_TRUE(controller_->SchedulePageFlip( | 253 EXPECT_TRUE(controller_->SchedulePageFlip( |
| 254 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, | 254 false, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, |
| 255 base::Unretained(this)))); | 255 base::Unretained(this)))); |
| 256 | 256 |
| 257 controller_->AddCrtc(scoped_ptr<ui::CrtcController>( | 257 controller_->AddCrtc(scoped_ptr<ui::CrtcController>( |
| 258 new ui::CrtcController(drm_.get(), kSecondaryCrtc, kSecondaryConnector))); | 258 new ui::CrtcController(drm_.get(), kSecondaryCrtc, kSecondaryConnector))); |
| 259 | 259 |
| 260 drm_->RunCallbacks(); | 260 drm_->RunCallbacks(); |
| 261 EXPECT_EQ(1, page_flips_); | 261 EXPECT_EQ(1, page_flips_); |
| 262 } | 262 } |
| 263 | 263 |
| 264 TEST_F(HardwareDisplayControllerTest, RemoveCrtcMidPageFlip) { | 264 TEST_F(HardwareDisplayControllerTest, RemoveCrtcMidPageFlip) { |
| 265 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( | 265 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( |
| 266 new MockScanoutBuffer(kDefaultModeSize))); | 266 new MockScanoutBuffer(kDefaultModeSize))); |
| 267 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); | 267 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); |
| 268 controller_->QueueOverlayPlane(plane1); | 268 controller_->QueueOverlayPlane(plane1); |
| 269 EXPECT_TRUE(controller_->SchedulePageFlip( | 269 EXPECT_TRUE(controller_->SchedulePageFlip( |
| 270 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, | 270 false, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, |
| 271 base::Unretained(this)))); | 271 base::Unretained(this)))); |
| 272 | 272 |
| 273 controller_->RemoveCrtc(drm_, kPrimaryCrtc); | 273 controller_->RemoveCrtc(drm_, kPrimaryCrtc); |
| 274 | 274 |
| 275 EXPECT_EQ(1, page_flips_); | 275 EXPECT_EQ(1, page_flips_); |
| 276 drm_->RunCallbacks(); | 276 drm_->RunCallbacks(); |
| 277 EXPECT_EQ(1, page_flips_); | 277 EXPECT_EQ(1, page_flips_); |
| 278 } | 278 } |
| OLD | NEW |