Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(18)

Side by Side Diff: ui/ozone/platform/drm/gpu/hardware_display_controller_unittest.cc

Issue 1418503012: [Ozone-DRM] Remove bool return value for SchedulePageFlip call (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased & updated Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 <drm_fourcc.h> 5 #include <drm_fourcc.h>
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
9 #include "third_party/skia/include/core/SkCanvas.h" 9 #include "third_party/skia/include/core/SkCanvas.h"
10 #include "ui/ozone/platform/drm/gpu/crtc_controller.h" 10 #include "ui/ozone/platform/drm/gpu/crtc_controller.h"
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 void SetUp() override; 62 void SetUp() override;
63 void TearDown() override; 63 void TearDown() override;
64 64
65 void PageFlipCallback(gfx::SwapResult); 65 void PageFlipCallback(gfx::SwapResult);
66 66
67 protected: 67 protected:
68 scoped_ptr<ui::HardwareDisplayController> controller_; 68 scoped_ptr<ui::HardwareDisplayController> controller_;
69 scoped_refptr<ui::MockDrmDevice> drm_; 69 scoped_refptr<ui::MockDrmDevice> drm_;
70 70
71 int page_flips_; 71 int page_flips_;
72 gfx::SwapResult last_swap_result_;
72 73
73 private: 74 private:
74 DISALLOW_COPY_AND_ASSIGN(HardwareDisplayControllerTest); 75 DISALLOW_COPY_AND_ASSIGN(HardwareDisplayControllerTest);
75 }; 76 };
76 77
77 void HardwareDisplayControllerTest::SetUp() { 78 void HardwareDisplayControllerTest::SetUp() {
79 page_flips_ = 0;
80 last_swap_result_ = gfx::SwapResult::SWAP_FAILED;
81
78 std::vector<uint32_t> crtcs; 82 std::vector<uint32_t> crtcs;
79 crtcs.push_back(kPrimaryCrtc); 83 crtcs.push_back(kPrimaryCrtc);
80 crtcs.push_back(kSecondaryCrtc); 84 crtcs.push_back(kSecondaryCrtc);
81 drm_ = new ui::MockDrmDevice(false, crtcs, kPlanesPerCrtc); 85 drm_ = new ui::MockDrmDevice(false, crtcs, kPlanesPerCrtc);
82 controller_.reset(new ui::HardwareDisplayController( 86 controller_.reset(new ui::HardwareDisplayController(
83 scoped_ptr<ui::CrtcController>( 87 scoped_ptr<ui::CrtcController>(
84 new ui::CrtcController(drm_.get(), kPrimaryCrtc, kPrimaryConnector)), 88 new ui::CrtcController(drm_.get(), kPrimaryCrtc, kPrimaryConnector)),
85 gfx::Point())); 89 gfx::Point()));
86 } 90 }
87 91
88 void HardwareDisplayControllerTest::TearDown() { 92 void HardwareDisplayControllerTest::TearDown() {
89 controller_.reset(); 93 controller_.reset();
90 drm_ = nullptr; 94 drm_ = nullptr;
91 } 95 }
92 96
93 void HardwareDisplayControllerTest::PageFlipCallback(gfx::SwapResult) { 97 void HardwareDisplayControllerTest::PageFlipCallback(gfx::SwapResult result) {
94 page_flips_++; 98 page_flips_++;
99 last_swap_result_ = result;
95 } 100 }
96 101
97 TEST_F(HardwareDisplayControllerTest, CheckModesettingResult) { 102 TEST_F(HardwareDisplayControllerTest, CheckModesettingResult) {
98 ui::OverlayPlane plane(scoped_refptr<ui::ScanoutBuffer>( 103 ui::OverlayPlane plane(scoped_refptr<ui::ScanoutBuffer>(
99 new MockScanoutBuffer(kDefaultModeSize))); 104 new MockScanoutBuffer(kDefaultModeSize)));
100 105
101 EXPECT_TRUE(controller_->Modeset(plane, kDefaultMode)); 106 EXPECT_TRUE(controller_->Modeset(plane, kDefaultMode));
102 EXPECT_FALSE(plane.buffer->HasOneRef()); 107 EXPECT_FALSE(plane.buffer->HasOneRef());
103 } 108 }
104 109
105 TEST_F(HardwareDisplayControllerTest, CheckStateAfterPageFlip) { 110 TEST_F(HardwareDisplayControllerTest, CheckStateAfterPageFlip) {
106 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 111 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
107 new MockScanoutBuffer(kDefaultModeSize))); 112 new MockScanoutBuffer(kDefaultModeSize)));
108 113
109 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 114 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
110 115
111 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>( 116 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>(
112 new MockScanoutBuffer(kDefaultModeSize))); 117 new MockScanoutBuffer(kDefaultModeSize)));
113 std::vector<ui::OverlayPlane> planes = 118 std::vector<ui::OverlayPlane> planes =
114 std::vector<ui::OverlayPlane>(1, plane2); 119 std::vector<ui::OverlayPlane>(1, plane2);
115 EXPECT_TRUE(controller_->SchedulePageFlip( 120 controller_->SchedulePageFlip(
116 planes, false /* test_only */, 121 planes, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
117 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 122 base::Unretained(this)));
118 base::Unretained(this))));
119 drm_->RunCallbacks(); 123 drm_->RunCallbacks();
120 EXPECT_TRUE(plane1.buffer->HasOneRef()); 124 EXPECT_TRUE(plane1.buffer->HasOneRef());
121 EXPECT_FALSE(plane2.buffer->HasOneRef()); 125 EXPECT_FALSE(plane2.buffer->HasOneRef());
122 126
127 EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_);
128 EXPECT_EQ(1, page_flips_);
123 EXPECT_EQ(1, drm_->get_page_flip_call_count()); 129 EXPECT_EQ(1, drm_->get_page_flip_call_count());
124 EXPECT_EQ(0, drm_->get_overlay_flip_call_count()); 130 EXPECT_EQ(0, drm_->get_overlay_flip_call_count());
125 } 131 }
126 132
127 TEST_F(HardwareDisplayControllerTest, CheckStateIfModesetFails) { 133 TEST_F(HardwareDisplayControllerTest, CheckStateIfModesetFails) {
128 drm_->set_set_crtc_expectation(false); 134 drm_->set_set_crtc_expectation(false);
129 135
130 ui::OverlayPlane plane(scoped_refptr<ui::ScanoutBuffer>( 136 ui::OverlayPlane plane(scoped_refptr<ui::ScanoutBuffer>(
131 new MockScanoutBuffer(kDefaultModeSize))); 137 new MockScanoutBuffer(kDefaultModeSize)));
132 138
133 EXPECT_FALSE(controller_->Modeset(plane, kDefaultMode)); 139 EXPECT_FALSE(controller_->Modeset(plane, kDefaultMode));
134 } 140 }
135 141
136 TEST_F(HardwareDisplayControllerTest, CheckStateIfPageFlipFails) { 142 TEST_F(HardwareDisplayControllerTest, CheckStateIfPageFlipFails) {
137 drm_->set_page_flip_expectation(false); 143 drm_->set_page_flip_expectation(false);
138 144
139 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 145 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
140 new MockScanoutBuffer(kDefaultModeSize))); 146 new MockScanoutBuffer(kDefaultModeSize)));
141 147
142 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 148 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
143 149
144 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>( 150 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>(
145 new MockScanoutBuffer(kDefaultModeSize))); 151 new MockScanoutBuffer(kDefaultModeSize)));
146 std::vector<ui::OverlayPlane> planes = 152 std::vector<ui::OverlayPlane> planes =
147 std::vector<ui::OverlayPlane>(1, plane2); 153 std::vector<ui::OverlayPlane>(1, plane2);
148 EXPECT_FALSE(controller_->SchedulePageFlip( 154 controller_->SchedulePageFlip(
149 planes, false /* test_only */, 155 planes, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
150 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 156 base::Unretained(this)));
151 base::Unretained(this))));
152 drm_->RunCallbacks(); 157 drm_->RunCallbacks();
153 planes.clear(); 158 planes.clear();
154 159
160 EXPECT_EQ(gfx::SwapResult::SWAP_FAILED, last_swap_result_);
161 EXPECT_EQ(1, page_flips_);
155 EXPECT_FALSE(plane1.buffer->HasOneRef()); 162 EXPECT_FALSE(plane1.buffer->HasOneRef());
156 EXPECT_TRUE(plane2.buffer->HasOneRef()); 163 EXPECT_TRUE(plane2.buffer->HasOneRef());
157 } 164 }
158 165
159 TEST_F(HardwareDisplayControllerTest, CheckOverlayPresent) { 166 TEST_F(HardwareDisplayControllerTest, CheckOverlayPresent) {
160 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 167 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
161 new MockScanoutBuffer(kDefaultModeSize))); 168 new MockScanoutBuffer(kDefaultModeSize)));
162 ui::OverlayPlane plane2( 169 ui::OverlayPlane plane2(
163 scoped_refptr<ui::ScanoutBuffer>(new MockScanoutBuffer(kOverlaySize)), 1, 170 scoped_refptr<ui::ScanoutBuffer>(new MockScanoutBuffer(kOverlaySize)), 1,
164 gfx::OVERLAY_TRANSFORM_NONE, gfx::Rect(kOverlaySize), 171 gfx::OVERLAY_TRANSFORM_NONE, gfx::Rect(kOverlaySize),
165 gfx::RectF(kDefaultModeSizeF)); 172 gfx::RectF(kDefaultModeSizeF));
166 173
167 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 174 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
168 175
169 std::vector<ui::OverlayPlane> planes; 176 std::vector<ui::OverlayPlane> planes;
170 planes.push_back(plane1); 177 planes.push_back(plane1);
171 planes.push_back(plane2); 178 planes.push_back(plane2);
172 179
173 EXPECT_TRUE(controller_->SchedulePageFlip( 180 controller_->SchedulePageFlip(
174 planes, false /* test_only */, 181 planes, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
175 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 182 base::Unretained(this)));
176 base::Unretained(this))));
177 drm_->RunCallbacks(); 183 drm_->RunCallbacks();
184 EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_);
185 EXPECT_EQ(1, page_flips_);
178 EXPECT_EQ(1, drm_->get_page_flip_call_count()); 186 EXPECT_EQ(1, drm_->get_page_flip_call_count());
179 EXPECT_EQ(1, drm_->get_overlay_flip_call_count()); 187 EXPECT_EQ(1, drm_->get_overlay_flip_call_count());
180 } 188 }
181 189
182 TEST_F(HardwareDisplayControllerTest, CheckOverlayTestMode) { 190 TEST_F(HardwareDisplayControllerTest, CheckOverlayTestMode) {
183 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 191 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
184 new MockScanoutBuffer(kDefaultModeSize))); 192 new MockScanoutBuffer(kDefaultModeSize)));
185 ui::OverlayPlane plane2( 193 ui::OverlayPlane plane2(
186 scoped_refptr<ui::ScanoutBuffer>(new MockScanoutBuffer(kOverlaySize)), 1, 194 scoped_refptr<ui::ScanoutBuffer>(new MockScanoutBuffer(kOverlaySize)), 1,
187 gfx::OVERLAY_TRANSFORM_NONE, gfx::Rect(kOverlaySize), 195 gfx::OVERLAY_TRANSFORM_NONE, gfx::Rect(kOverlaySize),
188 gfx::RectF(kDefaultModeSizeF)); 196 gfx::RectF(kDefaultModeSizeF));
189 197
190 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 198 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
191 199
192 std::vector<ui::OverlayPlane> planes; 200 std::vector<ui::OverlayPlane> planes;
193 planes.push_back(plane1); 201 planes.push_back(plane1);
194 planes.push_back(plane2); 202 planes.push_back(plane2);
195 203
196 EXPECT_TRUE(controller_->SchedulePageFlip( 204 controller_->SchedulePageFlip(
197 planes, false /* test_only */, 205 planes, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
198 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 206 base::Unretained(this)));
199 base::Unretained(this))));
200 drm_->RunCallbacks();
201 EXPECT_EQ(1, drm_->get_page_flip_call_count());
202 EXPECT_EQ(1, drm_->get_overlay_flip_call_count());
203 207
204 // A test call shouldn't cause new flips, but should succeed. 208 // A test call shouldn't cause new flips, but should succeed.
205 EXPECT_TRUE(controller_->SchedulePageFlip( 209 EXPECT_TRUE(controller_->TestPageFlip(planes));
206 planes, true, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
207 base::Unretained(this))));
208 drm_->RunCallbacks(); 210 drm_->RunCallbacks();
211 EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_);
212 EXPECT_EQ(1, page_flips_);
209 EXPECT_EQ(1, drm_->get_page_flip_call_count()); 213 EXPECT_EQ(1, drm_->get_page_flip_call_count());
210 EXPECT_EQ(1, drm_->get_overlay_flip_call_count()); 214 EXPECT_EQ(1, drm_->get_overlay_flip_call_count());
211 215
212 // Regular flips should continue on normally. 216 // Regular flips should continue on normally.
213 EXPECT_TRUE(controller_->SchedulePageFlip( 217 controller_->SchedulePageFlip(
214 planes, false /* test_only */, 218 planes, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
215 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 219 base::Unretained(this)));
216 base::Unretained(this))));
217 drm_->RunCallbacks(); 220 drm_->RunCallbacks();
221 EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_);
222 EXPECT_EQ(2, page_flips_);
218 EXPECT_EQ(2, drm_->get_page_flip_call_count()); 223 EXPECT_EQ(2, drm_->get_page_flip_call_count());
219 EXPECT_EQ(2, drm_->get_overlay_flip_call_count()); 224 EXPECT_EQ(2, drm_->get_overlay_flip_call_count());
220 } 225 }
221 226
222 TEST_F(HardwareDisplayControllerTest, CheckOverlayFullScreenMode) { 227 TEST_F(HardwareDisplayControllerTest, CheckOverlayFullScreenMode) {
223 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 228 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
224 new MockScanoutBuffer(kDefaultModeSize))); 229 new MockScanoutBuffer(kDefaultModeSize)));
225 ui::OverlayPlane plane2( 230 ui::OverlayPlane plane2(
226 scoped_refptr<ui::ScanoutBuffer>(new MockScanoutBuffer(kDefaultModeSize)), 231 scoped_refptr<ui::ScanoutBuffer>(new MockScanoutBuffer(kDefaultModeSize)),
227 1, gfx::OVERLAY_TRANSFORM_NONE, gfx::Rect(kDefaultModeSize), 232 1, gfx::OVERLAY_TRANSFORM_NONE, gfx::Rect(kDefaultModeSize),
228 gfx::RectF(kDefaultModeSizeF)); 233 gfx::RectF(kDefaultModeSizeF));
229 234
230 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 235 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
231 236
232 std::vector<ui::OverlayPlane> planes; 237 std::vector<ui::OverlayPlane> planes;
233 planes.push_back(plane1); 238 planes.push_back(plane1);
234 planes.push_back(plane2); 239 planes.push_back(plane2);
235 240
236 EXPECT_TRUE(controller_->SchedulePageFlip( 241 controller_->SchedulePageFlip(
237 planes, false /* test_only */, 242 planes, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
238 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 243 base::Unretained(this)));
239 base::Unretained(this))));
240 drm_->RunCallbacks(); 244 drm_->RunCallbacks();
245 EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_);
246 EXPECT_EQ(1, page_flips_);
241 EXPECT_EQ(1, drm_->get_page_flip_call_count()); 247 EXPECT_EQ(1, drm_->get_page_flip_call_count());
242 EXPECT_EQ(0, drm_->get_overlay_flip_call_count()); 248 EXPECT_EQ(0, drm_->get_overlay_flip_call_count());
243 } 249 }
244 250
245 TEST_F(HardwareDisplayControllerTest, RejectUnderlays) { 251 TEST_F(HardwareDisplayControllerTest, RejectUnderlays) {
246 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 252 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
247 new MockScanoutBuffer(kDefaultModeSize))); 253 new MockScanoutBuffer(kDefaultModeSize)));
248 ui::OverlayPlane plane2( 254 ui::OverlayPlane plane2(
249 scoped_refptr<ui::ScanoutBuffer>(new MockScanoutBuffer(kDefaultModeSize)), 255 scoped_refptr<ui::ScanoutBuffer>(new MockScanoutBuffer(kDefaultModeSize)),
250 -1, gfx::OVERLAY_TRANSFORM_NONE, gfx::Rect(kDefaultModeSize), 256 -1, gfx::OVERLAY_TRANSFORM_NONE, gfx::Rect(kDefaultModeSize),
251 gfx::RectF(kDefaultModeSizeF)); 257 gfx::RectF(kDefaultModeSizeF));
252 258
253 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 259 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
254 260
255 std::vector<ui::OverlayPlane> planes; 261 std::vector<ui::OverlayPlane> planes;
256 planes.push_back(plane1); 262 planes.push_back(plane1);
257 planes.push_back(plane2); 263 planes.push_back(plane2);
258 264
259 EXPECT_FALSE(controller_->SchedulePageFlip( 265 controller_->SchedulePageFlip(
260 planes, false /* test_only */, 266 planes, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
261 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 267 base::Unretained(this)));
262 base::Unretained(this)))); 268 EXPECT_EQ(gfx::SwapResult::SWAP_FAILED, last_swap_result_);
269 EXPECT_EQ(1, page_flips_);
263 } 270 }
264 271
265 TEST_F(HardwareDisplayControllerTest, PageflipMirroredControllers) { 272 TEST_F(HardwareDisplayControllerTest, PageflipMirroredControllers) {
266 controller_->AddCrtc(scoped_ptr<ui::CrtcController>( 273 controller_->AddCrtc(scoped_ptr<ui::CrtcController>(
267 new ui::CrtcController(drm_.get(), kSecondaryCrtc, kSecondaryConnector))); 274 new ui::CrtcController(drm_.get(), kSecondaryCrtc, kSecondaryConnector)));
268 275
269 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 276 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
270 new MockScanoutBuffer(kDefaultModeSize))); 277 new MockScanoutBuffer(kDefaultModeSize)));
271 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 278 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
272 EXPECT_EQ(2, drm_->get_set_crtc_call_count()); 279 EXPECT_EQ(2, drm_->get_set_crtc_call_count());
273 280
274 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>( 281 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>(
275 new MockScanoutBuffer(kDefaultModeSize))); 282 new MockScanoutBuffer(kDefaultModeSize)));
276 std::vector<ui::OverlayPlane> planes = 283 std::vector<ui::OverlayPlane> planes =
277 std::vector<ui::OverlayPlane>(1, plane2); 284 std::vector<ui::OverlayPlane>(1, plane2);
278 EXPECT_TRUE(controller_->SchedulePageFlip( 285 controller_->SchedulePageFlip(
279 planes, false /* test_only */, 286 planes, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
280 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 287 base::Unretained(this)));
281 base::Unretained(this))));
282 drm_->RunCallbacks(); 288 drm_->RunCallbacks();
289 EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_);
290 EXPECT_EQ(1, page_flips_);
283 EXPECT_EQ(2, drm_->get_page_flip_call_count()); 291 EXPECT_EQ(2, drm_->get_page_flip_call_count());
284 EXPECT_EQ(1, page_flips_); 292 EXPECT_EQ(1, page_flips_);
285 } 293 }
286 294
287 TEST_F(HardwareDisplayControllerTest, PlaneStateAfterRemoveCrtc) { 295 TEST_F(HardwareDisplayControllerTest, PlaneStateAfterRemoveCrtc) {
288 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 296 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
289 new MockScanoutBuffer(kDefaultModeSize))); 297 new MockScanoutBuffer(kDefaultModeSize)));
290 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 298 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
291 std::vector<ui::OverlayPlane> planes = 299 std::vector<ui::OverlayPlane> planes =
292 std::vector<ui::OverlayPlane>(1, plane1); 300 std::vector<ui::OverlayPlane>(1, plane1);
293 EXPECT_TRUE(controller_->SchedulePageFlip( 301 controller_->SchedulePageFlip(
294 planes, false /* test_only */, 302 planes, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
295 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 303 base::Unretained(this)));
296 base::Unretained(this))));
297 drm_->RunCallbacks(); 304 drm_->RunCallbacks();
305 EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_);
306 EXPECT_EQ(1, page_flips_);
298 307
299 const ui::HardwareDisplayPlane* owned_plane = nullptr; 308 const ui::HardwareDisplayPlane* owned_plane = nullptr;
300 for (const auto& plane : drm_->plane_manager()->planes()) 309 for (const auto& plane : drm_->plane_manager()->planes()) {
301 if (plane->in_use()) 310 if (plane->in_use())
302 owned_plane = plane; 311 owned_plane = plane;
312 }
313
303 ASSERT_TRUE(owned_plane != nullptr); 314 ASSERT_TRUE(owned_plane != nullptr);
304 EXPECT_EQ(kPrimaryCrtc, owned_plane->owning_crtc()); 315 EXPECT_EQ(kPrimaryCrtc, owned_plane->owning_crtc());
316
305 // Removing the crtc should not free the plane or change ownership. 317 // Removing the crtc should not free the plane or change ownership.
306 scoped_ptr<ui::CrtcController> crtc = 318 scoped_ptr<ui::CrtcController> crtc =
307 controller_->RemoveCrtc(drm_, kPrimaryCrtc); 319 controller_->RemoveCrtc(drm_, kPrimaryCrtc);
308 EXPECT_TRUE(owned_plane->in_use()); 320 EXPECT_TRUE(owned_plane->in_use());
309 EXPECT_EQ(kPrimaryCrtc, owned_plane->owning_crtc()); 321 EXPECT_EQ(kPrimaryCrtc, owned_plane->owning_crtc());
310 // Check that controller doesn't effect the state of removed plane in 322 // Check that controller doesn't affect the state of removed plane in
311 // subsequent page flip. 323 // subsequent page flip.
312 EXPECT_TRUE(controller_->SchedulePageFlip( 324 controller_->SchedulePageFlip(
313 planes, false /* test_only */, 325 planes, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
314 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 326 base::Unretained(this)));
315 base::Unretained(this))));
316 drm_->RunCallbacks(); 327 drm_->RunCallbacks();
328 EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_);
329 EXPECT_EQ(1, page_flips_);
317 EXPECT_TRUE(owned_plane->in_use()); 330 EXPECT_TRUE(owned_plane->in_use());
318 EXPECT_EQ(kPrimaryCrtc, owned_plane->owning_crtc()); 331 EXPECT_EQ(kPrimaryCrtc, owned_plane->owning_crtc());
319 } 332 }
320 333
321 TEST_F(HardwareDisplayControllerTest, PlaneStateAfterDestroyingCrtc) { 334 TEST_F(HardwareDisplayControllerTest, PlaneStateAfterDestroyingCrtc) {
322 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 335 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
323 new MockScanoutBuffer(kDefaultModeSize))); 336 new MockScanoutBuffer(kDefaultModeSize)));
324 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 337 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
325 std::vector<ui::OverlayPlane> planes = 338 std::vector<ui::OverlayPlane> planes =
326 std::vector<ui::OverlayPlane>(1, plane1); 339 std::vector<ui::OverlayPlane>(1, plane1);
327 EXPECT_TRUE(controller_->SchedulePageFlip( 340 controller_->SchedulePageFlip(
328 planes, false /* test_only */, 341 planes, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
329 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 342 base::Unretained(this)));
330 base::Unretained(this))));
331 drm_->RunCallbacks(); 343 drm_->RunCallbacks();
344 EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_);
345 EXPECT_EQ(1, page_flips_);
332 346
333 const ui::HardwareDisplayPlane* owned_plane = nullptr; 347 const ui::HardwareDisplayPlane* owned_plane = nullptr;
334 for (const auto& plane : drm_->plane_manager()->planes()) 348 for (const auto& plane : drm_->plane_manager()->planes())
335 if (plane->in_use()) 349 if (plane->in_use())
336 owned_plane = plane; 350 owned_plane = plane;
337 ASSERT_TRUE(owned_plane != nullptr); 351 ASSERT_TRUE(owned_plane != nullptr);
338 EXPECT_EQ(kPrimaryCrtc, owned_plane->owning_crtc()); 352 EXPECT_EQ(kPrimaryCrtc, owned_plane->owning_crtc());
339 scoped_ptr<ui::CrtcController> crtc = 353 scoped_ptr<ui::CrtcController> crtc =
340 controller_->RemoveCrtc(drm_, kPrimaryCrtc); 354 controller_->RemoveCrtc(drm_, kPrimaryCrtc);
341 // Destroying crtc should free the plane. 355 // Destroying crtc should free the plane.
342 crtc.reset(); 356 crtc.reset();
343 uint32_t crtc_nullid = 0; 357 uint32_t crtc_nullid = 0;
344 EXPECT_FALSE(owned_plane->in_use()); 358 EXPECT_FALSE(owned_plane->in_use());
345 EXPECT_EQ(crtc_nullid, owned_plane->owning_crtc()); 359 EXPECT_EQ(crtc_nullid, owned_plane->owning_crtc());
346 } 360 }
347 361
348 TEST_F(HardwareDisplayControllerTest, PlaneStateAfterAddCrtc) { 362 TEST_F(HardwareDisplayControllerTest, PlaneStateAfterAddCrtc) {
363 controller_->AddCrtc(scoped_ptr<ui::CrtcController>(
364 new ui::CrtcController(drm_.get(), kSecondaryCrtc, kSecondaryConnector)));
365
349 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 366 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
350 new MockScanoutBuffer(kDefaultModeSize))); 367 new MockScanoutBuffer(kDefaultModeSize)));
351 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 368 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
352 std::vector<ui::OverlayPlane> planes = 369 std::vector<ui::OverlayPlane> planes =
353 std::vector<ui::OverlayPlane>(1, plane1); 370 std::vector<ui::OverlayPlane>(1, plane1);
354 EXPECT_TRUE(controller_->SchedulePageFlip( 371 controller_->SchedulePageFlip(
355 planes, false /* test_only */, 372 planes, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
356 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 373 base::Unretained(this)));
357 base::Unretained(this))));
358 drm_->RunCallbacks(); 374 drm_->RunCallbacks();
375 EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_);
376 EXPECT_EQ(1, page_flips_);
359 377
360 ui::HardwareDisplayPlane* primary_crtc_plane = nullptr; 378 ui::HardwareDisplayPlane* primary_crtc_plane = nullptr;
361 for (const auto& plane : drm_->plane_manager()->planes()) { 379 for (const auto& plane : drm_->plane_manager()->planes()) {
362 if (plane->in_use() && kPrimaryCrtc == plane->owning_crtc()) 380 if (plane->in_use() && kPrimaryCrtc == plane->owning_crtc())
363 primary_crtc_plane = plane; 381 primary_crtc_plane = plane;
364 } 382 }
365 383
366 ASSERT_TRUE(primary_crtc_plane != nullptr); 384 ASSERT_TRUE(primary_crtc_plane != nullptr);
367 385
368 scoped_ptr<ui::HardwareDisplayController> hdc_controller; 386 scoped_ptr<ui::HardwareDisplayController> hdc_controller;
369 hdc_controller.reset(new ui::HardwareDisplayController( 387 hdc_controller.reset(new ui::HardwareDisplayController(
370 controller_->RemoveCrtc(drm_, kPrimaryCrtc), controller_->origin())); 388 controller_->RemoveCrtc(drm_, kPrimaryCrtc), controller_->origin()));
371 EXPECT_TRUE(controller_->SchedulePageFlip( 389 controller_->SchedulePageFlip(
372 planes, false /* test_only */, 390 planes, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
373 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 391 base::Unretained(this)));
374 base::Unretained(this))));
375 drm_->RunCallbacks(); 392 drm_->RunCallbacks();
393 EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_);
394 EXPECT_EQ(2, page_flips_);
376 EXPECT_TRUE(primary_crtc_plane->in_use()); 395 EXPECT_TRUE(primary_crtc_plane->in_use());
377 EXPECT_EQ(kPrimaryCrtc, primary_crtc_plane->owning_crtc()); 396 EXPECT_EQ(kPrimaryCrtc, primary_crtc_plane->owning_crtc());
378 397
379 // We reset state of plane here to test that the plane was actually added to 398 // We reset state of plane here to test that the plane was actually added to
380 // hdc_controller. In which case, the right state should be set to plane 399 // hdc_controller. In which case, the right state should be set to plane
381 // after page flip call is handled by the controller. 400 // after page flip call is handled by the controller.
382 primary_crtc_plane->set_in_use(false); 401 primary_crtc_plane->set_in_use(false);
383 primary_crtc_plane->set_owning_crtc(0); 402 primary_crtc_plane->set_owning_crtc(0);
384 EXPECT_TRUE(hdc_controller->SchedulePageFlip( 403 hdc_controller->SchedulePageFlip(
385 planes, false /* test_only */, 404 planes, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
386 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 405 base::Unretained(this)));
387 base::Unretained(this))));
388 drm_->RunCallbacks(); 406 drm_->RunCallbacks();
407 EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_);
408 EXPECT_EQ(3, page_flips_);
389 EXPECT_TRUE(primary_crtc_plane->in_use()); 409 EXPECT_TRUE(primary_crtc_plane->in_use());
390 EXPECT_EQ(kPrimaryCrtc, primary_crtc_plane->owning_crtc()); 410 EXPECT_EQ(kPrimaryCrtc, primary_crtc_plane->owning_crtc());
391 } 411 }
392 412
393 TEST_F(HardwareDisplayControllerTest, ModesetWhilePageFlipping) { 413 TEST_F(HardwareDisplayControllerTest, ModesetWhilePageFlipping) {
394 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 414 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
395 new MockScanoutBuffer(kDefaultModeSize))); 415 new MockScanoutBuffer(kDefaultModeSize)));
396 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 416 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
397 std::vector<ui::OverlayPlane> planes = 417 std::vector<ui::OverlayPlane> planes =
398 std::vector<ui::OverlayPlane>(1, plane1); 418 std::vector<ui::OverlayPlane>(1, plane1);
399 EXPECT_TRUE(controller_->SchedulePageFlip( 419 controller_->SchedulePageFlip(
400 planes, false /* test_only */, 420 planes, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
401 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 421 base::Unretained(this)));
402 base::Unretained(this))));
403 422
404 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 423 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
405 drm_->RunCallbacks(); 424 drm_->RunCallbacks();
425 EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_);
406 EXPECT_EQ(1, page_flips_); 426 EXPECT_EQ(1, page_flips_);
407 } 427 }
408 428
409 TEST_F(HardwareDisplayControllerTest, FailPageFlipping) { 429 TEST_F(HardwareDisplayControllerTest, FailPageFlipping) {
410 drm_->set_page_flip_expectation(false); 430 drm_->set_page_flip_expectation(false);
411 431
412 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 432 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
413 new MockScanoutBuffer(kDefaultModeSize))); 433 new MockScanoutBuffer(kDefaultModeSize)));
414 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 434 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
415 std::vector<ui::OverlayPlane> planes = 435 std::vector<ui::OverlayPlane> planes =
416 std::vector<ui::OverlayPlane>(1, plane1); 436 std::vector<ui::OverlayPlane>(1, plane1);
417 EXPECT_FALSE(controller_->SchedulePageFlip( 437 controller_->SchedulePageFlip(
418 planes, false /* test_only */, 438 planes, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
419 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 439 base::Unretained(this)));
420 base::Unretained(this))));
421 440
422 drm_->RunCallbacks(); 441 drm_->RunCallbacks();
442 EXPECT_EQ(gfx::SwapResult::SWAP_FAILED, last_swap_result_);
423 EXPECT_EQ(1, page_flips_); 443 EXPECT_EQ(1, page_flips_);
424 } 444 }
425 445
426 TEST_F(HardwareDisplayControllerTest, FailPageFlippingDueToNoPrimaryPlane) { 446 TEST_F(HardwareDisplayControllerTest, FailPageFlippingDueToNoPrimaryPlane) {
427 ui::OverlayPlane plane1( 447 ui::OverlayPlane plane1(
428 scoped_refptr<ui::ScanoutBuffer>(new MockScanoutBuffer(kDefaultModeSize)), 448 scoped_refptr<ui::ScanoutBuffer>(new MockScanoutBuffer(kDefaultModeSize)),
429 1, gfx::OVERLAY_TRANSFORM_NONE, gfx::Rect(kDefaultModeSize), 449 1, gfx::OVERLAY_TRANSFORM_NONE, gfx::Rect(kDefaultModeSize),
430 gfx::RectF(0, 0, 1, 1)); 450 gfx::RectF(0, 0, 1, 1));
431 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 451 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
432 std::vector<ui::OverlayPlane> planes = 452 std::vector<ui::OverlayPlane> planes =
433 std::vector<ui::OverlayPlane>(1, plane1); 453 std::vector<ui::OverlayPlane>(1, plane1);
434 EXPECT_FALSE(controller_->SchedulePageFlip( 454 controller_->SchedulePageFlip(
435 planes, false /* test_only */, 455 planes, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
436 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 456 base::Unretained(this)));
437 base::Unretained(this))));
438 457
439 drm_->RunCallbacks(); 458 drm_->RunCallbacks();
459 EXPECT_EQ(gfx::SwapResult::SWAP_FAILED, last_swap_result_);
440 EXPECT_EQ(1, page_flips_); 460 EXPECT_EQ(1, page_flips_);
441 } 461 }
442 462
443 TEST_F(HardwareDisplayControllerTest, AddCrtcMidPageFlip) { 463 TEST_F(HardwareDisplayControllerTest, AddCrtcMidPageFlip) {
444 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 464 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
445 new MockScanoutBuffer(kDefaultModeSize))); 465 new MockScanoutBuffer(kDefaultModeSize)));
446 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 466 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
447 std::vector<ui::OverlayPlane> planes = 467 std::vector<ui::OverlayPlane> planes =
448 std::vector<ui::OverlayPlane>(1, plane1); 468 std::vector<ui::OverlayPlane>(1, plane1);
449 EXPECT_TRUE(controller_->SchedulePageFlip( 469 controller_->SchedulePageFlip(
450 planes, false /* test_only */, 470 planes, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
451 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 471 base::Unretained(this)));
452 base::Unretained(this))));
453 472
454 controller_->AddCrtc(scoped_ptr<ui::CrtcController>( 473 controller_->AddCrtc(scoped_ptr<ui::CrtcController>(
455 new ui::CrtcController(drm_.get(), kSecondaryCrtc, kSecondaryConnector))); 474 new ui::CrtcController(drm_.get(), kSecondaryCrtc, kSecondaryConnector)));
456 475
457 drm_->RunCallbacks(); 476 drm_->RunCallbacks();
477 EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_);
458 EXPECT_EQ(1, page_flips_); 478 EXPECT_EQ(1, page_flips_);
459 } 479 }
460 480
461 TEST_F(HardwareDisplayControllerTest, RemoveCrtcMidPageFlip) { 481 TEST_F(HardwareDisplayControllerTest, RemoveCrtcMidPageFlip) {
462 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 482 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
463 new MockScanoutBuffer(kDefaultModeSize))); 483 new MockScanoutBuffer(kDefaultModeSize)));
464 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 484 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
465 std::vector<ui::OverlayPlane> planes = 485 std::vector<ui::OverlayPlane> planes =
466 std::vector<ui::OverlayPlane>(1, plane1); 486 std::vector<ui::OverlayPlane>(1, plane1);
467 EXPECT_TRUE(controller_->SchedulePageFlip( 487 controller_->SchedulePageFlip(
468 planes, false /* test_only */, 488 planes, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
469 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 489 base::Unretained(this)));
470 base::Unretained(this))));
471 490
472 controller_->RemoveCrtc(drm_, kPrimaryCrtc); 491 controller_->RemoveCrtc(drm_, kPrimaryCrtc);
473 492
474 EXPECT_EQ(1, page_flips_); 493 EXPECT_EQ(1, page_flips_);
475 drm_->RunCallbacks(); 494 drm_->RunCallbacks();
495 EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_);
476 EXPECT_EQ(1, page_flips_); 496 EXPECT_EQ(1, page_flips_);
477 } 497 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698