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

Side by Side Diff: ui/ozone/platform/dri/hardware_display_controller_unittest.cc

Issue 960273003: ozone: dri: add synchronous SwapBuffers support on surfaceless (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Nits Created 5 years, 9 months 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 "base/bind.h" 5 #include "base/bind.h"
6 #include "testing/gtest/include/gtest/gtest.h" 6 #include "testing/gtest/include/gtest/gtest.h"
7 #include "third_party/skia/include/core/SkCanvas.h" 7 #include "third_party/skia/include/core/SkCanvas.h"
8 #include "ui/ozone/platform/dri/crtc_controller.h" 8 #include "ui/ozone/platform/dri/crtc_controller.h"
9 #include "ui/ozone/platform/dri/dri_buffer.h" 9 #include "ui/ozone/platform/dri/dri_buffer.h"
10 #include "ui/ozone/platform/dri/dri_wrapper.h" 10 #include "ui/ozone/platform/dri/dri_wrapper.h"
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 TEST_F(HardwareDisplayControllerTest, CheckStateAfterPageFlip) { 96 TEST_F(HardwareDisplayControllerTest, CheckStateAfterPageFlip) {
97 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 97 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
98 new MockScanoutBuffer(kDefaultModeSize))); 98 new MockScanoutBuffer(kDefaultModeSize)));
99 99
100 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 100 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
101 101
102 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>( 102 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>(
103 new MockScanoutBuffer(kDefaultModeSize))); 103 new MockScanoutBuffer(kDefaultModeSize)));
104 controller_->QueueOverlayPlane(plane2); 104 controller_->QueueOverlayPlane(plane2);
105 EXPECT_TRUE(controller_->SchedulePageFlip( 105 EXPECT_TRUE(controller_->SchedulePageFlip(
106 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 106 false, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
107 base::Unretained(this)))); 107 base::Unretained(this))));
108 drm_->RunCallbacks(); 108 drm_->RunCallbacks();
109 EXPECT_TRUE(plane1.buffer->HasOneRef()); 109 EXPECT_TRUE(plane1.buffer->HasOneRef());
110 EXPECT_FALSE(plane2.buffer->HasOneRef()); 110 EXPECT_FALSE(plane2.buffer->HasOneRef());
111 111
112 EXPECT_EQ(1, drm_->get_page_flip_call_count()); 112 EXPECT_EQ(1, drm_->get_page_flip_call_count());
113 EXPECT_EQ(0, drm_->get_overlay_flip_call_count()); 113 EXPECT_EQ(0, drm_->get_overlay_flip_call_count());
114 } 114 }
115 115
116 TEST_F(HardwareDisplayControllerTest, CheckStateIfModesetFails) { 116 TEST_F(HardwareDisplayControllerTest, CheckStateIfModesetFails) {
117 drm_->set_set_crtc_expectation(false); 117 drm_->set_set_crtc_expectation(false);
118 118
119 ui::OverlayPlane plane(scoped_refptr<ui::ScanoutBuffer>(new MockScanoutBuffer( 119 ui::OverlayPlane plane(scoped_refptr<ui::ScanoutBuffer>(new MockScanoutBuffer(
120 kDefaultModeSize))); 120 kDefaultModeSize)));
121 121
122 EXPECT_FALSE(controller_->Modeset(plane, kDefaultMode)); 122 EXPECT_FALSE(controller_->Modeset(plane, kDefaultMode));
123 } 123 }
124 124
125 TEST_F(HardwareDisplayControllerTest, CheckStateIfPageFlipFails) { 125 TEST_F(HardwareDisplayControllerTest, CheckStateIfPageFlipFails) {
126 drm_->set_page_flip_expectation(false); 126 drm_->set_page_flip_expectation(false);
127 127
128 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 128 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
129 new MockScanoutBuffer(kDefaultModeSize))); 129 new MockScanoutBuffer(kDefaultModeSize)));
130 130
131 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 131 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
132 132
133 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>( 133 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>(
134 new MockScanoutBuffer(kDefaultModeSize))); 134 new MockScanoutBuffer(kDefaultModeSize)));
135 controller_->QueueOverlayPlane(plane2); 135 controller_->QueueOverlayPlane(plane2);
136 EXPECT_FALSE(controller_->SchedulePageFlip( 136 EXPECT_FALSE(controller_->SchedulePageFlip(
137 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 137 false, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
138 base::Unretained(this)))); 138 base::Unretained(this))));
139 drm_->RunCallbacks(); 139 drm_->RunCallbacks();
140 140
141 EXPECT_FALSE(plane1.buffer->HasOneRef()); 141 EXPECT_FALSE(plane1.buffer->HasOneRef());
142 EXPECT_TRUE(plane2.buffer->HasOneRef()); 142 EXPECT_TRUE(plane2.buffer->HasOneRef());
143 } 143 }
144 144
145 TEST_F(HardwareDisplayControllerTest, VerifyNoDRMCallsWhenDisabled) { 145 TEST_F(HardwareDisplayControllerTest, VerifyNoDRMCallsWhenDisabled) {
146 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 146 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
147 new MockScanoutBuffer(kDefaultModeSize))); 147 new MockScanoutBuffer(kDefaultModeSize)));
148 148
149 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 149 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
150 controller_->Disable(); 150 controller_->Disable();
151 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>( 151 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>(
152 new MockScanoutBuffer(kDefaultModeSize))); 152 new MockScanoutBuffer(kDefaultModeSize)));
153 controller_->QueueOverlayPlane(plane2); 153 controller_->QueueOverlayPlane(plane2);
154 EXPECT_TRUE(controller_->SchedulePageFlip( 154 EXPECT_TRUE(controller_->SchedulePageFlip(
155 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 155 false, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
156 base::Unretained(this)))); 156 base::Unretained(this))));
157 drm_->RunCallbacks(); 157 drm_->RunCallbacks();
158 EXPECT_EQ(0, drm_->get_page_flip_call_count()); 158 EXPECT_EQ(0, drm_->get_page_flip_call_count());
159 159
160 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 160 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
161 controller_->QueueOverlayPlane(plane2); 161 controller_->QueueOverlayPlane(plane2);
162 EXPECT_TRUE(controller_->SchedulePageFlip( 162 EXPECT_TRUE(controller_->SchedulePageFlip(
163 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 163 false, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
164 base::Unretained(this)))); 164 base::Unretained(this))));
165 drm_->RunCallbacks(); 165 drm_->RunCallbacks();
166 EXPECT_EQ(1, drm_->get_page_flip_call_count()); 166 EXPECT_EQ(1, drm_->get_page_flip_call_count());
167 } 167 }
168 168
169 TEST_F(HardwareDisplayControllerTest, CheckOverlayPresent) { 169 TEST_F(HardwareDisplayControllerTest, CheckOverlayPresent) {
170 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 170 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
171 new MockScanoutBuffer(kDefaultModeSize))); 171 new MockScanoutBuffer(kDefaultModeSize)));
172 ui::OverlayPlane plane2( 172 ui::OverlayPlane plane2(
173 scoped_refptr<ui::ScanoutBuffer>(new MockScanoutBuffer(kDefaultModeSize)), 173 scoped_refptr<ui::ScanoutBuffer>(new MockScanoutBuffer(kDefaultModeSize)),
174 1, 174 1,
175 gfx::OVERLAY_TRANSFORM_NONE, 175 gfx::OVERLAY_TRANSFORM_NONE,
176 gfx::Rect(kDefaultModeSize), 176 gfx::Rect(kDefaultModeSize),
177 gfx::RectF(kDefaultModeSizeF)); 177 gfx::RectF(kDefaultModeSizeF));
178 178
179 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 179 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
180 180
181 controller_->QueueOverlayPlane(plane1); 181 controller_->QueueOverlayPlane(plane1);
182 controller_->QueueOverlayPlane(plane2); 182 controller_->QueueOverlayPlane(plane2);
183 183
184 EXPECT_TRUE(controller_->SchedulePageFlip( 184 EXPECT_TRUE(controller_->SchedulePageFlip(
185 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 185 false, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
186 base::Unretained(this)))); 186 base::Unretained(this))));
187 drm_->RunCallbacks(); 187 drm_->RunCallbacks();
188 EXPECT_EQ(1, drm_->get_page_flip_call_count()); 188 EXPECT_EQ(1, drm_->get_page_flip_call_count());
189 EXPECT_EQ(1, drm_->get_overlay_flip_call_count()); 189 EXPECT_EQ(1, drm_->get_overlay_flip_call_count());
190 } 190 }
191 191
192 TEST_F(HardwareDisplayControllerTest, PageflipMirroredControllers) { 192 TEST_F(HardwareDisplayControllerTest, PageflipMirroredControllers) {
193 controller_->AddCrtc(scoped_ptr<ui::CrtcController>( 193 controller_->AddCrtc(scoped_ptr<ui::CrtcController>(
194 new ui::CrtcController(drm_.get(), kSecondaryCrtc, kSecondaryConnector))); 194 new ui::CrtcController(drm_.get(), kSecondaryCrtc, kSecondaryConnector)));
195 195
196 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 196 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
197 new MockScanoutBuffer(kDefaultModeSize))); 197 new MockScanoutBuffer(kDefaultModeSize)));
198 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 198 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
199 EXPECT_EQ(2, drm_->get_set_crtc_call_count()); 199 EXPECT_EQ(2, drm_->get_set_crtc_call_count());
200 200
201 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>( 201 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>(
202 new MockScanoutBuffer(kDefaultModeSize))); 202 new MockScanoutBuffer(kDefaultModeSize)));
203 controller_->QueueOverlayPlane(plane2); 203 controller_->QueueOverlayPlane(plane2);
204 EXPECT_TRUE(controller_->SchedulePageFlip( 204 EXPECT_TRUE(controller_->SchedulePageFlip(
205 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 205 false, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
206 base::Unretained(this)))); 206 base::Unretained(this))));
207 drm_->RunCallbacks(); 207 drm_->RunCallbacks();
208 EXPECT_EQ(2, drm_->get_page_flip_call_count()); 208 EXPECT_EQ(2, drm_->get_page_flip_call_count());
209 EXPECT_EQ(1, page_flips_); 209 EXPECT_EQ(1, page_flips_);
210 } 210 }
211 211
212 TEST_F(HardwareDisplayControllerTest, PlaneStateAfterRemoveCrtc) { 212 TEST_F(HardwareDisplayControllerTest, PlaneStateAfterRemoveCrtc) {
213 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 213 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
214 new MockScanoutBuffer(kDefaultModeSize))); 214 new MockScanoutBuffer(kDefaultModeSize)));
215 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 215 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
216 controller_->QueueOverlayPlane(plane1); 216 controller_->QueueOverlayPlane(plane1);
217 EXPECT_TRUE(controller_->SchedulePageFlip( 217 EXPECT_TRUE(controller_->SchedulePageFlip(
218 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 218 false, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
219 base::Unretained(this)))); 219 base::Unretained(this))));
220 drm_->RunCallbacks(); 220 drm_->RunCallbacks();
221 221
222 const ui::HardwareDisplayPlane* owned_plane = nullptr; 222 const ui::HardwareDisplayPlane* owned_plane = nullptr;
223 for (const auto& plane : drm_->plane_manager()->planes()) 223 for (const auto& plane : drm_->plane_manager()->planes())
224 if (plane->in_use()) 224 if (plane->in_use())
225 owned_plane = plane; 225 owned_plane = plane;
226 ASSERT_TRUE(owned_plane != nullptr); 226 ASSERT_TRUE(owned_plane != nullptr);
227 EXPECT_EQ(kPrimaryCrtc, owned_plane->owning_crtc()); 227 EXPECT_EQ(kPrimaryCrtc, owned_plane->owning_crtc());
228 // Removing the crtc should free the plane. 228 // Removing the crtc should free the plane.
229 scoped_ptr<ui::CrtcController> crtc = 229 scoped_ptr<ui::CrtcController> crtc =
230 controller_->RemoveCrtc(drm_, kPrimaryCrtc); 230 controller_->RemoveCrtc(drm_, kPrimaryCrtc);
231 EXPECT_FALSE(owned_plane->in_use()); 231 EXPECT_FALSE(owned_plane->in_use());
232 } 232 }
233 233
234 TEST_F(HardwareDisplayControllerTest, ModesetWhilePageFlipping) { 234 TEST_F(HardwareDisplayControllerTest, ModesetWhilePageFlipping) {
235 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 235 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
236 new MockScanoutBuffer(kDefaultModeSize))); 236 new MockScanoutBuffer(kDefaultModeSize)));
237 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 237 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
238 controller_->QueueOverlayPlane(plane1); 238 controller_->QueueOverlayPlane(plane1);
239 EXPECT_TRUE(controller_->SchedulePageFlip( 239 EXPECT_TRUE(controller_->SchedulePageFlip(
240 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 240 false, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
241 base::Unretained(this)))); 241 base::Unretained(this))));
242 242
243 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 243 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
244 drm_->RunCallbacks(); 244 drm_->RunCallbacks();
245 EXPECT_EQ(1, page_flips_); 245 EXPECT_EQ(1, page_flips_);
246 } 246 }
247 247
248 TEST_F(HardwareDisplayControllerTest, AddCrtcMidPageFlip) { 248 TEST_F(HardwareDisplayControllerTest, AddCrtcMidPageFlip) {
249 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 249 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
250 new MockScanoutBuffer(kDefaultModeSize))); 250 new MockScanoutBuffer(kDefaultModeSize)));
251 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 251 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
252 controller_->QueueOverlayPlane(plane1); 252 controller_->QueueOverlayPlane(plane1);
253 EXPECT_TRUE(controller_->SchedulePageFlip( 253 EXPECT_TRUE(controller_->SchedulePageFlip(
254 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 254 false, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
255 base::Unretained(this)))); 255 base::Unretained(this))));
256 256
257 controller_->AddCrtc(scoped_ptr<ui::CrtcController>( 257 controller_->AddCrtc(scoped_ptr<ui::CrtcController>(
258 new ui::CrtcController(drm_.get(), kSecondaryCrtc, kSecondaryConnector))); 258 new ui::CrtcController(drm_.get(), kSecondaryCrtc, kSecondaryConnector)));
259 259
260 drm_->RunCallbacks(); 260 drm_->RunCallbacks();
261 EXPECT_EQ(1, page_flips_); 261 EXPECT_EQ(1, page_flips_);
262 } 262 }
263 263
264 TEST_F(HardwareDisplayControllerTest, RemoveCrtcMidPageFlip) { 264 TEST_F(HardwareDisplayControllerTest, RemoveCrtcMidPageFlip) {
265 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 265 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
266 new MockScanoutBuffer(kDefaultModeSize))); 266 new MockScanoutBuffer(kDefaultModeSize)));
267 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 267 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
268 controller_->QueueOverlayPlane(plane1); 268 controller_->QueueOverlayPlane(plane1);
269 EXPECT_TRUE(controller_->SchedulePageFlip( 269 EXPECT_TRUE(controller_->SchedulePageFlip(
270 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback, 270 false, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
271 base::Unretained(this)))); 271 base::Unretained(this))));
272 272
273 controller_->RemoveCrtc(drm_, kPrimaryCrtc); 273 controller_->RemoveCrtc(drm_, kPrimaryCrtc);
274 274
275 EXPECT_EQ(1, page_flips_); 275 EXPECT_EQ(1, page_flips_);
276 drm_->RunCallbacks(); 276 drm_->RunCallbacks();
277 EXPECT_EQ(1, page_flips_); 277 EXPECT_EQ(1, page_flips_);
278 } 278 }
OLDNEW
« no previous file with comments | « ui/ozone/platform/dri/hardware_display_controller.cc ('k') | ui/ozone/platform/dri/hardware_display_plane_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698