Commit 3bf6be55 authored by Bo Liu's avatar Bo Liu Committed by Commit Bot

gpu: Avoid holding onto lock while destroy Sequence

There are reports that destroying Sequence can be expensive, and lock up
other threads. So destroy it outside of the gpu::Scheduler lock.

Bug: 916977
Change-Id: I774cf8188e81f5ebed5fd37edd45278b415df7cb
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2277110
Commit-Queue: Bo <boliu@chromium.org>
Reviewed-by: default avatarSunny Sachanandani <sunnyps@chromium.org>
Cr-Commit-Position: refs/heads/master@{#785764}
parent 87d47e8b
...@@ -327,14 +327,18 @@ SequenceId Scheduler::CreateSequence(SchedulingPriority priority) { ...@@ -327,14 +327,18 @@ SequenceId Scheduler::CreateSequence(SchedulingPriority priority) {
} }
void Scheduler::DestroySequence(SequenceId sequence_id) { void Scheduler::DestroySequence(SequenceId sequence_id) {
base::AutoLock auto_lock(lock_); base::circular_deque<Sequence::Task> tasks_to_be_destroyed;
{
base::AutoLock auto_lock(lock_);
Sequence* sequence = GetSequence(sequence_id); Sequence* sequence = GetSequence(sequence_id);
DCHECK(sequence); DCHECK(sequence);
if (sequence->scheduled()) if (sequence->scheduled())
rebuild_scheduling_queue_ = true; rebuild_scheduling_queue_ = true;
sequences_.erase(sequence_id); tasks_to_be_destroyed = std::move(sequence->tasks_);
sequences_.erase(sequence_id);
}
} }
Scheduler::Sequence* Scheduler::GetSequence(SequenceId sequence_id) { Scheduler::Sequence* Scheduler::GetSequence(SequenceId sequence_id) {
......
...@@ -200,6 +200,8 @@ class GPU_EXPORT Scheduler { ...@@ -200,6 +200,8 @@ class GPU_EXPORT Scheduler {
SchedulingPriority current_priority() const { return current_priority_; } SchedulingPriority current_priority() const { return current_priority_; }
private: private:
friend class Scheduler;
enum RunningState { IDLE, SCHEDULED, RUNNING }; enum RunningState { IDLE, SCHEDULED, RUNNING };
struct WaitFence { struct WaitFence {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment