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

Side by Side Diff: gpu/command_buffer/service/buffer_manager_unittest.cc

Issue 12494005: Use client side arrays for GL_STREAM_DRAW attributes (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 9 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "gpu/command_buffer/service/buffer_manager.h" 5 #include "gpu/command_buffer/service/buffer_manager.h"
6 #include "gpu/command_buffer/service/feature_info.h"
7 #include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h"
6 #include "gpu/command_buffer/service/mocks.h" 8 #include "gpu/command_buffer/service/mocks.h"
9 #include "gpu/command_buffer/service/test_helper.h"
7 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
8 #include "ui/gl/gl_mock.h" 11 #include "ui/gl/gl_mock.h"
9 12
13 using ::testing::_;
14 using ::testing::Return;
10 using ::testing::StrictMock; 15 using ::testing::StrictMock;
11 16
12 namespace gpu { 17 namespace gpu {
13 namespace gles2 { 18 namespace gles2 {
14 19
15 class BufferManagerTestBase : public testing::Test { 20 class BufferManagerTestBase : public testing::Test {
16 protected: 21 protected:
17 void SetUpBase(MemoryTracker* memory_tracker) { 22 void SetUpBase(
23 MemoryTracker* memory_tracker,
24 FeatureInfo* feature_info,
25 const char* extensions,
26 const char* vendor,
27 const char* renderer) {
18 gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>()); 28 gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>());
19 ::gfx::GLInterface::SetGLInterface(gl_.get()); 29 ::gfx::GLInterface::SetGLInterface(gl_.get());
20 manager_.reset(new BufferManager(memory_tracker)); 30 if (feature_info) {
31 TestHelper::SetupFeatureInfoInitExpectationsWithVendor(
32 gl_.get(), extensions, vendor, renderer);
33 feature_info->Initialize(NULL);
34 }
35 decoder_.reset(new MockGLES2Decoder());
36 manager_.reset(new BufferManager(memory_tracker, feature_info));
21 } 37 }
22 38
23 virtual void TearDown() { 39 virtual void TearDown() {
24 manager_->Destroy(false); 40 manager_->Destroy(false);
25 manager_.reset(); 41 manager_.reset();
26 ::gfx::GLInterface::SetGLInterface(NULL); 42 ::gfx::GLInterface::SetGLInterface(NULL);
43 decoder_.reset();
27 gl_.reset(); 44 gl_.reset();
28 } 45 }
29 46
30 GLenum GetTarget(const Buffer* info) const { 47 GLenum GetTarget(const Buffer* buffer) const {
31 return info->target(); 48 return buffer->target();
49 }
50
51 void DoBufferData(
52 Buffer* buffer, GLsizeiptr size, GLenum usage, const GLvoid* data,
53 GLenum error) {
54 TestHelper::DoBufferData(
55 gl_.get(), decoder_.get(), manager_.get(),
56 buffer, size, usage, data, error);
57 }
58
59 bool DoBufferSubData(
60 Buffer* buffer, GLintptr offset, GLsizeiptr size,
61 const GLvoid* data) {
62 bool success = true;
63 if (!buffer->CheckRange(offset, size)) {
64 EXPECT_CALL(*decoder_, SetGLError(GL_INVALID_VALUE, _, _))
65 .Times(1)
66 .RetiresOnSaturation();
67 success = false;
68 } else if (!buffer->IsClientSideArray()) {
69 EXPECT_CALL(*gl_, BufferSubData(
70 buffer->target(), offset, size, _))
71 .Times(1)
72 .RetiresOnSaturation();
73 }
74 manager_->DoBufferSubData(
75 decoder_.get(), buffer, offset, size, data);
76 return success;
32 } 77 }
33 78
34 // Use StrictMock to make 100% sure we know how GL will be called. 79 // Use StrictMock to make 100% sure we know how GL will be called.
35 scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_; 80 scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_;
36 scoped_ptr<BufferManager> manager_; 81 scoped_ptr<BufferManager> manager_;
82 scoped_ptr<MockGLES2Decoder> decoder_;
37 }; 83 };
38 84
39 class BufferManagerTest : public BufferManagerTestBase { 85 class BufferManagerTest : public BufferManagerTestBase {
40 protected: 86 protected:
41 virtual void SetUp() { 87 virtual void SetUp() {
42 SetUpBase(NULL); 88 SetUpBase(NULL, NULL, "", "", "");
43 } 89 }
44 }; 90 };
45 91
46 class BufferManagerMemoryTrackerTest : public BufferManagerTestBase { 92 class BufferManagerMemoryTrackerTest : public BufferManagerTestBase {
47 protected: 93 protected:
48 virtual void SetUp() { 94 virtual void SetUp() {
49 mock_memory_tracker_ = new StrictMock<MockMemoryTracker>(); 95 mock_memory_tracker_ = new StrictMock<MockMemoryTracker>();
50 SetUpBase(mock_memory_tracker_.get()); 96 SetUpBase(mock_memory_tracker_.get(), NULL, "", "", "");
51 } 97 }
52 98
53 scoped_refptr<MockMemoryTracker> mock_memory_tracker_; 99 scoped_refptr<MockMemoryTracker> mock_memory_tracker_;
54 }; 100 };
55 101
102 class BufferManagerClientSideArraysTest : public BufferManagerTestBase {
103 protected:
104 virtual void SetUp() {
105 feature_info_ = new FeatureInfo();
106 SetUpBase(NULL, feature_info_.get(), "", "Imagination Technologies", "");
107 }
108
109 scoped_refptr<FeatureInfo> feature_info_;
110 };
111
56 #define EXPECT_MEMORY_ALLOCATION_CHANGE(old_size, new_size, pool) \ 112 #define EXPECT_MEMORY_ALLOCATION_CHANGE(old_size, new_size, pool) \
57 EXPECT_CALL(*mock_memory_tracker_, \ 113 EXPECT_CALL(*mock_memory_tracker_, \
58 TrackMemoryAllocatedChange(old_size, new_size, pool)) \ 114 TrackMemoryAllocatedChange(old_size, new_size, pool)) \
59 .Times(1) \ 115 .Times(1) \
60 .RetiresOnSaturation() \ 116 .RetiresOnSaturation() \
61 117
62 TEST_F(BufferManagerTest, Basic) { 118 TEST_F(BufferManagerTest, Basic) {
63 const GLuint kClientBuffer1Id = 1; 119 const GLuint kClientBuffer1Id = 1;
64 const GLuint kServiceBuffer1Id = 11; 120 const GLuint kServiceBuffer1Id = 11;
65 const GLsizeiptr kBuffer1Size = 123; 121 const GLsizeiptr kBuffer1Size = 123;
66 const GLuint kClientBuffer2Id = 2; 122 const GLuint kClientBuffer2Id = 2;
67 // Check we can create buffer. 123 // Check we can create buffer.
68 manager_->CreateBuffer(kClientBuffer1Id, kServiceBuffer1Id); 124 manager_->CreateBuffer(kClientBuffer1Id, kServiceBuffer1Id);
69 // Check buffer got created. 125 // Check buffer got created.
70 Buffer* info1 = manager_->GetBuffer(kClientBuffer1Id); 126 Buffer* buffer1 = manager_->GetBuffer(kClientBuffer1Id);
71 ASSERT_TRUE(info1 != NULL); 127 ASSERT_TRUE(buffer1 != NULL);
72 EXPECT_EQ(0u, GetTarget(info1)); 128 EXPECT_EQ(0u, GetTarget(buffer1));
73 EXPECT_EQ(0, info1->size()); 129 EXPECT_EQ(0, buffer1->size());
74 EXPECT_EQ(static_cast<GLenum>(GL_STATIC_DRAW), info1->usage()); 130 EXPECT_EQ(static_cast<GLenum>(GL_STATIC_DRAW), buffer1->usage());
75 EXPECT_FALSE(info1->IsDeleted()); 131 EXPECT_FALSE(buffer1->IsDeleted());
76 EXPECT_EQ(kServiceBuffer1Id, info1->service_id()); 132 EXPECT_FALSE(buffer1->IsClientSideArray());
133 EXPECT_EQ(kServiceBuffer1Id, buffer1->service_id());
77 GLuint client_id = 0; 134 GLuint client_id = 0;
78 EXPECT_TRUE(manager_->GetClientId(info1->service_id(), &client_id)); 135 EXPECT_TRUE(manager_->GetClientId(buffer1->service_id(), &client_id));
79 EXPECT_EQ(kClientBuffer1Id, client_id); 136 EXPECT_EQ(kClientBuffer1Id, client_id);
80 manager_->SetTarget(info1, GL_ELEMENT_ARRAY_BUFFER); 137 manager_->SetTarget(buffer1, GL_ELEMENT_ARRAY_BUFFER);
81 EXPECT_EQ(static_cast<GLenum>(GL_ELEMENT_ARRAY_BUFFER), GetTarget(info1)); 138 EXPECT_EQ(static_cast<GLenum>(GL_ELEMENT_ARRAY_BUFFER), GetTarget(buffer1));
82 // Check we and set its size. 139 // Check we and set its size.
83 manager_->SetInfo(info1, kBuffer1Size, GL_DYNAMIC_DRAW); 140 DoBufferData(buffer1, kBuffer1Size, GL_DYNAMIC_DRAW, NULL, GL_NO_ERROR);
84 EXPECT_EQ(kBuffer1Size, info1->size()); 141 EXPECT_EQ(kBuffer1Size, buffer1->size());
85 EXPECT_EQ(static_cast<GLenum>(GL_DYNAMIC_DRAW), info1->usage()); 142 EXPECT_EQ(static_cast<GLenum>(GL_DYNAMIC_DRAW), buffer1->usage());
86 // Check we get nothing for a non-existent buffer. 143 // Check we get nothing for a non-existent buffer.
87 EXPECT_TRUE(manager_->GetBuffer(kClientBuffer2Id) == NULL); 144 EXPECT_TRUE(manager_->GetBuffer(kClientBuffer2Id) == NULL);
88 // Check trying to a remove non-existent buffers does not crash. 145 // Check trying to a remove non-existent buffers does not crash.
89 manager_->RemoveBuffer(kClientBuffer2Id); 146 manager_->RemoveBuffer(kClientBuffer2Id);
90 // Check that it gets deleted when the last reference is released. 147 // Check that it gets deleted when the last reference is released.
91 EXPECT_CALL(*gl_, DeleteBuffersARB(1, ::testing::Pointee(kServiceBuffer1Id))) 148 EXPECT_CALL(*gl_, DeleteBuffersARB(1, ::testing::Pointee(kServiceBuffer1Id)))
92 .Times(1) 149 .Times(1)
93 .RetiresOnSaturation(); 150 .RetiresOnSaturation();
94 // Check we can't get the buffer after we remove it. 151 // Check we can't get the buffer after we remove it.
95 manager_->RemoveBuffer(kClientBuffer1Id); 152 manager_->RemoveBuffer(kClientBuffer1Id);
96 EXPECT_TRUE(manager_->GetBuffer(kClientBuffer1Id) == NULL); 153 EXPECT_TRUE(manager_->GetBuffer(kClientBuffer1Id) == NULL);
97 } 154 }
98 155
99 TEST_F(BufferManagerMemoryTrackerTest, Basic) { 156 TEST_F(BufferManagerMemoryTrackerTest, Basic) {
100 const GLuint kClientBuffer1Id = 1; 157 const GLuint kClientBuffer1Id = 1;
101 const GLuint kServiceBuffer1Id = 11; 158 const GLuint kServiceBuffer1Id = 11;
102 const GLsizeiptr kBuffer1Size1 = 123; 159 const GLsizeiptr kBuffer1Size1 = 123;
103 const GLsizeiptr kBuffer1Size2 = 456; 160 const GLsizeiptr kBuffer1Size2 = 456;
104 // Check we can create buffer. 161 // Check we can create buffer.
105 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kManaged); 162 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kManaged);
106 manager_->CreateBuffer(kClientBuffer1Id, kServiceBuffer1Id); 163 manager_->CreateBuffer(kClientBuffer1Id, kServiceBuffer1Id);
107 // Check buffer got created. 164 // Check buffer got created.
108 Buffer* info1 = manager_->GetBuffer(kClientBuffer1Id); 165 Buffer* buffer1 = manager_->GetBuffer(kClientBuffer1Id);
109 ASSERT_TRUE(info1 != NULL); 166 ASSERT_TRUE(buffer1 != NULL);
110 manager_->SetTarget(info1, GL_ELEMENT_ARRAY_BUFFER); 167 manager_->SetTarget(buffer1, GL_ELEMENT_ARRAY_BUFFER);
111 // Check we and set its size. 168 // Check we and set its size.
112 EXPECT_MEMORY_ALLOCATION_CHANGE(0, kBuffer1Size1, MemoryTracker::kManaged); 169 EXPECT_MEMORY_ALLOCATION_CHANGE(0, kBuffer1Size1, MemoryTracker::kManaged);
113 manager_->SetInfo(info1, kBuffer1Size1, GL_DYNAMIC_DRAW); 170 DoBufferData(buffer1, kBuffer1Size1, GL_DYNAMIC_DRAW, NULL, GL_NO_ERROR);
114 EXPECT_MEMORY_ALLOCATION_CHANGE(kBuffer1Size1, 0, MemoryTracker::kManaged); 171 EXPECT_MEMORY_ALLOCATION_CHANGE(kBuffer1Size1, 0, MemoryTracker::kManaged);
115 EXPECT_MEMORY_ALLOCATION_CHANGE(0, kBuffer1Size2, MemoryTracker::kManaged); 172 EXPECT_MEMORY_ALLOCATION_CHANGE(0, kBuffer1Size2, MemoryTracker::kManaged);
116 manager_->SetInfo(info1, kBuffer1Size2, GL_DYNAMIC_DRAW); 173 DoBufferData(buffer1, kBuffer1Size2, GL_DYNAMIC_DRAW, NULL, GL_NO_ERROR);
117 // On delete it will get freed. 174 // On delete it will get freed.
118 EXPECT_MEMORY_ALLOCATION_CHANGE(kBuffer1Size2, 0, MemoryTracker::kManaged); 175 EXPECT_MEMORY_ALLOCATION_CHANGE(kBuffer1Size2, 0, MemoryTracker::kManaged);
119 } 176 }
120 177
121 TEST_F(BufferManagerTest, Destroy) { 178 TEST_F(BufferManagerTest, Destroy) {
122 const GLuint kClient1Id = 1; 179 const GLuint kClient1Id = 1;
123 const GLuint kService1Id = 11; 180 const GLuint kService1Id = 11;
124 // Check we can create buffer. 181 // Check we can create buffer.
125 manager_->CreateBuffer(kClient1Id, kService1Id); 182 manager_->CreateBuffer(kClient1Id, kService1Id);
126 // Check buffer got created. 183 // Check buffer got created.
127 Buffer* info1 = 184 Buffer* buffer1 = manager_->GetBuffer(kClient1Id);
128 manager_->GetBuffer(kClient1Id); 185 ASSERT_TRUE(buffer1 != NULL);
129 ASSERT_TRUE(info1 != NULL);
130 EXPECT_CALL(*gl_, DeleteBuffersARB(1, ::testing::Pointee(kService1Id))) 186 EXPECT_CALL(*gl_, DeleteBuffersARB(1, ::testing::Pointee(kService1Id)))
131 .Times(1) 187 .Times(1)
132 .RetiresOnSaturation(); 188 .RetiresOnSaturation();
133 manager_->Destroy(true); 189 manager_->Destroy(true);
134 // Check the resources were released. 190 // Check the resources were released.
135 info1 = manager_->GetBuffer(kClient1Id); 191 buffer1 = manager_->GetBuffer(kClient1Id);
136 ASSERT_TRUE(info1 == NULL); 192 ASSERT_TRUE(buffer1 == NULL);
137 } 193 }
138 194
139 TEST_F(BufferManagerTest, SetRange) { 195 TEST_F(BufferManagerTest, DoBufferSubData) {
140 const GLuint kClientBufferId = 1; 196 const GLuint kClientBufferId = 1;
141 const GLuint kServiceBufferId = 11; 197 const GLuint kServiceBufferId = 11;
142 const uint8 data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; 198 const uint8 data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
143 manager_->CreateBuffer(kClientBufferId, kServiceBufferId); 199 manager_->CreateBuffer(kClientBufferId, kServiceBufferId);
144 Buffer* info = manager_->GetBuffer(kClientBufferId); 200 Buffer* buffer = manager_->GetBuffer(kClientBufferId);
145 ASSERT_TRUE(info != NULL); 201 ASSERT_TRUE(buffer != NULL);
146 manager_->SetTarget(info, GL_ELEMENT_ARRAY_BUFFER); 202 manager_->SetTarget(buffer, GL_ELEMENT_ARRAY_BUFFER);
147 manager_->SetInfo(info, sizeof(data), GL_STATIC_DRAW); 203 DoBufferData(buffer, sizeof(data), GL_STATIC_DRAW, NULL, GL_NO_ERROR);
148 EXPECT_TRUE(info->SetRange(0, sizeof(data), data)); 204 EXPECT_TRUE(DoBufferSubData(buffer, 0, sizeof(data), data));
149 EXPECT_TRUE(info->SetRange(sizeof(data), 0, data)); 205 EXPECT_TRUE(DoBufferSubData(buffer, sizeof(data), 0, data));
150 EXPECT_FALSE(info->SetRange(sizeof(data), 1, data)); 206 EXPECT_FALSE(DoBufferSubData(buffer, sizeof(data), 1, data));
151 EXPECT_FALSE(info->SetRange(0, sizeof(data) + 1, data)); 207 EXPECT_FALSE(DoBufferSubData(buffer, 0, sizeof(data) + 1, data));
152 EXPECT_FALSE(info->SetRange(-1, sizeof(data), data)); 208 EXPECT_FALSE(DoBufferSubData(buffer, -1, sizeof(data), data));
153 EXPECT_FALSE(info->SetRange(0, -1, data)); 209 EXPECT_FALSE(DoBufferSubData(buffer, 0, -1, data));
154 manager_->SetInfo(info, 1, GL_STATIC_DRAW); 210 DoBufferData(buffer, 1, GL_STATIC_DRAW, NULL, GL_NO_ERROR);
155 const int size = 0x20000; 211 const int size = 0x20000;
156 scoped_array<uint8> temp(new uint8[size]); 212 scoped_array<uint8> temp(new uint8[size]);
157 EXPECT_FALSE(info->SetRange(0 - size, size, temp.get())); 213 EXPECT_FALSE(DoBufferSubData(buffer, 0 - size, size, temp.get()));
158 EXPECT_FALSE(info->SetRange(1, size / 2, temp.get())); 214 EXPECT_FALSE(DoBufferSubData(buffer, 1, size / 2, temp.get()));
159 } 215 }
160 216
161 TEST_F(BufferManagerTest, GetRange) { 217 TEST_F(BufferManagerTest, GetRange) {
162 const GLuint kClientBufferId = 1; 218 const GLuint kClientBufferId = 1;
163 const GLuint kServiceBufferId = 11; 219 const GLuint kServiceBufferId = 11;
164 const uint8 data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; 220 const uint8 data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
165 manager_->CreateBuffer(kClientBufferId, kServiceBufferId); 221 manager_->CreateBuffer(kClientBufferId, kServiceBufferId);
166 Buffer* info = manager_->GetBuffer(kClientBufferId); 222 Buffer* buffer = manager_->GetBuffer(kClientBufferId);
167 ASSERT_TRUE(info != NULL); 223 ASSERT_TRUE(buffer != NULL);
168 manager_->SetTarget(info, GL_ELEMENT_ARRAY_BUFFER); 224 manager_->SetTarget(buffer, GL_ELEMENT_ARRAY_BUFFER);
169 manager_->SetInfo(info, sizeof(data), GL_STATIC_DRAW); 225 DoBufferData(buffer, sizeof(data), GL_STATIC_DRAW, NULL, GL_NO_ERROR);
170 const char* buf = static_cast<const char*>(info->GetRange(0, sizeof(data))); 226 const char* buf =
227 static_cast<const char*>(buffer->GetRange(0, sizeof(data)));
171 ASSERT_TRUE(buf != NULL); 228 ASSERT_TRUE(buf != NULL);
172 const char* buf1 = 229 const char* buf1 =
173 static_cast<const char*>(info->GetRange(1, sizeof(data) - 1)); 230 static_cast<const char*>(buffer->GetRange(1, sizeof(data) - 1));
174 EXPECT_EQ(buf + 1, buf1); 231 EXPECT_EQ(buf + 1, buf1);
175 EXPECT_TRUE(info->GetRange(sizeof(data), 1) == NULL); 232 EXPECT_TRUE(buffer->GetRange(sizeof(data), 1) == NULL);
176 EXPECT_TRUE(info->GetRange(0, sizeof(data) + 1) == NULL); 233 EXPECT_TRUE(buffer->GetRange(0, sizeof(data) + 1) == NULL);
177 EXPECT_TRUE(info->GetRange(-1, sizeof(data)) == NULL); 234 EXPECT_TRUE(buffer->GetRange(-1, sizeof(data)) == NULL);
178 EXPECT_TRUE(info->GetRange(-0, -1) == NULL); 235 EXPECT_TRUE(buffer->GetRange(-0, -1) == NULL);
179 const int size = 0x20000; 236 const int size = 0x20000;
180 manager_->SetInfo(info, size / 2, GL_STATIC_DRAW); 237 DoBufferData(buffer, size / 2, GL_STATIC_DRAW, NULL, GL_NO_ERROR);
181 EXPECT_TRUE(info->GetRange(0 - size, size) == NULL); 238 EXPECT_TRUE(buffer->GetRange(0 - size, size) == NULL);
182 EXPECT_TRUE(info->GetRange(1, size / 2) == NULL); 239 EXPECT_TRUE(buffer->GetRange(1, size / 2) == NULL);
183 } 240 }
184 241
185 TEST_F(BufferManagerTest, GetMaxValueForRangeUint8) { 242 TEST_F(BufferManagerTest, GetMaxValueForRangeUint8) {
186 const GLuint kClientBufferId = 1; 243 const GLuint kClientBufferId = 1;
187 const GLuint kServiceBufferId = 11; 244 const GLuint kServiceBufferId = 11;
188 const uint8 data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; 245 const uint8 data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
189 const uint8 new_data[] = {100, 120, 110}; 246 const uint8 new_data[] = {100, 120, 110};
190 manager_->CreateBuffer(kClientBufferId, kServiceBufferId); 247 manager_->CreateBuffer(kClientBufferId, kServiceBufferId);
191 Buffer* info = manager_->GetBuffer(kClientBufferId); 248 Buffer* buffer = manager_->GetBuffer(kClientBufferId);
192 ASSERT_TRUE(info != NULL); 249 ASSERT_TRUE(buffer != NULL);
193 manager_->SetTarget(info, GL_ELEMENT_ARRAY_BUFFER); 250 manager_->SetTarget(buffer, GL_ELEMENT_ARRAY_BUFFER);
194 manager_->SetInfo(info, sizeof(data), GL_STATIC_DRAW); 251 DoBufferData(buffer, sizeof(data), GL_STATIC_DRAW, NULL, GL_NO_ERROR);
195 EXPECT_TRUE(info->SetRange(0, sizeof(data), data)); 252 EXPECT_TRUE(DoBufferSubData(buffer, 0, sizeof(data), data));
196 GLuint max_value; 253 GLuint max_value;
197 // Check entire range succeeds. 254 // Check entire range succeeds.
198 EXPECT_TRUE(info->GetMaxValueForRange(0, 10, GL_UNSIGNED_BYTE, &max_value)); 255 EXPECT_TRUE(buffer->GetMaxValueForRange(
256 0, 10, GL_UNSIGNED_BYTE, &max_value));
199 EXPECT_EQ(10u, max_value); 257 EXPECT_EQ(10u, max_value);
200 // Check sub range succeeds. 258 // Check sub range succeeds.
201 EXPECT_TRUE(info->GetMaxValueForRange(4, 3, GL_UNSIGNED_BYTE, &max_value)); 259 EXPECT_TRUE(buffer->GetMaxValueForRange(
260 4, 3, GL_UNSIGNED_BYTE, &max_value));
202 EXPECT_EQ(6u, max_value); 261 EXPECT_EQ(6u, max_value);
203 // Check changing sub range succeeds. 262 // Check changing sub range succeeds.
204 EXPECT_TRUE(info->SetRange(4, sizeof(new_data), new_data)); 263 EXPECT_TRUE(DoBufferSubData(buffer, 4, sizeof(new_data), new_data));
205 EXPECT_TRUE(info->GetMaxValueForRange(4, 3, GL_UNSIGNED_BYTE, &max_value)); 264 EXPECT_TRUE(buffer->GetMaxValueForRange(
265 4, 3, GL_UNSIGNED_BYTE, &max_value));
206 EXPECT_EQ(120u, max_value); 266 EXPECT_EQ(120u, max_value);
207 max_value = 0; 267 max_value = 0;
208 EXPECT_TRUE(info->GetMaxValueForRange(0, 10, GL_UNSIGNED_BYTE, &max_value)); 268 EXPECT_TRUE(buffer->GetMaxValueForRange(
269 0, 10, GL_UNSIGNED_BYTE, &max_value));
209 EXPECT_EQ(120u, max_value); 270 EXPECT_EQ(120u, max_value);
210 // Check out of range fails. 271 // Check out of range fails.
211 EXPECT_FALSE(info->GetMaxValueForRange(0, 11, GL_UNSIGNED_BYTE, &max_value)); 272 EXPECT_FALSE(buffer->GetMaxValueForRange(
212 EXPECT_FALSE(info->GetMaxValueForRange(10, 1, GL_UNSIGNED_BYTE, &max_value)); 273 0, 11, GL_UNSIGNED_BYTE, &max_value));
274 EXPECT_FALSE(buffer->GetMaxValueForRange(
275 10, 1, GL_UNSIGNED_BYTE, &max_value));
213 } 276 }
214 277
215 TEST_F(BufferManagerTest, GetMaxValueForRangeUint16) { 278 TEST_F(BufferManagerTest, GetMaxValueForRangeUint16) {
216 const GLuint kClientBufferId = 1; 279 const GLuint kClientBufferId = 1;
217 const GLuint kServiceBufferId = 11; 280 const GLuint kServiceBufferId = 11;
218 const uint16 data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; 281 const uint16 data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
219 const uint16 new_data[] = {100, 120, 110}; 282 const uint16 new_data[] = {100, 120, 110};
220 manager_->CreateBuffer(kClientBufferId, kServiceBufferId); 283 manager_->CreateBuffer(kClientBufferId, kServiceBufferId);
221 Buffer* info = manager_->GetBuffer(kClientBufferId); 284 Buffer* buffer = manager_->GetBuffer(kClientBufferId);
222 ASSERT_TRUE(info != NULL); 285 ASSERT_TRUE(buffer != NULL);
223 manager_->SetTarget(info, GL_ELEMENT_ARRAY_BUFFER); 286 manager_->SetTarget(buffer, GL_ELEMENT_ARRAY_BUFFER);
224 manager_->SetInfo(info, sizeof(data), GL_STATIC_DRAW); 287 DoBufferData(buffer, sizeof(data), GL_STATIC_DRAW, NULL, GL_NO_ERROR);
225 EXPECT_TRUE(info->SetRange(0, sizeof(data), data)); 288 EXPECT_TRUE(DoBufferSubData(buffer, 0, sizeof(data), data));
226 GLuint max_value; 289 GLuint max_value;
227 // Check entire range succeeds. 290 // Check entire range succeeds.
228 EXPECT_TRUE(info->GetMaxValueForRange(0, 10, GL_UNSIGNED_SHORT, &max_value)); 291 EXPECT_TRUE(buffer->GetMaxValueForRange(
292 0, 10, GL_UNSIGNED_SHORT, &max_value));
229 EXPECT_EQ(10u, max_value); 293 EXPECT_EQ(10u, max_value);
230 // Check odd offset fails for GL_UNSIGNED_SHORT. 294 // Check odd offset fails for GL_UNSIGNED_SHORT.
231 EXPECT_FALSE(info->GetMaxValueForRange(1, 10, GL_UNSIGNED_SHORT, &max_value)); 295 EXPECT_FALSE(buffer->GetMaxValueForRange(
296 1, 10, GL_UNSIGNED_SHORT, &max_value));
232 // Check sub range succeeds. 297 // Check sub range succeeds.
233 EXPECT_TRUE(info->GetMaxValueForRange(8, 3, GL_UNSIGNED_SHORT, &max_value)); 298 EXPECT_TRUE(buffer->GetMaxValueForRange(
299 8, 3, GL_UNSIGNED_SHORT, &max_value));
234 EXPECT_EQ(6u, max_value); 300 EXPECT_EQ(6u, max_value);
235 // Check changing sub range succeeds. 301 // Check changing sub range succeeds.
236 EXPECT_TRUE(info->SetRange(8, sizeof(new_data), new_data)); 302 EXPECT_TRUE(DoBufferSubData(buffer, 8, sizeof(new_data), new_data));
237 EXPECT_TRUE(info->GetMaxValueForRange(8, 3, GL_UNSIGNED_SHORT, &max_value)); 303 EXPECT_TRUE(buffer->GetMaxValueForRange(
304 8, 3, GL_UNSIGNED_SHORT, &max_value));
238 EXPECT_EQ(120u, max_value); 305 EXPECT_EQ(120u, max_value);
239 max_value = 0; 306 max_value = 0;
240 EXPECT_TRUE(info->GetMaxValueForRange(0, 10, GL_UNSIGNED_SHORT, &max_value)); 307 EXPECT_TRUE(buffer->GetMaxValueForRange(
308 0, 10, GL_UNSIGNED_SHORT, &max_value));
241 EXPECT_EQ(120u, max_value); 309 EXPECT_EQ(120u, max_value);
242 // Check out of range fails. 310 // Check out of range fails.
243 EXPECT_FALSE(info->GetMaxValueForRange(0, 11, GL_UNSIGNED_SHORT, &max_value)); 311 EXPECT_FALSE(buffer->GetMaxValueForRange(
244 EXPECT_FALSE(info->GetMaxValueForRange(20, 1, GL_UNSIGNED_SHORT, &max_value)); 312 0, 11, GL_UNSIGNED_SHORT, &max_value));
313 EXPECT_FALSE(buffer->GetMaxValueForRange(
314 20, 1, GL_UNSIGNED_SHORT, &max_value));
245 } 315 }
246 316
247 TEST_F(BufferManagerTest, GetMaxValueForRangeUint32) { 317 TEST_F(BufferManagerTest, GetMaxValueForRangeUint32) {
248 const GLuint kClientBufferId = 1; 318 const GLuint kClientBufferId = 1;
249 const GLuint kServiceBufferId = 11; 319 const GLuint kServiceBufferId = 11;
250 const uint32 data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; 320 const uint32 data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
251 const uint32 new_data[] = {100, 120, 110}; 321 const uint32 new_data[] = {100, 120, 110};
252 manager_->CreateBuffer(kClientBufferId, kServiceBufferId); 322 manager_->CreateBuffer(kClientBufferId, kServiceBufferId);
253 Buffer* info = manager_->GetBuffer(kClientBufferId); 323 Buffer* buffer = manager_->GetBuffer(kClientBufferId);
254 ASSERT_TRUE(info != NULL); 324 ASSERT_TRUE(buffer != NULL);
255 manager_->SetTarget(info, GL_ELEMENT_ARRAY_BUFFER); 325 manager_->SetTarget(buffer, GL_ELEMENT_ARRAY_BUFFER);
256 manager_->SetInfo(info, sizeof(data), GL_STATIC_DRAW); 326 DoBufferData(buffer, sizeof(data), GL_STATIC_DRAW, NULL, GL_NO_ERROR);
257 EXPECT_TRUE(info->SetRange(0, sizeof(data), data)); 327 EXPECT_TRUE(DoBufferSubData(buffer, 0, sizeof(data), data));
258 GLuint max_value; 328 GLuint max_value;
259 // Check entire range succeeds. 329 // Check entire range succeeds.
260 EXPECT_TRUE(info->GetMaxValueForRange(0, 10, GL_UNSIGNED_INT, &max_value)); 330 EXPECT_TRUE(
331 buffer->GetMaxValueForRange(0, 10, GL_UNSIGNED_INT, &max_value));
261 EXPECT_EQ(10u, max_value); 332 EXPECT_EQ(10u, max_value);
262 // Check non aligned offsets fails for GL_UNSIGNED_INT. 333 // Check non aligned offsets fails for GL_UNSIGNED_INT.
263 EXPECT_FALSE(info->GetMaxValueForRange(1, 10, GL_UNSIGNED_INT, &max_value)); 334 EXPECT_FALSE(
264 EXPECT_FALSE(info->GetMaxValueForRange(2, 10, GL_UNSIGNED_INT, &max_value)); 335 buffer->GetMaxValueForRange(1, 10, GL_UNSIGNED_INT, &max_value));
265 EXPECT_FALSE(info->GetMaxValueForRange(3, 10, GL_UNSIGNED_INT, &max_value)); 336 EXPECT_FALSE(
337 buffer->GetMaxValueForRange(2, 10, GL_UNSIGNED_INT, &max_value));
338 EXPECT_FALSE(
339 buffer->GetMaxValueForRange(3, 10, GL_UNSIGNED_INT, &max_value));
266 // Check sub range succeeds. 340 // Check sub range succeeds.
267 EXPECT_TRUE(info->GetMaxValueForRange(16, 3, GL_UNSIGNED_INT, &max_value)); 341 EXPECT_TRUE(buffer->GetMaxValueForRange(16, 3, GL_UNSIGNED_INT, &max_value));
268 EXPECT_EQ(6u, max_value); 342 EXPECT_EQ(6u, max_value);
269 // Check changing sub range succeeds. 343 // Check changing sub range succeeds.
270 EXPECT_TRUE(info->SetRange(16, sizeof(new_data), new_data)); 344 EXPECT_TRUE(DoBufferSubData(buffer, 16, sizeof(new_data), new_data));
271 EXPECT_TRUE(info->GetMaxValueForRange(16, 3, GL_UNSIGNED_INT, &max_value)); 345 EXPECT_TRUE(buffer->GetMaxValueForRange(16, 3, GL_UNSIGNED_INT, &max_value));
272 EXPECT_EQ(120u, max_value); 346 EXPECT_EQ(120u, max_value);
273 max_value = 0; 347 max_value = 0;
274 EXPECT_TRUE(info->GetMaxValueForRange(0, 10, GL_UNSIGNED_INT, &max_value)); 348 EXPECT_TRUE(buffer->GetMaxValueForRange(0, 10, GL_UNSIGNED_INT, &max_value));
275 EXPECT_EQ(120u, max_value); 349 EXPECT_EQ(120u, max_value);
276 // Check out of range fails. 350 // Check out of range fails.
277 EXPECT_FALSE(info->GetMaxValueForRange(0, 11, GL_UNSIGNED_INT, &max_value)); 351 EXPECT_FALSE(
278 EXPECT_FALSE(info->GetMaxValueForRange(40, 1, GL_UNSIGNED_INT, &max_value)); 352 buffer->GetMaxValueForRange(0, 11, GL_UNSIGNED_INT, &max_value));
353 EXPECT_FALSE(
354 buffer->GetMaxValueForRange(40, 1, GL_UNSIGNED_INT, &max_value));
279 } 355 }
280 356
281 TEST_F(BufferManagerTest, UseDeletedBuffer) { 357 TEST_F(BufferManagerTest, UseDeletedBuffer) {
282 const GLuint kClientBufferId = 1; 358 const GLuint kClientBufferId = 1;
283 const GLuint kServiceBufferId = 11; 359 const GLuint kServiceBufferId = 11;
284 const uint32 data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; 360 const uint32 data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
285 manager_->CreateBuffer(kClientBufferId, kServiceBufferId); 361 manager_->CreateBuffer(kClientBufferId, kServiceBufferId);
286 scoped_refptr<Buffer> info = 362 scoped_refptr<Buffer> buffer = manager_->GetBuffer(kClientBufferId);
287 manager_->GetBuffer(kClientBufferId); 363 ASSERT_TRUE(buffer != NULL);
288 ASSERT_TRUE(info != NULL); 364 manager_->SetTarget(buffer, GL_ARRAY_BUFFER);
289 manager_->SetTarget(info, GL_ARRAY_BUFFER);
290 // Remove buffer 365 // Remove buffer
291 manager_->RemoveBuffer(kClientBufferId); 366 manager_->RemoveBuffer(kClientBufferId);
292 // Use it after removing 367 // Use it after removing
293 manager_->SetInfo(info, sizeof(data), GL_STATIC_DRAW); 368 DoBufferData(buffer, sizeof(data), GL_STATIC_DRAW, NULL, GL_NO_ERROR);
294 // Check that it gets deleted when the last reference is released. 369 // Check that it gets deleted when the last reference is released.
295 EXPECT_CALL(*gl_, DeleteBuffersARB(1, ::testing::Pointee(kServiceBufferId))) 370 EXPECT_CALL(*gl_, DeleteBuffersARB(1, ::testing::Pointee(kServiceBufferId)))
296 .Times(1) 371 .Times(1)
297 .RetiresOnSaturation(); 372 .RetiresOnSaturation();
298 info = NULL; 373 buffer = NULL;
374 }
375
376 // Test buffers get shadowed when they are supposed to be.
377 TEST_F(BufferManagerClientSideArraysTest, StreamBuffersAreShadowed) {
378 const GLuint kClientBufferId = 1;
379 const GLuint kServiceBufferId = 11;
380 static const uint32 data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
381 manager_->CreateBuffer(kClientBufferId, kServiceBufferId);
382 Buffer* buffer = manager_->GetBuffer(kClientBufferId);
383 ASSERT_TRUE(buffer != NULL);
384 manager_->SetTarget(buffer, GL_ARRAY_BUFFER);
385 DoBufferData(buffer, sizeof(data), GL_STREAM_DRAW, data, GL_NO_ERROR);
386 EXPECT_TRUE(buffer->IsClientSideArray());
387 EXPECT_EQ(0, memcmp(data, buffer->GetRange(0, sizeof(data)), sizeof(data)));
388 DoBufferData(buffer, sizeof(data), GL_DYNAMIC_DRAW, data, GL_NO_ERROR);
389 EXPECT_FALSE(buffer->IsClientSideArray());
299 } 390 }
300 391
301 } // namespace gles2 392 } // namespace gles2
302 } // namespace gpu 393 } // namespace gpu
303 394
304 395
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/buffer_manager.cc ('k') | gpu/command_buffer/service/context_group.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698