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 |