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 |