Index: src/compiler-dispatcher/compiler-dispatcher.h |
diff --git a/src/compiler-dispatcher/compiler-dispatcher.h b/src/compiler-dispatcher/compiler-dispatcher.h |
index fea141e22f970ff9112290707539ca5d4c574015..d99c259a6783641923d52f41b5df27a9f366c811 100644 |
--- a/src/compiler-dispatcher/compiler-dispatcher.h |
+++ b/src/compiler-dispatcher/compiler-dispatcher.h |
@@ -7,9 +7,12 @@ |
#include <map> |
#include <memory> |
+#include <set> |
#include <utility> |
#include "src/base/macros.h" |
+#include "src/base/platform/condition-variable.h" |
+#include "src/base/platform/mutex.h" |
#include "src/globals.h" |
#include "testing/gtest/include/gtest/gtest_prod.h" |
@@ -59,11 +62,16 @@ class V8_EXPORT_PRIVATE CompilerDispatcher { |
typedef std::multimap<std::pair<int, int>, |
std::unique_ptr<CompilerDispatcherJob>> |
JobMap; |
+ class BackgroundTask; |
class IdleTask; |
+ void EnsureNotOnBackground(CompilerDispatcherJob* job); |
bool IsEnabled() const; |
JobMap::const_iterator GetJobFor(Handle<SharedFunctionInfo> shared) const; |
+ void ConsiderJobForBackgroundProcessing(CompilerDispatcherJob* job); |
+ void ScheduleMoreBackgroundTasksIfNeeded(); |
void ScheduleIdleTaskIfNeeded(); |
+ void DoBackgroundWork(); |
void DoIdleWork(double deadline_in_seconds); |
Isolate* isolate_; |
@@ -77,6 +85,29 @@ class V8_EXPORT_PRIVATE CompilerDispatcher { |
// as script id is not necessarily unique. |
JobMap jobs_; |
+ // The following members can be accessed from any thread. Methods need to hold |
+ // the mutex |mutex_| while accessing them. |
+ base::Mutex mutex_; |
+ |
+ // Number of currently scheduled BackgroundTask objects. |
+ size_t num_scheduled_background_tasks_; |
+ |
+ // Number of currently available CompilerDispatcherJobs that can be advanced |
+ // on any thread. |
+ size_t num_available_background_jobs_; |
+ |
+ // The set of CompilerDispatcherJobs that can be advanced on any thread. |
+ std::set<CompilerDispatcherJob*> pending_background_jobs_; |
+ |
+ // The set of CompilerDispatcherJobs currently processed on background |
+ // threads. |
+ std::set<CompilerDispatcherJob*> running_background_jobs_; |
+ |
+ // If not nullptr, then the main thread waits for the task processing |
+ // this job, and blocks on the ConditionVariable main_thread_blocking_signal_. |
+ CompilerDispatcherJob* main_thread_blocking_on_job_; |
+ base::ConditionVariable main_thread_blocking_signal_; |
+ |
DISALLOW_COPY_AND_ASSIGN(CompilerDispatcher); |
}; |