18 #ifndef hifi_ScriptEngine_h
19 #define hifi_ScriptEngine_h
23 #include <QtCore/QFlags>
24 #include <QtCore/QObject>
26 #include "ScriptValue.h"
27 #include "ScriptException.h"
41 using ScriptEnginePointer = std::shared_ptr<ScriptEngine>;
42 using ScriptProgramPointer = std::shared_ptr<ScriptProgram>;
44 Q_DECLARE_METATYPE(ScriptEnginePointer);
52 inline T scriptvalue_cast(
const ScriptValue& value);
54 class ScriptEngineMemoryStatistics {
58 size_t totalAvailableSize;
59 size_t totalGlobalHandlesSize;
60 size_t usedGlobalHandlesSize;
61 #ifdef OVERTE_V8_MEMORY_DEBUG
62 size_t scriptValueCount;
63 size_t scriptValueProxyCount;
103 typedef bool (*DemarshalFunction)(
const ScriptValue&, QVariant &dest);
297 virtual ScriptValue newArrayBuffer(
const QByteArray& message) = 0;
298 virtual ScriptValue newFunction(FunctionSignature fun,
int length = 0) {
303 virtual ScriptProgramPointer newProgram(
const QString& sourceCode,
const QString& fileName) = 0;
309 virtual ScriptValue newValue(
const QString& value) = 0;
310 virtual ScriptValue newValue(
const QLatin1String& value) = 0;
311 virtual ScriptValue newValue(
const char* value) = 0;
312 virtual ScriptValue newVariant(
const QVariant& value) = 0;
346 virtual bool raiseException(
const QString& error,
const QString &reason = QString()) = 0;
349 virtual void registerEnum(
const QString& enumName, QMetaEnum newEnum) = 0;
350 virtual void registerFunction(
const QString& name, FunctionSignature fun,
int numArguments = -1) = 0;
351 virtual void registerFunction(
const QString& parent,
const QString& name, FunctionSignature fun,
int numArguments = -1) = 0;
352 virtual void registerGetterSetter(
const QString& name, FunctionSignature getter, FunctionSignature setter,
const QString& parent = QString(
"")) = 0;
354 virtual void setDefaultPrototype(
int metaTypeId,
const ScriptValue& prototype) = 0;
355 virtual void setObjectName(
const QString& name) = 0;
356 virtual bool setProperty(
const char* name,
const QVariant& value) = 0;
357 virtual void setProcessEventsInterval(
int interval) = 0;
358 virtual QThread* thread()
const = 0;
359 virtual void setThread(QThread* thread) = 0;
373 virtual void updateMemoryCost(
const qint64& deltaSize) = 0;
374 virtual void requestCollectGarbage() = 0;
385 virtual QString scriptValueDebugDetails(
const ScriptValue &value) = 0;
386 virtual QString scriptValueDebugListMembers(
const ScriptValue &value) = 0;
433 bool IS_THREADSAFE_INVOCATION(
const QString& method);
436 template <
typename T>
437 inline T fromScriptValue(
const ScriptValue& value) {
438 return scriptvalue_cast<T>(value);
441 template <
typename T>
443 return scriptValueFromValue(
this, value);
447 virtual ScriptValue create(
int type,
const void* ptr) = 0;
448 virtual QVariant convert(
const ScriptValue& value,
int type) = 0;
449 virtual void registerCustomType(
int type, MarshalFunction mf, DemarshalFunction df) = 0;
450 virtual QStringList getCurrentScriptURLs()
const = 0;
451 virtual void perManagerLoopIterationCleanup() = 0;
466 Q_DECLARE_OPERATORS_FOR_FLAGS(ScriptEngine::QObjectWrapOptions);
468 ScriptEnginePointer newScriptEngine(
ScriptManager* manager =
nullptr);
[ScriptInterface] Provides an engine-independent interface for QScriptContext
Definition: ScriptContext.h:55
Provides an engine-independent interface for a scripting engine.
Definition: ScriptEngine.h:93
virtual ScriptValue makeError(const ScriptValue &other, const QString &type="Error")=0
Make a ScriptValue that contains an error.
virtual void logBacktrace(const QString &title)=0
Log the current backtrace.
virtual ScriptValue checkScriptSyntax(ScriptProgramPointer program)=0
Check a program for syntax errors.
virtual ScriptValue evaluate(const QString &program, const QString &fileName=QString())=0
Runs a script.
virtual bool raiseException(const ScriptValue &exception, const QString &reason=QString())=0
Causes an exception to be raised in the currently executing script.
virtual void stopProfilingAndSave()=0
Stops collecting profiling data and saves it to a CSV file in Logs directory.
virtual bool isEvaluating() const =0
Whether a script is currently being evaluated.
virtual std::shared_ptr< ScriptException > uncaughtException() const =0
Last uncaught exception, if any.
virtual void dumpHeapObjectStatistics()=0
Prints heap statistics to a file. Collecting needs to first be started with dumpHeapObjectStatistics(...
virtual void abortEvaluation()=0
Stops the currently running script.
virtual ScriptValue evaluateInClosure(const ScriptValue &locals, const ScriptProgramPointer &program)=0
Evaluate a script in a separate environment.
virtual bool raiseException(const QString &error, const QString &reason=QString())=0
Causes an exception to be raised in the currently executing script.
virtual ScriptContext * currentContext() const =0
Context of the currently running script.
virtual void clearExceptions()=0
Clears uncaughtException and related.
virtual bool hasUncaughtException() const =0
Whether the script has an uncaught exception.
virtual void compileTest()=0
Test the underlying scripting engine.
virtual void startCollectingObjectStatistics()=0
Start collecting object statistics that can later be reported with dumpHeapObjectStatistics().
ValueOwnership
Who owns a given object.
Definition: ScriptEngine.h:109
@ QtOwnership
Object is managed by Qt.
Definition: ScriptEngine.h:114
@ ScriptOwnership
Object is managed by the script.
Definition: ScriptEngine.h:120
@ AutoOwnership
Ownership is determined automatically. If the object has a parent, it's deemed QtOwnership....
Definition: ScriptEngine.h:128
virtual ScriptValue evaluate(const ScriptProgramPointer &program)=0
Evaluates a pre-compiled program.
ScriptManager * manager() const
Pointer to the ScriptManager that controls this scripting engine.
Definition: ScriptEngine.h:294
QObjectWrapOption
Which part of an object is exposed to the script.
Definition: ScriptEngine.h:135
@ SkipMethodsInEnumeration
Don't include methods (signals and slots) when enumerating the object's properties.
Definition: ScriptEngine.h:185
@ ExcludeSuperClassContents
The script object will not expose the QObject::deleteLater() slot.
Definition: ScriptEngine.h:159
@ ExcludeSuperClassProperties
The script object will not expose properties inherited from the superclass.
Definition: ScriptEngine.h:153
@ PreferExistingWrapperObject
If a wrapper object with the requested configuration already exists, return that object.
Definition: ScriptEngine.h:179
@ ExcludeSuperClassMethods
The script object will not expose child objects as properties.
Definition: ScriptEngine.h:147
@ ExcludeSlots
The script object will not expose the QObject's slots.
Definition: ScriptEngine.h:167
@ AutoCreateDynamicProperties
Properties that don't already exist in the QObject will be created as dynamic properties of that obje...
Definition: ScriptEngine.h:173
virtual ScriptEngineMemoryStatistics getMemoryUsageStatistics()=0
Return memory usage statistics data.
virtual void startProfiling()=0
Starts collecting profiling data.
void exception(std::shared_ptr< ScriptException > exception)
The script being run threw an exception.
virtual void disconnectSignalProxies()=0
Cleanup function that disconnects signals connected to script proxies to avoid use-after-delete crash...
virtual ScriptValue globalObject()
Global object which holds all the functions and variables available everywhere.
Definition: ScriptEngine.h:251
Manages a single scripting engine.
Definition: ScriptManager.h:281
Engine-independent representation of a script program.
Definition: ScriptProgram.h:35
[ScriptInterface] Provides an engine-independent interface for QScriptValue
Definition: ScriptValue.h:40