 Issue 29367507:
  Issue #3595 - Add an actual scheduler; use joined threads for file system
    
  
    Issue 29367507:
  Issue #3595 - Add an actual scheduler; use joined threads for file system 
  | Index: src/JsEngine.cpp | 
| =================================================================== | 
| --- a/src/JsEngine.cpp | 
| +++ b/src/JsEngine.cpp | 
| @@ -19,8 +19,18 @@ | 
| #include "GlobalJsObject.h" | 
| #include "JsContext.h" | 
| #include "JsError.h" | 
| +#include "Scheduler.h" | 
| #include "Utils.h" | 
| +const AdblockPlus::ImmediateSingleUseThreadType AdblockPlus::ImmediateSingleUseThread = {}; | 
| + | 
| +class AdblockPlus::JsEngine::SchedulerImpl | 
| + : public SchedulerT<SingleUseWorker> | 
| +{ | 
| +public: | 
| + SchedulerImpl() {} // = default; | 
| 
sergei
2017/01/20 13:08:13
We don't need this line.
 | 
| +}; | 
| + | 
| namespace | 
| { | 
| v8::Handle<v8::Script> CompileScript(v8::Isolate* isolate, | 
| @@ -77,9 +87,9 @@ | 
| } | 
| AdblockPlus::JsEngine::JsEngine(const ScopedV8IsolatePtr& isolate) | 
| - : isolate(isolate) | 
| -{ | 
| -} | 
| + : isolate(isolate), | 
| + scheduler(new SchedulerImpl()) // use std::make_unique after we upgrade out of VS2012 | 
| 
sergei
2017/01/20 13:08:13
We don't need this comment about std::make_unique
 
Eric
2017/03/30 17:16:58
Is that because we're planning never to upgrade fr
 
sergei
2017/04/03 15:35:31
Maybe, though I think that std::make_shared are mu
 | 
| +{} | 
| AdblockPlus::JsEnginePtr AdblockPlus::JsEngine::New(const AppInfo& appInfo, const ScopedV8IsolatePtr& isolate) | 
| { | 
| @@ -95,10 +105,10 @@ | 
| return result; | 
| } | 
| -AdblockPlus::JsValuePtr AdblockPlus::JsEngine::GetGlobalObject() | 
| -{ | 
| - JsContext context(shared_from_this()); | 
| - return JsValuePtr(new JsValue(shared_from_this(), context.GetV8Context()->Global())); | 
| +AdblockPlus::JsValuePtr AdblockPlus::JsEngine::GetGlobalObject() | 
| +{ | 
| + JsContext context(shared_from_this()); | 
| + return JsValuePtr(new JsValue(shared_from_this(), context.GetV8Context()->Global())); | 
| } | 
| AdblockPlus::JsValuePtr AdblockPlus::JsEngine::Evaluate(const std::string& source, | 
| @@ -252,3 +262,16 @@ | 
| throw std::runtime_error("Global object cannot be null"); | 
| global->SetProperty(name, value); | 
| } | 
| + | 
| +void AdblockPlus::JsEngine::Schedule(std::function<void()> task, | 
| + AdblockPlus::ImmediateSingleUseThreadType) | 
| +{ | 
| + // The present version of the scheduler only does immediate and single-use | 
| + // It does not, however, detach threads like the legacy thread behavior did. | 
| + scheduler->Run(task); | 
| +} | 
| + | 
| +void AdblockPlus::JsEngine::WaitForQuietScheduler() | 
| +{ | 
| + scheduler->JoinAll(); | 
| +} |