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.
5 #include "gpu/command_buffer/service/transfer_buffer_manager.h"
7 #include "base/memory/scoped_ptr.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9 #include "testing/gmock/include/gmock/gmock.h"
11 using base::SharedMemory;
15 const static size_t kBufferSize = 1024;
17 class TransferBufferManagerTest : public testing::Test {
19 virtual void SetUp() {
20 for (size_t i = 0; i < arraysize(buffers_); ++i) {
21 buffers_[i].CreateAnonymous(kBufferSize);
22 buffers_[i].Map(kBufferSize);
25 TransferBufferManager* manager = new TransferBufferManager();
26 transfer_buffer_manager_.reset(manager);
27 ASSERT_TRUE(manager->Initialize());
30 base::SharedMemory buffers_[3];
31 scoped_ptr<TransferBufferManagerInterface> transfer_buffer_manager_;
34 TEST_F(TransferBufferManagerTest, ZeroHandleMapsToNull) {
35 EXPECT_TRUE(NULL == transfer_buffer_manager_->GetTransferBuffer(0).ptr);
38 TEST_F(TransferBufferManagerTest, NegativeHandleMapsToNull) {
39 EXPECT_TRUE(NULL == transfer_buffer_manager_->GetTransferBuffer(-1).ptr);
42 TEST_F(TransferBufferManagerTest, OutOfRangeHandleMapsToNull) {
43 EXPECT_TRUE(NULL == transfer_buffer_manager_->GetTransferBuffer(1).ptr);
46 TEST_F(TransferBufferManagerTest, CanRegisterTransferBuffer) {
47 EXPECT_TRUE(transfer_buffer_manager_->RegisterTransferBuffer(1,
50 Buffer registered = transfer_buffer_manager_->GetTransferBuffer(1);
52 // Distinct memory range and shared memory handle from that originally
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);
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));
65 TEST_F(TransferBufferManagerTest, CanDestroyTransferBuffer) {
66 EXPECT_TRUE(transfer_buffer_manager_->RegisterTransferBuffer(1,
69 transfer_buffer_manager_->DestroyTransferBuffer(1);
70 Buffer registered = transfer_buffer_manager_->GetTransferBuffer(1);
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);
77 TEST_F(TransferBufferManagerTest, CannotRegregisterTransferBufferId) {
78 EXPECT_TRUE(transfer_buffer_manager_->RegisterTransferBuffer(1,
81 EXPECT_FALSE(transfer_buffer_manager_->RegisterTransferBuffer(1,
84 EXPECT_FALSE(transfer_buffer_manager_->RegisterTransferBuffer(1,
89 TEST_F(TransferBufferManagerTest, CanReuseTransferBufferIdAfterDestroying) {
90 EXPECT_TRUE(transfer_buffer_manager_->RegisterTransferBuffer(1,
93 transfer_buffer_manager_->DestroyTransferBuffer(1);
94 EXPECT_TRUE(transfer_buffer_manager_->RegisterTransferBuffer(1,
99 TEST_F(TransferBufferManagerTest, DestroyUnusedTransferBufferIdDoesNotCrash) {
100 transfer_buffer_manager_->DestroyTransferBuffer(1);
103 TEST_F(TransferBufferManagerTest, CannotRegisterNullTransferBuffer) {
104 EXPECT_FALSE(transfer_buffer_manager_->RegisterTransferBuffer(0,
109 TEST_F(TransferBufferManagerTest, CannotRegisterNegativeTransferBufferId) {
110 EXPECT_FALSE(transfer_buffer_manager_->RegisterTransferBuffer(-1,