blob: 029cb0e86a051386c40dbc1caca312d710a345fa [file]
// 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.
#include "gpu/command_buffer/service/transfer_buffer_manager.h"
#include "base/memory/scoped_ptr.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/gmock/include/gmock/gmock.h"
using base::SharedMemory;
namespace gpu {
class TransferBufferManagerTest : public testing::Test {
protected:
virtual void SetUp() {
TransferBufferManager* manager = new TransferBufferManager();
transfer_buffer_manager_.reset(manager);
manager->Initialize();
}
scoped_ptr<TransferBufferManagerInterface> transfer_buffer_manager_;
};
TEST_F(TransferBufferManagerTest, ZeroHandleMapsToNull) {
EXPECT_TRUE(NULL == transfer_buffer_manager_->GetTransferBuffer(0).ptr);
}
TEST_F(TransferBufferManagerTest, NegativeHandleMapsToNull) {
EXPECT_TRUE(NULL == transfer_buffer_manager_->GetTransferBuffer(-1).ptr);
}
TEST_F(TransferBufferManagerTest, OutOfRangeHandleMapsToNull) {
EXPECT_TRUE(NULL == transfer_buffer_manager_->GetTransferBuffer(1).ptr);
}
TEST_F(TransferBufferManagerTest, CanCreateTransferBuffers) {
int32 handle = transfer_buffer_manager_->CreateTransferBuffer(1024, -1);
EXPECT_EQ(1, handle);
Buffer buffer = transfer_buffer_manager_->GetTransferBuffer(handle);
ASSERT_TRUE(NULL != buffer.ptr);
EXPECT_EQ(1024u, buffer.size);
}
TEST_F(TransferBufferManagerTest, CreateTransferBufferReturnsDistinctHandles) {
EXPECT_EQ(1, transfer_buffer_manager_->CreateTransferBuffer(1024, -1));
}
TEST_F(TransferBufferManagerTest,
CreateTransferBufferReusesUnregisteredHandles) {
EXPECT_EQ(1, transfer_buffer_manager_->CreateTransferBuffer(1024, -1));
EXPECT_EQ(2, transfer_buffer_manager_->CreateTransferBuffer(1024, -1));
transfer_buffer_manager_->DestroyTransferBuffer(1);
EXPECT_EQ(1, transfer_buffer_manager_->CreateTransferBuffer(1024, -1));
EXPECT_EQ(3, transfer_buffer_manager_->CreateTransferBuffer(1024, -1));
}
TEST_F(TransferBufferManagerTest, CannotUnregisterHandleZero) {
transfer_buffer_manager_->DestroyTransferBuffer(0);
EXPECT_TRUE(NULL == transfer_buffer_manager_->GetTransferBuffer(0).ptr);
EXPECT_EQ(1, transfer_buffer_manager_->CreateTransferBuffer(1024, -1));
}
TEST_F(TransferBufferManagerTest, CannotUnregisterNegativeHandles) {
transfer_buffer_manager_->DestroyTransferBuffer(-1);
EXPECT_EQ(1, transfer_buffer_manager_->CreateTransferBuffer(1024, -1));
}
TEST_F(TransferBufferManagerTest, CannotUnregisterUnregisteredHandles) {
transfer_buffer_manager_->DestroyTransferBuffer(1);
EXPECT_EQ(1, transfer_buffer_manager_->CreateTransferBuffer(1024, -1));
}
// Testing this case specifically because there is an optimization that takes
// a different code path in this case.
TEST_F(TransferBufferManagerTest, UnregistersLastRegisteredHandle) {
EXPECT_EQ(1, transfer_buffer_manager_->CreateTransferBuffer(1024, -1));
transfer_buffer_manager_->DestroyTransferBuffer(1);
EXPECT_EQ(1, transfer_buffer_manager_->CreateTransferBuffer(1024, -1));
}
// Testing this case specifically because there is an optimization that takes
// a different code path in this case.
TEST_F(TransferBufferManagerTest, UnregistersTwoLastRegisteredHandles) {
EXPECT_EQ(1, transfer_buffer_manager_->CreateTransferBuffer(1024, -1));
EXPECT_EQ(2, transfer_buffer_manager_->CreateTransferBuffer(1024, -1));
transfer_buffer_manager_->DestroyTransferBuffer(2);
transfer_buffer_manager_->DestroyTransferBuffer(1);
EXPECT_EQ(1, transfer_buffer_manager_->CreateTransferBuffer(1024, -1));
}
} // namespace gpu