• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
~MockCommandBufferBase()18 MockCommandBufferBase::~MockCommandBufferBase() {
19 }
20 
Initialize()21 bool MockCommandBufferBase::Initialize() {
22   return true;
23 }
24 
GetState()25 CommandBuffer::State MockCommandBufferBase::GetState() {
26   return state_;
27 }
28 
GetLastState()29 CommandBuffer::State MockCommandBufferBase::GetLastState() {
30   return state_;
31 }
32 
GetLastToken()33 int32 MockCommandBufferBase::GetLastToken() {
34   return state_.token;
35 }
36 
SetGetOffset(int32 get_offset)37 void MockCommandBufferBase::SetGetOffset(int32 get_offset) {
38   state_.get_offset = get_offset;
39 }
40 
FlushSync(int32 put_offset,int32 last_known_get)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 
SetGetBuffer(int transfer_buffer_id)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.
GetNextFreeTransferBufferId()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 
CreateTransferBuffer(size_t size,int32 * id)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 
DestroyTransferBufferHelper(int32 id)78 void MockCommandBufferBase::DestroyTransferBufferHelper(int32 id) {
79   DCHECK_GE(id, kTransferBufferBaseId);
80   DCHECK_LT(id, kTransferBufferBaseId + kMaxTransferBuffers);
81   id -= kTransferBufferBaseId;
82   transfer_buffers_[id].reset();
83   transfer_buffer_buffers_[id] = Buffer();
84 }
85 
GetTransferBuffer(int32 id)86 Buffer MockCommandBufferBase::GetTransferBuffer(int32 id) {
87   DCHECK_GE(id, kTransferBufferBaseId);
88   DCHECK_LT(id, kTransferBufferBaseId + kMaxTransferBuffers);
89   return transfer_buffer_buffers_[id - kTransferBufferBaseId];
90 }
91 
FlushHelper(int32 put_offset)92 void MockCommandBufferBase::FlushHelper(int32 put_offset) {
93   state_.put_offset = put_offset;
94 }
95 
SetToken(int32 token)96 void MockCommandBufferBase::SetToken(int32 token) {
97   NOTREACHED();
98   state_.token = token;
99 }
100 
SetParseError(error::Error error)101 void MockCommandBufferBase::SetParseError(error::Error error) {
102   NOTREACHED();
103   state_.error = error;
104 }
105 
SetContextLostReason(error::ContextLostReason reason)106 void MockCommandBufferBase::SetContextLostReason(
107     error::ContextLostReason reason) {
108   NOTREACHED();
109   state_.context_lost_reason = reason;
110 }
111 
112 // GCC requires these declarations, but MSVC requires they not be present
113 #ifndef _MSC_VER
114 const int32 MockCommandBufferBase::kTransferBufferBaseId;
115 const int32 MockCommandBufferBase::kMaxTransferBuffers;
116 #endif
117 
MockClientCommandBuffer()118 MockClientCommandBuffer::MockClientCommandBuffer() {
119   DelegateToFake();
120 }
121 
~MockClientCommandBuffer()122 MockClientCommandBuffer::~MockClientCommandBuffer() {
123 }
124 
Flush(int32 put_offset)125 void MockClientCommandBuffer::Flush(int32 put_offset) {
126   FlushHelper(put_offset);
127 }
128 
DelegateToFake()129 void MockClientCommandBuffer::DelegateToFake() {
130   ON_CALL(*this, DestroyTransferBuffer(_))
131       .WillByDefault(Invoke(
132           this, &MockCommandBufferBase::DestroyTransferBufferHelper));
133 }
134 
MockClientCommandBufferMockFlush()135 MockClientCommandBufferMockFlush::MockClientCommandBufferMockFlush() {
136   DelegateToFake();
137 }
138 
~MockClientCommandBufferMockFlush()139 MockClientCommandBufferMockFlush::~MockClientCommandBufferMockFlush() {
140 }
141 
DelegateToFake()142 void MockClientCommandBufferMockFlush::DelegateToFake() {
143   MockClientCommandBuffer::DelegateToFake();
144   ON_CALL(*this, Flush(_))
145       .WillByDefault(Invoke(
146           this, &MockCommandBufferBase::FlushHelper));
147 }
148 
MockClientGpuControl()149 MockClientGpuControl::MockClientGpuControl() {
150 }
151 
~MockClientGpuControl()152 MockClientGpuControl::~MockClientGpuControl() {
153 }
154 
155 }  // namespace gpu
156 
157 
158