| // Copyright (c) 2017 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "ui/gfx/linux/native_pixmap_dmabuf.h" |
| |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace gfx { |
| |
| class NativePixmapDmabufTest : public testing::Test { |
| protected: |
| gfx::NativePixmapHandle CreateMockNativePixmapHandle(gfx::Size image_size) { |
| gfx::NativePixmapHandle handle; |
| |
| for (int i = 0; i < 4; ++i) { |
| // These values are arbitrarily chosen to be different from each other. |
| const int stride = (i + 1) * image_size.width(); |
| const int offset = i * image_size.width() * image_size.height(); |
| const uint64_t size = stride * image_size.height(); |
| const uint64_t modifiers = 1 << i; |
| |
| handle.fds.emplace_back( |
| base::FileDescriptor(i + 1, true /* auto_close */)); |
| |
| handle.planes.emplace_back(stride, offset, size, modifiers); |
| } |
| |
| return handle; |
| } |
| }; |
| |
| // Verifies NativePixmapDmaBuf conversion from and to NativePixmapHandle. |
| TEST_F(NativePixmapDmabufTest, Convert) { |
| const gfx::Size image_size(128, 64); |
| const gfx::BufferFormat format = gfx::BufferFormat::RGBX_8888; |
| |
| gfx::NativePixmapHandle origin_handle = |
| CreateMockNativePixmapHandle(image_size); |
| |
| // NativePixmapHandle to NativePixmapDmabuf |
| scoped_refptr<gfx::NativePixmap> native_pixmap_dmabuf( |
| new gfx::NativePixmapDmaBuf(image_size, format, origin_handle)); |
| EXPECT_TRUE(native_pixmap_dmabuf->AreDmaBufFdsValid()); |
| |
| // NativePixmap to NativePixmapHandle. |
| gfx::NativePixmapHandle handle; |
| for (size_t i = 0; i < native_pixmap_dmabuf->GetDmaBufFdCount(); ++i) { |
| handle.fds.emplace_back(base::FileDescriptor( |
| native_pixmap_dmabuf->GetDmaBufFd(i), true /* auto_close */)); |
| |
| handle.planes.emplace_back( |
| native_pixmap_dmabuf->GetDmaBufPitch(i), |
| native_pixmap_dmabuf->GetDmaBufOffset(i), |
| native_pixmap_dmabuf->GetDmaBufPitch(i) * image_size.height(), |
| native_pixmap_dmabuf->GetDmaBufModifier(i)); |
| } |
| |
| // NativePixmapHandle is unchanged during convertion to NativePixmapDmabuf. |
| EXPECT_EQ(origin_handle.fds, handle.fds); |
| EXPECT_EQ(origin_handle.fds.size(), handle.planes.size()); |
| EXPECT_EQ(origin_handle.planes.size(), handle.planes.size()); |
| for (size_t i = 0; i < origin_handle.planes.size(); ++i) { |
| EXPECT_EQ(origin_handle.planes[i].stride, handle.planes[i].stride); |
| EXPECT_EQ(origin_handle.planes[i].offset, handle.planes[i].offset); |
| EXPECT_EQ(origin_handle.planes[i].size, handle.planes[i].size); |
| EXPECT_EQ(origin_handle.planes[i].modifier, handle.planes[i].modifier); |
| } |
| } |
| |
| } // namespace gfx |