Index: ui/ozone/platform/drm/gpu/drm_surface_unittest.cc |
diff --git a/ui/ozone/platform/drm/gpu/drm_surface_unittest.cc b/ui/ozone/platform/drm/gpu/drm_surface_unittest.cc |
index 4498f1fc28afe80865f7be1892310efff307cb23..c384f123bbe52b43dadf09eb05b68cc1424c4380 100644 |
--- a/ui/ozone/platform/drm/gpu/drm_surface_unittest.cc |
+++ b/ui/ozone/platform/drm/gpu/drm_surface_unittest.cc |
@@ -29,6 +29,20 @@ const uint32_t kDefaultConnector = 2; |
const size_t kPlanesPerCrtc = 1; |
const uint32_t kDefaultCursorSize = 64; |
+std::vector<skia::RefPtr<SkSurface>> GetFramebuffers(ui::MockDrmDevice* drm) { |
+ std::vector<skia::RefPtr<SkSurface>> framebuffers; |
+ for (const auto& buffer : drm->buffers()) { |
+ // Skip destroyed buffers and cursor buffers. |
+ if (!buffer || (buffer->width() == kDefaultCursorSize && |
+ buffer->height() == kDefaultCursorSize)) |
+ continue; |
+ |
+ framebuffers.push_back(buffer); |
+ } |
+ |
+ return framebuffers; |
+} |
+ |
} // namespace |
class DrmSurfaceTest : public testing::Test { |
@@ -73,6 +87,10 @@ void DrmSurfaceTest::SetUp() { |
new ui::DrmSurface(screen_manager_->GetWindow(kDefaultWidgetHandle))); |
surface_->ResizeCanvas( |
gfx::Size(kDefaultMode.hdisplay, kDefaultMode.vdisplay)); |
+ |
+ // The window has been remapped to a controller. The first swap will cause the |
+ // SWAP_NAK_RECREATE_BUFFERS without actually using the buffers. |
+ surface_->PresentCanvas(gfx::Rect()); |
} |
void DrmSurfaceTest::TearDown() { |
@@ -87,11 +105,13 @@ void DrmSurfaceTest::TearDown() { |
TEST_F(DrmSurfaceTest, CheckFBIDOnSwap) { |
surface_->PresentCanvas(gfx::Rect()); |
drm_->RunCallbacks(); |
- // Framebuffer ID 1 is allocated in SetUp for the buffer used to modeset. |
+ |
+ // Framebuffer ID 1 is allocated in SetUp for the buffer used to modeset and |
+ // framebuffer ID 2 is used when the window to display mapping is done. |
EXPECT_EQ(3u, drm_->current_framebuffer()); |
surface_->PresentCanvas(gfx::Rect()); |
drm_->RunCallbacks(); |
- EXPECT_EQ(2u, drm_->current_framebuffer()); |
+ EXPECT_EQ(4u, drm_->current_framebuffer()); |
} |
TEST_F(DrmSurfaceTest, CheckSurfaceContents) { |
@@ -105,22 +125,15 @@ TEST_F(DrmSurfaceTest, CheckSurfaceContents) { |
drm_->RunCallbacks(); |
SkBitmap image; |
- std::vector<skia::RefPtr<SkSurface>> framebuffers; |
- for (const auto& buffer : drm_->buffers()) { |
- // Skip cursor buffers. |
- if (buffer->width() == kDefaultCursorSize && |
- buffer->height() == kDefaultCursorSize) |
- continue; |
+ std::vector<skia::RefPtr<SkSurface>> framebuffers = |
+ GetFramebuffers(drm_.get()); |
- framebuffers.push_back(buffer); |
- } |
- |
- // Buffer 0 is the modesetting buffer, buffer 1 is the frontbuffer and buffer |
- // 2 is the backbuffer. |
+ // Buffer 0 is the modesetting buffer, buffer 2 is the frontbuffer and buffer |
+ // 1 is the backbuffer. |
EXPECT_EQ(3u, framebuffers.size()); |
- image.setInfo(framebuffers[2]->getCanvas()->imageInfo()); |
- EXPECT_TRUE(framebuffers[2]->getCanvas()->readPixels(&image, 0, 0)); |
+ image.setInfo(framebuffers[1]->getCanvas()->imageInfo()); |
+ EXPECT_TRUE(framebuffers[1]->getCanvas()->readPixels(&image, 0, 0)); |
EXPECT_EQ(kDefaultMode.hdisplay, image.width()); |
EXPECT_EQ(kDefaultMode.vdisplay, image.height()); |
@@ -157,22 +170,15 @@ TEST_F(DrmSurfaceTest, CheckSurfaceContentsAfter2QueuedPresents) { |
drm_->RunCallbacks(); |
SkBitmap image; |
- std::vector<skia::RefPtr<SkSurface>> framebuffers; |
- for (const auto& buffer : drm_->buffers()) { |
- // Skip cursor buffers. |
- if (buffer->width() == kDefaultCursorSize && |
- buffer->height() == kDefaultCursorSize) |
- continue; |
+ std::vector<skia::RefPtr<SkSurface>> framebuffers = |
+ GetFramebuffers(drm_.get()); |
- framebuffers.push_back(buffer); |
- } |
- |
- // Buffer 0 is the modesetting buffer, buffer 1 is the backbuffer and buffer |
- // 2 is the frontbuffer. |
+ // Buffer 0 is the modesetting buffer, buffer 2 is the backbuffer and buffer |
+ // 1 is the frontbuffer. |
EXPECT_EQ(3u, framebuffers.size()); |
- image.setInfo(framebuffers[1]->getCanvas()->imageInfo()); |
- EXPECT_TRUE(framebuffers[1]->getCanvas()->readPixels(&image, 0, 0)); |
+ image.setInfo(framebuffers[2]->getCanvas()->imageInfo()); |
+ EXPECT_TRUE(framebuffers[2]->getCanvas()->readPixels(&image, 0, 0)); |
EXPECT_EQ(kDefaultMode.hdisplay, image.width()); |
EXPECT_EQ(kDefaultMode.vdisplay, image.height()); |