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