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

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

Issue 1315713007: gpu: Reduce GL context switches used to check pending queries. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 years, 3 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 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/gpu_scheduler.h" 5 #include "gpu/command_buffer/service/gpu_scheduler.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 if (!scheduling_changed_callback_.is_null()) 154 if (!scheduling_changed_callback_.is_null())
155 scheduling_changed_callback_.Run(false); 155 scheduling_changed_callback_.Run(false);
156 } 156 }
157 } 157 }
158 } 158 }
159 159
160 bool GpuScheduler::IsScheduled() { 160 bool GpuScheduler::IsScheduled() {
161 return unscheduled_count_ == 0; 161 return unscheduled_count_ == 0;
162 } 162 }
163 163
164 bool GpuScheduler::HasMoreWork() { 164 bool GpuScheduler::HasPendingQueries() const {
165 return (decoder_ && decoder_->ProcessPendingQueries(false)) || 165 return (decoder_ && decoder_->HasPendingQueries());
166 HasMoreIdleWork(); 166 }
167
168 void GpuScheduler::ProcessPendingQueries() {
169 if (!decoder_)
170 return;
171 decoder_->ProcessPendingQueries(false);
167 } 172 }
168 173
169 void GpuScheduler::SetSchedulingChangedCallback( 174 void GpuScheduler::SetSchedulingChangedCallback(
170 const SchedulingChangedCallback& callback) { 175 const SchedulingChangedCallback& callback) {
171 scheduling_changed_callback_ = callback; 176 scheduling_changed_callback_ = callback;
172 } 177 }
173 178
174 scoped_refptr<Buffer> GpuScheduler::GetSharedMemoryBuffer(int32 shm_id) { 179 scoped_refptr<Buffer> GpuScheduler::GetSharedMemoryBuffer(int32 shm_id) {
175 return command_buffer_->GetTransferBuffer(shm_id); 180 return command_buffer_->GetTransferBuffer(shm_id);
176 } 181 }
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 TRACE_COUNTER_ID1("gpu", "GpuScheduler::Preempted", this, 1); 227 TRACE_COUNTER_ID1("gpu", "GpuScheduler::Preempted", this, 1);
223 was_preempted_ = true; 228 was_preempted_ = true;
224 } else if (was_preempted_ && !preemption_flag_->IsSet()) { 229 } else if (was_preempted_ && !preemption_flag_->IsSet()) {
225 TRACE_COUNTER_ID1("gpu", "GpuScheduler::Preempted", this, 0); 230 TRACE_COUNTER_ID1("gpu", "GpuScheduler::Preempted", this, 0);
226 was_preempted_ = false; 231 was_preempted_ = false;
227 } 232 }
228 233
229 return preemption_flag_->IsSet(); 234 return preemption_flag_->IsSet();
230 } 235 }
231 236
232 bool GpuScheduler::HasMoreIdleWork() { 237 bool GpuScheduler::HasMoreIdleWork() const {
233 return (decoder_ && decoder_->HasMoreIdleWork()); 238 return (decoder_ && decoder_->HasMoreIdleWork());
234 } 239 }
235 240
236 void GpuScheduler::PerformIdleWork() { 241 void GpuScheduler::PerformIdleWork() {
237 if (!decoder_) 242 if (!decoder_)
238 return; 243 return;
239 decoder_->PerformIdleWork(); 244 decoder_->PerformIdleWork();
240 } 245 }
241 246
242 void GpuScheduler::RescheduleTimeOut() { 247 void GpuScheduler::RescheduleTimeOut() {
243 int new_count = unscheduled_count_ + rescheduled_count_; 248 int new_count = unscheduled_count_ + rescheduled_count_;
244 249
245 rescheduled_count_ = 0; 250 rescheduled_count_ = 0;
246 251
247 while (unscheduled_count_) 252 while (unscheduled_count_)
248 SetScheduled(true); 253 SetScheduled(true);
249 254
250 rescheduled_count_ = new_count; 255 rescheduled_count_ = new_count;
251 } 256 }
252 257
253 } // namespace gpu 258 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/gpu_scheduler.h ('k') | gpu/command_buffer/service/in_process_command_buffer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698