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

Side by Side Diff: ui/gfx/ozone/impl/hardware_display_controller_ozone_unittest.cc

Issue 27038004: [Ozone] HardwareDisplayController unittests (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Added newlines Created 7 years, 2 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "testing/gtest/include/gtest/gtest.h"
6 #include "ui/gfx/ozone/impl/drm_skbitmap_ozone.h"
7 #include "ui/gfx/ozone/impl/drm_wrapper_ozone.h"
8 #include "ui/gfx/ozone/impl/hardware_display_controller_ozone.h"
9 #include "ui/gfx/ozone/impl/software_surface_ozone.h"
10
11 namespace {
12
13 // Create a basic mode for a 6x4 screen.
14 const drmModeModeInfo kDefaultMode =
15 {0, 6, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, {'\0'}};
16
17 // Mock file descriptor ID.
18 const int kFd = 3;
19
20 // Mock connector ID.
21 const uint32_t kConnectorId = 1;
22
23 // Mock CRTC ID.
24 const uint32_t kCrtcId = 1;
25
26 // The real DrmWrapper makes actual DRM calls which we can't use in unit tests.
27 class MockDrmWrapperOzone : public gfx::DrmWrapperOzone {
28 public:
29 MockDrmWrapperOzone(int fd) : DrmWrapperOzone(""),
30 get_crtc_call_count(0),
31 free_crtc_call_count(0),
32 restore_crtc_call_count(0),
33 add_framebuffer_call_count(0),
34 remove_framebuffer_call_count(0),
35 set_crtc_expectation(true),
36 add_framebuffer_expectation(true),
37 page_flip_expectation(true) {
38 fd_ = fd;
39 }
40
41 virtual ~MockDrmWrapperOzone() { fd_ = -1; }
42
43 virtual drmModeCrtc* GetCrtc(uint32_t crtc_id) OVERRIDE {
44 get_crtc_call_count++;
45 return new drmModeCrtc;
46 }
47
48 virtual void FreeCrtc(drmModeCrtc* crtc) OVERRIDE {
49 free_crtc_call_count++;
50 delete crtc;
51 }
52
53 virtual bool SetCrtc(uint32_t crtc_id,
54 uint32_t framebuffer,
55 uint32_t* connectors,
56 drmModeModeInfo* mode) OVERRIDE {
57 return set_crtc_expectation;
58 }
59
60 virtual bool SetCrtc(drmModeCrtc* crtc, uint32_t* connectors) OVERRIDE {
61 restore_crtc_call_count++;
62 return true;
63 }
64
65 virtual bool AddFramebuffer(const drmModeModeInfo& mode,
66 uint8_t depth,
67 uint8_t bpp,
68 uint32_t stride,
69 uint32_t handle,
70 uint32_t* framebuffer) OVERRIDE {
71 add_framebuffer_call_count++;
72 return add_framebuffer_expectation;
73 }
74
75 virtual bool RemoveFramebuffer(uint32_t framebuffer) OVERRIDE {
76 remove_framebuffer_call_count++;
77 return true;
78 }
79
80 virtual bool PageFlip(uint32_t crtc_id,
81 uint32_t framebuffer,
82 void* data) OVERRIDE {
83 return page_flip_expectation;
84 }
85
86 int get_get_crtc_call_count() const {
87 return get_crtc_call_count;
88 }
89
90 int get_free_crtc_call_count() const {
91 return free_crtc_call_count;
92 }
93
94 int get_restore_crtc_call_count() const {
95 return restore_crtc_call_count;
96 }
97
98 int get_add_framebuffer_call_count() const {
99 return add_framebuffer_call_count;
100 }
101
102 int get_remove_framebuffer_call_count() const {
103 return remove_framebuffer_call_count;
104 }
105
106 void set_set_crtc_expectation(bool state) {
107 set_crtc_expectation = state;
108 }
109
110 void set_add_framebuffer_expectation(bool state) {
111 add_framebuffer_expectation = state;
112 }
113
114 void set_page_flip_expectation(bool state) {
115 page_flip_expectation = state;
116 }
117
118 private:
119 int get_crtc_call_count;
120 int free_crtc_call_count;
121 int restore_crtc_call_count;
122 int add_framebuffer_call_count;
123 int remove_framebuffer_call_count;
124
125 bool set_crtc_expectation;
126 bool add_framebuffer_expectation;
127 bool page_flip_expectation;
128
129 DISALLOW_COPY_AND_ASSIGN(MockDrmWrapperOzone);
130 };
131
132 class MockDrmSkBitmapOzone : public gfx::DrmSkBitmapOzone {
133 public:
134 MockDrmSkBitmapOzone(int fd) : DrmSkBitmapOzone(fd) {}
135 virtual ~MockDrmSkBitmapOzone() {}
136
137 virtual bool Initialize() OVERRIDE {
138 return allocPixels();
139 }
140 private:
141 DISALLOW_COPY_AND_ASSIGN(MockDrmSkBitmapOzone);
142 };
143
144 class MockSoftwareSurfaceOzone : public gfx::SoftwareSurfaceOzone {
145 public:
146 MockSoftwareSurfaceOzone(gfx::HardwareDisplayControllerOzone* controller)
147 : SoftwareSurfaceOzone(controller) {}
148 virtual ~MockSoftwareSurfaceOzone() {}
149
150 private:
151 virtual gfx::DrmSkBitmapOzone* CreateBuffer() OVERRIDE {
152 return new MockDrmSkBitmapOzone(kFd);
153 }
154 DISALLOW_COPY_AND_ASSIGN(MockSoftwareSurfaceOzone);
155 };
156
157 } // namespace
158
159 class HardwareDisplayControllerOzoneTest : public testing::Test {
160 public:
161 HardwareDisplayControllerOzoneTest() {}
162 virtual ~HardwareDisplayControllerOzoneTest() {}
163
164 virtual void SetUp() OVERRIDE;
165 virtual void TearDown() OVERRIDE;
166 protected:
167 scoped_ptr<gfx::HardwareDisplayControllerOzone> controller_;
168 scoped_ptr<MockDrmWrapperOzone> drm_;
169
170 private:
171 DISALLOW_COPY_AND_ASSIGN(HardwareDisplayControllerOzoneTest);
172 };
173
174 void HardwareDisplayControllerOzoneTest::SetUp() {
175 controller_.reset(new gfx::HardwareDisplayControllerOzone());
176 drm_.reset(new MockDrmWrapperOzone(kFd));
177 }
178
179 void HardwareDisplayControllerOzoneTest::TearDown() {
180 controller_.reset();
181 drm_.reset();
182 }
183
184 TEST_F(HardwareDisplayControllerOzoneTest, CheckInitialState) {
185 EXPECT_EQ(gfx::HardwareDisplayControllerOzone::UNASSOCIATED,
186 controller_->get_state());
187 }
188
189 TEST_F(HardwareDisplayControllerOzoneTest,
190 CheckStateAfterControllerIsInitialized) {
191 controller_->SetControllerInfo(
192 drm_.get(), kConnectorId, kCrtcId, kDefaultMode);
193
194 EXPECT_EQ(1, drm_->get_get_crtc_call_count());
195 EXPECT_EQ(gfx::HardwareDisplayControllerOzone::UNINITIALIZED,
196 controller_->get_state());
197 }
198
199 TEST_F(HardwareDisplayControllerOzoneTest, CheckStateAfterSurfaceIsBound) {
200 controller_->SetControllerInfo(
201 drm_.get(), kConnectorId, kCrtcId, kDefaultMode);
202 gfx::SoftwareSurfaceOzone* surface =
203 new MockSoftwareSurfaceOzone(controller_.get());
204
205 EXPECT_TRUE(surface->Initialize());
206 EXPECT_TRUE(controller_->BindSurfaceToController(surface));
207
208 EXPECT_EQ(2, drm_->get_add_framebuffer_call_count());
209 EXPECT_EQ(gfx::HardwareDisplayControllerOzone::SURFACE_INITIALIZED,
210 controller_->get_state());
211 }
212
213 TEST_F(HardwareDisplayControllerOzoneTest, CheckStateIfBindingFails) {
214 drm_->set_add_framebuffer_expectation(false);
215
216 controller_->SetControllerInfo(
217 drm_.get(), kConnectorId, kCrtcId, kDefaultMode);
218 gfx::SoftwareSurfaceOzone* surface =
219 new MockSoftwareSurfaceOzone(controller_.get());
220
221 EXPECT_TRUE(surface->Initialize());
222 EXPECT_FALSE(controller_->BindSurfaceToController(surface));
223
224 EXPECT_EQ(1, drm_->get_add_framebuffer_call_count());
225 EXPECT_EQ(gfx::HardwareDisplayControllerOzone::FAILED,
226 controller_->get_state());
227
228 // Normally the controller would take ownership, but we failed to bind, so we
229 // need to clean up.
230 delete surface;
231 }
232
233 TEST_F(HardwareDisplayControllerOzoneTest, CheckStateAfterPageFlip) {
234 controller_->SetControllerInfo(
235 drm_.get(), kConnectorId, kCrtcId, kDefaultMode);
236 gfx::SoftwareSurfaceOzone* surface =
237 new MockSoftwareSurfaceOzone(controller_.get());
238
239 EXPECT_TRUE(surface->Initialize());
240 EXPECT_TRUE(controller_->BindSurfaceToController(surface));
241
242 controller_->SchedulePageFlip();
243
244 EXPECT_EQ(gfx::HardwareDisplayControllerOzone::INITIALIZED,
245 controller_->get_state());
246 }
247
248 TEST_F(HardwareDisplayControllerOzoneTest, CheckStateIfModesetFails) {
249 drm_->set_set_crtc_expectation(false);
250
251 controller_->SetControllerInfo(
252 drm_.get(), kConnectorId, kCrtcId, kDefaultMode);
253 gfx::SoftwareSurfaceOzone* surface =
254 new MockSoftwareSurfaceOzone(controller_.get());
255
256 EXPECT_TRUE(surface->Initialize());
257 EXPECT_TRUE(controller_->BindSurfaceToController(surface));
258
259 controller_->SchedulePageFlip();
260
261 EXPECT_EQ(gfx::HardwareDisplayControllerOzone::FAILED,
262 controller_->get_state());
263 }
264
265 TEST_F(HardwareDisplayControllerOzoneTest, CheckStateIfPageFlipFails) {
266 drm_->set_page_flip_expectation(false);
267
268 controller_->SetControllerInfo(
269 drm_.get(), kConnectorId, kCrtcId, kDefaultMode);
270 gfx::SoftwareSurfaceOzone* surface =
271 new MockSoftwareSurfaceOzone(controller_.get());
272
273 EXPECT_TRUE(surface->Initialize());
274 EXPECT_TRUE(controller_->BindSurfaceToController(surface));
275
276 controller_->SchedulePageFlip();
277
278 EXPECT_EQ(gfx::HardwareDisplayControllerOzone::FAILED,
279 controller_->get_state());
280 }
281
282 TEST_F(HardwareDisplayControllerOzoneTest, CheckProperDestruction) {
283 controller_->SetControllerInfo(
284 drm_.get(), kConnectorId, kCrtcId, kDefaultMode);
285 gfx::SoftwareSurfaceOzone* surface =
286 new MockSoftwareSurfaceOzone(controller_.get());
287
288 EXPECT_TRUE(surface->Initialize());
289 EXPECT_TRUE(controller_->BindSurfaceToController(surface));
290
291 EXPECT_EQ(gfx::HardwareDisplayControllerOzone::SURFACE_INITIALIZED,
292 controller_->get_state());
293
294 controller_.reset();
295
296 EXPECT_EQ(2, drm_->get_remove_framebuffer_call_count());
297 EXPECT_EQ(1, drm_->get_restore_crtc_call_count());
298 EXPECT_EQ(1, drm_->get_free_crtc_call_count());
299 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698