summaryrefslogtreecommitdiffstats
path: root/gpu
diff options
context:
space:
mode:
Diffstat (limited to 'gpu')
-rw-r--r--gpu/command_buffer/service/gpu_scheduler.cc16
-rw-r--r--gpu/command_buffer/service/gpu_scheduler.h1
2 files changed, 14 insertions, 3 deletions
diff --git a/gpu/command_buffer/service/gpu_scheduler.cc b/gpu/command_buffer/service/gpu_scheduler.cc
index 29ea7fd..8a70255 100644
--- a/gpu/command_buffer/service/gpu_scheduler.cc
+++ b/gpu/command_buffer/service/gpu_scheduler.cc
@@ -24,6 +24,7 @@ namespace gpu {
namespace {
const int64 kRescheduleTimeOutDelay = 1000;
+const int64 kUnscheduleFenceTimeOutDelay = 10000;
}
GpuScheduler::GpuScheduler(
@@ -233,8 +234,14 @@ bool GpuScheduler::PollUnscheduleFences() {
return true;
if (unschedule_fences_.front()->fence.get()) {
+ base::Time now = base::Time::Now();
+ base::TimeDelta timeout =
+ base::TimeDelta::FromMilliseconds(kUnscheduleFenceTimeOutDelay);
+
while (!unschedule_fences_.empty()) {
- if (unschedule_fences_.front()->fence->HasCompleted()) {
+ const UnscheduleFence& fence = *unschedule_fences_.front();
+ if (fence.fence->HasCompleted() ||
+ now - fence.issue_time > timeout) {
unschedule_fences_.front()->task.Run();
unschedule_fences_.pop();
SetScheduled(true);
@@ -291,8 +298,11 @@ void GpuScheduler::RescheduleTimeOut() {
rescheduled_count_ = new_count;
}
-GpuScheduler::UnscheduleFence::UnscheduleFence(
- gfx::GLFence* fence_, base::Closure task_): fence(fence_), task(task_) {
+GpuScheduler::UnscheduleFence::UnscheduleFence(gfx::GLFence* fence_,
+ base::Closure task_)
+ : fence(fence_),
+ issue_time(base::Time::Now()),
+ task(task_) {
}
GpuScheduler::UnscheduleFence::~UnscheduleFence() {
diff --git a/gpu/command_buffer/service/gpu_scheduler.h b/gpu/command_buffer/service/gpu_scheduler.h
index bda7ac1..bc8510a 100644
--- a/gpu/command_buffer/service/gpu_scheduler.h
+++ b/gpu/command_buffer/service/gpu_scheduler.h
@@ -147,6 +147,7 @@ class GPU_EXPORT GpuScheduler
~UnscheduleFence();
scoped_ptr<gfx::GLFence> fence;
+ base::Time issue_time;
base::Closure task;
};
std::queue<linked_ptr<UnscheduleFence> > unschedule_fences_;