OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 <stddef.h> | 5 #include <stddef.h> |
6 #include <stdint.h> | 6 #include <stdint.h> |
7 | 7 |
8 #include "base/memory/shared_memory.h" | 8 #include "base/memory/shared_memory.h" |
9 #include "base/sys_info.h" | 9 #include "base/sys_info.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
11 #include "ui/gl/gl_image_shared_memory.h" | 11 #include "ui/gl/gl_image_shared_memory.h" |
12 #include "ui/gl/test/gl_image_test_template.h" | 12 #include "ui/gl/test/gl_image_test_template.h" |
13 | 13 |
14 namespace gl { | 14 namespace gl { |
15 namespace { | 15 namespace { |
16 | 16 |
17 template <gfx::BufferFormat format> | 17 template <gfx::BufferFormat format> |
18 class GLImageSharedMemoryTestDelegate { | 18 class GLImageSharedMemoryTestDelegate { |
19 public: | 19 public: |
20 scoped_refptr<gl::GLImage> CreateSolidColorImage( | 20 scoped_refptr<GLImage> CreateSolidColorImage(const gfx::Size& size, |
21 const gfx::Size& size, | 21 const uint8_t color[4]) const { |
22 const uint8_t color[4]) const { | |
23 DCHECK_EQ(NumberOfPlanesForBufferFormat(format), 1u); | 22 DCHECK_EQ(NumberOfPlanesForBufferFormat(format), 1u); |
24 base::SharedMemory shared_memory; | 23 base::SharedMemory shared_memory; |
25 bool rv = shared_memory.CreateAndMapAnonymous( | 24 bool rv = shared_memory.CreateAndMapAnonymous( |
26 gfx::BufferSizeForBufferFormat(size, format)); | 25 gfx::BufferSizeForBufferFormat(size, format)); |
27 DCHECK(rv); | 26 DCHECK(rv); |
28 GLImageTestSupport::SetBufferDataToColor( | 27 GLImageTestSupport::SetBufferDataToColor( |
29 size.width(), size.height(), | 28 size.width(), size.height(), |
30 static_cast<int>(RowSizeForBufferFormat(size.width(), format, 0)), 0, | 29 static_cast<int>(RowSizeForBufferFormat(size.width(), format, 0)), 0, |
31 format, color, reinterpret_cast<uint8_t*>(shared_memory.memory())); | 30 format, color, reinterpret_cast<uint8_t*>(shared_memory.memory())); |
32 scoped_refptr<gl::GLImageSharedMemory> image(new gl::GLImageSharedMemory( | 31 scoped_refptr<GLImageSharedMemory> image(new GLImageSharedMemory( |
33 size, gl::GLImageMemory::GetInternalFormatForTesting(format))); | 32 size, GLImageMemory::GetInternalFormatForTesting(format))); |
34 rv = image->Initialize( | 33 rv = image->Initialize( |
35 base::SharedMemory::DuplicateHandle(shared_memory.handle()), | 34 base::SharedMemory::DuplicateHandle(shared_memory.handle()), |
36 gfx::GenericSharedMemoryId(0), format, 0, | 35 gfx::GenericSharedMemoryId(0), format, 0, |
37 gfx::RowSizeForBufferFormat(size.width(), format, 0)); | 36 gfx::RowSizeForBufferFormat(size.width(), format, 0)); |
38 EXPECT_TRUE(rv); | 37 EXPECT_TRUE(rv); |
39 return image; | 38 return image; |
40 } | 39 } |
41 | 40 |
42 unsigned GetTextureTarget() const { return GL_TEXTURE_2D; } | 41 unsigned GetTextureTarget() const { return GL_TEXTURE_2D; } |
43 }; | 42 }; |
44 | 43 |
45 using GLImageTestTypes = testing::Types< | 44 using GLImageTestTypes = testing::Types< |
46 GLImageSharedMemoryTestDelegate<gfx::BufferFormat::BGR_565>, | 45 GLImageSharedMemoryTestDelegate<gfx::BufferFormat::BGR_565>, |
47 GLImageSharedMemoryTestDelegate<gfx::BufferFormat::RGBX_8888>, | 46 GLImageSharedMemoryTestDelegate<gfx::BufferFormat::RGBX_8888>, |
48 GLImageSharedMemoryTestDelegate<gfx::BufferFormat::RGBA_8888>, | 47 GLImageSharedMemoryTestDelegate<gfx::BufferFormat::RGBA_8888>, |
49 GLImageSharedMemoryTestDelegate<gfx::BufferFormat::BGRX_8888>, | 48 GLImageSharedMemoryTestDelegate<gfx::BufferFormat::BGRX_8888>, |
50 GLImageSharedMemoryTestDelegate<gfx::BufferFormat::BGRA_8888>>; | 49 GLImageSharedMemoryTestDelegate<gfx::BufferFormat::BGRA_8888>>; |
51 | 50 |
52 INSTANTIATE_TYPED_TEST_CASE_P(GLImageSharedMemory, | 51 INSTANTIATE_TYPED_TEST_CASE_P(GLImageSharedMemory, |
53 GLImageTest, | 52 GLImageTest, |
54 GLImageTestTypes); | 53 GLImageTestTypes); |
55 | 54 |
56 INSTANTIATE_TYPED_TEST_CASE_P(GLImageSharedMemory, | 55 INSTANTIATE_TYPED_TEST_CASE_P(GLImageSharedMemory, |
57 GLImageCopyTest, | 56 GLImageCopyTest, |
58 GLImageTestTypes); | 57 GLImageTestTypes); |
59 | 58 |
60 class GLImageSharedMemoryPoolTestDelegate { | 59 class GLImageSharedMemoryPoolTestDelegate { |
61 public: | 60 public: |
62 scoped_refptr<gl::GLImage> CreateSolidColorImage( | 61 scoped_refptr<GLImage> CreateSolidColorImage(const gfx::Size& size, |
63 const gfx::Size& size, | 62 const uint8_t color[4]) const { |
64 const uint8_t color[4]) const { | |
65 // Create a shared memory segment that holds an image with a stride that is | 63 // Create a shared memory segment that holds an image with a stride that is |
66 // twice the row size and 2 pages larger than image. | 64 // twice the row size and 2 pages larger than image. |
67 size_t stride = gfx::RowSizeForBufferFormat( | 65 size_t stride = gfx::RowSizeForBufferFormat( |
68 size.width(), gfx::BufferFormat::RGBA_8888, 0) * | 66 size.width(), gfx::BufferFormat::RGBA_8888, 0) * |
69 2; | 67 2; |
70 size_t pool_size = | 68 size_t pool_size = |
71 stride * size.height() + base::SysInfo::VMAllocationGranularity() * 3; | 69 stride * size.height() + base::SysInfo::VMAllocationGranularity() * 3; |
72 base::SharedMemory shared_memory; | 70 base::SharedMemory shared_memory; |
73 bool rv = shared_memory.CreateAndMapAnonymous(pool_size); | 71 bool rv = shared_memory.CreateAndMapAnonymous(pool_size); |
74 DCHECK(rv); | 72 DCHECK(rv); |
75 // Initialize memory to a value that is easy to recognize if test fails. | 73 // Initialize memory to a value that is easy to recognize if test fails. |
76 memset(shared_memory.memory(), 0x55, pool_size); | 74 memset(shared_memory.memory(), 0x55, pool_size); |
77 // Place buffer at a non-zero non-page-aligned offset in shared memory. | 75 // Place buffer at a non-zero non-page-aligned offset in shared memory. |
78 size_t buffer_offset = 3 * base::SysInfo::VMAllocationGranularity() / 2; | 76 size_t buffer_offset = 3 * base::SysInfo::VMAllocationGranularity() / 2; |
79 GLImageTestSupport::SetBufferDataToColor( | 77 GLImageTestSupport::SetBufferDataToColor( |
80 size.width(), size.height(), static_cast<int>(stride), 0, | 78 size.width(), size.height(), static_cast<int>(stride), 0, |
81 gfx::BufferFormat::RGBA_8888, color, | 79 gfx::BufferFormat::RGBA_8888, color, |
82 reinterpret_cast<uint8_t*>(shared_memory.memory()) + buffer_offset); | 80 reinterpret_cast<uint8_t*>(shared_memory.memory()) + buffer_offset); |
83 scoped_refptr<gl::GLImageSharedMemory> image( | 81 scoped_refptr<GLImageSharedMemory> image( |
84 new gl::GLImageSharedMemory(size, GL_RGBA)); | 82 new GLImageSharedMemory(size, GL_RGBA)); |
85 rv = image->Initialize( | 83 rv = image->Initialize( |
86 base::SharedMemory::DuplicateHandle(shared_memory.handle()), | 84 base::SharedMemory::DuplicateHandle(shared_memory.handle()), |
87 gfx::GenericSharedMemoryId(0), gfx::BufferFormat::RGBA_8888, | 85 gfx::GenericSharedMemoryId(0), gfx::BufferFormat::RGBA_8888, |
88 buffer_offset, stride); | 86 buffer_offset, stride); |
89 EXPECT_TRUE(rv); | 87 EXPECT_TRUE(rv); |
90 return image; | 88 return image; |
91 } | 89 } |
92 | 90 |
93 unsigned GetTextureTarget() const { return GL_TEXTURE_2D; } | 91 unsigned GetTextureTarget() const { return GL_TEXTURE_2D; } |
94 }; | 92 }; |
95 | 93 |
96 INSTANTIATE_TYPED_TEST_CASE_P(GLImageSharedMemoryPool, | 94 INSTANTIATE_TYPED_TEST_CASE_P(GLImageSharedMemoryPool, |
97 GLImageCopyTest, | 95 GLImageCopyTest, |
98 GLImageSharedMemoryPoolTestDelegate); | 96 GLImageSharedMemoryPoolTestDelegate); |
99 | 97 |
100 } // namespace | 98 } // namespace |
101 } // namespace gl | 99 } // namespace gl |
OLD | NEW |