Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(286)

Side by Side Diff: gpu/command_buffer/service/command_buffer_service.cc

Issue 6883179: Rework FlushSync to return early if commands have been processed since the last update (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: style Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 #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 "base/callback.h" 9 #include "base/callback.h"
10 #include "base/process_util.h" 10 #include "base/process_util.h"
11 #include "gpu/command_buffer/common/cmd_buffer_common.h" 11 #include "gpu/command_buffer/common/cmd_buffer_common.h"
12 12
13 using ::base::SharedMemory; 13 using ::base::SharedMemory;
14 14
15 namespace gpu { 15 namespace gpu {
16 16
17 CommandBufferService::CommandBufferService() 17 CommandBufferService::CommandBufferService()
18 : num_entries_(0), 18 : num_entries_(0),
19 get_offset_(0), 19 get_offset_(0),
20 put_offset_(0), 20 put_offset_(0),
21 token_(0), 21 token_(0),
22 generation_(0),
22 error_(error::kNoError) { 23 error_(error::kNoError) {
23 // Element zero is always NULL. 24 // Element zero is always NULL.
24 registered_objects_.push_back(Buffer()); 25 registered_objects_.push_back(Buffer());
25 } 26 }
26 27
27 CommandBufferService::~CommandBufferService() { 28 CommandBufferService::~CommandBufferService() {
28 delete ring_buffer_.shared_memory; 29 delete ring_buffer_.shared_memory;
29 30
30 for (size_t i = 0; i < registered_objects_.size(); ++i) { 31 for (size_t i = 0; i < registered_objects_.size(); ++i) {
31 if (registered_objects_[i].shared_memory) 32 if (registered_objects_[i].shared_memory)
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 return ring_buffer_; 91 return ring_buffer_;
91 } 92 }
92 93
93 CommandBufferService::State CommandBufferService::GetState() { 94 CommandBufferService::State CommandBufferService::GetState() {
94 State state; 95 State state;
95 state.num_entries = num_entries_; 96 state.num_entries = num_entries_;
96 state.get_offset = get_offset_; 97 state.get_offset = get_offset_;
97 state.put_offset = put_offset_; 98 state.put_offset = put_offset_;
98 state.token = token_; 99 state.token = token_;
99 state.error = error_; 100 state.error = error_;
101 state.generation = ++generation_;
100 102
101 return state; 103 return state;
102 } 104 }
103 105
104 CommandBufferService::State CommandBufferService::FlushSync(int32 put_offset) { 106 CommandBufferService::State CommandBufferService::FlushSync(
107 int32 put_offset, int32 last_known_get) {
105 if (put_offset < 0 || put_offset > num_entries_) { 108 if (put_offset < 0 || put_offset > num_entries_) {
106 error_ = gpu::error::kOutOfBounds; 109 error_ = gpu::error::kOutOfBounds;
107 return GetState(); 110 return GetState();
108 } 111 }
109 112
110 put_offset_ = put_offset; 113 put_offset_ = put_offset;
111 114
112 if (put_offset_change_callback_.get()) { 115 if (put_offset_change_callback_.get()) {
113 put_offset_change_callback_->Run(); 116 put_offset_change_callback_->Run(last_known_get == get_offset_);
114 } 117 }
115 118
116 return GetState(); 119 return GetState();
117 } 120 }
118 121
119 void CommandBufferService::Flush(int32 put_offset) { 122 void CommandBufferService::Flush(int32 put_offset) {
120 FlushSync(put_offset); 123 if (put_offset < 0 || put_offset > num_entries_) {
124 error_ = gpu::error::kOutOfBounds;
125 return;
126 }
127
128 put_offset_ = put_offset;
129
130 if (put_offset_change_callback_.get()) {
131 put_offset_change_callback_->Run(false);
132 }
121 } 133 }
122 134
123 void CommandBufferService::SetGetOffset(int32 get_offset) { 135 void CommandBufferService::SetGetOffset(int32 get_offset) {
124 DCHECK(get_offset >= 0 && get_offset < num_entries_); 136 DCHECK(get_offset >= 0 && get_offset < num_entries_);
125 get_offset_ = get_offset; 137 get_offset_ = get_offset;
126 } 138 }
127 139
128 int32 CommandBufferService::CreateTransferBuffer(size_t size, 140 int32 CommandBufferService::CreateTransferBuffer(size_t size,
129 int32 id_request) { 141 int32 id_request) {
130 SharedMemory buffer; 142 SharedMemory buffer;
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 token_ = token; 246 token_ = token;
235 } 247 }
236 248
237 void CommandBufferService::SetParseError(error::Error error) { 249 void CommandBufferService::SetParseError(error::Error error) {
238 if (error_ == error::kNoError) { 250 if (error_ == error::kNoError) {
239 error_ = error; 251 error_ = error;
240 } 252 }
241 } 253 }
242 254
243 void CommandBufferService::SetPutOffsetChangeCallback( 255 void CommandBufferService::SetPutOffsetChangeCallback(
244 Callback0::Type* callback) { 256 Callback1<bool>::Type* callback) {
245 put_offset_change_callback_.reset(callback); 257 put_offset_change_callback_.reset(callback);
246 } 258 }
247 259
248 } // namespace gpu 260 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/command_buffer_service.h ('k') | gpu/command_buffer/service/gpu_scheduler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698