Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: include/AdblockPlus/JsEngine.h

Issue 29367507: Issue #3595 - Add an actual scheduler; use joined threads for file system
Patch Set: Created Dec. 14, 2016, 5:38 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | libadblockplus.gyp » ('j') | src/JsEngine.cpp » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: include/AdblockPlus/JsEngine.h
===================================================================
--- a/include/AdblockPlus/JsEngine.h
+++ b/include/AdblockPlus/JsEngine.h
@@ -20,6 +20,7 @@
#include <functional>
#include <map>
+#include <memory>
#include <stdexcept>
#include <stdint.h>
#include <string>
@@ -73,6 +74,9 @@
*/
typedef std::shared_ptr<ScopedV8Isolate> ScopedV8IsolatePtr;
+ struct ImmediateSingleUseThreadType {}; ///< Marker class for scheduling policy
+ extern const ImmediateSingleUseThreadType ImmediateSingleUseThread; ///< Dummy constant for scheduling policy
sergei 2017/01/20 13:08:13 Since it's not used I would propose to remove any
+
/**
* JavaScript engine used by `FilterEngine`, wraps v8.
*/
@@ -133,6 +137,25 @@
const std::string& filename = "");
/**
+ * Schedule a task with these policies:
+ * - timing policy: start execution immediately.
sergei 2017/01/20 13:08:12 I would remove the comment about timing policy bec
Eric 2017/03/30 17:16:58 "Immediately" simply means "at the present time, w
+ * - threading policy: run the task in a single-use thread.
+ *
+ * @param task
+ * Task to execute. All v8 handles should refer to the present engine.
+ * @param ImmediateSingleUseThreadType
+ * The schedule policy--create a new thread and discard it afterwards.
sergei 2017/01/20 13:08:12 I would remove that parameter because there is no
Eric 2017/03/30 17:16:58 This parameter is a marker, acting both as documen
+ */
+ void Schedule(std::function<void()> task, ImmediateSingleUseThreadType);
sergei 2017/01/20 13:08:13 Although it's expected that task can be copied int
Eric 2017/03/30 17:16:58 In the present code, it's passed by value intentio
sergei 2017/04/03 15:35:31 Acknowledged.
+
+ /**
+ * Block until there are no more tasks running in the scheduler.
+ *
+ * Note: this function does not prevent new tasks from being scheduled.
+ */
+ void WaitForQuietScheduler();
+
+ /**
* Initiates a garbage collection.
*/
void Gc();
@@ -253,7 +276,7 @@
private:
explicit JsEngine(const ScopedV8IsolatePtr& isolate);
- JsValuePtr GetGlobalObject();
+ JsValuePtr GetGlobalObject();
/// Isolate must be disposed only after disposing of all objects which are
/// using it.
@@ -264,6 +287,16 @@
LogSystemPtr logSystem;
std::unique_ptr<v8::Persistent<v8::Context>> context;
EventMap eventCallbacks;
+
+ // Forward declaration for PImpl idiom
sergei 2017/01/20 13:08:13 We don't need this comment.
Eric 2017/03/30 17:16:58 Yes, we do. Dangling declarations with zero docume
+ class SchedulerImpl;
+ /**
+ * Scheduler for tasks executed under the current engine.
+ *
+ * \par Invariant
+ * `bool(scheduler)` is always true
+ */
+ std::unique_ptr<SchedulerImpl> scheduler;
};
}
« no previous file with comments | « no previous file | libadblockplus.gyp » ('j') | src/JsEngine.cpp » ('J')

Powered by Google App Engine
This is Rietveld