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

Unified 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 side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698