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

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

Issue 12340118: GPU: Only allow the UI channel to preempt if all stubs are scheduled. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 9 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) 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/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 // delayed task that it will force it back into a scheduled state after 149 // delayed task that it will force it back into a scheduled state after
150 // a timeout. This should only be necessary on pre-Vista. 150 // a timeout. This should only be necessary on pre-Vista.
151 MessageLoop::current()->PostDelayedTask( 151 MessageLoop::current()->PostDelayedTask(
152 FROM_HERE, 152 FROM_HERE,
153 base::Bind(&GpuScheduler::RescheduleTimeOut, 153 base::Bind(&GpuScheduler::RescheduleTimeOut,
154 reschedule_task_factory_.GetWeakPtr()), 154 reschedule_task_factory_.GetWeakPtr()),
155 base::TimeDelta::FromMilliseconds(kRescheduleTimeOutDelay)); 155 base::TimeDelta::FromMilliseconds(kRescheduleTimeOutDelay));
156 } 156 }
157 #endif 157 #endif
158 } 158 }
159
160 ++unscheduled_count_; 159 ++unscheduled_count_;
160 if (!descheduled_callback_.is_null())
piman 2013/02/27 21:54:43 call this only if unscheduled_count_ is 1 (otherwi
jonathan.backer 2013/02/28 21:43:56 Done.
161 descheduled_callback_.Run();
161 } 162 }
162 } 163 }
163 164
164 bool GpuScheduler::IsScheduled() { 165 bool GpuScheduler::IsScheduled() {
165 return unscheduled_count_ == 0; 166 return unscheduled_count_ == 0;
166 } 167 }
167 168
168 bool GpuScheduler::HasMoreWork() { 169 bool GpuScheduler::HasMoreWork() {
169 return !unschedule_fences_.empty() || 170 return !unschedule_fences_.empty() ||
170 (decoder_ && decoder_->ProcessPendingQueries()); 171 (decoder_ && decoder_->ProcessPendingQueries());
171 } 172 }
172 173
173 void GpuScheduler::SetScheduledCallback( 174 void GpuScheduler::SetScheduledCallback(
174 const base::Closure& scheduled_callback) { 175 const base::Closure& scheduled_callback) {
175 scheduled_callback_ = scheduled_callback; 176 scheduled_callback_ = scheduled_callback;
176 } 177 }
177 178
179 void GpuScheduler::SetDescheduledCallback(
180 const base::Closure& descheduled_callback) {
181 descheduled_callback_ = descheduled_callback;
182 }
183
178 Buffer GpuScheduler::GetSharedMemoryBuffer(int32 shm_id) { 184 Buffer GpuScheduler::GetSharedMemoryBuffer(int32 shm_id) {
179 return command_buffer_->GetTransferBuffer(shm_id); 185 return command_buffer_->GetTransferBuffer(shm_id);
180 } 186 }
181 187
182 void GpuScheduler::set_token(int32 token) { 188 void GpuScheduler::set_token(int32 token) {
183 command_buffer_->SetToken(token); 189 command_buffer_->SetToken(token);
184 } 190 }
185 191
186 bool GpuScheduler::SetGetBuffer(int32 transfer_buffer_id) { 192 bool GpuScheduler::SetGetBuffer(int32 transfer_buffer_id) {
187 Buffer ring_buffer = command_buffer_->GetTransferBuffer(transfer_buffer_id); 193 Buffer ring_buffer = command_buffer_->GetTransferBuffer(transfer_buffer_id);
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 } 286 }
281 287
282 GpuScheduler::UnscheduleFence::UnscheduleFence( 288 GpuScheduler::UnscheduleFence::UnscheduleFence(
283 gfx::GLFence* fence_, base::Closure task_): fence(fence_), task(task_) { 289 gfx::GLFence* fence_, base::Closure task_): fence(fence_), task(task_) {
284 } 290 }
285 291
286 GpuScheduler::UnscheduleFence::~UnscheduleFence() { 292 GpuScheduler::UnscheduleFence::~UnscheduleFence() {
287 } 293 }
288 294
289 } // namespace gpu 295 } // namespace gpu
OLDNEW
« content/common/gpu/gpu_command_buffer_stub.cc ('K') | « gpu/command_buffer/service/gpu_scheduler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698