Index: src/compiler-dispatcher/compiler-dispatcher.h |
diff --git a/src/compiler-dispatcher/compiler-dispatcher.h b/src/compiler-dispatcher/compiler-dispatcher.h |
index e6737a002945175bcaaefd3bcf6d25bec2232edc..220fcd0596c2e0035b6b267681ed7ec5dbf09f43 100644 |
--- a/src/compiler-dispatcher/compiler-dispatcher.h |
+++ b/src/compiler-dispatcher/compiler-dispatcher.h |
@@ -11,8 +11,12 @@ |
#include "src/base/macros.h" |
#include "src/globals.h" |
+#include "testing/gtest/include/gtest/gtest_prod.h" |
namespace v8 { |
+ |
+class Platform; |
+ |
namespace internal { |
class CompilerDispatcherJob; |
@@ -23,11 +27,14 @@ class SharedFunctionInfo; |
template <typename T> |
class Handle; |
+// The CompilerDispatcher uses a combination of idle tasks and background tasks |
+// to parse and compile lazily parsed functions. |
class V8_EXPORT_PRIVATE CompilerDispatcher { |
public: |
enum class BlockingBehavior { kBlock, kDontBlock }; |
- CompilerDispatcher(Isolate* isolate, size_t max_stack_size); |
+ CompilerDispatcher(Isolate* isolate, Platform* platform, |
+ size_t max_stack_size); |
~CompilerDispatcher(); |
// Returns true if a job was enqueued. |
@@ -47,15 +54,24 @@ class V8_EXPORT_PRIVATE CompilerDispatcher { |
void AbortAll(BlockingBehavior blocking); |
private: |
+ FRIEND_TEST(CompilerDispatcherTest, IdleTaskSmallIdleTime); |
+ |
typedef std::multimap<std::pair<int, int>, |
std::unique_ptr<CompilerDispatcherJob>> |
JobMap; |
+ class IdleTask; |
+ |
JobMap::const_iterator GetJobFor(Handle<SharedFunctionInfo> shared) const; |
+ void ScheduleIdleTaskIfNeeded(); |
+ void DoIdleWork(double deadline_in_seconds); |
Isolate* isolate_; |
+ Platform* platform_; |
size_t max_stack_size_; |
std::unique_ptr<CompilerDispatcherTracer> tracer_; |
+ bool idle_task_scheduled_; |
+ |
// Mapping from (script id, function literal id) to job. We use a multimap, |
// as script id is not necessarily unique. |
JobMap jobs_; |