Index: include/v8.h |
diff --git a/include/v8.h b/include/v8.h |
index db4c31e9042a855982f19b0323a0ed8496ede895..71bff6ae2ed78c1b33803f55cde1a2586dfe998b 100644 |
--- a/include/v8.h |
+++ b/include/v8.h |
@@ -5450,6 +5450,21 @@ class V8_EXPORT Isolate { |
kMinorGarbageCollection |
}; |
+ |
+ /** |
+ * Policy for running microtasks: |
+ * - explicit: microtasks are invoked with RunMicrotasks() method; |
+ * - scoped: microtasks invocation is controlled by MicrotasksScope objects; |
+ * - auto: microtasks are invoked when the script call depth decrements |
+ * to zero. |
+ */ |
+ enum MicrotasksPolicy { |
jochen (gone - plz use gerrit)
2016/03/01 14:26:08
i'd prefer an enum class
dgozman
2016/03/03 01:22:06
Done.
|
+ kExplicitMicrotasksInvocation, |
+ kScopedMicrotasksInvocation, |
+ kAutoMicrotasksInvocation |
+ }; |
+ |
+ |
/** |
* Features reported via the SetUseCounterCallback callback. Do not change |
* assigned numbers of existing items; add new features to the end of this |
@@ -5884,17 +5899,22 @@ class V8_EXPORT Isolate { |
*/ |
void EnqueueMicrotask(MicrotaskCallback microtask, void* data = NULL); |
- /** |
- * Experimental: Controls whether the Microtask Work Queue is automatically |
- * run when the script call depth decrements to zero. |
+ /** |
+ * Experimental: Controls how Microtasks are invoked. See MicrotasksPolicy |
+ * for details. |
*/ |
- void SetAutorunMicrotasks(bool autorun); |
+ void SetMicrotasksPolicy(MicrotasksPolicy policy); |
+ V8_DEPRECATE_SOON( |
+ "Use SetMicrotasksPolicy", |
+ void SetAutorunMicrotasks(bool autorun)); |
/** |
- * Experimental: Returns whether the Microtask Work Queue is automatically |
- * run when the script call depth decrements to zero. |
+ * Experimental: Returns the policy controlling how Microtasks are invoked. |
*/ |
- bool WillAutorunMicrotasks() const; |
+ MicrotasksPolicy GetMicrotasksPolicy() const; |
+ V8_DEPRECATE_SOON( |
+ "Use GetMicrotasksPolicy", |
+ bool WillAutorunMicrotasks() const); |
/** |
* Experimental: adds a callback to notify the host application after |
@@ -6144,6 +6164,41 @@ class V8_EXPORT StartupData { |
/** |
+ * This scope is used to control microtasks when kScopeMicrotasksInvocation |
+ * is used on Isolate. In this mode every non-primitive call to V8 should be |
+ * done inside some MicrotasksScope. |
+ * Microtasks are executed when topmost MicrotasksScope marked as kRunMicrotasks |
+ * exits. |
+ * kDoNotRunMicrotasks should be used to annotate calls not intended to trigger |
+ * microtasks. |
+ */ |
+class V8_EXPORT MicrotasksScope { |
+ public: |
+ enum Type { kRunMicrotasks, kDoNotRunMicrotasks }; |
+ |
+ MicrotasksScope(Isolate* isolate, Type type); |
+ ~MicrotasksScope(); |
+ |
+ /** |
+ * Runs microtasks if no kRunMicrotasks scope is currently active. |
+ */ |
+ static void PerformCheckpoint(Isolate*); |
+ |
+ /** |
+ * Returns current recursion level of scope objects. |
+ */ |
+ static int GetRecursionLevel(Isolate*); |
+ |
+ private: |
+ void* internal_; |
+ |
+ // Prevent copying. |
+ MicrotasksScope(const MicrotasksScope&); |
+ MicrotasksScope& operator=(const MicrotasksScope&); |
+}; |
+ |
+ |
+/** |
* EntropySource is used as a callback function when v8 needs a source |
* of entropy. |
*/ |