diff options
Diffstat (limited to 'gpu/command_buffer/client/transfer_buffer_unittest.cc')
-rw-r--r-- | gpu/command_buffer/client/transfer_buffer_unittest.cc | 434 |
1 files changed, 0 insertions, 434 deletions
diff --git a/gpu/command_buffer/client/transfer_buffer_unittest.cc b/gpu/command_buffer/client/transfer_buffer_unittest.cc deleted file mode 100644 index 26b2057..0000000 --- a/gpu/command_buffer/client/transfer_buffer_unittest.cc +++ /dev/null @@ -1,434 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Tests for the Command Buffer Helper. - -#include "gpu/command_buffer/client/transfer_buffer.h" - -#include "gpu/command_buffer/client/client_test_helper.h" -#include "gpu/command_buffer/client/cmd_buffer_helper.h" -#include "gpu/command_buffer/common/command_buffer.h" -#include "gpu/command_buffer/common/compiler_specific.h" -#include "testing/gtest/include/gtest/gtest.h" -#include "testing/gmock/include/gmock/gmock.h" - -using ::testing::_; -using ::testing::Invoke; -using ::testing::Return; -using ::testing::StrictMock; - -namespace gpu { - -class TransferBufferTest : public testing::Test { - protected: - static const int32 kNumCommandEntries = 400; - static const int32 kCommandBufferSizeBytes = - kNumCommandEntries * sizeof(CommandBufferEntry); - static const unsigned int kStartingOffset = 64; - static const unsigned int kAlignment = 4; - static const size_t kTransferBufferSize = 256; - - TransferBufferTest() - : transfer_buffer_id_(0) { - } - - virtual void SetUp() OVERRIDE; - virtual void TearDown() OVERRIDE; - - MockClientCommandBuffer* command_buffer() const { - return command_buffer_.get(); - } - - scoped_ptr<MockClientCommandBuffer> command_buffer_; - scoped_ptr<CommandBufferHelper> helper_; - scoped_ptr<TransferBuffer> transfer_buffer_; - int32 transfer_buffer_id_; -}; - -void TransferBufferTest::SetUp() { - command_buffer_.reset(new StrictMock<MockClientCommandBuffer>()); - ASSERT_TRUE(command_buffer_->Initialize()); - - helper_.reset(new CommandBufferHelper(command_buffer())); - ASSERT_TRUE(helper_->Initialize(kCommandBufferSizeBytes)); - - transfer_buffer_id_ = command_buffer()->GetNextFreeTransferBufferId(); - - transfer_buffer_.reset(new TransferBuffer(helper_.get())); - ASSERT_TRUE(transfer_buffer_->Initialize( - kTransferBufferSize, - kStartingOffset, - kTransferBufferSize, - kTransferBufferSize, - kAlignment)); -} - -void TransferBufferTest::TearDown() { - if (transfer_buffer_->HaveBuffer()) { - EXPECT_CALL(*command_buffer(), OnFlush()) - .Times(1) - .RetiresOnSaturation(); - EXPECT_CALL(*command_buffer(), DestroyTransferBuffer(_)) - .Times(1) - .RetiresOnSaturation(); - } - transfer_buffer_.reset(); -} - -// GCC requires these declarations, but MSVC requires they not be present -#ifndef _MSC_VER -const int32 TransferBufferTest::kNumCommandEntries; -const int32 TransferBufferTest::kCommandBufferSizeBytes; -const unsigned int TransferBufferTest::kStartingOffset; -const unsigned int TransferBufferTest::kAlignment; -const size_t TransferBufferTest::kTransferBufferSize; -#endif - -TEST_F(TransferBufferTest, Basic) { - EXPECT_TRUE(transfer_buffer_->HaveBuffer()); - EXPECT_EQ(transfer_buffer_id_, transfer_buffer_->GetShmId()); - EXPECT_EQ( - kTransferBufferSize - kStartingOffset, - transfer_buffer_->GetCurrentMaxAllocationWithoutRealloc()); -} - -TEST_F(TransferBufferTest, Free) { - EXPECT_TRUE(transfer_buffer_->HaveBuffer()); - EXPECT_EQ(transfer_buffer_id_, transfer_buffer_->GetShmId()); - - // Free buffer. - EXPECT_CALL(*command_buffer(), OnFlush()) - .Times(1) - .RetiresOnSaturation(); - EXPECT_CALL(*command_buffer(), DestroyTransferBuffer(_)) - .Times(1) - .RetiresOnSaturation(); - transfer_buffer_->Free(); - // See it's freed. - EXPECT_FALSE(transfer_buffer_->HaveBuffer()); - // See that it gets reallocated. - EXPECT_EQ(transfer_buffer_id_, transfer_buffer_->GetShmId()); - EXPECT_TRUE(transfer_buffer_->HaveBuffer()); - - // Free buffer. - EXPECT_CALL(*command_buffer(), OnFlush()) - .Times(1) - .RetiresOnSaturation(); - EXPECT_CALL(*command_buffer(), DestroyTransferBuffer(_)) - .Times(1) - .RetiresOnSaturation(); - transfer_buffer_->Free(); - // See it's freed. - EXPECT_FALSE(transfer_buffer_->HaveBuffer()); - // See that it gets reallocated. - EXPECT_TRUE(transfer_buffer_->GetResultBuffer() != NULL); - EXPECT_TRUE(transfer_buffer_->HaveBuffer()); - - // Free buffer. - EXPECT_CALL(*command_buffer(), OnFlush()) - .Times(1) - .RetiresOnSaturation(); - EXPECT_CALL(*command_buffer(), DestroyTransferBuffer(_)) - .Times(1) - .RetiresOnSaturation(); - transfer_buffer_->Free(); - // See it's freed. - EXPECT_FALSE(transfer_buffer_->HaveBuffer()); - // See that it gets reallocated. - unsigned int size = 0; - void* data = transfer_buffer_->AllocUpTo(1, &size); - EXPECT_TRUE(data != NULL); - EXPECT_TRUE(transfer_buffer_->HaveBuffer()); - transfer_buffer_->FreePendingToken(data, 1); - - // Free buffer. - EXPECT_CALL(*command_buffer(), OnFlush()) - .Times(1) - .RetiresOnSaturation(); - EXPECT_CALL(*command_buffer(), DestroyTransferBuffer(_)) - .Times(1) - .RetiresOnSaturation(); - transfer_buffer_->Free(); - // See it's freed. - EXPECT_FALSE(transfer_buffer_->HaveBuffer()); - // See that it gets reallocated. - transfer_buffer_->GetResultOffset(); - EXPECT_TRUE(transfer_buffer_->HaveBuffer()); - - EXPECT_EQ( - kTransferBufferSize - kStartingOffset, - transfer_buffer_->GetCurrentMaxAllocationWithoutRealloc()); - - // Test freeing twice. - EXPECT_CALL(*command_buffer(), OnFlush()) - .Times(1) - .RetiresOnSaturation(); - EXPECT_CALL(*command_buffer(), DestroyTransferBuffer(_)) - .Times(1) - .RetiresOnSaturation(); - transfer_buffer_->Free(); - transfer_buffer_->Free(); -} - -TEST_F(TransferBufferTest, TooLargeAllocation) { - // Check that we can't allocate large than max size. - void* ptr = transfer_buffer_->Alloc(kTransferBufferSize + 1); - EXPECT_TRUE(ptr == NULL); - // Check we if we try to allocate larger than max we get max. - unsigned int size_allocated = 0; - ptr = transfer_buffer_->AllocUpTo( - kTransferBufferSize + 1, &size_allocated); - ASSERT_TRUE(ptr != NULL); - EXPECT_EQ(kTransferBufferSize - kStartingOffset, size_allocated); - transfer_buffer_->FreePendingToken(ptr, 1); -} - -class MockClientCommandBufferCanFail : public MockClientCommandBuffer { - public: - MockClientCommandBufferCanFail() { - } - virtual ~MockClientCommandBufferCanFail() { - } - - MOCK_METHOD2(CreateTransferBuffer, int32(size_t size, int32 id_request)); - - int32 RealCreateTransferBuffer(size_t size, int32 id_request) { - return MockCommandBufferBase::CreateTransferBuffer(size, id_request); - } -}; - -class TransferBufferExpandContractTest : public testing::Test { - protected: - static const int32 kNumCommandEntries = 400; - static const int32 kCommandBufferSizeBytes = - kNumCommandEntries * sizeof(CommandBufferEntry); - static const unsigned int kStartingOffset = 64; - static const unsigned int kAlignment = 4; - static const size_t kStartTransferBufferSize = 256; - static const size_t kMaxTransferBufferSize = 1024; - static const size_t kMinTransferBufferSize = 128; - - TransferBufferExpandContractTest() - : transfer_buffer_id_(0) { - } - - virtual void SetUp() OVERRIDE; - virtual void TearDown() OVERRIDE; - - MockClientCommandBufferCanFail* command_buffer() const { - return command_buffer_.get(); - } - - scoped_ptr<MockClientCommandBufferCanFail> command_buffer_; - scoped_ptr<CommandBufferHelper> helper_; - scoped_ptr<TransferBuffer> transfer_buffer_; - int32 transfer_buffer_id_; -}; - -void TransferBufferExpandContractTest::SetUp() { - command_buffer_.reset(new StrictMock<MockClientCommandBufferCanFail>()); - ASSERT_TRUE(command_buffer_->Initialize()); - - EXPECT_CALL(*command_buffer(), - CreateTransferBuffer(kCommandBufferSizeBytes, _)) - .WillOnce(Invoke( - command_buffer(), - &MockClientCommandBufferCanFail::RealCreateTransferBuffer)) - .RetiresOnSaturation(); - - helper_.reset(new CommandBufferHelper(command_buffer())); - ASSERT_TRUE(helper_->Initialize(kCommandBufferSizeBytes)); - - transfer_buffer_id_ = command_buffer()->GetNextFreeTransferBufferId(); - - EXPECT_CALL(*command_buffer(), - CreateTransferBuffer(kStartTransferBufferSize, _)) - .WillOnce(Invoke( - command_buffer(), - &MockClientCommandBufferCanFail::RealCreateTransferBuffer)) - .RetiresOnSaturation(); - - transfer_buffer_.reset(new TransferBuffer(helper_.get())); - ASSERT_TRUE(transfer_buffer_->Initialize( - kStartTransferBufferSize, - kStartingOffset, - kMinTransferBufferSize, - kMaxTransferBufferSize, - kAlignment)); -} - -void TransferBufferExpandContractTest::TearDown() { - if (transfer_buffer_->HaveBuffer()) { - EXPECT_CALL(*command_buffer(), OnFlush()) - .Times(1) - .RetiresOnSaturation(); - EXPECT_CALL(*command_buffer(), DestroyTransferBuffer(_)) - .Times(1) - .RetiresOnSaturation(); - } - transfer_buffer_.reset(); -} - -// GCC requires these declarations, but MSVC requires they not be present -#ifndef _MSC_VER -const int32 TransferBufferExpandContractTest::kNumCommandEntries; -const int32 TransferBufferExpandContractTest::kCommandBufferSizeBytes; -const unsigned int TransferBufferExpandContractTest::kStartingOffset; -const unsigned int TransferBufferExpandContractTest::kAlignment; -const size_t TransferBufferExpandContractTest::kStartTransferBufferSize; -const size_t TransferBufferExpandContractTest::kMaxTransferBufferSize; -const size_t TransferBufferExpandContractTest::kMinTransferBufferSize; -#endif - -TEST_F(TransferBufferExpandContractTest, Expand) { - // Check it starts at starting size. - EXPECT_EQ( - kStartTransferBufferSize - kStartingOffset, - transfer_buffer_->GetCurrentMaxAllocationWithoutRealloc()); - - EXPECT_CALL(*command_buffer(), OnFlush()) - .Times(1) - .RetiresOnSaturation(); - EXPECT_CALL(*command_buffer(), DestroyTransferBuffer(_)) - .Times(1) - .RetiresOnSaturation(); - EXPECT_CALL(*command_buffer(), - CreateTransferBuffer(kStartTransferBufferSize * 2, _)) - .WillOnce(Invoke( - command_buffer(), - &MockClientCommandBufferCanFail::RealCreateTransferBuffer)) - .RetiresOnSaturation(); - - // Try next power of 2. - const size_t kSize1 = 512 - kStartingOffset; - unsigned int size_allocated = 0; - void* ptr = transfer_buffer_->AllocUpTo(kSize1, &size_allocated); - ASSERT_TRUE(ptr != NULL); - EXPECT_EQ(kSize1, size_allocated); - EXPECT_EQ(kSize1, transfer_buffer_->GetCurrentMaxAllocationWithoutRealloc()); - transfer_buffer_->FreePendingToken(ptr, 1); - - EXPECT_CALL(*command_buffer(), OnFlush()) - .Times(1) - .RetiresOnSaturation(); - EXPECT_CALL(*command_buffer(), DestroyTransferBuffer(_)) - .Times(1) - .RetiresOnSaturation(); - EXPECT_CALL(*command_buffer(), - CreateTransferBuffer(kMaxTransferBufferSize, _)) - .WillOnce(Invoke( - command_buffer(), - &MockClientCommandBufferCanFail::RealCreateTransferBuffer)) - .RetiresOnSaturation(); - - // Try next power of 2. - const size_t kSize2 = 1024 - kStartingOffset; - ptr = transfer_buffer_->AllocUpTo(kSize2, &size_allocated); - ASSERT_TRUE(ptr != NULL); - EXPECT_EQ(kSize2, size_allocated); - EXPECT_EQ(kSize2, transfer_buffer_->GetCurrentMaxAllocationWithoutRealloc()); - transfer_buffer_->FreePendingToken(ptr, 1); - - // Try next one more. Should not go past max. - size_allocated = 0; - const size_t kSize3 = kSize2 + 1; - ptr = transfer_buffer_->AllocUpTo(kSize3, &size_allocated); - EXPECT_EQ(kSize2, size_allocated); - EXPECT_EQ(kSize2, transfer_buffer_->GetCurrentMaxAllocationWithoutRealloc()); - transfer_buffer_->FreePendingToken(ptr, 1); -} - -TEST_F(TransferBufferExpandContractTest, Contract) { - // Check it starts at starting size. - EXPECT_EQ( - kStartTransferBufferSize - kStartingOffset, - transfer_buffer_->GetCurrentMaxAllocationWithoutRealloc()); - - // Free buffer. - EXPECT_CALL(*command_buffer(), OnFlush()) - .Times(1) - .RetiresOnSaturation(); - EXPECT_CALL(*command_buffer(), DestroyTransferBuffer(_)) - .Times(1) - .RetiresOnSaturation(); - transfer_buffer_->Free(); - // See it's freed. - EXPECT_FALSE(transfer_buffer_->HaveBuffer()); - - // Try to allocate again, fail first request - EXPECT_CALL(*command_buffer(), - CreateTransferBuffer(kStartTransferBufferSize, _)) - .WillOnce(Return(-1)) - .RetiresOnSaturation(); - EXPECT_CALL(*command_buffer(), - CreateTransferBuffer(kMinTransferBufferSize, _)) - .WillOnce(Invoke( - command_buffer(), - &MockClientCommandBufferCanFail::RealCreateTransferBuffer)) - .RetiresOnSaturation(); - - const size_t kSize1 = 256 - kStartingOffset; - const size_t kSize2 = 128 - kStartingOffset; - unsigned int size_allocated = 0; - void* ptr = transfer_buffer_->AllocUpTo(kSize1, &size_allocated); - ASSERT_TRUE(ptr != NULL); - EXPECT_EQ(kSize2, size_allocated); - EXPECT_EQ(kSize2, transfer_buffer_->GetCurrentMaxAllocationWithoutRealloc()); - transfer_buffer_->FreePendingToken(ptr, 1); - - // Free buffer. - EXPECT_CALL(*command_buffer(), OnFlush()) - .Times(1) - .RetiresOnSaturation(); - EXPECT_CALL(*command_buffer(), DestroyTransferBuffer(_)) - .Times(1) - .RetiresOnSaturation(); - transfer_buffer_->Free(); - // See it's freed. - EXPECT_FALSE(transfer_buffer_->HaveBuffer()); - - // Try to allocate again, - EXPECT_CALL(*command_buffer(), - CreateTransferBuffer(kMinTransferBufferSize, _)) - .WillOnce(Invoke( - command_buffer(), - &MockClientCommandBufferCanFail::RealCreateTransferBuffer)) - .RetiresOnSaturation(); - - ptr = transfer_buffer_->AllocUpTo(kSize1, &size_allocated); - ASSERT_TRUE(ptr != NULL); - EXPECT_EQ(kSize2, size_allocated); - EXPECT_EQ(kSize2, transfer_buffer_->GetCurrentMaxAllocationWithoutRealloc()); - transfer_buffer_->FreePendingToken(ptr, 1); -} - -TEST_F(TransferBufferExpandContractTest, OutOfMemory) { - // Free buffer. - EXPECT_CALL(*command_buffer(), OnFlush()) - .Times(1) - .RetiresOnSaturation(); - EXPECT_CALL(*command_buffer(), DestroyTransferBuffer(_)) - .Times(1) - .RetiresOnSaturation(); - transfer_buffer_->Free(); - // See it's freed. - EXPECT_FALSE(transfer_buffer_->HaveBuffer()); - - // Try to allocate again, fail both requests. - EXPECT_CALL(*command_buffer(), CreateTransferBuffer(_, _)) - .WillOnce(Return(-1)) - .WillOnce(Return(-1)) - .WillOnce(Return(-1)) - .RetiresOnSaturation(); - - const size_t kSize1 = 512 - kStartingOffset; - unsigned int size_allocated = 0; - void* ptr = transfer_buffer_->AllocUpTo(kSize1, &size_allocated); - ASSERT_TRUE(ptr == NULL); - EXPECT_FALSE(transfer_buffer_->HaveBuffer()); -} - -} // namespace gpu - - |