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 |