| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // This file contains the implementation of the command buffer helper class. | 5 // This file contains the implementation of the command buffer helper class. |
| 6 | 6 |
| 7 #include "../client/cmd_buffer_helper.h" | 7 #include "../client/cmd_buffer_helper.h" |
| 8 #include "../common/command_buffer.h" | 8 #include "../common/command_buffer.h" |
| 9 #include "../common/trace_event.h" | 9 #include "../common/trace_event.h" |
| 10 | 10 |
| 11 namespace gpu { | 11 namespace gpu { |
| 12 | 12 |
| 13 namespace { | 13 namespace { |
| 14 const int kCommandsPerFlushCheck = 100; | 14 const int kCommandsPerFlushCheck = 100; |
| 15 const double kFlushDelay = 1.0 / (5.0 * 60.0); | 15 const double kFlushDelay = 1.0 / (5.0 * 60.0); |
| 16 } | 16 } |
| 17 | 17 |
| 18 CommandBufferHelper::CommandBufferHelper(CommandBuffer* command_buffer) | 18 CommandBufferHelper::CommandBufferHelper(CommandBuffer* command_buffer) |
| 19 : command_buffer_(command_buffer), | 19 : command_buffer_(command_buffer), |
| 20 ring_buffer_id_(-1), |
| 21 ring_buffer_size_(0), |
| 20 entries_(NULL), | 22 entries_(NULL), |
| 21 total_entry_count_(0), | 23 total_entry_count_(0), |
| 22 usable_entry_count_(0), | 24 usable_entry_count_(0), |
| 23 token_(0), | 25 token_(0), |
| 24 put_(0), | 26 put_(0), |
| 25 last_put_sent_(0), | 27 last_put_sent_(0), |
| 26 commands_issued_(0), | 28 commands_issued_(0), |
| 27 last_flush_time_(0) { | 29 last_flush_time_(0) { |
| 28 } | 30 } |
| 29 | 31 |
| 30 bool CommandBufferHelper::Initialize(int32 ring_buffer_size) { | 32 bool CommandBufferHelper::AllocateRingBuffer() { |
| 31 ring_buffer_ = command_buffer_->GetRingBuffer(); | 33 int32 id = command_buffer_->CreateTransferBuffer(ring_buffer_size_, -1); |
| 34 if (id < 0) { |
| 35 return false; |
| 36 } |
| 37 |
| 38 ring_buffer_ = command_buffer_->GetTransferBuffer(id); |
| 32 if (!ring_buffer_.ptr) | 39 if (!ring_buffer_.ptr) |
| 33 return false; | 40 return false; |
| 34 | 41 |
| 42 ring_buffer_id_ = id; |
| 43 command_buffer_->SetGetBuffer(id); |
| 44 |
| 45 // TODO(gman): Do we really need to call GetState here? We know get & put = 0 |
| 46 // Also do we need to check state.num_entries? |
| 35 CommandBuffer::State state = command_buffer_->GetState(); | 47 CommandBuffer::State state = command_buffer_->GetState(); |
| 36 entries_ = static_cast<CommandBufferEntry*>(ring_buffer_.ptr); | 48 entries_ = static_cast<CommandBufferEntry*>(ring_buffer_.ptr); |
| 37 int32 num_ring_buffer_entries = ring_buffer_size / sizeof(CommandBufferEntry); | 49 int32 num_ring_buffer_entries = |
| 50 ring_buffer_size_ / sizeof(CommandBufferEntry); |
| 38 if (num_ring_buffer_entries > state.num_entries) { | 51 if (num_ring_buffer_entries > state.num_entries) { |
| 39 return false; | 52 return false; |
| 40 } | 53 } |
| 41 | 54 |
| 42 const int32 kJumpEntries = | 55 const int32 kJumpEntries = |
| 43 sizeof(cmd::Jump) / sizeof(*entries_); // NOLINT | 56 sizeof(cmd::Jump) / sizeof(*entries_); // NOLINT |
| 44 | 57 |
| 45 total_entry_count_ = num_ring_buffer_entries; | 58 total_entry_count_ = num_ring_buffer_entries; |
| 46 usable_entry_count_ = total_entry_count_ - kJumpEntries; | 59 usable_entry_count_ = total_entry_count_ - kJumpEntries; |
| 47 put_ = state.put_offset; | 60 put_ = state.put_offset; |
| 48 return true; | 61 return true; |
| 49 } | 62 } |
| 50 | 63 |
| 64 bool CommandBufferHelper::Initialize(int32 ring_buffer_size) { |
| 65 ring_buffer_size_ = ring_buffer_size; |
| 66 return AllocateRingBuffer(); |
| 67 } |
| 68 |
| 51 CommandBufferHelper::~CommandBufferHelper() { | 69 CommandBufferHelper::~CommandBufferHelper() { |
| 52 } | 70 } |
| 53 | 71 |
| 54 bool CommandBufferHelper::FlushSync() { | 72 bool CommandBufferHelper::FlushSync() { |
| 55 last_flush_time_ = clock(); | 73 last_flush_time_ = clock(); |
| 56 last_put_sent_ = put_; | 74 last_put_sent_ = put_; |
| 57 CommandBuffer::State state = command_buffer_->FlushSync(put_, get_offset()); | 75 CommandBuffer::State state = command_buffer_->FlushSync(put_, get_offset()); |
| 58 return state.error == error::kNoError; | 76 return state.error == error::kNoError; |
| 59 } | 77 } |
| 60 | 78 |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 181 } | 199 } |
| 182 return space; | 200 return space; |
| 183 } | 201 } |
| 184 | 202 |
| 185 error::Error CommandBufferHelper::GetError() { | 203 error::Error CommandBufferHelper::GetError() { |
| 186 CommandBuffer::State state = command_buffer_->GetState(); | 204 CommandBuffer::State state = command_buffer_->GetState(); |
| 187 return static_cast<error::Error>(state.error); | 205 return static_cast<error::Error>(state.error); |
| 188 } | 206 } |
| 189 | 207 |
| 190 } // namespace gpu | 208 } // namespace gpu |
| OLD | NEW |