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