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