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

Unified Diff: gpu/command_buffer/service/buffer_manager_unittest.cc

Issue 12542009: Revert "Revert 186416" (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 side-by-side diff with in-line comments
Download patch
« 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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 e782e7f9100983b1614f8dd4e439592f89482112..65dd7ed501864dad3ed79f1e1571781b47ffa493 100644
--- a/gpu/command_buffer/service/buffer_manager_unittest.cc
+++ b/gpu/command_buffer/service/buffer_manager_unittest.cc
@@ -3,10 +3,15 @@
// found in the LICENSE file.
#include "gpu/command_buffer/service/buffer_manager.h"
+#include "gpu/command_buffer/service/feature_info.h"
+#include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h"
#include "gpu/command_buffer/service/mocks.h"
+#include "gpu/command_buffer/service/test_helper.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gl/gl_mock.h"
+using ::testing::_;
+using ::testing::Return;
using ::testing::StrictMock;
namespace gpu {
@@ -14,32 +19,73 @@ namespace gles2 {
class BufferManagerTestBase : public testing::Test {
protected:
- void SetUpBase(MemoryTracker* memory_tracker) {
+ void SetUpBase(
+ MemoryTracker* memory_tracker,
+ FeatureInfo* feature_info,
+ const char* extensions,
+ const char* vendor,
+ const char* renderer) {
gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>());
::gfx::GLInterface::SetGLInterface(gl_.get());
- manager_.reset(new BufferManager(memory_tracker));
+ if (feature_info) {
+ TestHelper::SetupFeatureInfoInitExpectationsWithVendor(
+ gl_.get(), extensions, vendor, renderer);
+ feature_info->Initialize(NULL);
+ }
+ decoder_.reset(new MockGLES2Decoder());
+ manager_.reset(new BufferManager(memory_tracker, feature_info));
}
virtual void TearDown() {
manager_->Destroy(false);
manager_.reset();
::gfx::GLInterface::SetGLInterface(NULL);
+ decoder_.reset();
gl_.reset();
}
- GLenum GetTarget(const Buffer* info) const {
- return info->target();
+ GLenum GetTarget(const Buffer* buffer) const {
+ return buffer->target();
+ }
+
+ void DoBufferData(
+ Buffer* buffer, GLsizeiptr size, GLenum usage, const GLvoid* data,
+ GLenum error) {
+ TestHelper::DoBufferData(
+ gl_.get(), decoder_.get(), manager_.get(),
+ buffer, size, usage, data, error);
+ }
+
+ bool DoBufferSubData(
+ Buffer* buffer, GLintptr offset, GLsizeiptr size,
+ const GLvoid* data) {
+ bool success = true;
+ if (!buffer->CheckRange(offset, size)) {
+ EXPECT_CALL(*decoder_, SetGLError(GL_INVALID_VALUE, _, _))
+ .Times(1)
+ .RetiresOnSaturation();
+ success = false;
+ } else if (!buffer->IsClientSideArray()) {
+ EXPECT_CALL(*gl_, BufferSubData(
+ buffer->target(), offset, size, _))
+ .Times(1)
+ .RetiresOnSaturation();
+ }
+ manager_->DoBufferSubData(
+ decoder_.get(), buffer, offset, size, data);
+ return success;
}
// Use StrictMock to make 100% sure we know how GL will be called.
scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_;
scoped_ptr<BufferManager> manager_;
+ scoped_ptr<MockGLES2Decoder> decoder_;
};
class BufferManagerTest : public BufferManagerTestBase {
protected:
virtual void SetUp() {
- SetUpBase(NULL);
+ SetUpBase(NULL, NULL, "", "", "");
}
};
@@ -47,12 +93,22 @@ class BufferManagerMemoryTrackerTest : public BufferManagerTestBase {
protected:
virtual void SetUp() {
mock_memory_tracker_ = new StrictMock<MockMemoryTracker>();
- SetUpBase(mock_memory_tracker_.get());
+ SetUpBase(mock_memory_tracker_.get(), NULL, "", "", "");
}
scoped_refptr<MockMemoryTracker> mock_memory_tracker_;
};
+class BufferManagerClientSideArraysTest : public BufferManagerTestBase {
+ protected:
+ virtual void SetUp() {
+ feature_info_ = new FeatureInfo();
+ SetUpBase(NULL, feature_info_.get(), "", "Imagination Technologies", "");
+ }
+
+ scoped_refptr<FeatureInfo> feature_info_;
+};
+
#define EXPECT_MEMORY_ALLOCATION_CHANGE(old_size, new_size, pool) \
EXPECT_CALL(*mock_memory_tracker_, \
TrackMemoryAllocatedChange(old_size, new_size, pool)) \
@@ -67,22 +123,23 @@ TEST_F(BufferManagerTest, Basic) {
// Check we can create buffer.
manager_->CreateBuffer(kClientBuffer1Id, kServiceBuffer1Id);
// Check buffer got created.
- Buffer* info1 = manager_->GetBuffer(kClientBuffer1Id);
- ASSERT_TRUE(info1 != NULL);
- EXPECT_EQ(0u, GetTarget(info1));
- EXPECT_EQ(0, info1->size());
- EXPECT_EQ(static_cast<GLenum>(GL_STATIC_DRAW), info1->usage());
- EXPECT_FALSE(info1->IsDeleted());
- EXPECT_EQ(kServiceBuffer1Id, info1->service_id());
+ Buffer* buffer1 = manager_->GetBuffer(kClientBuffer1Id);
+ ASSERT_TRUE(buffer1 != NULL);
+ EXPECT_EQ(0u, GetTarget(buffer1));
+ EXPECT_EQ(0, buffer1->size());
+ EXPECT_EQ(static_cast<GLenum>(GL_STATIC_DRAW), buffer1->usage());
+ EXPECT_FALSE(buffer1->IsDeleted());
+ EXPECT_FALSE(buffer1->IsClientSideArray());
+ EXPECT_EQ(kServiceBuffer1Id, buffer1->service_id());
GLuint client_id = 0;
- EXPECT_TRUE(manager_->GetClientId(info1->service_id(), &client_id));
+ EXPECT_TRUE(manager_->GetClientId(buffer1->service_id(), &client_id));
EXPECT_EQ(kClientBuffer1Id, client_id);
- manager_->SetTarget(info1, GL_ELEMENT_ARRAY_BUFFER);
- EXPECT_EQ(static_cast<GLenum>(GL_ELEMENT_ARRAY_BUFFER), GetTarget(info1));
+ manager_->SetTarget(buffer1, GL_ELEMENT_ARRAY_BUFFER);
+ EXPECT_EQ(static_cast<GLenum>(GL_ELEMENT_ARRAY_BUFFER), GetTarget(buffer1));
// Check we and set its size.
- manager_->SetInfo(info1, kBuffer1Size, GL_DYNAMIC_DRAW);
- EXPECT_EQ(kBuffer1Size, info1->size());
- EXPECT_EQ(static_cast<GLenum>(GL_DYNAMIC_DRAW), info1->usage());
+ DoBufferData(buffer1, kBuffer1Size, GL_DYNAMIC_DRAW, NULL, GL_NO_ERROR);
+ EXPECT_EQ(kBuffer1Size, buffer1->size());
+ EXPECT_EQ(static_cast<GLenum>(GL_DYNAMIC_DRAW), buffer1->usage());
// Check we get nothing for a non-existent buffer.
EXPECT_TRUE(manager_->GetBuffer(kClientBuffer2Id) == NULL);
// Check trying to a remove non-existent buffers does not crash.
@@ -105,15 +162,15 @@ TEST_F(BufferManagerMemoryTrackerTest, Basic) {
EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kManaged);
manager_->CreateBuffer(kClientBuffer1Id, kServiceBuffer1Id);
// Check buffer got created.
- Buffer* info1 = manager_->GetBuffer(kClientBuffer1Id);
- ASSERT_TRUE(info1 != NULL);
- manager_->SetTarget(info1, GL_ELEMENT_ARRAY_BUFFER);
+ Buffer* buffer1 = manager_->GetBuffer(kClientBuffer1Id);
+ ASSERT_TRUE(buffer1 != NULL);
+ manager_->SetTarget(buffer1, GL_ELEMENT_ARRAY_BUFFER);
// Check we and set its size.
EXPECT_MEMORY_ALLOCATION_CHANGE(0, kBuffer1Size1, MemoryTracker::kManaged);
- manager_->SetInfo(info1, kBuffer1Size1, GL_DYNAMIC_DRAW);
+ DoBufferData(buffer1, kBuffer1Size1, GL_DYNAMIC_DRAW, NULL, GL_NO_ERROR);
EXPECT_MEMORY_ALLOCATION_CHANGE(kBuffer1Size1, 0, MemoryTracker::kManaged);
EXPECT_MEMORY_ALLOCATION_CHANGE(0, kBuffer1Size2, MemoryTracker::kManaged);
- manager_->SetInfo(info1, kBuffer1Size2, GL_DYNAMIC_DRAW);
+ DoBufferData(buffer1, kBuffer1Size2, GL_DYNAMIC_DRAW, NULL, GL_NO_ERROR);
// On delete it will get freed.
EXPECT_MEMORY_ALLOCATION_CHANGE(kBuffer1Size2, 0, MemoryTracker::kManaged);
}
@@ -124,38 +181,37 @@ TEST_F(BufferManagerTest, Destroy) {
// Check we can create buffer.
manager_->CreateBuffer(kClient1Id, kService1Id);
// Check buffer got created.
- Buffer* info1 =
- manager_->GetBuffer(kClient1Id);
- ASSERT_TRUE(info1 != NULL);
+ Buffer* buffer1 = manager_->GetBuffer(kClient1Id);
+ ASSERT_TRUE(buffer1 != NULL);
EXPECT_CALL(*gl_, DeleteBuffersARB(1, ::testing::Pointee(kService1Id)))
.Times(1)
.RetiresOnSaturation();
manager_->Destroy(true);
// Check the resources were released.
- info1 = manager_->GetBuffer(kClient1Id);
- ASSERT_TRUE(info1 == NULL);
+ buffer1 = manager_->GetBuffer(kClient1Id);
+ ASSERT_TRUE(buffer1 == NULL);
}
-TEST_F(BufferManagerTest, SetRange) {
+TEST_F(BufferManagerTest, DoBufferSubData) {
const GLuint kClientBufferId = 1;
const GLuint kServiceBufferId = 11;
const uint8 data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
manager_->CreateBuffer(kClientBufferId, kServiceBufferId);
- Buffer* info = manager_->GetBuffer(kClientBufferId);
- ASSERT_TRUE(info != NULL);
- manager_->SetTarget(info, GL_ELEMENT_ARRAY_BUFFER);
- manager_->SetInfo(info, sizeof(data), GL_STATIC_DRAW);
- EXPECT_TRUE(info->SetRange(0, sizeof(data), data));
- EXPECT_TRUE(info->SetRange(sizeof(data), 0, data));
- EXPECT_FALSE(info->SetRange(sizeof(data), 1, data));
- EXPECT_FALSE(info->SetRange(0, sizeof(data) + 1, data));
- EXPECT_FALSE(info->SetRange(-1, sizeof(data), data));
- EXPECT_FALSE(info->SetRange(0, -1, data));
- manager_->SetInfo(info, 1, GL_STATIC_DRAW);
+ Buffer* buffer = manager_->GetBuffer(kClientBufferId);
+ ASSERT_TRUE(buffer != NULL);
+ manager_->SetTarget(buffer, GL_ELEMENT_ARRAY_BUFFER);
+ DoBufferData(buffer, sizeof(data), GL_STATIC_DRAW, NULL, GL_NO_ERROR);
+ EXPECT_TRUE(DoBufferSubData(buffer, 0, sizeof(data), data));
+ EXPECT_TRUE(DoBufferSubData(buffer, sizeof(data), 0, data));
+ EXPECT_FALSE(DoBufferSubData(buffer, sizeof(data), 1, data));
+ EXPECT_FALSE(DoBufferSubData(buffer, 0, sizeof(data) + 1, data));
+ EXPECT_FALSE(DoBufferSubData(buffer, -1, sizeof(data), data));
+ EXPECT_FALSE(DoBufferSubData(buffer, 0, -1, data));
+ DoBufferData(buffer, 1, GL_STATIC_DRAW, NULL, GL_NO_ERROR);
const int size = 0x20000;
scoped_array<uint8> temp(new uint8[size]);
- EXPECT_FALSE(info->SetRange(0 - size, size, temp.get()));
- EXPECT_FALSE(info->SetRange(1, size / 2, temp.get()));
+ EXPECT_FALSE(DoBufferSubData(buffer, 0 - size, size, temp.get()));
+ EXPECT_FALSE(DoBufferSubData(buffer, 1, size / 2, temp.get()));
}
TEST_F(BufferManagerTest, GetRange) {
@@ -163,23 +219,24 @@ TEST_F(BufferManagerTest, GetRange) {
const GLuint kServiceBufferId = 11;
const uint8 data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
manager_->CreateBuffer(kClientBufferId, kServiceBufferId);
- Buffer* info = manager_->GetBuffer(kClientBufferId);
- ASSERT_TRUE(info != NULL);
- manager_->SetTarget(info, GL_ELEMENT_ARRAY_BUFFER);
- manager_->SetInfo(info, sizeof(data), GL_STATIC_DRAW);
- const char* buf = static_cast<const char*>(info->GetRange(0, sizeof(data)));
+ Buffer* buffer = manager_->GetBuffer(kClientBufferId);
+ ASSERT_TRUE(buffer != NULL);
+ manager_->SetTarget(buffer, GL_ELEMENT_ARRAY_BUFFER);
+ DoBufferData(buffer, sizeof(data), GL_STATIC_DRAW, NULL, GL_NO_ERROR);
+ const char* buf =
+ static_cast<const char*>(buffer->GetRange(0, sizeof(data)));
ASSERT_TRUE(buf != NULL);
const char* buf1 =
- static_cast<const char*>(info->GetRange(1, sizeof(data) - 1));
+ static_cast<const char*>(buffer->GetRange(1, sizeof(data) - 1));
EXPECT_EQ(buf + 1, buf1);
- EXPECT_TRUE(info->GetRange(sizeof(data), 1) == NULL);
- EXPECT_TRUE(info->GetRange(0, sizeof(data) + 1) == NULL);
- EXPECT_TRUE(info->GetRange(-1, sizeof(data)) == NULL);
- EXPECT_TRUE(info->GetRange(-0, -1) == NULL);
+ EXPECT_TRUE(buffer->GetRange(sizeof(data), 1) == NULL);
+ EXPECT_TRUE(buffer->GetRange(0, sizeof(data) + 1) == NULL);
+ EXPECT_TRUE(buffer->GetRange(-1, sizeof(data)) == NULL);
+ EXPECT_TRUE(buffer->GetRange(-0, -1) == NULL);
const int size = 0x20000;
- manager_->SetInfo(info, size / 2, GL_STATIC_DRAW);
- EXPECT_TRUE(info->GetRange(0 - size, size) == NULL);
- EXPECT_TRUE(info->GetRange(1, size / 2) == NULL);
+ DoBufferData(buffer, size / 2, GL_STATIC_DRAW, NULL, GL_NO_ERROR);
+ EXPECT_TRUE(buffer->GetRange(0 - size, size) == NULL);
+ EXPECT_TRUE(buffer->GetRange(1, size / 2) == NULL);
}
TEST_F(BufferManagerTest, GetMaxValueForRangeUint8) {
@@ -188,28 +245,34 @@ TEST_F(BufferManagerTest, GetMaxValueForRangeUint8) {
const uint8 data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
const uint8 new_data[] = {100, 120, 110};
manager_->CreateBuffer(kClientBufferId, kServiceBufferId);
- Buffer* info = manager_->GetBuffer(kClientBufferId);
- ASSERT_TRUE(info != NULL);
- manager_->SetTarget(info, GL_ELEMENT_ARRAY_BUFFER);
- manager_->SetInfo(info, sizeof(data), GL_STATIC_DRAW);
- EXPECT_TRUE(info->SetRange(0, sizeof(data), data));
+ Buffer* buffer = manager_->GetBuffer(kClientBufferId);
+ ASSERT_TRUE(buffer != NULL);
+ manager_->SetTarget(buffer, GL_ELEMENT_ARRAY_BUFFER);
+ DoBufferData(buffer, sizeof(data), GL_STATIC_DRAW, NULL, GL_NO_ERROR);
+ EXPECT_TRUE(DoBufferSubData(buffer, 0, sizeof(data), data));
GLuint max_value;
// Check entire range succeeds.
- EXPECT_TRUE(info->GetMaxValueForRange(0, 10, GL_UNSIGNED_BYTE, &max_value));
+ EXPECT_TRUE(buffer->GetMaxValueForRange(
+ 0, 10, GL_UNSIGNED_BYTE, &max_value));
EXPECT_EQ(10u, max_value);
// Check sub range succeeds.
- EXPECT_TRUE(info->GetMaxValueForRange(4, 3, GL_UNSIGNED_BYTE, &max_value));
+ EXPECT_TRUE(buffer->GetMaxValueForRange(
+ 4, 3, GL_UNSIGNED_BYTE, &max_value));
EXPECT_EQ(6u, max_value);
// Check changing sub range succeeds.
- EXPECT_TRUE(info->SetRange(4, sizeof(new_data), new_data));
- EXPECT_TRUE(info->GetMaxValueForRange(4, 3, GL_UNSIGNED_BYTE, &max_value));
+ EXPECT_TRUE(DoBufferSubData(buffer, 4, sizeof(new_data), new_data));
+ EXPECT_TRUE(buffer->GetMaxValueForRange(
+ 4, 3, GL_UNSIGNED_BYTE, &max_value));
EXPECT_EQ(120u, max_value);
max_value = 0;
- EXPECT_TRUE(info->GetMaxValueForRange(0, 10, GL_UNSIGNED_BYTE, &max_value));
+ EXPECT_TRUE(buffer->GetMaxValueForRange(
+ 0, 10, GL_UNSIGNED_BYTE, &max_value));
EXPECT_EQ(120u, max_value);
// Check out of range fails.
- EXPECT_FALSE(info->GetMaxValueForRange(0, 11, GL_UNSIGNED_BYTE, &max_value));
- EXPECT_FALSE(info->GetMaxValueForRange(10, 1, GL_UNSIGNED_BYTE, &max_value));
+ EXPECT_FALSE(buffer->GetMaxValueForRange(
+ 0, 11, GL_UNSIGNED_BYTE, &max_value));
+ EXPECT_FALSE(buffer->GetMaxValueForRange(
+ 10, 1, GL_UNSIGNED_BYTE, &max_value));
}
TEST_F(BufferManagerTest, GetMaxValueForRangeUint16) {
@@ -218,30 +281,37 @@ TEST_F(BufferManagerTest, GetMaxValueForRangeUint16) {
const uint16 data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
const uint16 new_data[] = {100, 120, 110};
manager_->CreateBuffer(kClientBufferId, kServiceBufferId);
- Buffer* info = manager_->GetBuffer(kClientBufferId);
- ASSERT_TRUE(info != NULL);
- manager_->SetTarget(info, GL_ELEMENT_ARRAY_BUFFER);
- manager_->SetInfo(info, sizeof(data), GL_STATIC_DRAW);
- EXPECT_TRUE(info->SetRange(0, sizeof(data), data));
+ Buffer* buffer = manager_->GetBuffer(kClientBufferId);
+ ASSERT_TRUE(buffer != NULL);
+ manager_->SetTarget(buffer, GL_ELEMENT_ARRAY_BUFFER);
+ DoBufferData(buffer, sizeof(data), GL_STATIC_DRAW, NULL, GL_NO_ERROR);
+ EXPECT_TRUE(DoBufferSubData(buffer, 0, sizeof(data), data));
GLuint max_value;
// Check entire range succeeds.
- EXPECT_TRUE(info->GetMaxValueForRange(0, 10, GL_UNSIGNED_SHORT, &max_value));
+ EXPECT_TRUE(buffer->GetMaxValueForRange(
+ 0, 10, GL_UNSIGNED_SHORT, &max_value));
EXPECT_EQ(10u, max_value);
// Check odd offset fails for GL_UNSIGNED_SHORT.
- EXPECT_FALSE(info->GetMaxValueForRange(1, 10, GL_UNSIGNED_SHORT, &max_value));
+ EXPECT_FALSE(buffer->GetMaxValueForRange(
+ 1, 10, GL_UNSIGNED_SHORT, &max_value));
// Check sub range succeeds.
- EXPECT_TRUE(info->GetMaxValueForRange(8, 3, GL_UNSIGNED_SHORT, &max_value));
+ EXPECT_TRUE(buffer->GetMaxValueForRange(
+ 8, 3, GL_UNSIGNED_SHORT, &max_value));
EXPECT_EQ(6u, max_value);
// Check changing sub range succeeds.
- EXPECT_TRUE(info->SetRange(8, sizeof(new_data), new_data));
- EXPECT_TRUE(info->GetMaxValueForRange(8, 3, GL_UNSIGNED_SHORT, &max_value));
+ EXPECT_TRUE(DoBufferSubData(buffer, 8, sizeof(new_data), new_data));
+ EXPECT_TRUE(buffer->GetMaxValueForRange(
+ 8, 3, GL_UNSIGNED_SHORT, &max_value));
EXPECT_EQ(120u, max_value);
max_value = 0;
- EXPECT_TRUE(info->GetMaxValueForRange(0, 10, GL_UNSIGNED_SHORT, &max_value));
+ EXPECT_TRUE(buffer->GetMaxValueForRange(
+ 0, 10, GL_UNSIGNED_SHORT, &max_value));
EXPECT_EQ(120u, max_value);
// Check out of range fails.
- EXPECT_FALSE(info->GetMaxValueForRange(0, 11, GL_UNSIGNED_SHORT, &max_value));
- EXPECT_FALSE(info->GetMaxValueForRange(20, 1, GL_UNSIGNED_SHORT, &max_value));
+ EXPECT_FALSE(buffer->GetMaxValueForRange(
+ 0, 11, GL_UNSIGNED_SHORT, &max_value));
+ EXPECT_FALSE(buffer->GetMaxValueForRange(
+ 20, 1, GL_UNSIGNED_SHORT, &max_value));
}
TEST_F(BufferManagerTest, GetMaxValueForRangeUint32) {
@@ -250,32 +320,38 @@ TEST_F(BufferManagerTest, GetMaxValueForRangeUint32) {
const uint32 data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
const uint32 new_data[] = {100, 120, 110};
manager_->CreateBuffer(kClientBufferId, kServiceBufferId);
- Buffer* info = manager_->GetBuffer(kClientBufferId);
- ASSERT_TRUE(info != NULL);
- manager_->SetTarget(info, GL_ELEMENT_ARRAY_BUFFER);
- manager_->SetInfo(info, sizeof(data), GL_STATIC_DRAW);
- EXPECT_TRUE(info->SetRange(0, sizeof(data), data));
+ Buffer* buffer = manager_->GetBuffer(kClientBufferId);
+ ASSERT_TRUE(buffer != NULL);
+ manager_->SetTarget(buffer, GL_ELEMENT_ARRAY_BUFFER);
+ DoBufferData(buffer, sizeof(data), GL_STATIC_DRAW, NULL, GL_NO_ERROR);
+ EXPECT_TRUE(DoBufferSubData(buffer, 0, sizeof(data), data));
GLuint max_value;
// Check entire range succeeds.
- EXPECT_TRUE(info->GetMaxValueForRange(0, 10, GL_UNSIGNED_INT, &max_value));
+ EXPECT_TRUE(
+ buffer->GetMaxValueForRange(0, 10, GL_UNSIGNED_INT, &max_value));
EXPECT_EQ(10u, max_value);
// Check non aligned offsets fails for GL_UNSIGNED_INT.
- EXPECT_FALSE(info->GetMaxValueForRange(1, 10, GL_UNSIGNED_INT, &max_value));
- EXPECT_FALSE(info->GetMaxValueForRange(2, 10, GL_UNSIGNED_INT, &max_value));
- EXPECT_FALSE(info->GetMaxValueForRange(3, 10, GL_UNSIGNED_INT, &max_value));
+ EXPECT_FALSE(
+ buffer->GetMaxValueForRange(1, 10, GL_UNSIGNED_INT, &max_value));
+ EXPECT_FALSE(
+ buffer->GetMaxValueForRange(2, 10, GL_UNSIGNED_INT, &max_value));
+ EXPECT_FALSE(
+ buffer->GetMaxValueForRange(3, 10, GL_UNSIGNED_INT, &max_value));
// Check sub range succeeds.
- EXPECT_TRUE(info->GetMaxValueForRange(16, 3, GL_UNSIGNED_INT, &max_value));
+ EXPECT_TRUE(buffer->GetMaxValueForRange(16, 3, GL_UNSIGNED_INT, &max_value));
EXPECT_EQ(6u, max_value);
// Check changing sub range succeeds.
- EXPECT_TRUE(info->SetRange(16, sizeof(new_data), new_data));
- EXPECT_TRUE(info->GetMaxValueForRange(16, 3, GL_UNSIGNED_INT, &max_value));
+ EXPECT_TRUE(DoBufferSubData(buffer, 16, sizeof(new_data), new_data));
+ EXPECT_TRUE(buffer->GetMaxValueForRange(16, 3, GL_UNSIGNED_INT, &max_value));
EXPECT_EQ(120u, max_value);
max_value = 0;
- EXPECT_TRUE(info->GetMaxValueForRange(0, 10, GL_UNSIGNED_INT, &max_value));
+ EXPECT_TRUE(buffer->GetMaxValueForRange(0, 10, GL_UNSIGNED_INT, &max_value));
EXPECT_EQ(120u, max_value);
// Check out of range fails.
- EXPECT_FALSE(info->GetMaxValueForRange(0, 11, GL_UNSIGNED_INT, &max_value));
- EXPECT_FALSE(info->GetMaxValueForRange(40, 1, GL_UNSIGNED_INT, &max_value));
+ EXPECT_FALSE(
+ buffer->GetMaxValueForRange(0, 11, GL_UNSIGNED_INT, &max_value));
+ EXPECT_FALSE(
+ buffer->GetMaxValueForRange(40, 1, GL_UNSIGNED_INT, &max_value));
}
TEST_F(BufferManagerTest, UseDeletedBuffer) {
@@ -283,19 +359,34 @@ TEST_F(BufferManagerTest, UseDeletedBuffer) {
const GLuint kServiceBufferId = 11;
const uint32 data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
manager_->CreateBuffer(kClientBufferId, kServiceBufferId);
- scoped_refptr<Buffer> info =
- manager_->GetBuffer(kClientBufferId);
- ASSERT_TRUE(info != NULL);
- manager_->SetTarget(info, GL_ARRAY_BUFFER);
+ scoped_refptr<Buffer> buffer = manager_->GetBuffer(kClientBufferId);
+ ASSERT_TRUE(buffer != NULL);
+ manager_->SetTarget(buffer, GL_ARRAY_BUFFER);
// Remove buffer
manager_->RemoveBuffer(kClientBufferId);
// Use it after removing
- manager_->SetInfo(info, sizeof(data), GL_STATIC_DRAW);
+ DoBufferData(buffer, sizeof(data), GL_STATIC_DRAW, NULL, GL_NO_ERROR);
// Check that it gets deleted when the last reference is released.
EXPECT_CALL(*gl_, DeleteBuffersARB(1, ::testing::Pointee(kServiceBufferId)))
.Times(1)
.RetiresOnSaturation();
- info = NULL;
+ buffer = NULL;
+}
+
+// Test buffers get shadowed when they are supposed to be.
+TEST_F(BufferManagerClientSideArraysTest, StreamBuffersAreShadowed) {
+ const GLuint kClientBufferId = 1;
+ const GLuint kServiceBufferId = 11;
+ static const uint32 data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
+ manager_->CreateBuffer(kClientBufferId, kServiceBufferId);
+ Buffer* buffer = manager_->GetBuffer(kClientBufferId);
+ ASSERT_TRUE(buffer != NULL);
+ manager_->SetTarget(buffer, GL_ARRAY_BUFFER);
+ DoBufferData(buffer, sizeof(data), GL_STREAM_DRAW, data, GL_NO_ERROR);
+ EXPECT_TRUE(buffer->IsClientSideArray());
+ EXPECT_EQ(0, memcmp(data, buffer->GetRange(0, sizeof(data)), sizeof(data)));
+ DoBufferData(buffer, sizeof(data), GL_DYNAMIC_DRAW, data, GL_NO_ERROR);
+ EXPECT_FALSE(buffer->IsClientSideArray());
}
} // namespace gles2
« 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