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

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

Powered by Google App Engine
This is Rietveld 408576698