OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |