Index: gpu/command_buffer/service/program_manager.cc |
diff --git a/gpu/command_buffer/service/program_manager.cc b/gpu/command_buffer/service/program_manager.cc |
index 754d5b0630b16d7d450787076dbbfbfd6b3fb257..f09417f2fdde20161fdfcc9bbb7d6a4bb083ea40 100644 |
--- a/gpu/command_buffer/service/program_manager.cc |
+++ b/gpu/command_buffer/service/program_manager.cc |
@@ -2482,6 +2482,23 @@ void ProgramManager::Destroy(bool have_context) { |
programs_.clear(); |
} |
+bool ProgramManager::PreDestroyWithTimeout(bool have_context, |
+ const base::TimeTicks& timeout) { |
+ have_context_ = have_context; |
+ for (auto it = programs_.begin(); it != programs_.end();) { |
+ if (it->second->InUse()) { |
+ // Can't delete in-use programs. |
+ ++it; |
+ continue; |
+ } |
+ if (base::TimeTicks::Now() > timeout) |
+ return false; |
+ |
+ it = programs_.erase(it); |
+ } |
+ return true; |
+} |
+ |
void ProgramManager::StartTracking(Program* /* program */) { |
++program_count_; |
} |