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

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

Issue 821023003: [Ozone-DRI] Listen for swap events (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@async-swap
Patch Set: Created 5 years, 11 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 "testing/gtest/include/gtest/gtest.h" 6 #include "testing/gtest/include/gtest/gtest.h"
6 #include "third_party/skia/include/core/SkCanvas.h" 7 #include "third_party/skia/include/core/SkCanvas.h"
7 #include "ui/ozone/platform/dri/crtc_controller.h" 8 #include "ui/ozone/platform/dri/crtc_controller.h"
8 #include "ui/ozone/platform/dri/dri_buffer.h" 9 #include "ui/ozone/platform/dri/dri_buffer.h"
9 #include "ui/ozone/platform/dri/dri_wrapper.h" 10 #include "ui/ozone/platform/dri/dri_wrapper.h"
10 #include "ui/ozone/platform/dri/hardware_display_controller.h" 11 #include "ui/ozone/platform/dri/hardware_display_controller.h"
11 #include "ui/ozone/platform/dri/test/mock_dri_wrapper.h" 12 #include "ui/ozone/platform/dri/test/mock_dri_wrapper.h"
12 #include "ui/ozone/public/native_pixmap.h" 13 #include "ui/ozone/public/native_pixmap.h"
13 14
14 namespace { 15 namespace {
(...skipping 25 matching lines...) Expand all
40 41
41 gfx::Size size_; 42 gfx::Size size_;
42 43
43 DISALLOW_COPY_AND_ASSIGN(MockScanoutBuffer); 44 DISALLOW_COPY_AND_ASSIGN(MockScanoutBuffer);
44 }; 45 };
45 46
46 } // namespace 47 } // namespace
47 48
48 class HardwareDisplayControllerTest : public testing::Test { 49 class HardwareDisplayControllerTest : public testing::Test {
49 public: 50 public:
50 HardwareDisplayControllerTest() {} 51 HardwareDisplayControllerTest() : page_flips_(0) {}
51 ~HardwareDisplayControllerTest() override {} 52 ~HardwareDisplayControllerTest() override {}
52 53
53 void SetUp() override; 54 void SetUp() override;
54 void TearDown() override; 55 void TearDown() override;
55 56
57 void PageFlipCallback();
58
56 protected: 59 protected:
57 scoped_ptr<ui::HardwareDisplayController> controller_; 60 scoped_ptr<ui::HardwareDisplayController> controller_;
58 scoped_ptr<ui::MockDriWrapper> drm_; 61 scoped_ptr<ui::MockDriWrapper> drm_;
59 62
63 int page_flips_;
64
60 private: 65 private:
61 DISALLOW_COPY_AND_ASSIGN(HardwareDisplayControllerTest); 66 DISALLOW_COPY_AND_ASSIGN(HardwareDisplayControllerTest);
62 }; 67 };
63 68
64 void HardwareDisplayControllerTest::SetUp() { 69 void HardwareDisplayControllerTest::SetUp() {
65 std::vector<uint32_t> crtcs; 70 std::vector<uint32_t> crtcs;
66 crtcs.push_back(kPrimaryCrtc); 71 crtcs.push_back(kPrimaryCrtc);
67 crtcs.push_back(kSecondaryCrtc); 72 crtcs.push_back(kSecondaryCrtc);
68 drm_.reset(new ui::MockDriWrapper(3, crtcs, kPlanesPerCrtc)); 73 drm_.reset(new ui::MockDriWrapper(3, crtcs, kPlanesPerCrtc));
69 controller_.reset(new ui::HardwareDisplayController( 74 controller_.reset(new ui::HardwareDisplayController(
70 scoped_ptr<ui::CrtcController>(new ui::CrtcController( 75 scoped_ptr<ui::CrtcController>(new ui::CrtcController(
71 drm_.get(), kPrimaryCrtc, kPrimaryConnector)))); 76 drm_.get(), kPrimaryCrtc, kPrimaryConnector))));
72 } 77 }
73 78
74 void HardwareDisplayControllerTest::TearDown() { 79 void HardwareDisplayControllerTest::TearDown() {
75 controller_.reset(); 80 controller_.reset();
76 drm_.reset(); 81 drm_.reset();
77 } 82 }
78 83
84 void HardwareDisplayControllerTest::PageFlipCallback() {
85 page_flips_++;
86 }
87
79 TEST_F(HardwareDisplayControllerTest, CheckModesettingResult) { 88 TEST_F(HardwareDisplayControllerTest, CheckModesettingResult) {
80 ui::OverlayPlane plane(scoped_refptr<ui::ScanoutBuffer>( 89 ui::OverlayPlane plane(scoped_refptr<ui::ScanoutBuffer>(
81 new MockScanoutBuffer(kDefaultModeSize))); 90 new MockScanoutBuffer(kDefaultModeSize)));
82 91
83 EXPECT_TRUE(controller_->Modeset(plane, kDefaultMode)); 92 EXPECT_TRUE(controller_->Modeset(plane, kDefaultMode));
84 EXPECT_FALSE(plane.buffer->HasOneRef()); 93 EXPECT_FALSE(plane.buffer->HasOneRef());
85 } 94 }
86 95
87 TEST_F(HardwareDisplayControllerTest, CheckStateAfterPageFlip) { 96 TEST_F(HardwareDisplayControllerTest, CheckStateAfterPageFlip) {
88 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 97 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
89 new MockScanoutBuffer(kDefaultModeSize))); 98 new MockScanoutBuffer(kDefaultModeSize)));
90 99
91 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 100 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
92 101
93 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>( 102 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>(
94 new MockScanoutBuffer(kDefaultModeSize))); 103 new MockScanoutBuffer(kDefaultModeSize)));
95 controller_->QueueOverlayPlane(plane2); 104 controller_->QueueOverlayPlane(plane2);
96 EXPECT_TRUE(controller_->SchedulePageFlip()); 105 EXPECT_TRUE(controller_->SchedulePageFlip(
97 controller_->WaitForPageFlipEvent(); 106 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
107 base::Unretained(this))));
98 EXPECT_TRUE(plane1.buffer->HasOneRef()); 108 EXPECT_TRUE(plane1.buffer->HasOneRef());
99 EXPECT_FALSE(plane2.buffer->HasOneRef()); 109 EXPECT_FALSE(plane2.buffer->HasOneRef());
100 110
101 EXPECT_EQ(1, drm_->get_page_flip_call_count()); 111 EXPECT_EQ(1, drm_->get_page_flip_call_count());
102 EXPECT_EQ(0, drm_->get_overlay_flip_call_count()); 112 EXPECT_EQ(0, drm_->get_overlay_flip_call_count());
103 } 113 }
104 114
105 TEST_F(HardwareDisplayControllerTest, CheckStateIfModesetFails) { 115 TEST_F(HardwareDisplayControllerTest, CheckStateIfModesetFails) {
106 drm_->set_set_crtc_expectation(false); 116 drm_->set_set_crtc_expectation(false);
107 117
108 ui::OverlayPlane plane(scoped_refptr<ui::ScanoutBuffer>(new MockScanoutBuffer( 118 ui::OverlayPlane plane(scoped_refptr<ui::ScanoutBuffer>(new MockScanoutBuffer(
109 kDefaultModeSize))); 119 kDefaultModeSize)));
110 120
111 EXPECT_FALSE(controller_->Modeset(plane, kDefaultMode)); 121 EXPECT_FALSE(controller_->Modeset(plane, kDefaultMode));
112 } 122 }
113 123
114 TEST_F(HardwareDisplayControllerTest, CheckStateIfPageFlipFails) { 124 TEST_F(HardwareDisplayControllerTest, CheckStateIfPageFlipFails) {
115 drm_->set_page_flip_expectation(false); 125 drm_->set_page_flip_expectation(false);
116 126
117 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 127 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
118 new MockScanoutBuffer(kDefaultModeSize))); 128 new MockScanoutBuffer(kDefaultModeSize)));
119 129
120 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 130 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
121 131
122 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>( 132 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>(
123 new MockScanoutBuffer(kDefaultModeSize))); 133 new MockScanoutBuffer(kDefaultModeSize)));
124 controller_->QueueOverlayPlane(plane2); 134 controller_->QueueOverlayPlane(plane2);
125 EXPECT_FALSE(controller_->SchedulePageFlip()); 135 EXPECT_FALSE(controller_->SchedulePageFlip(
126 EXPECT_FALSE(plane1.buffer->HasOneRef()); 136 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
127 EXPECT_FALSE(plane2.buffer->HasOneRef()); 137 base::Unretained(this))));
128 138
129 controller_->WaitForPageFlipEvent();
130 EXPECT_FALSE(plane1.buffer->HasOneRef()); 139 EXPECT_FALSE(plane1.buffer->HasOneRef());
131 EXPECT_TRUE(plane2.buffer->HasOneRef()); 140 EXPECT_TRUE(plane2.buffer->HasOneRef());
132 } 141 }
133 142
134 TEST_F(HardwareDisplayControllerTest, VerifyNoDRMCallsWhenDisabled) { 143 TEST_F(HardwareDisplayControllerTest, VerifyNoDRMCallsWhenDisabled) {
135 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 144 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
136 new MockScanoutBuffer(kDefaultModeSize))); 145 new MockScanoutBuffer(kDefaultModeSize)));
137 146
138 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 147 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
139 controller_->Disable(); 148 controller_->Disable();
140 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>( 149 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>(
141 new MockScanoutBuffer(kDefaultModeSize))); 150 new MockScanoutBuffer(kDefaultModeSize)));
142 controller_->QueueOverlayPlane(plane2); 151 controller_->QueueOverlayPlane(plane2);
143 EXPECT_TRUE(controller_->SchedulePageFlip()); 152 EXPECT_TRUE(controller_->SchedulePageFlip(
144 controller_->WaitForPageFlipEvent(); 153 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
154 base::Unretained(this))));
145 EXPECT_EQ(0, drm_->get_page_flip_call_count()); 155 EXPECT_EQ(0, drm_->get_page_flip_call_count());
146 156
147 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 157 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
148 controller_->QueueOverlayPlane(plane2); 158 controller_->QueueOverlayPlane(plane2);
149 EXPECT_TRUE(controller_->SchedulePageFlip()); 159 EXPECT_TRUE(controller_->SchedulePageFlip(
150 controller_->WaitForPageFlipEvent(); 160 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
161 base::Unretained(this))));
151 EXPECT_EQ(1, drm_->get_page_flip_call_count()); 162 EXPECT_EQ(1, drm_->get_page_flip_call_count());
152 } 163 }
153 164
154 TEST_F(HardwareDisplayControllerTest, CheckOverlayPresent) { 165 TEST_F(HardwareDisplayControllerTest, CheckOverlayPresent) {
155 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 166 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
156 new MockScanoutBuffer(kDefaultModeSize))); 167 new MockScanoutBuffer(kDefaultModeSize)));
157 ui::OverlayPlane plane2( 168 ui::OverlayPlane plane2(
158 scoped_refptr<ui::ScanoutBuffer>(new MockScanoutBuffer(kDefaultModeSize)), 169 scoped_refptr<ui::ScanoutBuffer>(new MockScanoutBuffer(kDefaultModeSize)),
159 1, 170 1,
160 gfx::OVERLAY_TRANSFORM_NONE, 171 gfx::OVERLAY_TRANSFORM_NONE,
161 gfx::Rect(kDefaultModeSize), 172 gfx::Rect(kDefaultModeSize),
162 gfx::RectF(kDefaultModeSizeF)); 173 gfx::RectF(kDefaultModeSizeF));
163 174
164 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 175 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
165 176
166 controller_->QueueOverlayPlane(plane1); 177 controller_->QueueOverlayPlane(plane1);
167 controller_->QueueOverlayPlane(plane2); 178 controller_->QueueOverlayPlane(plane2);
168 179
169 EXPECT_TRUE(controller_->SchedulePageFlip()); 180 EXPECT_TRUE(controller_->SchedulePageFlip(
170 controller_->WaitForPageFlipEvent(); 181 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
182 base::Unretained(this))));
171 EXPECT_EQ(1, drm_->get_page_flip_call_count()); 183 EXPECT_EQ(1, drm_->get_page_flip_call_count());
172 EXPECT_EQ(1, drm_->get_overlay_flip_call_count()); 184 EXPECT_EQ(1, drm_->get_overlay_flip_call_count());
173 } 185 }
174 186
175 TEST_F(HardwareDisplayControllerTest, PageflipMirroredControllers) { 187 TEST_F(HardwareDisplayControllerTest, PageflipMirroredControllers) {
176 controller_->AddCrtc(scoped_ptr<ui::CrtcController>( 188 controller_->AddCrtc(scoped_ptr<ui::CrtcController>(
177 new ui::CrtcController(drm_.get(), kSecondaryCrtc, kSecondaryConnector))); 189 new ui::CrtcController(drm_.get(), kSecondaryCrtc, kSecondaryConnector)));
178 190
179 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>( 191 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
180 new MockScanoutBuffer(kDefaultModeSize))); 192 new MockScanoutBuffer(kDefaultModeSize)));
181 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); 193 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
182 EXPECT_EQ(2, drm_->get_set_crtc_call_count()); 194 EXPECT_EQ(2, drm_->get_set_crtc_call_count());
183 195
184 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>( 196 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>(
185 new MockScanoutBuffer(kDefaultModeSize))); 197 new MockScanoutBuffer(kDefaultModeSize)));
186 controller_->QueueOverlayPlane(plane2); 198 controller_->QueueOverlayPlane(plane2);
187 EXPECT_TRUE(controller_->SchedulePageFlip()); 199 EXPECT_TRUE(controller_->SchedulePageFlip(
200 base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
201 base::Unretained(this))));
188 EXPECT_EQ(2, drm_->get_page_flip_call_count()); 202 EXPECT_EQ(2, drm_->get_page_flip_call_count());
189 203 EXPECT_EQ(1, page_flips_);
190 controller_->WaitForPageFlipEvent();
191 EXPECT_EQ(2, drm_->get_handle_events_count());
192 } 204 }
193
194 TEST_F(HardwareDisplayControllerTest,
195 PageflipMirroredControllersWithInvertedCrtcOrder) {
196 scoped_ptr<ui::CrtcController> crtc1(
197 new ui::CrtcController(drm_.get(), kPrimaryCrtc, kPrimaryConnector));
198 scoped_ptr<ui::CrtcController> crtc2(
199 new ui::CrtcController(drm_.get(), kSecondaryCrtc, kSecondaryConnector));
200
201 // Make sure that if the order is reversed everything is still fine.
202 std::queue<ui::CrtcController*> crtc_queue;
203 crtc_queue.push(crtc2.get());
204 crtc_queue.push(crtc1.get());
205
206 controller_.reset(new ui::HardwareDisplayController(crtc1.Pass()));
207 controller_->AddCrtc(crtc2.Pass());
208
209 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
210 new MockScanoutBuffer(kDefaultModeSize)));
211 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
212 EXPECT_EQ(2, drm_->get_set_crtc_call_count());
213
214 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>(
215 new MockScanoutBuffer(kDefaultModeSize)));
216 controller_->QueueOverlayPlane(plane2);
217 EXPECT_TRUE(controller_->SchedulePageFlip());
218 EXPECT_EQ(2, drm_->get_page_flip_call_count());
219
220 drm_->set_controllers(crtc_queue);
221 controller_->WaitForPageFlipEvent();
222 EXPECT_EQ(2, drm_->get_handle_events_count());
223 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698