Index: gpu/command_buffer/service/gpu_scheduler.cc |
diff --git a/gpu/command_buffer/service/gpu_scheduler.cc b/gpu/command_buffer/service/gpu_scheduler.cc |
index a8596195cdf5a8fa09965cd40a1fac4baaa6f644..85aaa307643206aeb3f35c3032b82c6d2569267b 100644 |
--- a/gpu/command_buffer/service/gpu_scheduler.cc |
+++ b/gpu/command_buffer/service/gpu_scheduler.cc |
@@ -15,10 +15,6 @@ |
#include "ui/gl/gl_fence.h" |
#include "ui/gl/gl_switches.h" |
-#if defined(OS_WIN) |
-#include "base/win/windows_version.h" |
-#endif |
- |
using ::base::SharedMemory; |
namespace gpu { |
@@ -33,13 +29,10 @@ GpuScheduler::GpuScheduler(CommandBufferServiceBase* command_buffer, |
: command_buffer_(command_buffer), |
handler_(handler), |
decoder_(decoder), |
- unscheduled_count_(0), |
- rescheduled_count_(0), |
- was_preempted_(false), |
- reschedule_task_factory_(this) {} |
+ scheduled_(true), |
+ was_preempted_(false) {} |
-GpuScheduler::~GpuScheduler() { |
-} |
+GpuScheduler::~GpuScheduler() {} |
void GpuScheduler::PutChanged() { |
TRACE_EVENT1( |
@@ -58,10 +51,6 @@ void GpuScheduler::PutChanged() { |
if (state.error != error::kNoError) |
return; |
- // One of the unschedule fence tasks might have unscheduled us. |
- if (!IsScheduled()) |
- return; |
- |
base::TimeTicks begin_time(base::TimeTicks::Now()); |
error::Error error = error::kNoError; |
if (decoder_) |
@@ -70,12 +59,12 @@ void GpuScheduler::PutChanged() { |
if (IsPreempted()) |
break; |
- DCHECK(IsScheduled()); |
+ DCHECK(scheduled()); |
error = parser_->ProcessCommands(CommandParser::kParseCommandsSlice); |
if (error == error::kDeferCommandUntilLater) { |
- DCHECK_GT(unscheduled_count_, 0); |
+ DCHECK(!scheduled()); |
break; |
} |
@@ -93,7 +82,7 @@ void GpuScheduler::PutChanged() { |
if (!command_processed_callback_.is_null()) |
command_processed_callback_.Run(); |
- if (unscheduled_count_ > 0) |
+ if (!scheduled()) |
break; |
} |
@@ -108,57 +97,13 @@ void GpuScheduler::PutChanged() { |
} |
void GpuScheduler::SetScheduled(bool scheduled) { |
- TRACE_EVENT2("gpu", "GpuScheduler:SetScheduled", "this", this, |
- "new unscheduled_count_", |
- unscheduled_count_ + (scheduled? -1 : 1)); |
- if (scheduled) { |
- // If the scheduler was rescheduled after a timeout, ignore the subsequent |
- // calls to SetScheduled when they eventually arrive until they are all |
- // accounted for. |
- if (rescheduled_count_ > 0) { |
- --rescheduled_count_; |
- return; |
- } else { |
- --unscheduled_count_; |
- } |
- |
- DCHECK_GE(unscheduled_count_, 0); |
- |
- if (unscheduled_count_ == 0) { |
- TRACE_EVENT_ASYNC_END1("gpu", "ProcessingSwap", this, |
- "GpuScheduler", this); |
- // When the scheduler transitions from the unscheduled to the scheduled |
- // state, cancel the task that would reschedule it after a timeout. |
- reschedule_task_factory_.InvalidateWeakPtrs(); |
- |
- if (!scheduling_changed_callback_.is_null()) |
- scheduling_changed_callback_.Run(true); |
- } |
- } else { |
- ++unscheduled_count_; |
- if (unscheduled_count_ == 1) { |
- TRACE_EVENT_ASYNC_BEGIN1("gpu", "ProcessingSwap", this, |
- "GpuScheduler", this); |
-#if defined(OS_WIN) |
- if (base::win::GetVersion() < base::win::VERSION_VISTA) { |
- // When the scheduler transitions from scheduled to unscheduled, post a |
- // delayed task that it will force it back into a scheduled state after |
- // a timeout. This should only be necessary on pre-Vista. |
- base::MessageLoop::current()->PostDelayedTask( |
- FROM_HERE, |
- base::Bind(&GpuScheduler::RescheduleTimeOut, |
- reschedule_task_factory_.GetWeakPtr()), |
- base::TimeDelta::FromMilliseconds(kRescheduleTimeOutDelay)); |
- } |
-#endif |
- if (!scheduling_changed_callback_.is_null()) |
- scheduling_changed_callback_.Run(false); |
- } |
- } |
-} |
- |
-bool GpuScheduler::IsScheduled() { |
- return unscheduled_count_ == 0; |
+ TRACE_EVENT2("gpu", "GpuScheduler:SetScheduled", "this", this, "scheduled", |
+ scheduled); |
+ if (scheduled_ == scheduled) |
+ return; |
+ scheduled_ = scheduled; |
+ if (!scheduling_changed_callback_.is_null()) |
+ scheduling_changed_callback_.Run(scheduled); |
} |
bool GpuScheduler::HasPendingQueries() const { |
@@ -244,15 +189,4 @@ void GpuScheduler::PerformIdleWork() { |
decoder_->PerformIdleWork(); |
} |
-void GpuScheduler::RescheduleTimeOut() { |
- int new_count = unscheduled_count_ + rescheduled_count_; |
- |
- rescheduled_count_ = 0; |
- |
- while (unscheduled_count_) |
- SetScheduled(true); |
- |
- rescheduled_count_ = new_count; |
-} |
- |
} // namespace gpu |