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) {
}
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);
DCHECK(sequence);
if (sequence->scheduled())
rebuild_scheduling_queue_ = true;
Sequence* sequence = GetSequence(sequence_id);
DCHECK(sequence);
if (sequence->scheduled())
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) {
......
......@@ -200,6 +200,8 @@ class GPU_EXPORT Scheduler {
SchedulingPriority current_priority() const { return current_priority_; }
private:
friend class Scheduler;
enum RunningState { IDLE, SCHEDULED, RUNNING };
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