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

Unified Diff: ui/ozone/platform/drm/gpu/drm_window_unittest.cc

Issue 1420943003: [Ozone-DRM] Fix double call of swap buffers callback on failure (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2526
Patch Set: Created 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/ozone/platform/drm/gpu/drm_window.cc ('k') | ui/ozone/platform/drm/gpu/hardware_display_controller.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/ozone/platform/drm/gpu/drm_window_unittest.cc
diff --git a/ui/ozone/platform/drm/gpu/drm_window_unittest.cc b/ui/ozone/platform/drm/gpu/drm_window_unittest.cc
index a865df386f816e13135be403bc63265387d2716a..a6c46da899fbf5fcef151aed3d86e1b3affa4df9 100644
--- a/ui/ozone/platform/drm/gpu/drm_window_unittest.cc
+++ b/ui/ozone/platform/drm/gpu/drm_window_unittest.cc
@@ -61,6 +61,11 @@ class DrmWindowTest : public testing::Test {
void SetUp() override;
void TearDown() override;
+ void OnSwapBuffers(gfx::SwapResult result) {
+ on_swap_buffers_count_++;
+ last_swap_buffers_result_ = result;
+ }
+
protected:
scoped_ptr<base::MessageLoop> message_loop_;
scoped_refptr<ui::MockDrmDevice> drm_;
@@ -68,11 +73,17 @@ class DrmWindowTest : public testing::Test {
scoped_ptr<ui::ScreenManager> screen_manager_;
scoped_ptr<ui::DrmDeviceManager> drm_device_manager_;
+ int on_swap_buffers_count_;
+ gfx::SwapResult last_swap_buffers_result_;
+
private:
DISALLOW_COPY_AND_ASSIGN(DrmWindowTest);
};
void DrmWindowTest::SetUp() {
+ on_swap_buffers_count_ = 0;
+ last_swap_buffers_result_ = gfx::SwapResult::SWAP_FAILED;
+
message_loop_.reset(new base::MessageLoopForUI);
drm_ = new ui::MockDrmDevice();
buffer_generator_.reset(new ui::DrmBufferGenerator());
@@ -147,3 +158,27 @@ TEST_F(DrmWindowTest, CheckCursorSurfaceAfterChangingDevice) {
// Make sure the cursor is showing on the new display.
EXPECT_NE(0u, drm->get_cursor_handle_for_crtc(kDefaultCrtc));
}
+
+TEST_F(DrmWindowTest, CheckCallbackOnFailedSwap) {
+ const gfx::Size window_size(6, 4);
+ ui::MockBufferGenerator buffer_generator;
+ ui::DrmWindow* window = screen_manager_->GetWindow(kDefaultWidgetHandle);
+ ui::OverlayPlane plane(
+ buffer_generator.Create(drm_, gfx::BufferFormat::BGRX_8888, window_size));
+
+ drm_->set_page_flip_expectation(false);
+
+ // Window was re-sized, so the expectation is to re-create the buffers first.
+ window->SchedulePageFlip(
+ std::vector<ui::OverlayPlane>(1, ui::OverlayPlane(plane)),
+ base::Bind(&DrmWindowTest::OnSwapBuffers, base::Unretained(this)));
+ EXPECT_EQ(1, on_swap_buffers_count_);
+ EXPECT_EQ(gfx::SwapResult::SWAP_NAK_RECREATE_BUFFERS,
+ last_swap_buffers_result_);
+
+ window->SchedulePageFlip(
+ std::vector<ui::OverlayPlane>(1, ui::OverlayPlane(plane)),
+ base::Bind(&DrmWindowTest::OnSwapBuffers, base::Unretained(this)));
+ EXPECT_EQ(2, on_swap_buffers_count_);
+ EXPECT_EQ(gfx::SwapResult::SWAP_FAILED, last_swap_buffers_result_);
+}
« no previous file with comments | « ui/ozone/platform/drm/gpu/drm_window.cc ('k') | ui/ozone/platform/drm/gpu/hardware_display_controller.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698