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 // Tests for GLES2Implementation. 6 7 #include "gpu/command_buffer/client/client_test_helper.h" 8 9 #include "gpu/command_buffer/common/command_buffer.h" 10 #include "gpu/command_buffer/client/cmd_buffer_helper.h" 11 #include "testing/gmock/include/gmock/gmock.h" 12 13 using ::testing::_; 14 using ::testing::Invoke; 15 16 namespace gpu { 17 18 MockCommandBufferBase::~MockCommandBufferBase() { 19 } 20 21 bool MockCommandBufferBase::Initialize() { 22 return true; 23 } 24 25 CommandBuffer::State MockCommandBufferBase::GetState() { 26 return state_; 27 } 28 29 CommandBuffer::State MockCommandBufferBase::GetLastState() { 30 return state_; 31 } 32 33 int32 MockCommandBufferBase::GetLastToken() { 34 return state_.token; 35 } 36 37 void MockCommandBufferBase::SetGetOffset(int32 get_offset) { 38 state_.get_offset = get_offset; 39 } 40 41 CommandBuffer::State MockCommandBufferBase::FlushSync( 42 int32 put_offset, int32 last_known_get) { 43 state_.put_offset = put_offset; 44 state_.get_offset = put_offset; 45 OnFlush(); 46 return state_; 47 } 48 49 void MockCommandBufferBase::SetGetBuffer(int transfer_buffer_id) { 50 ring_buffer_buffer_ = GetTransferBuffer(transfer_buffer_id); 51 ring_buffer_ = static_cast<CommandBufferEntry*>(ring_buffer_buffer_.ptr); 52 state_.num_entries = ring_buffer_buffer_.size / sizeof(ring_buffer_[0]); 53 state_.token = 10000; // All token checks in the tests should pass. 54 } 55 56 // Get's the Id of the next transfer buffer that will be returned 57 // by CreateTransferBuffer. This is useful for testing expected ids. 58 int32 MockCommandBufferBase::GetNextFreeTransferBufferId() { 59 for (size_t ii = 0; ii < arraysize(transfer_buffers_); ++ii) { 60 if (!transfer_buffers_[ii].get()) { 61 return kTransferBufferBaseId + ii; 62 } 63 } 64 return -1; 65 } 66 67 Buffer MockCommandBufferBase::CreateTransferBuffer(size_t size, int32* id) { 68 *id = GetNextFreeTransferBufferId(); 69 if (*id >= 0) { 70 int32 ndx = *id - kTransferBufferBaseId; 71 transfer_buffers_[ndx].reset(new int8[size]); 72 transfer_buffer_buffers_[ndx].ptr = transfer_buffers_[ndx].get(); 73 transfer_buffer_buffers_[ndx].size = size; 74 } 75 return GetTransferBuffer(*id); 76 } 77 78 void MockCommandBufferBase::DestroyTransferBufferHelper(int32 id) { 79 GPU_DCHECK_GE(id, kTransferBufferBaseId); 80 GPU_DCHECK_LT(id, kTransferBufferBaseId + kMaxTransferBuffers); 81 id -= kTransferBufferBaseId; 82 transfer_buffers_[id].reset(); 83 transfer_buffer_buffers_[id] = Buffer(); 84 } 85 86 Buffer MockCommandBufferBase::GetTransferBuffer(int32 id) { 87 GPU_DCHECK_GE(id, kTransferBufferBaseId); 88 GPU_DCHECK_LT(id, kTransferBufferBaseId + kMaxTransferBuffers); 89 return transfer_buffer_buffers_[id - kTransferBufferBaseId]; 90 } 91 92 void MockCommandBufferBase::FlushHelper(int32 put_offset) { 93 state_.put_offset = put_offset; 94 } 95 96 void MockCommandBufferBase::SetToken(int32 token) { 97 GPU_NOTREACHED(); 98 state_.token = token; 99 } 100 101 void MockCommandBufferBase::SetParseError(error::Error error) { 102 GPU_NOTREACHED(); 103 state_.error = error; 104 } 105 106 void MockCommandBufferBase::SetContextLostReason( 107 error::ContextLostReason reason) { 108 GPU_NOTREACHED(); 109 state_.context_lost_reason = reason; 110 } 111 112 uint32 MockCommandBufferBase::InsertSyncPoint() { 113 GPU_NOTREACHED(); 114 return 0; 115 } 116 117 // GCC requires these declarations, but MSVC requires they not be present 118 #ifndef _MSC_VER 119 const int32 MockCommandBufferBase::kTransferBufferBaseId; 120 const int32 MockCommandBufferBase::kMaxTransferBuffers; 121 #endif 122 123 MockClientCommandBuffer::MockClientCommandBuffer() { 124 DelegateToFake(); 125 } 126 127 MockClientCommandBuffer::~MockClientCommandBuffer() { 128 } 129 130 void MockClientCommandBuffer::Flush(int32 put_offset) { 131 FlushHelper(put_offset); 132 } 133 134 void MockClientCommandBuffer::DelegateToFake() { 135 ON_CALL(*this, DestroyTransferBuffer(_)) 136 .WillByDefault(Invoke( 137 this, &MockCommandBufferBase::DestroyTransferBufferHelper)); 138 } 139 140 MockClientCommandBufferMockFlush::MockClientCommandBufferMockFlush() { 141 DelegateToFake(); 142 } 143 144 MockClientCommandBufferMockFlush::~MockClientCommandBufferMockFlush() { 145 } 146 147 void MockClientCommandBufferMockFlush::DelegateToFake() { 148 MockClientCommandBuffer::DelegateToFake(); 149 ON_CALL(*this, Flush(_)) 150 .WillByDefault(Invoke( 151 this, &MockCommandBufferBase::FlushHelper)); 152 } 153 154 } // namespace gpu 155 156 157