// 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 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