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

Side by Side Diff: cc/test/test_gpu_memory_buffer_manager.cc

Issue 1269503007: Unify graphics buffer format & usage enums for GpuMemoryBuffer & SurfaceFactoryOzone (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: add header to BUILD.gn Created 5 years, 4 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 unified diff | Download patch
« no previous file with comments | « cc/test/test_gpu_memory_buffer_manager.h ('k') | cc/test/test_image_factory.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "cc/test/test_gpu_memory_buffer_manager.h" 5 #include "cc/test/test_gpu_memory_buffer_manager.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/numerics/safe_conversions.h" 8 #include "base/numerics/safe_conversions.h"
9 #include "ui/gfx/gpu_memory_buffer.h" 9 #include "ui/gfx/gpu_memory_buffer.h"
10 10
11 namespace cc { 11 namespace cc {
12 namespace { 12 namespace {
13 13
14 int NumberOfPlanesForGpuMemoryBufferFormat( 14 int NumberOfPlanesForGpuMemoryBufferFormat(gfx::BufferFormat format) {
15 gfx::GpuMemoryBuffer::Format format) {
16 switch (format) { 15 switch (format) {
17 case gfx::GpuMemoryBuffer::ATC: 16 case gfx::BufferFormat::ATC:
18 case gfx::GpuMemoryBuffer::ATCIA: 17 case gfx::BufferFormat::ATCIA:
19 case gfx::GpuMemoryBuffer::DXT1: 18 case gfx::BufferFormat::DXT1:
20 case gfx::GpuMemoryBuffer::DXT5: 19 case gfx::BufferFormat::DXT5:
21 case gfx::GpuMemoryBuffer::ETC1: 20 case gfx::BufferFormat::ETC1:
22 case gfx::GpuMemoryBuffer::R_8: 21 case gfx::BufferFormat::R_8:
23 case gfx::GpuMemoryBuffer::RGBA_4444: 22 case gfx::BufferFormat::RGBA_4444:
24 case gfx::GpuMemoryBuffer::RGBA_8888: 23 case gfx::BufferFormat::RGBA_8888:
25 case gfx::GpuMemoryBuffer::RGBX_8888: 24 case gfx::BufferFormat::RGBX_8888:
26 case gfx::GpuMemoryBuffer::BGRA_8888: 25 case gfx::BufferFormat::BGRA_8888:
27 return 1; 26 return 1;
28 case gfx::GpuMemoryBuffer::YUV_420: 27 case gfx::BufferFormat::YUV_420:
29 return 3; 28 return 3;
30 } 29 }
31 NOTREACHED(); 30 NOTREACHED();
32 return 0; 31 return 0;
33 } 32 }
34 33
35 size_t SubsamplingFactor(gfx::GpuMemoryBuffer::Format format, int plane) { 34 size_t SubsamplingFactor(gfx::BufferFormat format, int plane) {
36 switch (format) { 35 switch (format) {
37 case gfx::GpuMemoryBuffer::ATC: 36 case gfx::BufferFormat::ATC:
38 case gfx::GpuMemoryBuffer::ATCIA: 37 case gfx::BufferFormat::ATCIA:
39 case gfx::GpuMemoryBuffer::DXT1: 38 case gfx::BufferFormat::DXT1:
40 case gfx::GpuMemoryBuffer::DXT5: 39 case gfx::BufferFormat::DXT5:
41 case gfx::GpuMemoryBuffer::ETC1: 40 case gfx::BufferFormat::ETC1:
42 case gfx::GpuMemoryBuffer::R_8: 41 case gfx::BufferFormat::R_8:
43 case gfx::GpuMemoryBuffer::RGBA_4444: 42 case gfx::BufferFormat::RGBA_4444:
44 case gfx::GpuMemoryBuffer::RGBA_8888: 43 case gfx::BufferFormat::RGBA_8888:
45 case gfx::GpuMemoryBuffer::RGBX_8888: 44 case gfx::BufferFormat::RGBX_8888:
46 case gfx::GpuMemoryBuffer::BGRA_8888: 45 case gfx::BufferFormat::BGRA_8888:
47 return 1; 46 return 1;
48 case gfx::GpuMemoryBuffer::YUV_420: { 47 case gfx::BufferFormat::YUV_420: {
49 static size_t factor[] = {1, 2, 2}; 48 static size_t factor[] = {1, 2, 2};
50 DCHECK_LT(static_cast<size_t>(plane), arraysize(factor)); 49 DCHECK_LT(static_cast<size_t>(plane), arraysize(factor));
51 return factor[plane]; 50 return factor[plane];
52 } 51 }
53 } 52 }
54 NOTREACHED(); 53 NOTREACHED();
55 return 0; 54 return 0;
56 } 55 }
57 56
58 size_t StrideInBytes(size_t width, 57 size_t StrideInBytes(size_t width, gfx::BufferFormat format, int plane) {
59 gfx::GpuMemoryBuffer::Format format,
60 int plane) {
61 switch (format) { 58 switch (format) {
62 case gfx::GpuMemoryBuffer::ATCIA: 59 case gfx::BufferFormat::ATCIA:
63 case gfx::GpuMemoryBuffer::DXT5: 60 case gfx::BufferFormat::DXT5:
64 DCHECK_EQ(plane, 0); 61 DCHECK_EQ(plane, 0);
65 return width; 62 return width;
66 case gfx::GpuMemoryBuffer::ATC: 63 case gfx::BufferFormat::ATC:
67 case gfx::GpuMemoryBuffer::DXT1: 64 case gfx::BufferFormat::DXT1:
68 case gfx::GpuMemoryBuffer::ETC1: 65 case gfx::BufferFormat::ETC1:
69 DCHECK_EQ(plane, 0); 66 DCHECK_EQ(plane, 0);
70 DCHECK_EQ(width % 2, 0u); 67 DCHECK_EQ(width % 2, 0u);
71 return width / 2; 68 return width / 2;
72 case gfx::GpuMemoryBuffer::R_8: 69 case gfx::BufferFormat::R_8:
73 return (width + 3) & ~0x3; 70 return (width + 3) & ~0x3;
74 case gfx::GpuMemoryBuffer::RGBA_4444: 71 case gfx::BufferFormat::RGBA_4444:
75 DCHECK_EQ(plane, 0); 72 DCHECK_EQ(plane, 0);
76 return width * 2; 73 return width * 2;
77 case gfx::GpuMemoryBuffer::RGBA_8888: 74 case gfx::BufferFormat::RGBA_8888:
78 case gfx::GpuMemoryBuffer::RGBX_8888: 75 case gfx::BufferFormat::RGBX_8888:
79 case gfx::GpuMemoryBuffer::BGRA_8888: 76 case gfx::BufferFormat::BGRA_8888:
80 DCHECK_EQ(plane, 0); 77 DCHECK_EQ(plane, 0);
81 return width * 4; 78 return width * 4;
82 case gfx::GpuMemoryBuffer::YUV_420: 79 case gfx::BufferFormat::YUV_420:
83 return width / SubsamplingFactor(format, plane); 80 return width / SubsamplingFactor(format, plane);
84 } 81 }
85 NOTREACHED(); 82 NOTREACHED();
86 return 0; 83 return 0;
87 } 84 }
88 85
89 size_t BufferSizeInBytes(const gfx::Size& size, 86 size_t BufferSizeInBytes(const gfx::Size& size, gfx::BufferFormat format) {
90 gfx::GpuMemoryBuffer::Format format) {
91 size_t size_in_bytes = 0; 87 size_t size_in_bytes = 0;
92 int num_planes = NumberOfPlanesForGpuMemoryBufferFormat(format); 88 int num_planes = NumberOfPlanesForGpuMemoryBufferFormat(format);
93 for (int i = 0; i < num_planes; ++i) { 89 for (int i = 0; i < num_planes; ++i) {
94 size_in_bytes += StrideInBytes(size.width(), format, i) * 90 size_in_bytes += StrideInBytes(size.width(), format, i) *
95 (size.height() / SubsamplingFactor(format, i)); 91 (size.height() / SubsamplingFactor(format, i));
96 } 92 }
97 return size_in_bytes; 93 return size_in_bytes;
98 } 94 }
99 95
100 class GpuMemoryBufferImpl : public gfx::GpuMemoryBuffer { 96 class GpuMemoryBufferImpl : public gfx::GpuMemoryBuffer {
101 public: 97 public:
102 GpuMemoryBufferImpl(const gfx::Size& size, 98 GpuMemoryBufferImpl(const gfx::Size& size,
103 Format format, 99 gfx::BufferFormat format,
104 scoped_ptr<base::SharedMemory> shared_memory) 100 scoped_ptr<base::SharedMemory> shared_memory)
105 : size_(size), 101 : size_(size),
106 format_(format), 102 format_(format),
107 shared_memory_(shared_memory.Pass()), 103 shared_memory_(shared_memory.Pass()),
108 mapped_(false) {} 104 mapped_(false) {}
109 105
110 // Overridden from gfx::GpuMemoryBuffer: 106 // Overridden from gfx::GpuMemoryBuffer:
111 bool Map(void** data) override { 107 bool Map(void** data) override {
112 DCHECK(!mapped_); 108 DCHECK(!mapped_);
113 if (!shared_memory_->Map(BufferSizeInBytes(size_, format_))) 109 if (!shared_memory_->Map(BufferSizeInBytes(size_, format_)))
114 return false; 110 return false;
115 mapped_ = true; 111 mapped_ = true;
116 size_t offset = 0; 112 size_t offset = 0;
117 int num_planes = NumberOfPlanesForGpuMemoryBufferFormat(format_); 113 int num_planes = NumberOfPlanesForGpuMemoryBufferFormat(format_);
118 for (int i = 0; i < num_planes; ++i) { 114 for (int i = 0; i < num_planes; ++i) {
119 data[i] = reinterpret_cast<uint8*>(shared_memory_->memory()) + offset; 115 data[i] = reinterpret_cast<uint8*>(shared_memory_->memory()) + offset;
120 offset += StrideInBytes(size_.width(), format_, i) * 116 offset += StrideInBytes(size_.width(), format_, i) *
121 (size_.height() / SubsamplingFactor(format_, i)); 117 (size_.height() / SubsamplingFactor(format_, i));
122 } 118 }
123 return true; 119 return true;
124 } 120 }
125 void Unmap() override { 121 void Unmap() override {
126 DCHECK(mapped_); 122 DCHECK(mapped_);
127 shared_memory_->Unmap(); 123 shared_memory_->Unmap();
128 mapped_ = false; 124 mapped_ = false;
129 } 125 }
130 bool IsMapped() const override { return mapped_; } 126 bool IsMapped() const override { return mapped_; }
131 Format GetFormat() const override { return format_; } 127 gfx::BufferFormat GetFormat() const override { return format_; }
132 void GetStride(int* stride) const override { 128 void GetStride(int* stride) const override {
133 int num_planes = NumberOfPlanesForGpuMemoryBufferFormat(format_); 129 int num_planes = NumberOfPlanesForGpuMemoryBufferFormat(format_);
134 for (int i = 0; i < num_planes; ++i) 130 for (int i = 0; i < num_planes; ++i)
135 stride[i] = 131 stride[i] =
136 base::checked_cast<int>(StrideInBytes(size_.width(), format_, i)); 132 base::checked_cast<int>(StrideInBytes(size_.width(), format_, i));
137 } 133 }
138 gfx::GpuMemoryBufferId GetId() const override { 134 gfx::GpuMemoryBufferId GetId() const override {
139 NOTREACHED(); 135 NOTREACHED();
140 return 0; 136 return 0;
141 } 137 }
142 gfx::GpuMemoryBufferHandle GetHandle() const override { 138 gfx::GpuMemoryBufferHandle GetHandle() const override {
143 gfx::GpuMemoryBufferHandle handle; 139 gfx::GpuMemoryBufferHandle handle;
144 handle.type = gfx::SHARED_MEMORY_BUFFER; 140 handle.type = gfx::SHARED_MEMORY_BUFFER;
145 handle.handle = shared_memory_->handle(); 141 handle.handle = shared_memory_->handle();
146 return handle; 142 return handle;
147 } 143 }
148 ClientBuffer AsClientBuffer() override { 144 ClientBuffer AsClientBuffer() override {
149 return reinterpret_cast<ClientBuffer>(this); 145 return reinterpret_cast<ClientBuffer>(this);
150 } 146 }
151 147
152 private: 148 private:
153 const gfx::Size size_; 149 const gfx::Size size_;
154 gfx::GpuMemoryBuffer::Format format_; 150 gfx::BufferFormat format_;
155 scoped_ptr<base::SharedMemory> shared_memory_; 151 scoped_ptr<base::SharedMemory> shared_memory_;
156 bool mapped_; 152 bool mapped_;
157 }; 153 };
158 154
159 } // namespace 155 } // namespace
160 156
161 TestGpuMemoryBufferManager::TestGpuMemoryBufferManager() { 157 TestGpuMemoryBufferManager::TestGpuMemoryBufferManager() {
162 } 158 }
163 159
164 TestGpuMemoryBufferManager::~TestGpuMemoryBufferManager() { 160 TestGpuMemoryBufferManager::~TestGpuMemoryBufferManager() {
165 } 161 }
166 162
167 scoped_ptr<gfx::GpuMemoryBuffer> 163 scoped_ptr<gfx::GpuMemoryBuffer>
168 TestGpuMemoryBufferManager::AllocateGpuMemoryBuffer( 164 TestGpuMemoryBufferManager::AllocateGpuMemoryBuffer(const gfx::Size& size,
169 const gfx::Size& size, 165 gfx::BufferFormat format,
170 gfx::GpuMemoryBuffer::Format format, 166 gfx::BufferUsage usage) {
171 gfx::GpuMemoryBuffer::Usage usage) {
172 scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory); 167 scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory);
173 if (!shared_memory->CreateAnonymous(BufferSizeInBytes(size, format))) 168 if (!shared_memory->CreateAnonymous(BufferSizeInBytes(size, format)))
174 return nullptr; 169 return nullptr;
175 return make_scoped_ptr<gfx::GpuMemoryBuffer>( 170 return make_scoped_ptr<gfx::GpuMemoryBuffer>(
176 new GpuMemoryBufferImpl(size, format, shared_memory.Pass())); 171 new GpuMemoryBufferImpl(size, format, shared_memory.Pass()));
177 } 172 }
178 173
179 gfx::GpuMemoryBuffer* 174 gfx::GpuMemoryBuffer*
180 TestGpuMemoryBufferManager::GpuMemoryBufferFromClientBuffer( 175 TestGpuMemoryBufferManager::GpuMemoryBufferFromClientBuffer(
181 ClientBuffer buffer) { 176 ClientBuffer buffer) {
182 return reinterpret_cast<gfx::GpuMemoryBuffer*>(buffer); 177 return reinterpret_cast<gfx::GpuMemoryBuffer*>(buffer);
183 } 178 }
184 179
185 void TestGpuMemoryBufferManager::SetDestructionSyncPoint( 180 void TestGpuMemoryBufferManager::SetDestructionSyncPoint(
186 gfx::GpuMemoryBuffer* buffer, 181 gfx::GpuMemoryBuffer* buffer,
187 uint32 sync_point) { 182 uint32 sync_point) {
188 } 183 }
189 184
190 } // namespace cc 185 } // namespace cc
OLDNEW
« no previous file with comments | « cc/test/test_gpu_memory_buffer_manager.h ('k') | cc/test/test_image_factory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698