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

Unified Diff: gpu/command_buffer/service/in_process_command_buffer.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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gpu/command_buffer/service/in_process_command_buffer.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gpu/command_buffer/service/in_process_command_buffer.cc
diff --git a/gpu/command_buffer/service/in_process_command_buffer.cc b/gpu/command_buffer/service/in_process_command_buffer.cc
index 6997cecdbf2de82fd668b4f7155050e5790e0727..615071e9ef5cea9a00a8408206c98fbf3738e6c9 100644
--- a/gpu/command_buffer/service/in_process_command_buffer.cc
+++ b/gpu/command_buffer/service/in_process_command_buffer.cc
@@ -175,7 +175,7 @@ gpu::gles2::ProgramCache* InProcessCommandBuffer::Service::program_cache() {
InProcessCommandBuffer::InProcessCommandBuffer(
const scoped_refptr<Service>& service)
: context_lost_(false),
- idle_work_pending_(false),
+ delayed_work_pending_(false),
image_factory_(nullptr),
last_put_offset_(-1),
gpu_memory_buffer_manager_(nullptr),
@@ -494,29 +494,33 @@ void InProcessCommandBuffer::FlushOnGpuThread(int32 put_offset) {
// If we've processed all pending commands but still have pending queries,
// pump idle work until the query is passed.
if (put_offset == state_after_last_flush_.get_offset &&
- gpu_scheduler_->HasMoreWork()) {
- ScheduleIdleWorkOnGpuThread();
+ (gpu_scheduler_->HasMoreIdleWork() ||
+ gpu_scheduler_->HasPendingQueries())) {
+ ScheduleDelayedWorkOnGpuThread();
}
}
-void InProcessCommandBuffer::PerformIdleWork() {
+void InProcessCommandBuffer::PerformDelayedWork() {
CheckSequencedThread();
- idle_work_pending_ = false;
+ delayed_work_pending_ = false;
base::AutoLock lock(command_buffer_lock_);
- if (MakeCurrent() && gpu_scheduler_->HasMoreWork()) {
+ if (MakeCurrent()) {
gpu_scheduler_->PerformIdleWork();
- ScheduleIdleWorkOnGpuThread();
+ gpu_scheduler_->ProcessPendingQueries();
+ if (gpu_scheduler_->HasMoreIdleWork() ||
+ gpu_scheduler_->HasPendingQueries()) {
+ ScheduleDelayedWorkOnGpuThread();
+ }
}
}
-void InProcessCommandBuffer::ScheduleIdleWorkOnGpuThread() {
+void InProcessCommandBuffer::ScheduleDelayedWorkOnGpuThread() {
CheckSequencedThread();
- if (idle_work_pending_)
+ if (delayed_work_pending_)
return;
- idle_work_pending_ = true;
- service_->ScheduleIdleWork(
- base::Bind(&InProcessCommandBuffer::PerformIdleWork,
- gpu_thread_weak_ptr_));
+ delayed_work_pending_ = true;
+ service_->ScheduleDelayedWork(base::Bind(
+ &InProcessCommandBuffer::PerformDelayedWork, gpu_thread_weak_ptr_));
}
void InProcessCommandBuffer::Flush(int32 put_offset) {
@@ -929,7 +933,7 @@ void GpuInProcessThread::ScheduleTask(const base::Closure& task) {
task_runner()->PostTask(FROM_HERE, task);
}
-void GpuInProcessThread::ScheduleIdleWork(const base::Closure& callback) {
+void GpuInProcessThread::ScheduleDelayedWork(const base::Closure& callback) {
// Match delay with GpuCommandBufferStub.
task_runner()->PostDelayedTask(FROM_HERE, callback,
base::TimeDelta::FromMilliseconds(2));
« no previous file with comments | « gpu/command_buffer/service/in_process_command_buffer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698