summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-18 12:25:01 +0000
committergman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-18 12:25:01 +0000
commit2e83255ffe84b8947dfeb906c8682e176456ae3b (patch)
tree55fa2d46857373a9efb751e7cf4d98b7f41dad35
parent67d55aca476b3389a51f555b40af521afee4435c (diff)
downloadchromium_src-2e83255ffe84b8947dfeb906c8682e176456ae3b.zip
chromium_src-2e83255ffe84b8947dfeb906c8682e176456ae3b.tar.gz
chromium_src-2e83255ffe84b8947dfeb906c8682e176456ae3b.tar.bz2
Add more tests for MemoryTracker usage.
BUG=NONE Review URL: https://chromiumcodereview.appspot.com/11968006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@177651 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--gpu/command_buffer/service/buffer_manager.h2
-rw-r--r--gpu/command_buffer/service/buffer_manager_unittest.cc145
-rw-r--r--gpu/command_buffer/service/renderbuffer_manager_unittest.cc168
3 files changed, 211 insertions, 104 deletions
diff --git a/gpu/command_buffer/service/buffer_manager.h b/gpu/command_buffer/service/buffer_manager.h
index ae8fcbb..bd83537 100644
--- a/gpu/command_buffer/service/buffer_manager.h
+++ b/gpu/command_buffer/service/buffer_manager.h
@@ -69,7 +69,7 @@ class GPU_EXPORT BufferManager {
private:
friend class BufferManager;
- friend class BufferManagerTest;
+ friend class BufferManagerTestBase;
friend class base::RefCounted<BufferInfo>;
// Represents a range in a buffer.
diff --git a/gpu/command_buffer/service/buffer_manager_unittest.cc b/gpu/command_buffer/service/buffer_manager_unittest.cc
index ab8cb99..7620dfac 100644
--- a/gpu/command_buffer/service/buffer_manager_unittest.cc
+++ b/gpu/command_buffer/service/buffer_manager_unittest.cc
@@ -3,27 +3,26 @@
// found in the LICENSE file.
#include "gpu/command_buffer/service/buffer_manager.h"
+#include "gpu/command_buffer/service/mocks.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gl/gl_mock.h"
+using ::testing::StrictMock;
+
namespace gpu {
namespace gles2 {
-class BufferManagerTest : public testing::Test {
- public:
- BufferManagerTest() : manager_(NULL) {
- }
- ~BufferManagerTest() {
- manager_.Destroy(false);
- }
-
+class BufferManagerTestBase : public testing::Test {
protected:
- virtual void SetUp() {
+ void SetUpBase(MemoryTracker* memory_tracker) {
gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>());
::gfx::GLInterface::SetGLInterface(gl_.get());
+ manager_.reset(new BufferManager(memory_tracker));
}
virtual void TearDown() {
+ manager_->Destroy(false);
+ manager_.reset();
::gfx::GLInterface::SetGLInterface(NULL);
gl_.reset();
}
@@ -34,18 +33,41 @@ 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_;
- BufferManager manager_;
+ scoped_ptr<BufferManager> manager_;
};
+class BufferManagerTest : public BufferManagerTestBase {
+ protected:
+ virtual void SetUp() {
+ SetUpBase(NULL);
+ }
+};
+
+class BufferManagerMemoryTrackerTest : public BufferManagerTestBase {
+ protected:
+ virtual void SetUp() {
+ mock_memory_tracker_ = new StrictMock<MockMemoryTracker>();
+ SetUpBase(mock_memory_tracker_.get());
+ }
+
+ scoped_refptr<MockMemoryTracker> mock_memory_tracker_;
+};
+
+#define EXPECT_MEMORY_ALLOCATION_CHANGE(old_size, new_size, pool) \
+ EXPECT_CALL(*mock_memory_tracker_, \
+ TrackMemoryAllocatedChange(old_size, new_size, pool)) \
+ .Times(1) \
+ .RetiresOnSaturation() \
+
TEST_F(BufferManagerTest, Basic) {
const GLuint kClientBuffer1Id = 1;
const GLuint kServiceBuffer1Id = 11;
const GLsizeiptr kBuffer1Size = 123;
const GLuint kClientBuffer2Id = 2;
// Check we can create buffer.
- manager_.CreateBufferInfo(kClientBuffer1Id, kServiceBuffer1Id);
+ manager_->CreateBufferInfo(kClientBuffer1Id, kServiceBuffer1Id);
// Check buffer got created.
- BufferManager::BufferInfo* info1 = manager_.GetBufferInfo(kClientBuffer1Id);
+ BufferManager::BufferInfo* info1 = manager_->GetBufferInfo(kClientBuffer1Id);
ASSERT_TRUE(info1 != NULL);
EXPECT_EQ(0u, GetTarget(info1));
EXPECT_EQ(0, info1->size());
@@ -53,42 +75,64 @@ TEST_F(BufferManagerTest, Basic) {
EXPECT_FALSE(info1->IsDeleted());
EXPECT_EQ(kServiceBuffer1Id, info1->service_id());
GLuint client_id = 0;
- EXPECT_TRUE(manager_.GetClientId(info1->service_id(), &client_id));
+ EXPECT_TRUE(manager_->GetClientId(info1->service_id(), &client_id));
EXPECT_EQ(kClientBuffer1Id, client_id);
- manager_.SetTarget(info1, GL_ELEMENT_ARRAY_BUFFER);
+ manager_->SetTarget(info1, GL_ELEMENT_ARRAY_BUFFER);
EXPECT_EQ(static_cast<GLenum>(GL_ELEMENT_ARRAY_BUFFER), GetTarget(info1));
// Check we and set its size.
- manager_.SetInfo(info1, kBuffer1Size, GL_DYNAMIC_DRAW);
+ manager_->SetInfo(info1, kBuffer1Size, GL_DYNAMIC_DRAW);
EXPECT_EQ(kBuffer1Size, info1->size());
EXPECT_EQ(static_cast<GLenum>(GL_DYNAMIC_DRAW), info1->usage());
// Check we get nothing for a non-existent buffer.
- EXPECT_TRUE(manager_.GetBufferInfo(kClientBuffer2Id) == NULL);
+ EXPECT_TRUE(manager_->GetBufferInfo(kClientBuffer2Id) == NULL);
// Check trying to a remove non-existent buffers does not crash.
- manager_.RemoveBufferInfo(kClientBuffer2Id);
+ manager_->RemoveBufferInfo(kClientBuffer2Id);
// Check that it gets deleted when the last reference is released.
EXPECT_CALL(*gl_, DeleteBuffersARB(1, ::testing::Pointee(kServiceBuffer1Id)))
.Times(1)
.RetiresOnSaturation();
// Check we can't get the buffer after we remove it.
- manager_.RemoveBufferInfo(kClientBuffer1Id);
- EXPECT_TRUE(manager_.GetBufferInfo(kClientBuffer1Id) == NULL);
+ manager_->RemoveBufferInfo(kClientBuffer1Id);
+ EXPECT_TRUE(manager_->GetBufferInfo(kClientBuffer1Id) == NULL);
+}
+
+TEST_F(BufferManagerMemoryTrackerTest, Basic) {
+ const GLuint kClientBuffer1Id = 1;
+ const GLuint kServiceBuffer1Id = 11;
+ const GLsizeiptr kBuffer1Size1 = 123;
+ const GLsizeiptr kBuffer1Size2 = 456;
+ // Check we can create buffer.
+ EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kManaged);
+ manager_->CreateBufferInfo(kClientBuffer1Id, kServiceBuffer1Id);
+ // Check buffer got created.
+ BufferManager::BufferInfo* info1 = manager_->GetBufferInfo(kClientBuffer1Id);
+ ASSERT_TRUE(info1 != NULL);
+ manager_->SetTarget(info1, 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);
+ EXPECT_MEMORY_ALLOCATION_CHANGE(kBuffer1Size1, 0, MemoryTracker::kManaged);
+ EXPECT_MEMORY_ALLOCATION_CHANGE(0, kBuffer1Size2, MemoryTracker::kManaged);
+ manager_->SetInfo(info1, kBuffer1Size2, GL_DYNAMIC_DRAW);
+ // On delete it will get freed.
+ EXPECT_MEMORY_ALLOCATION_CHANGE(kBuffer1Size2, 0, MemoryTracker::kManaged);
}
TEST_F(BufferManagerTest, Destroy) {
const GLuint kClient1Id = 1;
const GLuint kService1Id = 11;
// Check we can create buffer.
- manager_.CreateBufferInfo(kClient1Id, kService1Id);
+ manager_->CreateBufferInfo(kClient1Id, kService1Id);
// Check buffer got created.
BufferManager::BufferInfo* info1 =
- manager_.GetBufferInfo(kClient1Id);
+ manager_->GetBufferInfo(kClient1Id);
ASSERT_TRUE(info1 != NULL);
EXPECT_CALL(*gl_, DeleteBuffersARB(1, ::testing::Pointee(kService1Id)))
.Times(1)
.RetiresOnSaturation();
- manager_.Destroy(true);
+ manager_->Destroy(true);
// Check the resources were released.
- info1 = manager_.GetBufferInfo(kClient1Id);
+ info1 = manager_->GetBufferInfo(kClient1Id);
ASSERT_TRUE(info1 == NULL);
}
@@ -96,18 +140,18 @@ TEST_F(BufferManagerTest, SetRange) {
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);
+ manager_->CreateBufferInfo(kClientBufferId, kServiceBufferId);
+ BufferManager::BufferInfo* info = manager_->GetBufferInfo(kClientBufferId);
ASSERT_TRUE(info != NULL);
- manager_.SetTarget(info, GL_ELEMENT_ARRAY_BUFFER);
- manager_.SetInfo(info, sizeof(data), GL_STATIC_DRAW);
+ 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);
+ manager_->SetInfo(info, 1, GL_STATIC_DRAW);
const int size = 0x20000;
scoped_array<uint8> temp(new uint8[size]);
EXPECT_FALSE(info->SetRange(0 - size, size, temp.get()));
@@ -118,11 +162,11 @@ TEST_F(BufferManagerTest, GetRange) {
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);
+ manager_->CreateBufferInfo(kClientBufferId, kServiceBufferId);
+ BufferManager::BufferInfo* info = manager_->GetBufferInfo(kClientBufferId);
ASSERT_TRUE(info != NULL);
- manager_.SetTarget(info, GL_ELEMENT_ARRAY_BUFFER);
- manager_.SetInfo(info, sizeof(data), GL_STATIC_DRAW);
+ 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)));
ASSERT_TRUE(buf != NULL);
const char* buf1 =
@@ -133,7 +177,7 @@ TEST_F(BufferManagerTest, GetRange) {
EXPECT_TRUE(info->GetRange(-1, sizeof(data)) == NULL);
EXPECT_TRUE(info->GetRange(-0, -1) == NULL);
const int size = 0x20000;
- manager_.SetInfo(info, size / 2, GL_STATIC_DRAW);
+ manager_->SetInfo(info, size / 2, GL_STATIC_DRAW);
EXPECT_TRUE(info->GetRange(0 - size, size) == NULL);
EXPECT_TRUE(info->GetRange(1, size / 2) == NULL);
}
@@ -143,11 +187,11 @@ TEST_F(BufferManagerTest, GetMaxValueForRangeUint8) {
const GLuint kServiceBufferId = 11;
const uint8 data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
const uint8 new_data[] = {100, 120, 110};
- manager_.CreateBufferInfo(kClientBufferId, kServiceBufferId);
- BufferManager::BufferInfo* info = manager_.GetBufferInfo(kClientBufferId);
+ manager_->CreateBufferInfo(kClientBufferId, kServiceBufferId);
+ BufferManager::BufferInfo* info = manager_->GetBufferInfo(kClientBufferId);
ASSERT_TRUE(info != NULL);
- manager_.SetTarget(info, GL_ELEMENT_ARRAY_BUFFER);
- manager_.SetInfo(info, sizeof(data), GL_STATIC_DRAW);
+ manager_->SetTarget(info, GL_ELEMENT_ARRAY_BUFFER);
+ manager_->SetInfo(info, sizeof(data), GL_STATIC_DRAW);
EXPECT_TRUE(info->SetRange(0, sizeof(data), data));
GLuint max_value;
// Check entire range succeeds.
@@ -173,11 +217,11 @@ TEST_F(BufferManagerTest, GetMaxValueForRangeUint16) {
const GLuint kServiceBufferId = 11;
const uint16 data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
const uint16 new_data[] = {100, 120, 110};
- manager_.CreateBufferInfo(kClientBufferId, kServiceBufferId);
- BufferManager::BufferInfo* info = manager_.GetBufferInfo(kClientBufferId);
+ manager_->CreateBufferInfo(kClientBufferId, kServiceBufferId);
+ BufferManager::BufferInfo* info = manager_->GetBufferInfo(kClientBufferId);
ASSERT_TRUE(info != NULL);
- manager_.SetTarget(info, GL_ELEMENT_ARRAY_BUFFER);
- manager_.SetInfo(info, sizeof(data), GL_STATIC_DRAW);
+ manager_->SetTarget(info, GL_ELEMENT_ARRAY_BUFFER);
+ manager_->SetInfo(info, sizeof(data), GL_STATIC_DRAW);
EXPECT_TRUE(info->SetRange(0, sizeof(data), data));
GLuint max_value;
// Check entire range succeeds.
@@ -205,11 +249,11 @@ TEST_F(BufferManagerTest, GetMaxValueForRangeUint32) {
const GLuint kServiceBufferId = 11;
const uint32 data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
const uint32 new_data[] = {100, 120, 110};
- manager_.CreateBufferInfo(kClientBufferId, kServiceBufferId);
- BufferManager::BufferInfo* info = manager_.GetBufferInfo(kClientBufferId);
+ manager_->CreateBufferInfo(kClientBufferId, kServiceBufferId);
+ BufferManager::BufferInfo* info = manager_->GetBufferInfo(kClientBufferId);
ASSERT_TRUE(info != NULL);
- manager_.SetTarget(info, GL_ELEMENT_ARRAY_BUFFER);
- manager_.SetInfo(info, sizeof(data), GL_STATIC_DRAW);
+ manager_->SetTarget(info, GL_ELEMENT_ARRAY_BUFFER);
+ manager_->SetInfo(info, sizeof(data), GL_STATIC_DRAW);
EXPECT_TRUE(info->SetRange(0, sizeof(data), data));
GLuint max_value;
// Check entire range succeeds.
@@ -238,14 +282,15 @@ TEST_F(BufferManagerTest, UseDeletedBuffer) {
const GLuint kClientBufferId = 1;
const GLuint kServiceBufferId = 11;
const uint32 data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
- manager_.CreateBufferInfo(kClientBufferId, kServiceBufferId);
- BufferManager::BufferInfo::Ref info = manager_.GetBufferInfo(kClientBufferId);
+ manager_->CreateBufferInfo(kClientBufferId, kServiceBufferId);
+ BufferManager::BufferInfo::Ref info =
+ manager_->GetBufferInfo(kClientBufferId);
ASSERT_TRUE(info != NULL);
- manager_.SetTarget(info, GL_ARRAY_BUFFER);
+ manager_->SetTarget(info, GL_ARRAY_BUFFER);
// Remove buffer
- manager_.RemoveBufferInfo(kClientBufferId);
+ manager_->RemoveBufferInfo(kClientBufferId);
// Use it after removing
- manager_.SetInfo(info, sizeof(data), GL_STATIC_DRAW);
+ manager_->SetInfo(info, sizeof(data), GL_STATIC_DRAW);
// Check that it gets deleted when the last reference is released.
EXPECT_CALL(*gl_, DeleteBuffersARB(1, ::testing::Pointee(kServiceBufferId)))
.Times(1)
diff --git a/gpu/command_buffer/service/renderbuffer_manager_unittest.cc b/gpu/command_buffer/service/renderbuffer_manager_unittest.cc
index b9d7287..dba97dc 100644
--- a/gpu/command_buffer/service/renderbuffer_manager_unittest.cc
+++ b/gpu/command_buffer/service/renderbuffer_manager_unittest.cc
@@ -5,91 +5,116 @@
#include "gpu/command_buffer/service/renderbuffer_manager.h"
#include <set>
+#include "gpu/command_buffer/common/gles2_cmd_utils.h"
+#include "gpu/command_buffer/service/mocks.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gl/gl_mock.h"
+using ::testing::StrictMock;
+
namespace gpu {
namespace gles2 {
-class RenderbufferManagerTest : public testing::Test {
+class RenderbufferManagerTestBase : public testing::Test {
public:
static const GLint kMaxSize = 128;
static const GLint kMaxSamples = 4;
- RenderbufferManagerTest()
- : manager_(NULL, kMaxSize, kMaxSamples) {
- }
- ~RenderbufferManagerTest() {
- manager_.Destroy(false);
- }
-
protected:
- virtual void SetUp() {
+ void SetUpBase(MemoryTracker* memory_tracker) {
gl_.reset(new ::testing::StrictMock<gfx::MockGLInterface>());
::gfx::GLInterface::SetGLInterface(gl_.get());
+ manager_.reset(new RenderbufferManager(
+ memory_tracker, kMaxSize, kMaxSamples));
}
virtual void TearDown() {
+ manager_->Destroy(true);
+ manager_.reset();
::gfx::GLInterface::SetGLInterface(NULL);
gl_.reset();
}
// Use StrictMock to make 100% sure we know how GL will be called.
scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_;
- RenderbufferManager manager_;
+ scoped_ptr<RenderbufferManager> manager_;
};
+class RenderbufferManagerTest : public RenderbufferManagerTestBase {
+ protected:
+ virtual void SetUp() {
+ SetUpBase(NULL);
+ }
+};
+
+class RenderbufferManagerMemoryTrackerTest
+ : public RenderbufferManagerTestBase {
+ protected:
+ virtual void SetUp() {
+ mock_memory_tracker_ = new StrictMock<MockMemoryTracker>();
+ SetUpBase(mock_memory_tracker_.get());
+ }
+
+ scoped_refptr<MockMemoryTracker> mock_memory_tracker_;
+};
+
+#define EXPECT_MEMORY_ALLOCATION_CHANGE(old_size, new_size, pool) \
+ EXPECT_CALL(*mock_memory_tracker_, \
+ TrackMemoryAllocatedChange(old_size, new_size, pool)) \
+ .Times(1) \
+ .RetiresOnSaturation() \
+
// GCC requires these declarations, but MSVC requires they not be present
#ifndef COMPILER_MSVC
-const GLint RenderbufferManagerTest::kMaxSize;
-const GLint RenderbufferManagerTest::kMaxSamples;
+const GLint RenderbufferManagerTestBase::kMaxSize;
+const GLint RenderbufferManagerTestBase::kMaxSamples;
#endif
TEST_F(RenderbufferManagerTest, Basic) {
const GLuint kClient1Id = 1;
const GLuint kService1Id = 11;
const GLuint kClient2Id = 2;
- EXPECT_EQ(kMaxSize, manager_.max_renderbuffer_size());
- EXPECT_EQ(kMaxSamples, manager_.max_samples());
- EXPECT_FALSE(manager_.HaveUnclearedRenderbuffers());
+ EXPECT_EQ(kMaxSize, manager_->max_renderbuffer_size());
+ EXPECT_EQ(kMaxSamples, manager_->max_samples());
+ EXPECT_FALSE(manager_->HaveUnclearedRenderbuffers());
// Check we can create renderbuffer.
- manager_.CreateRenderbufferInfo(kClient1Id, kService1Id);
+ manager_->CreateRenderbufferInfo(kClient1Id, kService1Id);
// Check renderbuffer got created.
RenderbufferManager::RenderbufferInfo* info1 =
- manager_.GetRenderbufferInfo(kClient1Id);
+ manager_->GetRenderbufferInfo(kClient1Id);
ASSERT_TRUE(info1 != NULL);
- EXPECT_FALSE(manager_.HaveUnclearedRenderbuffers());
+ EXPECT_FALSE(manager_->HaveUnclearedRenderbuffers());
GLuint client_id = 0;
- EXPECT_TRUE(manager_.GetClientId(info1->service_id(), &client_id));
+ EXPECT_TRUE(manager_->GetClientId(info1->service_id(), &client_id));
EXPECT_EQ(kClient1Id, client_id);
// Check we get nothing for a non-existent renderbuffer.
- EXPECT_TRUE(manager_.GetRenderbufferInfo(kClient2Id) == NULL);
+ EXPECT_TRUE(manager_->GetRenderbufferInfo(kClient2Id) == NULL);
// Check trying to a remove non-existent renderbuffers does not crash.
- manager_.RemoveRenderbufferInfo(kClient2Id);
+ manager_->RemoveRenderbufferInfo(kClient2Id);
// Check that the renderbuffer is deleted when the last ref is released.
EXPECT_CALL(*gl_, DeleteRenderbuffersEXT(1, ::testing::Pointee(kService1Id)))
.Times(1)
.RetiresOnSaturation();
// Check we can't get the renderbuffer after we remove it.
- manager_.RemoveRenderbufferInfo(kClient1Id);
- EXPECT_TRUE(manager_.GetRenderbufferInfo(kClient1Id) == NULL);
- EXPECT_FALSE(manager_.HaveUnclearedRenderbuffers());
+ manager_->RemoveRenderbufferInfo(kClient1Id);
+ EXPECT_TRUE(manager_->GetRenderbufferInfo(kClient1Id) == NULL);
+ EXPECT_FALSE(manager_->HaveUnclearedRenderbuffers());
}
TEST_F(RenderbufferManagerTest, Destroy) {
const GLuint kClient1Id = 1;
const GLuint kService1Id = 11;
// Check we can create renderbuffer.
- manager_.CreateRenderbufferInfo(kClient1Id, kService1Id);
+ manager_->CreateRenderbufferInfo(kClient1Id, kService1Id);
// Check renderbuffer got created.
RenderbufferManager::RenderbufferInfo* info1 =
- manager_.GetRenderbufferInfo(kClient1Id);
+ manager_->GetRenderbufferInfo(kClient1Id);
ASSERT_TRUE(info1 != NULL);
EXPECT_CALL(*gl_, DeleteRenderbuffersEXT(1, ::testing::Pointee(kService1Id)))
.Times(1)
.RetiresOnSaturation();
- manager_.Destroy(true);
- info1 = manager_.GetRenderbufferInfo(kClient1Id);
+ manager_->Destroy(true);
+ info1 = manager_->GetRenderbufferInfo(kClient1Id);
ASSERT_TRUE(info1 == NULL);
}
@@ -97,10 +122,10 @@ TEST_F(RenderbufferManagerTest, RenderbufferInfo) {
const GLuint kClient1Id = 1;
const GLuint kService1Id = 11;
// Check we can create renderbuffer.
- manager_.CreateRenderbufferInfo(kClient1Id, kService1Id);
+ manager_->CreateRenderbufferInfo(kClient1Id, kService1Id);
// Check renderbuffer got created.
RenderbufferManager::RenderbufferInfo* info1 =
- manager_.GetRenderbufferInfo(kClient1Id);
+ manager_->GetRenderbufferInfo(kClient1Id);
ASSERT_TRUE(info1 != NULL);
EXPECT_EQ(kService1Id, info1->service_id());
EXPECT_EQ(0, info1->samples());
@@ -115,50 +140,83 @@ TEST_F(RenderbufferManagerTest, RenderbufferInfo) {
const GLenum kFormat = GL_RGBA4;
const GLsizei kWidth = 128;
const GLsizei kHeight = 64;
- manager_.SetInfo(info1, kSamples, kFormat, kWidth, kHeight);
+ manager_->SetInfo(info1, kSamples, kFormat, kWidth, kHeight);
EXPECT_EQ(kSamples, info1->samples());
EXPECT_EQ(kFormat, info1->internal_format());
EXPECT_EQ(kWidth, info1->width());
EXPECT_EQ(kHeight, info1->height());
EXPECT_FALSE(info1->cleared());
EXPECT_FALSE(info1->IsDeleted());
- EXPECT_TRUE(manager_.HaveUnclearedRenderbuffers());
+ EXPECT_TRUE(manager_->HaveUnclearedRenderbuffers());
EXPECT_EQ(kWidth * kHeight * 4u * 2u, info1->EstimatedSize());
- manager_.SetCleared(info1, true);
+ manager_->SetCleared(info1, true);
EXPECT_TRUE(info1->cleared());
- EXPECT_FALSE(manager_.HaveUnclearedRenderbuffers());
+ EXPECT_FALSE(manager_->HaveUnclearedRenderbuffers());
- manager_.SetInfo(info1, kSamples, kFormat, kWidth, kHeight);
- EXPECT_TRUE(manager_.HaveUnclearedRenderbuffers());
+ manager_->SetInfo(info1, kSamples, kFormat, kWidth, kHeight);
+ EXPECT_TRUE(manager_->HaveUnclearedRenderbuffers());
// Check that the renderbuffer is deleted when the last ref is released.
EXPECT_CALL(*gl_, DeleteRenderbuffersEXT(1, ::testing::Pointee(kService1Id)))
.Times(1)
.RetiresOnSaturation();
- manager_.RemoveRenderbufferInfo(kClient1Id);
- EXPECT_FALSE(manager_.HaveUnclearedRenderbuffers());
+ manager_->RemoveRenderbufferInfo(kClient1Id);
+ EXPECT_FALSE(manager_->HaveUnclearedRenderbuffers());
+}
+
+TEST_F(RenderbufferManagerMemoryTrackerTest, Basic) {
+ const GLuint kClient1Id = 1;
+ const GLuint kService1Id = 11;
+ EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kUnmanaged);
+ manager_->CreateRenderbufferInfo(kClient1Id, kService1Id);
+ RenderbufferManager::RenderbufferInfo* info1 =
+ manager_->GetRenderbufferInfo(kClient1Id);
+ ASSERT_TRUE(info1 != NULL);
+
+ const GLsizei kSamples = 4;
+ const GLenum kFormat = GL_RGBA4;
+ const GLsizei kWidth = 128;
+ const GLsizei kHeight1 = 64;
+ const GLsizei kHeight2 = 32;
+ size_t expected_size_1 = kWidth * kHeight1 * kSamples *
+ GLES2Util::RenderbufferBytesPerPixel(kFormat);
+ size_t expected_size_2 = kWidth * kHeight2 * kSamples *
+ GLES2Util::RenderbufferBytesPerPixel(kFormat);
+ EXPECT_MEMORY_ALLOCATION_CHANGE(
+ 0, expected_size_1, MemoryTracker::kUnmanaged);
+ manager_->SetInfo(info1, kSamples, kFormat, kWidth, kHeight1);
+ EXPECT_MEMORY_ALLOCATION_CHANGE(
+ expected_size_1, 0, MemoryTracker::kUnmanaged);
+ EXPECT_MEMORY_ALLOCATION_CHANGE(
+ 0, expected_size_2, MemoryTracker::kUnmanaged);
+ manager_->SetInfo(info1, kSamples, kFormat, kWidth, kHeight2);
+ EXPECT_MEMORY_ALLOCATION_CHANGE(
+ expected_size_2, 0, MemoryTracker::kUnmanaged);
+ EXPECT_CALL(*gl_, DeleteRenderbuffersEXT(1, ::testing::Pointee(kService1Id)))
+ .Times(1)
+ .RetiresOnSaturation();
}
TEST_F(RenderbufferManagerTest, UseDeletedRenderbufferInfo) {
const GLuint kClient1Id = 1;
const GLuint kService1Id = 11;
- manager_.CreateRenderbufferInfo(kClient1Id, kService1Id);
+ manager_->CreateRenderbufferInfo(kClient1Id, kService1Id);
RenderbufferManager::RenderbufferInfo::Ref info1(
- manager_.GetRenderbufferInfo(kClient1Id));
+ manager_->GetRenderbufferInfo(kClient1Id));
ASSERT_TRUE(info1 != NULL);
// Remove it.
- manager_.RemoveRenderbufferInfo(kClient1Id);
+ manager_->RemoveRenderbufferInfo(kClient1Id);
// Use after removing.
const GLsizei kSamples = 4;
const GLenum kFormat = GL_RGBA4;
const GLsizei kWidth = 128;
const GLsizei kHeight = 64;
- manager_.SetInfo(info1, kSamples, kFormat, kWidth, kHeight);
+ manager_->SetInfo(info1, kSamples, kFormat, kWidth, kHeight);
// See that it still affects manager.
- EXPECT_TRUE(manager_.HaveUnclearedRenderbuffers());
- manager_.SetCleared(info1, true);
- EXPECT_FALSE(manager_.HaveUnclearedRenderbuffers());
+ EXPECT_TRUE(manager_->HaveUnclearedRenderbuffers());
+ manager_->SetCleared(info1, true);
+ EXPECT_FALSE(manager_->HaveUnclearedRenderbuffers());
// Check that the renderbuffer is deleted when the last ref is released.
EXPECT_CALL(*gl_, DeleteRenderbuffersEXT(1, ::testing::Pointee(kService1Id)))
.Times(1)
@@ -179,15 +237,15 @@ bool InSet(std::set<std::string>* string_set, const std::string& str) {
TEST_F(RenderbufferManagerTest, AddToSignature) {
const GLuint kClient1Id = 1;
const GLuint kService1Id = 11;
- manager_.CreateRenderbufferInfo(kClient1Id, kService1Id);
+ manager_->CreateRenderbufferInfo(kClient1Id, kService1Id);
RenderbufferManager::RenderbufferInfo::Ref info1(
- manager_.GetRenderbufferInfo(kClient1Id));
+ manager_->GetRenderbufferInfo(kClient1Id));
ASSERT_TRUE(info1 != NULL);
const GLsizei kSamples = 4;
const GLenum kFormat = GL_RGBA4;
const GLsizei kWidth = 128;
const GLsizei kHeight = 64;
- manager_.SetInfo(info1, kSamples, kFormat, kWidth, kHeight);
+ manager_->SetInfo(info1, kSamples, kFormat, kWidth, kHeight);
std::string signature1;
std::string signature2;
info1->AddToSignature(&signature1);
@@ -196,33 +254,37 @@ TEST_F(RenderbufferManagerTest, AddToSignature) {
EXPECT_FALSE(InSet(&string_set, signature1));
// change things and see that the signatures change.
- manager_.SetInfo(info1, kSamples + 1, kFormat, kWidth, kHeight);
+ manager_->SetInfo(info1, kSamples + 1, kFormat, kWidth, kHeight);
info1->AddToSignature(&signature2);
EXPECT_FALSE(InSet(&string_set, signature2));
- manager_.SetInfo(info1, kSamples, kFormat + 1, kWidth, kHeight);
+ manager_->SetInfo(info1, kSamples, kFormat + 1, kWidth, kHeight);
signature2.clear();
info1->AddToSignature(&signature2);
EXPECT_FALSE(InSet(&string_set, signature2));
- manager_.SetInfo(info1, kSamples, kFormat, kWidth + 1, kHeight);
+ manager_->SetInfo(info1, kSamples, kFormat, kWidth + 1, kHeight);
signature2.clear();
info1->AddToSignature(&signature2);
EXPECT_FALSE(InSet(&string_set, signature2));
- manager_.SetInfo(info1, kSamples, kFormat, kWidth, kHeight + 1);
+ manager_->SetInfo(info1, kSamples, kFormat, kWidth, kHeight + 1);
signature2.clear();
info1->AddToSignature(&signature2);
EXPECT_FALSE(InSet(&string_set, signature2));
// put it back to the same and it should be the same.
- manager_.SetInfo(info1, kSamples, kFormat, kWidth, kHeight);
+ manager_->SetInfo(info1, kSamples, kFormat, kWidth, kHeight);
signature2.clear();
info1->AddToSignature(&signature2);
EXPECT_EQ(signature1, signature2);
// Check the set was acutally getting different signatures.
EXPECT_EQ(5u, string_set.size());
+
+ EXPECT_CALL(*gl_, DeleteRenderbuffersEXT(1, ::testing::Pointee(kService1Id)))
+ .Times(1)
+ .RetiresOnSaturation();
}
} // namespace gles2