1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "gpu/command_buffer/service/transfer_buffer_manager.h" 6 7#include "base/memory/scoped_ptr.h" 8#include "testing/gtest/include/gtest/gtest.h" 9#include "testing/gmock/include/gmock/gmock.h" 10 11using base::SharedMemory; 12 13namespace gpu { 14 15const static size_t kBufferSize = 1024; 16 17class TransferBufferManagerTest : public testing::Test { 18 protected: 19 virtual void SetUp() { 20 for (size_t i = 0; i < arraysize(buffers_); ++i) { 21 buffers_[i].CreateAnonymous(kBufferSize); 22 buffers_[i].Map(kBufferSize); 23 } 24 25 TransferBufferManager* manager = new TransferBufferManager(); 26 transfer_buffer_manager_.reset(manager); 27 ASSERT_TRUE(manager->Initialize()); 28 } 29 30 base::SharedMemory buffers_[3]; 31 scoped_ptr<TransferBufferManagerInterface> transfer_buffer_manager_; 32}; 33 34TEST_F(TransferBufferManagerTest, ZeroHandleMapsToNull) { 35 EXPECT_TRUE(NULL == transfer_buffer_manager_->GetTransferBuffer(0).ptr); 36} 37 38TEST_F(TransferBufferManagerTest, NegativeHandleMapsToNull) { 39 EXPECT_TRUE(NULL == transfer_buffer_manager_->GetTransferBuffer(-1).ptr); 40} 41 42TEST_F(TransferBufferManagerTest, OutOfRangeHandleMapsToNull) { 43 EXPECT_TRUE(NULL == transfer_buffer_manager_->GetTransferBuffer(1).ptr); 44} 45 46TEST_F(TransferBufferManagerTest, CanRegisterTransferBuffer) { 47 EXPECT_TRUE(transfer_buffer_manager_->RegisterTransferBuffer(1, 48 &buffers_[0], 49 kBufferSize)); 50 Buffer registered = transfer_buffer_manager_->GetTransferBuffer(1); 51 52 // Distinct memory range and shared memory handle from that originally 53 // registered. 54 EXPECT_NE(static_cast<void*>(NULL), registered.ptr); 55 EXPECT_NE(buffers_[0].memory(), registered.ptr); 56 EXPECT_EQ(kBufferSize, registered.size); 57 EXPECT_NE(&buffers_[0], registered.shared_memory); 58 59 // But maps to the same physical memory. 60 *static_cast<int*>(registered.ptr) = 7; 61 *static_cast<int*>(buffers_[0].memory()) = 8; 62 EXPECT_EQ(8, *static_cast<int*>(registered.ptr)); 63} 64 65TEST_F(TransferBufferManagerTest, CanDestroyTransferBuffer) { 66 EXPECT_TRUE(transfer_buffer_manager_->RegisterTransferBuffer(1, 67 &buffers_[0], 68 kBufferSize)); 69 transfer_buffer_manager_->DestroyTransferBuffer(1); 70 Buffer registered = transfer_buffer_manager_->GetTransferBuffer(1); 71 72 EXPECT_EQ(static_cast<void*>(NULL), registered.ptr); 73 EXPECT_EQ(0U, registered.size); 74 EXPECT_EQ(static_cast<base::SharedMemory*>(NULL), registered.shared_memory); 75} 76 77TEST_F(TransferBufferManagerTest, CannotRegregisterTransferBufferId) { 78 EXPECT_TRUE(transfer_buffer_manager_->RegisterTransferBuffer(1, 79 &buffers_[0], 80 kBufferSize)); 81 EXPECT_FALSE(transfer_buffer_manager_->RegisterTransferBuffer(1, 82 &buffers_[0], 83 kBufferSize)); 84 EXPECT_FALSE(transfer_buffer_manager_->RegisterTransferBuffer(1, 85 &buffers_[1], 86 kBufferSize)); 87} 88 89TEST_F(TransferBufferManagerTest, CanReuseTransferBufferIdAfterDestroying) { 90 EXPECT_TRUE(transfer_buffer_manager_->RegisterTransferBuffer(1, 91 &buffers_[0], 92 kBufferSize)); 93 transfer_buffer_manager_->DestroyTransferBuffer(1); 94 EXPECT_TRUE(transfer_buffer_manager_->RegisterTransferBuffer(1, 95 &buffers_[1], 96 kBufferSize)); 97} 98 99TEST_F(TransferBufferManagerTest, DestroyUnusedTransferBufferIdDoesNotCrash) { 100 transfer_buffer_manager_->DestroyTransferBuffer(1); 101} 102 103TEST_F(TransferBufferManagerTest, CannotRegisterNullTransferBuffer) { 104 EXPECT_FALSE(transfer_buffer_manager_->RegisterTransferBuffer(0, 105 &buffers_[0], 106 kBufferSize)); 107} 108 109TEST_F(TransferBufferManagerTest, CannotRegisterNegativeTransferBufferId) { 110 EXPECT_FALSE(transfer_buffer_manager_->RegisterTransferBuffer(-1, 111 &buffers_[0], 112 kBufferSize)); 113} 114 115} // namespace gpu 116