| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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 #include "gpu/command_buffer/service/command_buffer_service.h" | 5 #include "gpu/command_buffer/service/command_buffer_service.h" |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 | 8 |
| 9 #include "gpu/command_buffer/common/cmd_buffer_common.h" | 9 #include "gpu/command_buffer/common/cmd_buffer_common.h" |
| 10 | 10 |
| 11 using ::base::SharedMemory; | 11 using ::base::SharedMemory; |
| 12 | 12 |
| 13 namespace gpu { | 13 namespace gpu { |
| 14 | 14 |
| 15 CommandBufferService::CommandBufferService() | 15 CommandBufferService::CommandBufferService() |
| 16 : size_(0), | 16 : size_(0), |
| 17 get_offset_(0), | 17 get_offset_(0), |
| 18 put_offset_(0), | 18 put_offset_(0), |
| 19 token_(0), | 19 token_(0), |
| 20 parse_error_(0), | 20 error_(parse_error::kParseNoError) { |
| 21 error_status_(false) { | |
| 22 // Element zero is always NULL. | 21 // Element zero is always NULL. |
| 23 registered_objects_.push_back(linked_ptr<SharedMemory>()); | 22 registered_objects_.push_back(linked_ptr<SharedMemory>()); |
| 24 } | 23 } |
| 25 | 24 |
| 26 CommandBufferService::~CommandBufferService() { | 25 CommandBufferService::~CommandBufferService() { |
| 27 } | 26 } |
| 28 | 27 |
| 29 bool CommandBufferService::Initialize(int32 size) { | 28 bool CommandBufferService::Initialize(int32 size) { |
| 30 // Fail if already initialized. | 29 // Fail if already initialized. |
| 31 if (ring_buffer_.get()) | 30 if (ring_buffer_.get()) |
| (...skipping 15 matching lines...) Expand all Loading... |
| 47 Buffer CommandBufferService::GetRingBuffer() { | 46 Buffer CommandBufferService::GetRingBuffer() { |
| 48 Buffer buffer; | 47 Buffer buffer; |
| 49 if (ring_buffer_.get()) { | 48 if (ring_buffer_.get()) { |
| 50 buffer.ptr = ring_buffer_->memory(); | 49 buffer.ptr = ring_buffer_->memory(); |
| 51 buffer.size = ring_buffer_->max_size(); | 50 buffer.size = ring_buffer_->max_size(); |
| 52 buffer.shared_memory = ring_buffer_.get(); | 51 buffer.shared_memory = ring_buffer_.get(); |
| 53 } | 52 } |
| 54 return buffer; | 53 return buffer; |
| 55 } | 54 } |
| 56 | 55 |
| 57 int32 CommandBufferService::GetSize() { | 56 CommandBufferService::State CommandBufferService::GetState() { |
| 58 return size_; | 57 State state; |
| 58 state.size = size_; |
| 59 state.get_offset = get_offset_; |
| 60 state.put_offset = put_offset_; |
| 61 state.token = token_; |
| 62 state.error = error_; |
| 63 |
| 64 return state; |
| 59 } | 65 } |
| 60 | 66 |
| 61 int32 CommandBufferService::SyncOffsets(int32 put_offset) { | 67 CommandBufferService::State CommandBufferService::Flush(int32 put_offset) { |
| 62 if (put_offset < 0 || put_offset >= size_) | 68 if (put_offset < 0 || put_offset >= size_) { |
| 63 return -1; | 69 error_ = gpu::parse_error::kParseOutOfBounds; |
| 70 return GetState(); |
| 71 } |
| 64 | 72 |
| 65 put_offset_ = put_offset; | 73 put_offset_ = put_offset; |
| 66 | 74 |
| 67 if (put_offset_change_callback_.get()) { | 75 if (put_offset_change_callback_.get()) { |
| 68 put_offset_change_callback_->Run(); | 76 put_offset_change_callback_->Run(); |
| 69 } | 77 } |
| 70 | 78 |
| 71 return get_offset_; | 79 return GetState(); |
| 72 } | |
| 73 | |
| 74 int32 CommandBufferService::GetGetOffset() { | |
| 75 return get_offset_; | |
| 76 } | 80 } |
| 77 | 81 |
| 78 void CommandBufferService::SetGetOffset(int32 get_offset) { | 82 void CommandBufferService::SetGetOffset(int32 get_offset) { |
| 79 DCHECK(get_offset >= 0 && get_offset < size_); | 83 DCHECK(get_offset >= 0 && get_offset < size_); |
| 80 get_offset_ = get_offset; | 84 get_offset_ = get_offset; |
| 81 } | 85 } |
| 82 | 86 |
| 83 int32 CommandBufferService::GetPutOffset() { | |
| 84 return put_offset_; | |
| 85 } | |
| 86 | |
| 87 int32 CommandBufferService::CreateTransferBuffer(size_t size) { | 87 int32 CommandBufferService::CreateTransferBuffer(size_t size) { |
| 88 linked_ptr<SharedMemory> buffer(new SharedMemory); | 88 linked_ptr<SharedMemory> buffer(new SharedMemory); |
| 89 if (!buffer->Create(std::wstring(), false, false, size)) | 89 if (!buffer->Create(std::wstring(), false, false, size)) |
| 90 return -1; | 90 return -1; |
| 91 | 91 |
| 92 if (unused_registered_object_elements_.empty()) { | 92 if (unused_registered_object_elements_.empty()) { |
| 93 // Check we haven't exceeded the range that fits in a 32-bit integer. | 93 // Check we haven't exceeded the range that fits in a 32-bit integer. |
| 94 if (registered_objects_.size() > std::numeric_limits<uint32>::max()) | 94 if (registered_objects_.size() > std::numeric_limits<uint32>::max()) |
| 95 return -1; | 95 return -1; |
| 96 | 96 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 143 return Buffer(); | 143 return Buffer(); |
| 144 } | 144 } |
| 145 | 145 |
| 146 Buffer buffer; | 146 Buffer buffer; |
| 147 buffer.ptr = shared_memory->memory(); | 147 buffer.ptr = shared_memory->memory(); |
| 148 buffer.size = shared_memory->max_size(); | 148 buffer.size = shared_memory->max_size(); |
| 149 buffer.shared_memory = shared_memory; | 149 buffer.shared_memory = shared_memory; |
| 150 return buffer; | 150 return buffer; |
| 151 } | 151 } |
| 152 | 152 |
| 153 int32 CommandBufferService::GetToken() { | |
| 154 return token_; | |
| 155 } | |
| 156 | |
| 157 void CommandBufferService::SetToken(int32 token) { | 153 void CommandBufferService::SetToken(int32 token) { |
| 158 token_ = token; | 154 token_ = token; |
| 159 } | 155 } |
| 160 | 156 |
| 161 int32 CommandBufferService::ResetParseError() { | 157 void CommandBufferService::SetParseError(parse_error::ParseError error) { |
| 162 int32 last_error = parse_error_; | 158 if (error_ == parse_error::kParseNoError) { |
| 163 parse_error_ = 0; | 159 error_ = error; |
| 164 return last_error; | |
| 165 } | |
| 166 | |
| 167 void CommandBufferService::SetParseError(int32 parse_error) { | |
| 168 if (parse_error_ == 0) { | |
| 169 parse_error_ = parse_error; | |
| 170 } | 160 } |
| 171 } | 161 } |
| 172 | 162 |
| 173 bool CommandBufferService::GetErrorStatus() { | |
| 174 return error_status_; | |
| 175 } | |
| 176 | |
| 177 void CommandBufferService::RaiseErrorStatus() { | |
| 178 error_status_ = true; | |
| 179 } | |
| 180 | |
| 181 void CommandBufferService::SetPutOffsetChangeCallback( | 163 void CommandBufferService::SetPutOffsetChangeCallback( |
| 182 Callback0::Type* callback) { | 164 Callback0::Type* callback) { |
| 183 put_offset_change_callback_.reset(callback); | 165 put_offset_change_callback_.reset(callback); |
| 184 } | 166 } |
| 185 | 167 |
| 186 } // namespace gpu | 168 } // namespace gpu |
| OLD | NEW |