Changeset View
Changeset View
Standalone View
Standalone View
source/scriptinterface/ScriptRuntime.h
Show All 19 Lines | |||||
#include "ScriptTypes.h" | #include "ScriptTypes.h" | ||||
#include "ScriptExtraHeaders.h" | #include "ScriptExtraHeaders.h" | ||||
#include <sstream> | #include <sstream> | ||||
#define STACK_CHUNK_SIZE 8192 | #define STACK_CHUNK_SIZE 8192 | ||||
// Those are minimal defaults. The runtime for the main game is larger and GCs upon a larger growth. | |||||
#define DEFAULT_RUNTIME_SIZE 16 * 1024 * 1024 | |||||
Stan: constexpr? constexpr everywhere :) | |||||
#define DEFAULT_HEAP_GROWTH_BYTES_GCTRIGGER 2 * 1024 * 1024 | |||||
/** | /** | ||||
* Abstraction around a SpiderMonkey JSRuntime. | * Abstraction around a SpiderMonkey JSRuntime. | ||||
* Each ScriptRuntime can be used to initialize several ScriptInterface | * Each ScriptRuntime can be used to initialize several ScriptInterface | ||||
* contexts which can then share data, but a single ScriptRuntime should | * contexts which can then share data, but a single ScriptRuntime should | ||||
* only be used on a single thread. | * only be used on a single thread. | ||||
* | * | ||||
* (One means to share data between threads and runtimes is to create | * (One means to share data between threads and runtimes is to create | ||||
* a ScriptInterface::StructuredClone.) | * a ScriptInterface::StructuredClone.) | ||||
*/ | */ | ||||
class ScriptRuntime | class ScriptRuntime | ||||
{ | { | ||||
public: | public: | ||||
ScriptRuntime(shared_ptr<ScriptRuntime> parentRuntime, int runtimeSize, int heapGrowthBytesGCTrigger); | ScriptRuntime(int runtimeSize, int heapGrowthBytesGCTrigger); | ||||
~ScriptRuntime(); | ~ScriptRuntime(); | ||||
/** | /** | ||||
* Returns a runtime, which can used to initialise any number of | |||||
* ScriptInterfaces contexts. Values created in one context may be used | |||||
* in any other context from the same runtime (but not any other runtime). | |||||
* Each runtime should only ever be used on a single thread. | |||||
* @param runtimeSize Maximum size in bytes of the new runtime | |||||
* @param heapGrowthBytesGCTrigger Size in bytes of cumulated allocations after which a GC will be triggered | |||||
*/ | |||||
static shared_ptr<ScriptRuntime> CreateRuntime( | |||||
int runtimeSize = DEFAULT_RUNTIME_SIZE, | |||||
int heapGrowthBytesGCTrigger = DEFAULT_HEAP_GROWTH_BYTES_GCTRIGGER); | |||||
/** | |||||
* MaybeIncrementalRuntimeGC tries to determine whether a runtime-wide garbage collection would free up enough memory to | * MaybeIncrementalRuntimeGC tries to determine whether a runtime-wide garbage collection would free up enough memory to | ||||
* be worth the amount of time it would take. It does this with our own logic and NOT some predefined JSAPI logic because | * be worth the amount of time it would take. It does this with our own logic and NOT some predefined JSAPI logic because | ||||
* such functionality currently isn't available out of the box. | * such functionality currently isn't available out of the box. | ||||
* It does incremental GC which means it will collect one slice each time it's called until the garbage collection is done. | * It does incremental GC which means it will collect one slice each time it's called until the garbage collection is done. | ||||
* This can and should be called quite regularly. The delay parameter allows you to specify a minimum time since the last GC | * This can and should be called quite regularly. The delay parameter allows you to specify a minimum time since the last GC | ||||
* in seconds (the delay should be a fraction of a second in most cases though). | * in seconds (the delay should be a fraction of a second in most cases though). | ||||
* It will only start a new incremental GC or another GC slice if this time is exceeded. The user of this function is | * It will only start a new incremental GC or another GC slice if this time is exceeded. The user of this function is | ||||
* responsible for ensuring that GC can run with a small enough delay to get done with the work. | * responsible for ensuring that GC can run with a small enough delay to get done with the work. | ||||
Show All 22 Lines |
Wildfire Games · Phabricator
constexpr? constexpr everywhere :)