| 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..32b36e35e37266c08a9199ce4f365e1e997e955d 100644
|
| --- a/src/compiler-dispatcher/compiler-dispatcher.h
|
| +++ b/src/compiler-dispatcher/compiler-dispatcher.h
|
| @@ -7,9 +7,12 @@
|
|
|
| #include <map>
|
| #include <memory>
|
| +#include <unordered_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"
|
|
|
| @@ -19,6 +22,7 @@ class Platform;
|
|
|
| namespace internal {
|
|
|
| +class CancelableTaskManager;
|
| class CompilerDispatcherJob;
|
| class CompilerDispatcherTracer;
|
| class Isolate;
|
| @@ -55,15 +59,23 @@ class V8_EXPORT_PRIVATE CompilerDispatcher {
|
|
|
| private:
|
| FRIEND_TEST(CompilerDispatcherTest, IdleTaskSmallIdleTime);
|
| + FRIEND_TEST(IgnitionCompilerDispatcherTest, CompileOnBackgroundThread);
|
| + FRIEND_TEST(IgnitionCompilerDispatcherTest, FinishNowWithBackgroundTask);
|
|
|
| typedef std::multimap<std::pair<int, int>,
|
| std::unique_ptr<CompilerDispatcherJob>>
|
| JobMap;
|
| + class BackgroundTask;
|
| class IdleTask;
|
|
|
| + void WaitForJobIfRunningOnBackground(CompilerDispatcherJob* job);
|
| bool IsEnabled() const;
|
| JobMap::const_iterator GetJobFor(Handle<SharedFunctionInfo> shared) const;
|
| + void ConsiderJobForBackgroundProcessing(CompilerDispatcherJob* job);
|
| + void ScheduleMoreBackgroundTasksIfNeeded();
|
| + void ScheduleIdleTaskFromAnyThread();
|
| void ScheduleIdleTaskIfNeeded();
|
| + void DoBackgroundWork();
|
| void DoIdleWork(double deadline_in_seconds);
|
|
|
| Isolate* isolate_;
|
| @@ -71,12 +83,33 @@ class V8_EXPORT_PRIVATE CompilerDispatcher {
|
| size_t max_stack_size_;
|
| std::unique_ptr<CompilerDispatcherTracer> tracer_;
|
|
|
| - bool idle_task_scheduled_;
|
| + std::unique_ptr<CancelableTaskManager> task_manager_;
|
|
|
| // Mapping from (script id, function literal id) to job. We use a multimap,
|
| // 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_;
|
| +
|
| + bool idle_task_scheduled_;
|
| +
|
| + // Number of currently scheduled BackgroundTask objects.
|
| + size_t num_scheduled_background_tasks_;
|
| +
|
| + // The set of CompilerDispatcherJobs that can be advanced on any thread.
|
| + std::unordered_set<CompilerDispatcherJob*> pending_background_jobs_;
|
| +
|
| + // The set of CompilerDispatcherJobs currently processed on background
|
| + // threads.
|
| + std::unordered_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);
|
| };
|
|
|
|
|