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

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: rebase and fix comment 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),
(...skipping 21 matching lines...) Expand all
249 scoped_refptr<ui::ScanoutBuffer>(new MockScanoutBuffer(kDefaultModeSize)), 254 scoped_refptr<ui::ScanoutBuffer>(new MockScanoutBuffer(kDefaultModeSize)),
250 -1, gfx::OVERLAY_TRANSFORM_NONE, gfx::Rect(kDefaultModeSize), 255 -1, gfx::OVERLAY_TRANSFORM_NONE, gfx::Rect(kDefaultModeSize),
251 gfx::RectF(kDefaultModeSizeF)); 256 gfx::RectF(kDefaultModeSizeF));
252 257
253 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 258 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
254 259
255 std::vector<ui::OverlayPlane> planes; 260 std::vector<ui::OverlayPlane> planes;
256 planes.push_back(plane1); 261 planes.push_back(plane1);
257 planes.push_back(plane2); 262 planes.push_back(plane2);
258 263
259 EXPECT_FALSE(controller_->SchedulePageFlip( 264 controller_->SchedulePageFlip(
260 planes, false /* test_only */, 265 planes, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
261 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 266 base::Unretained(this)));
262 base::Unretained(this)))); 267 EXPECT_EQ(gfx::SwapResult::SWAP_FAILED, last_swap_result_);
268 EXPECT_EQ(1, page_flips_);
263 } 269 }
264 270
265 TEST_F(HardwareDisplayControllerTest, PageflipMirroredControllers) { 271 TEST_F(HardwareDisplayControllerTest, PageflipMirroredControllers) {
266 controller_->AddCrtc(scoped_ptr<ui::CrtcController>( 272 controller_->AddCrtc(scoped_ptr<ui::CrtcController>(
267 new ui::CrtcController(drm_.get(), kSecondaryCrtc, kSecondaryConnector))); 273 new ui::CrtcController(drm_.get(), kSecondaryCrtc, kSecondaryConnector)));
268 274
269 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 275 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
270 new MockScanoutBuffer(kDefaultModeSize))); 276 new MockScanoutBuffer(kDefaultModeSize)));
271 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 277 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
272 EXPECT_EQ(2, drm_->get_set_crtc_call_count()); 278 EXPECT_EQ(2, drm_->get_set_crtc_call_count());
273 279
274 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>( 280 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>(
275 new MockScanoutBuffer(kDefaultModeSize))); 281 new MockScanoutBuffer(kDefaultModeSize)));
276 std::vector<ui::OverlayPlane> planes = 282 std::vector<ui::OverlayPlane> planes =
277 std::vector<ui::OverlayPlane>(1, plane2); 283 std::vector<ui::OverlayPlane>(1, plane2);
278 EXPECT_TRUE(controller_->SchedulePageFlip( 284 controller_->SchedulePageFlip(
279 planes, false /* test_only */, 285 planes, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
280 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 286 base::Unretained(this)));
281 base::Unretained(this))));
282 drm_->RunCallbacks(); 287 drm_->RunCallbacks();
288 EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_);
289 EXPECT_EQ(1, page_flips_);
283 EXPECT_EQ(2, drm_->get_page_flip_call_count()); 290 EXPECT_EQ(2, drm_->get_page_flip_call_count());
284 EXPECT_EQ(1, page_flips_); 291 EXPECT_EQ(1, page_flips_);
285 } 292 }
286 293
287 TEST_F(HardwareDisplayControllerTest, PlaneStateAfterRemoveCrtc) { 294 TEST_F(HardwareDisplayControllerTest, PlaneStateAfterRemoveCrtc) {
288 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 295 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
289 new MockScanoutBuffer(kDefaultModeSize))); 296 new MockScanoutBuffer(kDefaultModeSize)));
290 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 297 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
291 std::vector<ui::OverlayPlane> planes = 298 std::vector<ui::OverlayPlane> planes =
292 std::vector<ui::OverlayPlane>(1, plane1); 299 std::vector<ui::OverlayPlane>(1, plane1);
293 EXPECT_TRUE(controller_->SchedulePageFlip( 300 controller_->SchedulePageFlip(
294 planes, false /* test_only */, 301 planes, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
295 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 302 base::Unretained(this)));
296 base::Unretained(this))));
297 drm_->RunCallbacks(); 303 drm_->RunCallbacks();
304 EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_);
305 EXPECT_EQ(1, page_flips_);
298 306
299 const ui::HardwareDisplayPlane* owned_plane = nullptr; 307 const ui::HardwareDisplayPlane* owned_plane = nullptr;
300 for (const auto& plane : drm_->plane_manager()->planes()) 308 for (const auto& plane : drm_->plane_manager()->planes()) {
301 if (plane->in_use()) 309 if (plane->in_use())
302 owned_plane = plane; 310 owned_plane = plane;
311 }
312
303 ASSERT_TRUE(owned_plane != nullptr); 313 ASSERT_TRUE(owned_plane != nullptr);
304 EXPECT_EQ(kPrimaryCrtc, owned_plane->owning_crtc()); 314 EXPECT_EQ(kPrimaryCrtc, owned_plane->owning_crtc());
315
305 // Removing the crtc should not free the plane or change ownership. 316 // Removing the crtc should not free the plane or change ownership.
306 scoped_ptr<ui::CrtcController> crtc = 317 scoped_ptr<ui::CrtcController> crtc =
307 controller_->RemoveCrtc(drm_, kPrimaryCrtc); 318 controller_->RemoveCrtc(drm_, kPrimaryCrtc);
308 EXPECT_TRUE(owned_plane->in_use()); 319 EXPECT_TRUE(owned_plane->in_use());
309 EXPECT_EQ(kPrimaryCrtc, owned_plane->owning_crtc()); 320 EXPECT_EQ(kPrimaryCrtc, owned_plane->owning_crtc());
310 // Check that controller doesn't effect the state of removed plane in 321 // Check that controller doesn't affect the state of removed plane in
311 // subsequent page flip. 322 // subsequent page flip.
312 EXPECT_TRUE(controller_->SchedulePageFlip( 323 controller_->SchedulePageFlip(
313 planes, false /* test_only */, 324 planes, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
314 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 325 base::Unretained(this)));
315 base::Unretained(this))));
316 drm_->RunCallbacks(); 326 drm_->RunCallbacks();
327 EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_);
328 EXPECT_EQ(1, page_flips_);
317 EXPECT_TRUE(owned_plane->in_use()); 329 EXPECT_TRUE(owned_plane->in_use());
318 EXPECT_EQ(kPrimaryCrtc, owned_plane->owning_crtc()); 330 EXPECT_EQ(kPrimaryCrtc, owned_plane->owning_crtc());
319 } 331 }
320 332
321 TEST_F(HardwareDisplayControllerTest, PlaneStateAfterDestroyingCrtc) { 333 TEST_F(HardwareDisplayControllerTest, PlaneStateAfterDestroyingCrtc) {
322 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 334 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
323 new MockScanoutBuffer(kDefaultModeSize))); 335 new MockScanoutBuffer(kDefaultModeSize)));
324 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 336 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
325 std::vector<ui::OverlayPlane> planes = 337 std::vector<ui::OverlayPlane> planes =
326 std::vector<ui::OverlayPlane>(1, plane1); 338 std::vector<ui::OverlayPlane>(1, plane1);
327 EXPECT_TRUE(controller_->SchedulePageFlip( 339 controller_->SchedulePageFlip(
328 planes, false /* test_only */, 340 planes, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
329 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 341 base::Unretained(this)));
330 base::Unretained(this))));
331 drm_->RunCallbacks(); 342 drm_->RunCallbacks();
343 EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_);
344 EXPECT_EQ(1, page_flips_);
332 345
333 const ui::HardwareDisplayPlane* owned_plane = nullptr; 346 const ui::HardwareDisplayPlane* owned_plane = nullptr;
334 for (const auto& plane : drm_->plane_manager()->planes()) 347 for (const auto& plane : drm_->plane_manager()->planes())
335 if (plane->in_use()) 348 if (plane->in_use())
336 owned_plane = plane; 349 owned_plane = plane;
337 ASSERT_TRUE(owned_plane != nullptr); 350 ASSERT_TRUE(owned_plane != nullptr);
338 EXPECT_EQ(kPrimaryCrtc, owned_plane->owning_crtc()); 351 EXPECT_EQ(kPrimaryCrtc, owned_plane->owning_crtc());
339 scoped_ptr<ui::CrtcController> crtc = 352 scoped_ptr<ui::CrtcController> crtc =
340 controller_->RemoveCrtc(drm_, kPrimaryCrtc); 353 controller_->RemoveCrtc(drm_, kPrimaryCrtc);
341 // Destroying crtc should free the plane. 354 // Destroying crtc should free the plane.
342 crtc.reset(); 355 crtc.reset();
343 uint32_t crtc_nullid = 0; 356 uint32_t crtc_nullid = 0;
344 EXPECT_FALSE(owned_plane->in_use()); 357 EXPECT_FALSE(owned_plane->in_use());
345 EXPECT_EQ(crtc_nullid, owned_plane->owning_crtc()); 358 EXPECT_EQ(crtc_nullid, owned_plane->owning_crtc());
346 } 359 }
347 360
348 TEST_F(HardwareDisplayControllerTest, PlaneStateAfterAddCrtc) { 361 TEST_F(HardwareDisplayControllerTest, PlaneStateAfterAddCrtc) {
362 controller_->AddCrtc(scoped_ptr<ui::CrtcController>(
363 new ui::CrtcController(drm_.get(), kSecondaryCrtc, kSecondaryConnector)));
364
349 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 365 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
350 new MockScanoutBuffer(kDefaultModeSize))); 366 new MockScanoutBuffer(kDefaultModeSize)));
351 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 367 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
352 std::vector<ui::OverlayPlane> planes = 368 std::vector<ui::OverlayPlane> planes =
353 std::vector<ui::OverlayPlane>(1, plane1); 369 std::vector<ui::OverlayPlane>(1, plane1);
354 EXPECT_TRUE(controller_->SchedulePageFlip( 370 controller_->SchedulePageFlip(
355 planes, false /* test_only */, 371 planes, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
356 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 372 base::Unretained(this)));
357 base::Unretained(this))));
358 drm_->RunCallbacks(); 373 drm_->RunCallbacks();
374 EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_);
375 EXPECT_EQ(1, page_flips_);
359 376
360 ui::HardwareDisplayPlane* primary_crtc_plane = nullptr; 377 ui::HardwareDisplayPlane* primary_crtc_plane = nullptr;
361 for (const auto& plane : drm_->plane_manager()->planes()) { 378 for (const auto& plane : drm_->plane_manager()->planes()) {
362 if (plane->in_use() && kPrimaryCrtc == plane->owning_crtc()) 379 if (plane->in_use() && kPrimaryCrtc == plane->owning_crtc())
363 primary_crtc_plane = plane; 380 primary_crtc_plane = plane;
364 } 381 }
365 382
366 ASSERT_TRUE(primary_crtc_plane != nullptr); 383 ASSERT_TRUE(primary_crtc_plane != nullptr);
367 384
368 scoped_ptr<ui::HardwareDisplayController> hdc_controller; 385 scoped_ptr<ui::HardwareDisplayController> hdc_controller;
369 hdc_controller.reset(new ui::HardwareDisplayController( 386 hdc_controller.reset(new ui::HardwareDisplayController(
370 controller_->RemoveCrtc(drm_, kPrimaryCrtc), controller_->origin())); 387 controller_->RemoveCrtc(drm_, kPrimaryCrtc), controller_->origin()));
371 EXPECT_TRUE(controller_->SchedulePageFlip( 388 controller_->SchedulePageFlip(
372 planes, false /* test_only */, 389 planes, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
373 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 390 base::Unretained(this)));
374 base::Unretained(this))));
375 drm_->RunCallbacks(); 391 drm_->RunCallbacks();
392 EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_);
393 EXPECT_EQ(2, page_flips_);
376 EXPECT_TRUE(primary_crtc_plane->in_use()); 394 EXPECT_TRUE(primary_crtc_plane->in_use());
377 EXPECT_EQ(kPrimaryCrtc, primary_crtc_plane->owning_crtc()); 395 EXPECT_EQ(kPrimaryCrtc, primary_crtc_plane->owning_crtc());
378 396
379 // We reset state of plane here to test that the plane was actually added to 397 // 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 398 // hdc_controller. In which case, the right state should be set to plane
381 // after page flip call is handled by the controller. 399 // after page flip call is handled by the controller.
382 primary_crtc_plane->set_in_use(false); 400 primary_crtc_plane->set_in_use(false);
383 primary_crtc_plane->set_owning_crtc(0); 401 primary_crtc_plane->set_owning_crtc(0);
384 EXPECT_TRUE(hdc_controller->SchedulePageFlip( 402 hdc_controller->SchedulePageFlip(
385 planes, false /* test_only */, 403 planes, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
386 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 404 base::Unretained(this)));
387 base::Unretained(this))));
388 drm_->RunCallbacks(); 405 drm_->RunCallbacks();
406 EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_);
407 EXPECT_EQ(3, page_flips_);
389 EXPECT_TRUE(primary_crtc_plane->in_use()); 408 EXPECT_TRUE(primary_crtc_plane->in_use());
390 EXPECT_EQ(kPrimaryCrtc, primary_crtc_plane->owning_crtc()); 409 EXPECT_EQ(kPrimaryCrtc, primary_crtc_plane->owning_crtc());
391 } 410 }
392 411
393 TEST_F(HardwareDisplayControllerTest, ModesetWhilePageFlipping) { 412 TEST_F(HardwareDisplayControllerTest, ModesetWhilePageFlipping) {
394 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 413 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
395 new MockScanoutBuffer(kDefaultModeSize))); 414 new MockScanoutBuffer(kDefaultModeSize)));
396 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 415 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
397 std::vector<ui::OverlayPlane> planes = 416 std::vector<ui::OverlayPlane> planes =
398 std::vector<ui::OverlayPlane>(1, plane1); 417 std::vector<ui::OverlayPlane>(1, plane1);
399 EXPECT_TRUE(controller_->SchedulePageFlip( 418 controller_->SchedulePageFlip(
400 planes, false /* test_only */, 419 planes, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
401 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 420 base::Unretained(this)));
402 base::Unretained(this))));
403 421
404 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 422 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
405 drm_->RunCallbacks(); 423 drm_->RunCallbacks();
424 EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_);
406 EXPECT_EQ(1, page_flips_); 425 EXPECT_EQ(1, page_flips_);
407 } 426 }
408 427
409 TEST_F(HardwareDisplayControllerTest, FailPageFlipping) { 428 TEST_F(HardwareDisplayControllerTest, FailPageFlipping) {
410 drm_->set_page_flip_expectation(false); 429 drm_->set_page_flip_expectation(false);
411 430
412 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 431 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
413 new MockScanoutBuffer(kDefaultModeSize))); 432 new MockScanoutBuffer(kDefaultModeSize)));
414 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 433 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
415 std::vector<ui::OverlayPlane> planes = 434 std::vector<ui::OverlayPlane> planes =
416 std::vector<ui::OverlayPlane>(1, plane1); 435 std::vector<ui::OverlayPlane>(1, plane1);
417 EXPECT_FALSE(controller_->SchedulePageFlip( 436 controller_->SchedulePageFlip(
418 planes, false /* test_only */, 437 planes, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
419 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 438 base::Unretained(this)));
420 base::Unretained(this))));
421 439
422 drm_->RunCallbacks(); 440 drm_->RunCallbacks();
441 EXPECT_EQ(gfx::SwapResult::SWAP_FAILED, last_swap_result_);
423 EXPECT_EQ(1, page_flips_); 442 EXPECT_EQ(1, page_flips_);
424 } 443 }
425 444
426 TEST_F(HardwareDisplayControllerTest, FailPageFlippingDueToNoPrimaryPlane) { 445 TEST_F(HardwareDisplayControllerTest, FailPageFlippingDueToNoPrimaryPlane) {
427 ui::OverlayPlane plane1( 446 ui::OverlayPlane plane1(
428 scoped_refptr<ui::ScanoutBuffer>(new MockScanoutBuffer(kDefaultModeSize)), 447 scoped_refptr<ui::ScanoutBuffer>(new MockScanoutBuffer(kDefaultModeSize)),
429 1, gfx::OVERLAY_TRANSFORM_NONE, gfx::Rect(kDefaultModeSize), 448 1, gfx::OVERLAY_TRANSFORM_NONE, gfx::Rect(kDefaultModeSize),
430 gfx::RectF(0, 0, 1, 1)); 449 gfx::RectF(0, 0, 1, 1));
431 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 450 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
432 std::vector<ui::OverlayPlane> planes = 451 std::vector<ui::OverlayPlane> planes =
433 std::vector<ui::OverlayPlane>(1, plane1); 452 std::vector<ui::OverlayPlane>(1, plane1);
434 EXPECT_FALSE(controller_->SchedulePageFlip( 453 controller_->SchedulePageFlip(
435 planes, false /* test_only */, 454 planes, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
436 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 455 base::Unretained(this)));
437 base::Unretained(this))));
438 456
439 drm_->RunCallbacks(); 457 drm_->RunCallbacks();
458 EXPECT_EQ(gfx::SwapResult::SWAP_FAILED, last_swap_result_);
440 EXPECT_EQ(1, page_flips_); 459 EXPECT_EQ(1, page_flips_);
441 } 460 }
442 461
443 TEST_F(HardwareDisplayControllerTest, AddCrtcMidPageFlip) { 462 TEST_F(HardwareDisplayControllerTest, AddCrtcMidPageFlip) {
444 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 463 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
445 new MockScanoutBuffer(kDefaultModeSize))); 464 new MockScanoutBuffer(kDefaultModeSize)));
446 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 465 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
447 std::vector<ui::OverlayPlane> planes = 466 std::vector<ui::OverlayPlane> planes =
448 std::vector<ui::OverlayPlane>(1, plane1); 467 std::vector<ui::OverlayPlane>(1, plane1);
449 EXPECT_TRUE(controller_->SchedulePageFlip( 468 controller_->SchedulePageFlip(
450 planes, false /* test_only */, 469 planes, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
451 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 470 base::Unretained(this)));
452 base::Unretained(this))));
453 471
454 controller_->AddCrtc(scoped_ptr<ui::CrtcController>( 472 controller_->AddCrtc(scoped_ptr<ui::CrtcController>(
455 new ui::CrtcController(drm_.get(), kSecondaryCrtc, kSecondaryConnector))); 473 new ui::CrtcController(drm_.get(), kSecondaryCrtc, kSecondaryConnector)));
456 474
457 drm_->RunCallbacks(); 475 drm_->RunCallbacks();
476 EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_);
458 EXPECT_EQ(1, page_flips_); 477 EXPECT_EQ(1, page_flips_);
459 } 478 }
460 479
461 TEST_F(HardwareDisplayControllerTest, RemoveCrtcMidPageFlip) { 480 TEST_F(HardwareDisplayControllerTest, RemoveCrtcMidPageFlip) {
462 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 481 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
463 new MockScanoutBuffer(kDefaultModeSize))); 482 new MockScanoutBuffer(kDefaultModeSize)));
464 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 483 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
465 std::vector<ui::OverlayPlane> planes = 484 std::vector<ui::OverlayPlane> planes =
466 std::vector<ui::OverlayPlane>(1, plane1); 485 std::vector<ui::OverlayPlane>(1, plane1);
467 EXPECT_TRUE(controller_->SchedulePageFlip( 486 controller_->SchedulePageFlip(
468 planes, false /* test_only */, 487 planes, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
469 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 488 base::Unretained(this)));
470 base::Unretained(this))));
471 489
472 controller_->RemoveCrtc(drm_, kPrimaryCrtc); 490 controller_->RemoveCrtc(drm_, kPrimaryCrtc);
473 491
474 EXPECT_EQ(1, page_flips_); 492 EXPECT_EQ(1, page_flips_);
475 drm_->RunCallbacks(); 493 drm_->RunCallbacks();
494 EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_);
476 EXPECT_EQ(1, page_flips_); 495 EXPECT_EQ(1, page_flips_);
477 } 496 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698