Home | History | Annotate | Download | only in client
      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