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

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

Issue 10440019: Add support for GL_CHROMIUM_pixel_transfer_buffer_object. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 7 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/cmd_buffer_engine.h"
7 #include "gpu/command_buffer/service/common_decoder.h"
6 #include "gpu/command_buffer/common/gl_mock.h" 8 #include "gpu/command_buffer/common/gl_mock.h"
7 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
8 10
9 namespace gpu { 11 namespace gpu {
10 namespace gles2 { 12 namespace gles2 {
11 13
14 class MockDecoder : public CommonDecoder {
15 public:
16 virtual ~MockDecoder() { }
17 MOCK_METHOD3(DoCommand, error::Error(
18 unsigned int command,
19 unsigned int arg_count,
20 const void* cmd_data));
21 MOCK_CONST_METHOD1(GetCommandName, const char* (unsigned int command_id));
22 };
23
12 class BufferManagerTest : public testing::Test { 24 class BufferManagerTest : public testing::Test {
13 public: 25 public:
26 static const int32 kSharedMemoryId = 401;
27 static const size_t kSharedBufferSize = 2048;
28 static const uint32 kSharedMemoryOffset = 132;
29 static const int32 kInvalidSharedMemoryId = 402;
30 static const uint32 kInvalidSharedMemoryOffset = kSharedBufferSize + 1;
31 static const uint8 kInitialMemoryValue = 0xBDu;
32
14 BufferManagerTest() { 33 BufferManagerTest() {
15 } 34 }
16 ~BufferManagerTest() { 35 ~BufferManagerTest() {
17 manager_.Destroy(false); 36 manager_.Destroy(false);
18 } 37 }
19 38
20 protected: 39 protected:
40 class MockCommandBufferEngine : public CommandBufferEngine {
41 public:
42 MockCommandBufferEngine() {
43 data_.reset(new int8[kSharedBufferSize]);
44 ClearSharedMemory();
45 valid_buffer_.ptr = data_.get();
46 valid_buffer_.size = kSharedBufferSize;
47 }
48
49 virtual ~MockCommandBufferEngine() {
50 }
51
52 virtual Buffer GetSharedMemoryBuffer(int32 shm_id) OVERRIDE {
53 return shm_id == kSharedMemoryId ? valid_buffer_ : invalid_buffer_;
54 }
55
56 void ClearSharedMemory() {
57 memset(data_.get(), kInitialMemoryValue, kSharedBufferSize);
58 }
59
60 virtual void set_token(int32 token) OVERRIDE {
61 DCHECK(false);
62 }
63
64 virtual bool SetGetBuffer(int32 /* transfer_buffer_id */) OVERRIDE {
65 DCHECK(false);
66 return false;
67 }
68
69 // Overridden from CommandBufferEngine.
70 virtual bool SetGetOffset(int32 offset) OVERRIDE {
71 DCHECK(false);
72 return false;
73 }
74
75 // Overridden from CommandBufferEngine.
76 virtual int32 GetGetOffset() OVERRIDE {
77 DCHECK(false);
78 return 0;
79 }
80
81 private:
82 scoped_array<int8> data_;
83 Buffer valid_buffer_;
84 Buffer invalid_buffer_;
85 };
86
21 virtual void SetUp() { 87 virtual void SetUp() {
22 gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>()); 88 gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>());
23 ::gfx::GLInterface::SetGLInterface(gl_.get()); 89 ::gfx::GLInterface::SetGLInterface(gl_.get());
90 engine_.reset(new MockCommandBufferEngine());
24 } 91 }
25 92
26 virtual void TearDown() { 93 virtual void TearDown() {
94 engine_.reset();
27 ::gfx::GLInterface::SetGLInterface(NULL); 95 ::gfx::GLInterface::SetGLInterface(NULL);
28 gl_.reset(); 96 gl_.reset();
29 } 97 }
30 98
31 GLenum GetTarget(const BufferManager::BufferInfo* info) const { 99 GLenum GetTarget(const BufferManager::BufferInfo* info) const {
32 return info->target(); 100 return info->target();
33 } 101 }
34 102
35 // Use StrictMock to make 100% sure we know how GL will be called. 103 // Use StrictMock to make 100% sure we know how GL will be called.
36 scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_; 104 scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_;
105 scoped_ptr<MockCommandBufferEngine> engine_;
37 BufferManager manager_; 106 BufferManager manager_;
38 }; 107 };
39 108
109 // GCC requires these declarations, but MSVC requires they not be present
110 #ifndef COMPILER_MSVC
111 const int32 BufferManagerTest::kSharedMemoryId;
112 const size_t BufferManagerTest::kSharedBufferSize;
113 const uint32 BufferManagerTest::kSharedMemoryOffset;
114 const int32 BufferManagerTest::kInvalidSharedMemoryId;
115 const uint32 BufferManagerTest::kInvalidSharedMemoryOffset;
116 const uint8 BufferManagerTest::kInitialMemoryValue;
117 #endif
118
40 TEST_F(BufferManagerTest, Basic) { 119 TEST_F(BufferManagerTest, Basic) {
41 const GLuint kClientBuffer1Id = 1; 120 const GLuint kClientBuffer1Id = 1;
42 const GLuint kServiceBuffer1Id = 11; 121 const GLuint kServiceBuffer1Id = 11;
43 const GLsizeiptr kBuffer1Size = 123; 122 const GLsizeiptr kBuffer1Size = 123;
44 const GLuint kClientBuffer2Id = 2; 123 const GLuint kClientBuffer2Id = 2;
45 // Check we can create buffer. 124 // Check we can create buffer.
46 manager_.CreateBufferInfo(kClientBuffer1Id, kServiceBuffer1Id); 125 manager_.CreateBufferInfo(kClientBuffer1Id, kServiceBuffer1Id);
47 // Check buffer got created. 126 // Check buffer got created.
48 BufferManager::BufferInfo* info1 = manager_.GetBufferInfo(kClientBuffer1Id); 127 BufferManager::BufferInfo* info1 = manager_.GetBufferInfo(kClientBuffer1Id);
49 ASSERT_TRUE(info1 != NULL); 128 ASSERT_TRUE(info1 != NULL);
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 manager_.RemoveBufferInfo(kClientBufferId); 316 manager_.RemoveBufferInfo(kClientBufferId);
238 // Use it after removing 317 // Use it after removing
239 manager_.SetInfo(info, sizeof(data), GL_STATIC_DRAW); 318 manager_.SetInfo(info, sizeof(data), GL_STATIC_DRAW);
240 // Check that it gets deleted when the last reference is released. 319 // Check that it gets deleted when the last reference is released.
241 EXPECT_CALL(*gl_, DeleteBuffersARB(1, ::testing::Pointee(kServiceBufferId))) 320 EXPECT_CALL(*gl_, DeleteBuffersARB(1, ::testing::Pointee(kServiceBufferId)))
242 .Times(1) 321 .Times(1)
243 .RetiresOnSaturation(); 322 .RetiresOnSaturation();
244 info = NULL; 323 info = NULL;
245 } 324 }
246 325
326 TEST_F(BufferManagerTest, SharedMemory) {
327 const GLuint kClientBufferId = 1;
328 const GLuint kServiceBufferId = 11;
329 const uint8 data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
330 manager_.CreateBufferInfo(kClientBufferId, kServiceBufferId);
331 BufferManager::BufferInfo* info = manager_.GetBufferInfo(kClientBufferId);
332 ASSERT_TRUE(info != NULL);
333
334 manager_.SetTarget(info, GL_ARRAY_BUFFER);
335 scoped_ptr<MockDecoder> decoder;
336 decoder.reset(new MockDecoder());
337 decoder->set_engine(engine_.get());
338 // Set shared memory.
339 manager_.SetInfo(info, sizeof(data), GL_DYNAMIC_DRAW, decoder.get(),
340 kSharedMemoryId, kSharedMemoryOffset);
341 const uint8* buf = static_cast<const uint8*>(
342 info->GetRange(0, sizeof(data)));
343 ASSERT_TRUE(buf != NULL);
344 ASSERT_EQ(kInitialMemoryValue, buf[0]);
345 ASSERT_EQ(kInitialMemoryValue, buf[sizeof(data) - 1]);
346
347 // Check that SetRange modifies shared memory.
348 info->SetRange(0, sizeof(data), data);
349 uint8* shm_buf = decoder->GetSharedMemoryAs<uint8*>(
350 kSharedMemoryId, kSharedMemoryOffset, sizeof(data));
351 ASSERT_TRUE(shm_buf != NULL);
352 ASSERT_EQ(buf[0], shm_buf[0]);
353 ASSERT_EQ(buf[sizeof(data) - 1], shm_buf[sizeof(data) - 1]);
354
355 // Reset shared memory to initial value.
356 engine_->ClearSharedMemory();
357 const uint8* buf1 = static_cast<const uint8*>(
358 info->GetRange(0, sizeof(data)));
359 ASSERT_TRUE(buf1 != NULL);
360 ASSERT_EQ(kInitialMemoryValue, buf[0]);
361 ASSERT_EQ(kInitialMemoryValue, buf[sizeof(data) - 1]);
362
363 // Remove decoder.
364 decoder.reset();
365 // Check that GetRange returns NULL after removing decoder.
366 const uint8* buf2 = static_cast<const uint8*>(
367 info->GetRange(0, sizeof(data)));
368 ASSERT_TRUE(buf2 == NULL);
369 }
370
247 } // namespace gles2 371 } // namespace gles2
248 } // namespace gpu 372 } // namespace gpu
249
250
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698