| Index: gpu/command_buffer/service/buffer_manager_unittest.cc
|
| diff --git a/gpu/command_buffer/service/buffer_manager_unittest.cc b/gpu/command_buffer/service/buffer_manager_unittest.cc
|
| index 7a84b0575ede13f504ebc44dc9380d293ce7b096..60b11bd2dc1c8fc3adb559523e9035239c12de82 100644
|
| --- a/gpu/command_buffer/service/buffer_manager_unittest.cc
|
| +++ b/gpu/command_buffer/service/buffer_manager_unittest.cc
|
| @@ -3,14 +3,33 @@
|
| // found in the LICENSE file.
|
|
|
| #include "gpu/command_buffer/service/buffer_manager.h"
|
| +#include "gpu/command_buffer/service/cmd_buffer_engine.h"
|
| +#include "gpu/command_buffer/service/common_decoder.h"
|
| #include "gpu/command_buffer/common/gl_mock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| namespace gpu {
|
| namespace gles2 {
|
|
|
| +class MockDecoder : public CommonDecoder {
|
| + public:
|
| + virtual ~MockDecoder() { }
|
| + MOCK_METHOD3(DoCommand, error::Error(
|
| + unsigned int command,
|
| + unsigned int arg_count,
|
| + const void* cmd_data));
|
| + MOCK_CONST_METHOD1(GetCommandName, const char* (unsigned int command_id));
|
| +};
|
| +
|
| class BufferManagerTest : public testing::Test {
|
| public:
|
| + static const int32 kSharedMemoryId = 401;
|
| + static const size_t kSharedBufferSize = 2048;
|
| + static const uint32 kSharedMemoryOffset = 132;
|
| + static const int32 kInvalidSharedMemoryId = 402;
|
| + static const uint32 kInvalidSharedMemoryOffset = kSharedBufferSize + 1;
|
| + static const uint8 kInitialMemoryValue = 0xBDu;
|
| +
|
| BufferManagerTest() {
|
| }
|
| ~BufferManagerTest() {
|
| @@ -18,12 +37,61 @@ class BufferManagerTest : public testing::Test {
|
| }
|
|
|
| protected:
|
| + class MockCommandBufferEngine : public CommandBufferEngine {
|
| + public:
|
| + MockCommandBufferEngine() {
|
| + data_.reset(new int8[kSharedBufferSize]);
|
| + ClearSharedMemory();
|
| + valid_buffer_.ptr = data_.get();
|
| + valid_buffer_.size = kSharedBufferSize;
|
| + }
|
| +
|
| + virtual ~MockCommandBufferEngine() {
|
| + }
|
| +
|
| + virtual Buffer GetSharedMemoryBuffer(int32 shm_id) OVERRIDE {
|
| + return shm_id == kSharedMemoryId ? valid_buffer_ : invalid_buffer_;
|
| + }
|
| +
|
| + void ClearSharedMemory() {
|
| + memset(data_.get(), kInitialMemoryValue, kSharedBufferSize);
|
| + }
|
| +
|
| + virtual void set_token(int32 token) OVERRIDE {
|
| + DCHECK(false);
|
| + }
|
| +
|
| + virtual bool SetGetBuffer(int32 /* transfer_buffer_id */) OVERRIDE {
|
| + DCHECK(false);
|
| + return false;
|
| + }
|
| +
|
| + // Overridden from CommandBufferEngine.
|
| + virtual bool SetGetOffset(int32 offset) OVERRIDE {
|
| + DCHECK(false);
|
| + return false;
|
| + }
|
| +
|
| + // Overridden from CommandBufferEngine.
|
| + virtual int32 GetGetOffset() OVERRIDE {
|
| + DCHECK(false);
|
| + return 0;
|
| + }
|
| +
|
| + private:
|
| + scoped_array<int8> data_;
|
| + Buffer valid_buffer_;
|
| + Buffer invalid_buffer_;
|
| + };
|
| +
|
| virtual void SetUp() {
|
| gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>());
|
| ::gfx::GLInterface::SetGLInterface(gl_.get());
|
| + engine_.reset(new MockCommandBufferEngine());
|
| }
|
|
|
| virtual void TearDown() {
|
| + engine_.reset();
|
| ::gfx::GLInterface::SetGLInterface(NULL);
|
| gl_.reset();
|
| }
|
| @@ -34,9 +102,20 @@ class BufferManagerTest : public testing::Test {
|
|
|
| // Use StrictMock to make 100% sure we know how GL will be called.
|
| scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_;
|
| + scoped_ptr<MockCommandBufferEngine> engine_;
|
| BufferManager manager_;
|
| };
|
|
|
| +// GCC requires these declarations, but MSVC requires they not be present
|
| +#ifndef COMPILER_MSVC
|
| +const int32 BufferManagerTest::kSharedMemoryId;
|
| +const size_t BufferManagerTest::kSharedBufferSize;
|
| +const uint32 BufferManagerTest::kSharedMemoryOffset;
|
| +const int32 BufferManagerTest::kInvalidSharedMemoryId;
|
| +const uint32 BufferManagerTest::kInvalidSharedMemoryOffset;
|
| +const uint8 BufferManagerTest::kInitialMemoryValue;
|
| +#endif
|
| +
|
| TEST_F(BufferManagerTest, Basic) {
|
| const GLuint kClientBuffer1Id = 1;
|
| const GLuint kServiceBuffer1Id = 11;
|
| @@ -244,7 +323,50 @@ TEST_F(BufferManagerTest, UseDeletedBuffer) {
|
| info = NULL;
|
| }
|
|
|
| -} // namespace gles2
|
| -} // namespace gpu
|
| +TEST_F(BufferManagerTest, SharedMemory) {
|
| + const GLuint kClientBufferId = 1;
|
| + const GLuint kServiceBufferId = 11;
|
| + const uint8 data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
|
| + manager_.CreateBufferInfo(kClientBufferId, kServiceBufferId);
|
| + BufferManager::BufferInfo* info = manager_.GetBufferInfo(kClientBufferId);
|
| + ASSERT_TRUE(info != NULL);
|
|
|
| + manager_.SetTarget(info, GL_ARRAY_BUFFER);
|
| + scoped_ptr<MockDecoder> decoder;
|
| + decoder.reset(new MockDecoder());
|
| + decoder->set_engine(engine_.get());
|
| + // Set shared memory.
|
| + manager_.SetInfo(info, sizeof(data), GL_DYNAMIC_DRAW, decoder.get(),
|
| + kSharedMemoryId, kSharedMemoryOffset);
|
| + const uint8* buf = static_cast<const uint8*>(
|
| + info->GetRange(0, sizeof(data)));
|
| + ASSERT_TRUE(buf != NULL);
|
| + ASSERT_EQ(kInitialMemoryValue, buf[0]);
|
| + ASSERT_EQ(kInitialMemoryValue, buf[sizeof(data) - 1]);
|
| +
|
| + // Check that SetRange modifies shared memory.
|
| + info->SetRange(0, sizeof(data), data);
|
| + uint8* shm_buf = decoder->GetSharedMemoryAs<uint8*>(
|
| + kSharedMemoryId, kSharedMemoryOffset, sizeof(data));
|
| + ASSERT_TRUE(shm_buf != NULL);
|
| + ASSERT_EQ(buf[0], shm_buf[0]);
|
| + ASSERT_EQ(buf[sizeof(data) - 1], shm_buf[sizeof(data) - 1]);
|
|
|
| + // Reset shared memory to initial value.
|
| + engine_->ClearSharedMemory();
|
| + const uint8* buf1 = static_cast<const uint8*>(
|
| + info->GetRange(0, sizeof(data)));
|
| + ASSERT_TRUE(buf1 != NULL);
|
| + ASSERT_EQ(kInitialMemoryValue, buf[0]);
|
| + ASSERT_EQ(kInitialMemoryValue, buf[sizeof(data) - 1]);
|
| +
|
| + // Remove decoder.
|
| + decoder.reset();
|
| + // Check that GetRange returns NULL after removing decoder.
|
| + const uint8* buf2 = static_cast<const uint8*>(
|
| + info->GetRange(0, sizeof(data)));
|
| + ASSERT_TRUE(buf2 == NULL);
|
| +}
|
| +
|
| +} // namespace gles2
|
| +} // namespace gpu
|
|
|