#include <s_async.h>
Collaboration diagram for AsyncEngine:Public Member Functions | |
| AsyncEngine ()=default | |
| AsyncEngine (Server *server) | |
| ~AsyncEngine () | |
| void | registerStateInitializer (StateInitializer func) |
| Register function to be called on new states. | |
| void | initialize (unsigned int numEngines) |
| Create async engine tasks and lock function registration. | |
| u32 | queueAsyncJob (std::string &&func, std::string &¶ms, const std::string &mod_origin="") |
| Queue an async job. | |
| u32 | queueAsyncJob (std::string &&func, PackedValue *params, const std::string &mod_origin="") |
| Queue an async job. | |
| void | step (lua_State *L) |
| Engine step to process finished jobs. | |
Protected Member Functions | |
| bool | getJob (LuaJobInfo *job) |
| Get a Job from queue to be processed this function blocks until a job is ready. | |
| void | putJobResult (LuaJobInfo &&result) |
| Put a Job result back to result queue. | |
| void | addWorkerThread () |
| Start an additional worker thread. | |
| void | stepJobResults (lua_State *L) |
| Process finished jobs callbacks. | |
| void | stepAutoscale () |
| Handle automatic scaling of worker threads. | |
| bool | prepareEnvironment (lua_State *L, int top) |
| Initialize environment with current registred functions this function adds all functions registred by registerFunction to the passed lua stack. | |
Private Types | |
| typedef void(* | StateInitializer) (lua_State *L, int top) |
Private Attributes | |
| bool | initDone = false |
| unsigned int | autoscaleMaxWorkers = 0 |
| u64 | autoscaleTimer = 0 |
| std::unordered_set< u32 > | autoscaleSeenJobs |
| Server * | server = nullptr |
| std::vector< StateInitializer > | stateInitializers |
| u32 | jobIdCounter = 0 |
| std::mutex | jobQueueMutex |
| std::deque< LuaJobInfo > | jobQueue |
| std::mutex | resultQueueMutex |
| std::deque< LuaJobInfo > | resultQueue |
| std::vector< AsyncWorkerThread * > | workerThreads |
| Semaphore | jobQueueCounter |
Friends | |
| class | AsyncWorkerThread |
|
private |
|
default |
|
inline |
| AsyncEngine::~AsyncEngine | ( | ) |
References infostream, jobQueue, jobQueueCounter, jobQueueMutex, Semaphore::post(), and workerThreads.
Here is the call graph for this function:
|
protected |
Start an additional worker thread.
References AsyncWorkerThread, itos(), Thread::start(), and workerThreads.
Referenced by initialize(), and stepAutoscale().
Here is the call graph for this function:
Here is the caller graph for this function:
|
protected |
Get a Job from queue to be processed this function blocks until a job is ready.
| job | a job to be processed |
References jobQueue, jobQueueCounter, jobQueueMutex, and Semaphore::wait().
Referenced by AsyncWorkerThread::run().
Here is the call graph for this function:
Here is the caller graph for this function:| void AsyncEngine::initialize | ( | unsigned int | numEngines | ) |
Create async engine tasks and lock function registration.
| numEngines | Number of worker threads, 0 for automatic scaling |
References addWorkerThread(), autoscaleMaxWorkers, Thread::getNumberOfProcessors(), infostream, and initDone.
Referenced by ServerScripting::initAsync(), and MainMenuScripting::initializeModApi().
Here is the call graph for this function:
Here is the caller graph for this function:
|
protected |
Initialize environment with current registred functions this function adds all functions registred by registerFunction to the passed lua stack.
| L | Lua stack to initialize |
| top | Stack position |
References BUILTIN_MOD_NAME, DIR_DELIM, errorstream, FATAL_ERROR, Server::getBuiltinLuaPath(), ModApiBase::getScriptApiBase(), stateInitializers, and BaseException::what().
Referenced by AsyncWorkerThread::AsyncWorkerThread().
Here is the call graph for this function:
Here is the caller graph for this function:
|
protected |
Put a Job result back to result queue.
| result | result of completed job |
References resultQueue, and resultQueueMutex.
Referenced by AsyncWorkerThread::run().
Here is the caller graph for this function:| u32 AsyncEngine::queueAsyncJob | ( | std::string && | func, |
| PackedValue * | params, | ||
| const std::string & | mod_origin = "" ) |
Queue an async job.
| func | Serialized lua function |
| params | Serialized parameters (takes ownership!) |
References jobIdCounter, jobQueue, jobQueueCounter, jobQueueMutex, and Semaphore::post().
Here is the call graph for this function:| u32 AsyncEngine::queueAsyncJob | ( | std::string && | func, |
| std::string && | params, | ||
| const std::string & | mod_origin = "" ) |
Queue an async job.
| func | Serialized lua function |
| params | Serialized parameters |
References jobIdCounter, jobQueue, jobQueueCounter, jobQueueMutex, and Semaphore::post().
Referenced by MainMenuScripting::queueAsync(), and ServerScripting::queueAsync().
Here is the call graph for this function:
Here is the caller graph for this function:| void AsyncEngine::registerStateInitializer | ( | StateInitializer | func | ) |
Register function to be called on new states.
| func | C function to be called |
References FATAL_ERROR_IF, initDone, and stateInitializers.
Referenced by ServerScripting::initAsync(), and MainMenuScripting::initializeModApi().
Here is the caller graph for this function:| void AsyncEngine::step | ( | lua_State * | L | ) |
Engine step to process finished jobs.
| L | The Lua stack |
References stepAutoscale(), and stepJobResults().
Referenced by MainMenuScripting::step(), and ServerScripting::stepAsync().
Here is the call graph for this function:
Here is the caller graph for this function:
|
protected |
Handle automatic scaling of worker threads.
References addWorkerThread(), autoscaleMaxWorkers, autoscaleSeenJobs, autoscaleTimer, porting::getTimeMs(), infostream, jobQueue, jobQueueMutex, and workerThreads.
Referenced by step().
Here is the call graph for this function:
Here is the caller graph for this function:
|
protected |
Process finished jobs callbacks.
References FATAL_ERROR, ModApiBase::getScriptApiBase(), LuaJobInfo::id, LuaJobInfo::mod_origin, PUSH_ERROR_HANDLER, LuaJobInfo::result, LuaJobInfo::result_ext, resultQueue, resultQueueMutex, script_error(), script_unpack(), and ScriptApiBase::setOriginDirect().
Referenced by step().
Here is the call graph for this function:
Here is the caller graph for this function:
|
friend |
Referenced by addWorkerThread().
|
private |
Referenced by initialize(), and stepAutoscale().
|
private |
Referenced by stepAutoscale().
|
private |
Referenced by stepAutoscale().
|
private |
Referenced by initialize(), and registerStateInitializer().
|
private |
Referenced by queueAsyncJob(), and queueAsyncJob().
|
private |
Referenced by ~AsyncEngine(), getJob(), queueAsyncJob(), queueAsyncJob(), and stepAutoscale().
|
private |
Referenced by ~AsyncEngine(), getJob(), queueAsyncJob(), and queueAsyncJob().
|
private |
Referenced by ~AsyncEngine(), getJob(), queueAsyncJob(), queueAsyncJob(), and stepAutoscale().
|
private |
Referenced by putJobResult(), and stepJobResults().
|
private |
Referenced by putJobResult(), and stepJobResults().
|
private |
|
private |
Referenced by prepareEnvironment(), and registerStateInitializer().
|
private |
Referenced by ~AsyncEngine(), addWorkerThread(), and stepAutoscale().