aboutsummaryrefslogtreecommitdiffstats
path: root/tests/benchmarks/qml/script/tst_script.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/benchmarks/qml/script/tst_script.cpp')
-rw-r--r--tests/benchmarks/qml/script/tst_script.cpp253
1 files changed, 151 insertions, 102 deletions
diff --git a/tests/benchmarks/qml/script/tst_script.cpp b/tests/benchmarks/qml/script/tst_script.cpp
index 204fb945eb..e7418d5fc0 100644
--- a/tests/benchmarks/qml/script/tst_script.cpp
+++ b/tests/benchmarks/qml/script/tst_script.cpp
@@ -43,10 +43,9 @@
#include <QQmlEngine>
#include <QQmlComponent>
#include <private/qqmlengine_p.h>
-#include <private/qdeclarativeobjectscriptclass_p.h>
#include <private/qquickrectangle_p.h>
-#include <QScriptEngine>
-#include <QScriptValue>
+#include <QJSEngine>
+#include <QJSValue>
class tst_script : public QObject
{
@@ -58,10 +57,13 @@ private slots:
void initTestCase();
void property_js();
- void property_getter();
void property_getter_js();
- void property_getter_qobject();
- void property_getter_qmetaproperty();
+#if 0
+ //no native functions for now
+ void property_getter();
+ void property_getter_qobject();
+ void property_getter_qmetaproperty();
+#endif
void property_qobject();
void property_qmlobject();
@@ -69,12 +71,18 @@ private slots:
void setproperty_qmlobject();
void function_js();
+#if 0
+ //no native functions for now
void function_cpp();
+#endif
void function_qobject();
void function_qmlobject();
void function_args_js();
+#if 0
+ //no native functions for now
void function_args_cpp();
+#endif
void function_args_qobject();
void function_args_qmlobject();
@@ -82,6 +90,8 @@ private slots:
void signal_qml();
void signal_args();
void signal_unusedArgs();
+ void signal_heavyArgsAccess();
+ void signal_heavyIdAccess();
void slot_simple();
void slot_simple_js();
@@ -144,7 +154,7 @@ TestObject::TestObject(QObject *parent)
{
}
-int TestObject::x()
+int TestObject::x()
{
return m_x++;
}
@@ -166,14 +176,14 @@ void tst_script::initTestCase()
void tst_script::property_js()
{
- QScriptEngine engine;
+ QJSEngine engine;
- QScriptValue v = engine.newObject();
+ QJSValue v = engine.newObject();
v.setProperty(QLatin1String("x"), 10);
- QScriptValueList args;
+ QJSValueList args;
args << v;
- QScriptValue prog = engine.evaluate(PROPERTY_PROGRAM).call(engine.globalObject(), args);
+ QJSValue prog = engine.evaluate(PROPERTY_PROGRAM).call(args);
prog.call();
QBENCHMARK {
@@ -181,23 +191,24 @@ void tst_script::property_js()
}
}
-static QScriptValue property_getter_method(QScriptContext *, QScriptEngine *engine)
+#if 0
+static QJSValue property_getter_method(QScriptContext *, QJSEngine *engine)
{
static int x = 0;
- return QScriptValue(engine,x++);
+ return QJSValue(engine,x++);
}
void tst_script::property_getter()
{
- QScriptEngine engine;
+ QJSEngine engine;
- QScriptValue v = engine.newObject();
- v.setProperty(QLatin1String("x"), engine.newFunction(property_getter_method),
- QScriptValue::PropertyGetter);
+ QJSValue v = engine.newObject();
+ v.setProperty(QLatin1String("x"), engine.newFunction(property_getter_method),
+ QJSValue::PropertyGetter);
- QScriptValueList args;
+ QJSValueList args;
args << v;
- QScriptValue prog = engine.evaluate(PROPERTY_PROGRAM).call(engine.globalObject(), args);
+ QJSValue prog = engine.evaluate(PROPERTY_PROGRAM).call(args);
prog.call();
QBENCHMARK {
@@ -206,44 +217,44 @@ void tst_script::property_getter()
}
static TestObject *property_getter_qobject_object = 0;
-static QScriptValue property_getter_qobject_method(QScriptContext *, QScriptEngine *)
+static QJSValue property_getter_qobject_method(QScriptContext *, QJSEngine *)
{
static int idx = -1;
- if (idx == -1)
+ if (idx == -1)
idx = TestObject::staticMetaObject.indexOfProperty("x");
int value = 0;
void *args[] = { &value, 0 };
QMetaObject::metacall(property_getter_qobject_object, QMetaObject::ReadProperty, idx, args);
- return QScriptValue(value);
+ return QJSValue(value);
}
-static QScriptValue property_getter_qmetaproperty_method(QScriptContext *, QScriptEngine *)
+static QJSValue property_getter_qmetaproperty_method(QScriptContext *, QJSEngine *)
{
static int idx = -1;
- if (idx == -1)
+ if (idx == -1)
idx = TestObject::staticMetaObject.indexOfProperty("x");
int value = 0;
value = property_getter_qobject_object->metaObject()->property(idx).read(property_getter_qobject_object).toInt();
- return QScriptValue(value);
+ return QJSValue(value);
}
void tst_script::property_getter_qobject()
{
- QScriptEngine engine;
+ QJSEngine engine;
TestObject to;
property_getter_qobject_object = &to;
- QScriptValue v = engine.newObject();
- v.setProperty(QLatin1String("x"), engine.newFunction(property_getter_qobject_method),
- QScriptValue::PropertyGetter);
+ QJSValue v = engine.newObject();
+ v.setProperty(QLatin1String("x"), engine.newFunction(property_getter_qobject_method),
+ QJSValue::PropertyGetter);
- QScriptValueList args;
+ QJSValueList args;
args << v;
- QScriptValue prog = engine.evaluate(PROPERTY_PROGRAM).call(engine.globalObject(), args);
+ QJSValue prog = engine.evaluate(PROPERTY_PROGRAM).call(args);
prog.call();
QBENCHMARK {
@@ -254,17 +265,17 @@ void tst_script::property_getter_qobject()
void tst_script::property_getter_qmetaproperty()
{
- QScriptEngine engine;
+ QJSEngine engine;
TestObject to;
property_getter_qobject_object = &to;
- QScriptValue v = engine.newObject();
- v.setProperty(QLatin1String("x"), engine.newFunction(property_getter_qmetaproperty_method),
- QScriptValue::PropertyGetter);
+ QJSValue v = engine.newObject();
+ v.setProperty(QLatin1String("x"), engine.newFunction(property_getter_qmetaproperty_method),
+ QJSValue::PropertyGetter);
- QScriptValueList args;
+ QJSValueList args;
args << v;
- QScriptValue prog = engine.evaluate(PROPERTY_PROGRAM).call(engine.globalObject(), args);
+ QJSValue prog = engine.evaluate(PROPERTY_PROGRAM).call(args);
prog.call();
QBENCHMARK {
@@ -272,17 +283,17 @@ void tst_script::property_getter_qmetaproperty()
}
property_getter_qobject_object = 0;
}
-
+#endif
void tst_script::property_getter_js()
{
- QScriptEngine engine;
-
- QScriptValue v = engine.evaluate("(function() { var o = new Object; o._x = 0; o.__defineGetter__(\"x\", function() { return this._x++; }); return o; })").call();
+ QJSEngine engine;
+
+ QJSValue v = engine.evaluate("(function() { var o = new Object; o._x = 0; o.__defineGetter__(\"x\", function() { return this._x++; }); return o; })").call();
- QScriptValueList args;
+ QJSValueList args;
args << v;
- QScriptValue prog = engine.evaluate(PROPERTY_PROGRAM).call(engine.globalObject(), args);
+ QJSValue prog = engine.evaluate(PROPERTY_PROGRAM).call(args);
prog.call();
QBENCHMARK {
@@ -292,14 +303,14 @@ void tst_script::property_getter_js()
void tst_script::property_qobject()
{
- QScriptEngine engine;
+ QJSEngine engine;
TestObject to;
- QScriptValue v = engine.newQObject(&to);
+ QJSValue v = engine.newQObject(&to);
- QScriptValueList args;
+ QJSValueList args;
args << v;
- QScriptValue prog = engine.evaluate(PROPERTY_PROGRAM).call(engine.globalObject(), args);
+ QJSValue prog = engine.evaluate(PROPERTY_PROGRAM).call(args);
prog.call();
QBENCHMARK {
@@ -311,14 +322,15 @@ void tst_script::property_qmlobject()
{
QQmlEngine qmlengine;
- QScriptEngine *engine = QQmlEnginePrivate::getScriptEngine(&qmlengine);
TestObject to;
+ QV8Engine *engine = QQmlEnginePrivate::getV8Engine(&qmlengine);
+ v8::HandleScope handle_scope;
+ v8::Context::Scope scope(engine->context());
+ QJSValue v = engine->scriptValueFromInternal(engine->qobjectWrapper()->newQObject(&to));
- QScriptValue v = QQmlEnginePrivate::get(&qmlengine)->objectClass->newQObject(&to);
-
- QScriptValueList args;
+ QJSValueList args;
args << v;
- QScriptValue prog = engine->evaluate(PROPERTY_PROGRAM).call(engine->globalObject(), args);
+ QJSValue prog = qmlengine.evaluate(PROPERTY_PROGRAM).call(args);
prog.call();
QBENCHMARK {
@@ -335,14 +347,14 @@ void tst_script::property_qmlobject()
void tst_script::setproperty_js()
{
- QScriptEngine engine;
+ QJSEngine engine;
- QScriptValue v = engine.newObject();
+ QJSValue v = engine.newObject();
v.setProperty(QLatin1String("x"), 0);
- QScriptValueList args;
+ QJSValueList args;
args << v;
- QScriptValue prog = engine.evaluate(SETPROPERTY_PROGRAM).call(engine.globalObject(), args);
+ QJSValue prog = engine.evaluate(SETPROPERTY_PROGRAM).call(args);
prog.call();
QBENCHMARK {
@@ -354,14 +366,16 @@ void tst_script::setproperty_qmlobject()
{
QQmlEngine qmlengine;
- QScriptEngine *engine = QQmlEnginePrivate::getScriptEngine(&qmlengine);
TestObject to;
- QScriptValue v = QQmlEnginePrivate::get(&qmlengine)->objectClass->newQObject(&to);
+ QV8Engine *engine = QQmlEnginePrivate::getV8Engine(&qmlengine);
+ v8::HandleScope handle_scope;
+ v8::Context::Scope scope(engine->context());
+ QJSValue v = engine->scriptValueFromInternal(engine->qobjectWrapper()->newQObject(&to));
- QScriptValueList args;
+ QJSValueList args;
args << v;
- QScriptValue prog = engine->evaluate(SETPROPERTY_PROGRAM).call(engine->globalObject(), args);
+ QJSValue prog = qmlengine.evaluate(SETPROPERTY_PROGRAM).call(args);
prog.call();
QBENCHMARK {
@@ -380,13 +394,13 @@ void tst_script::setproperty_qmlobject()
void tst_script::function_js()
{
- QScriptEngine engine;
-
- QScriptValue v = engine.evaluate("(function() { var o = new Object; o._x = 0; o.method = (function() { return this._x++; }); return o; })").call();
+ QJSEngine engine;
+
+ QJSValue v = engine.evaluate("(function() { var o = new Object; o._x = 0; o.method = (function() { return this._x++; }); return o; })").call();
- QScriptValueList args;
+ QJSValueList args;
args << v;
- QScriptValue prog = engine.evaluate(FUNCTION_PROGRAM).call(engine.globalObject(), args);
+ QJSValue prog = engine.evaluate(FUNCTION_PROGRAM).call(args);
prog.call();
QBENCHMARK {
@@ -394,39 +408,41 @@ void tst_script::function_js()
}
}
-static QScriptValue function_method(QScriptContext *, QScriptEngine *)
+#if 0
+static QJSValue function_method(QScriptContext *, QJSEngine *)
{
static int x = 0;
- return QScriptValue(x++);
+ return QJSValue(x++);
}
void tst_script::function_cpp()
{
- QScriptEngine engine;
+ QJSEngine engine;
- QScriptValue v = engine.newObject();
+ QJSValue v = engine.newObject();
v.setProperty(QLatin1String("method"), engine.newFunction(function_method));
- QScriptValueList args;
+ QJSValueList args;
args << v;
- QScriptValue prog = engine.evaluate(FUNCTION_PROGRAM).call(engine.globalObject(), args);
+ QJSValue prog = engine.evaluate(FUNCTION_PROGRAM).call(args);
prog.call();
QBENCHMARK {
prog.call();
}
}
+#endif
void tst_script::function_qobject()
{
- QScriptEngine engine;
+ QJSEngine engine;
TestObject to;
- QScriptValue v = engine.newQObject(&to);
+ QJSValue v = engine.newQObject(&to);
- QScriptValueList args;
+ QJSValueList args;
args << v;
- QScriptValue prog = engine.evaluate(FUNCTION_PROGRAM).call(engine.globalObject(), args);
+ QJSValue prog = engine.evaluate(FUNCTION_PROGRAM).call(args);
prog.call();
QBENCHMARK {
@@ -438,14 +454,16 @@ void tst_script::function_qmlobject()
{
QQmlEngine qmlengine;
- QScriptEngine *engine = QQmlEnginePrivate::getScriptEngine(&qmlengine);
TestObject to;
- QScriptValue v = QQmlEnginePrivate::get(&qmlengine)->objectClass->newQObject(&to);
+ QV8Engine *engine = QQmlEnginePrivate::getV8Engine(&qmlengine);
+ v8::HandleScope handle_scope;
+ v8::Context::Scope scope(engine->context());
+ QJSValue v = engine->scriptValueFromInternal(engine->qobjectWrapper()->newQObject(&to));
- QScriptValueList args;
+ QJSValueList args;
args << v;
- QScriptValue prog = engine->evaluate(FUNCTION_PROGRAM).call(engine->globalObject(), args);
+ QJSValue prog = qmlengine.evaluate(FUNCTION_PROGRAM).call(args);
prog.call();
QBENCHMARK {
@@ -464,13 +482,13 @@ void tst_script::function_qmlobject()
void tst_script::function_args_js()
{
- QScriptEngine engine;
-
- QScriptValue v = engine.evaluate("(function() { var o = new Object; o._x = 0; o.methodArgs = (function(a) { return a + this._x++; }); return o; })").call();
+ QJSEngine engine;
- QScriptValueList args;
+ QJSValue v = engine.evaluate("(function() { var o = new Object; o._x = 0; o.methodArgs = (function(a) { return a + this._x++; }); return o; })").call();
+
+ QJSValueList args;
args << v;
- QScriptValue prog = engine.evaluate(FUNCTION_ARGS_PROGRAM).call(engine.globalObject(), args);
+ QJSValue prog = engine.evaluate(FUNCTION_ARGS_PROGRAM).call(args);
prog.call();
QBENCHMARK {
@@ -478,39 +496,41 @@ void tst_script::function_args_js()
}
}
-static QScriptValue function_args_method(QScriptContext *ctxt, QScriptEngine *)
+#if 0
+static QJSValue function_args_method(QScriptContext *ctxt, QJSEngine *)
{
static int x = 0;
- return QScriptValue(ctxt->argument(0).toNumber() + x++);
+ return QJSValue(ctxt->argument(0).toNumber() + x++);
}
void tst_script::function_args_cpp()
{
- QScriptEngine engine;
+ QJSEngine engine;
- QScriptValue v = engine.newObject();
+ QJSValue v = engine.newObject();
v.setProperty(QLatin1String("methodArgs"), engine.newFunction(function_args_method));
- QScriptValueList args;
+ QJSValueList args;
args << v;
- QScriptValue prog = engine.evaluate(FUNCTION_ARGS_PROGRAM).call(engine.globalObject(), args);
+ QJSValue prog = engine.evaluate(FUNCTION_ARGS_PROGRAM).call(args);
prog.call();
QBENCHMARK {
prog.call();
}
}
+#endif
void tst_script::function_args_qobject()
{
- QScriptEngine engine;
+ QJSEngine engine;
TestObject to;
- QScriptValue v = engine.newQObject(&to);
+ QJSValue v = engine.newQObject(&to);
- QScriptValueList args;
+ QJSValueList args;
args << v;
- QScriptValue prog = engine.evaluate(FUNCTION_ARGS_PROGRAM).call(engine.globalObject(), args);
+ QJSValue prog = engine.evaluate(FUNCTION_ARGS_PROGRAM).call(args);
prog.call();
QBENCHMARK {
@@ -522,14 +542,16 @@ void tst_script::function_args_qmlobject()
{
QQmlEngine qmlengine;
- QScriptEngine *engine = QQmlEnginePrivate::getScriptEngine(&qmlengine);
TestObject to;
- QScriptValue v = QQmlEnginePrivate::get(&qmlengine)->objectClass->newQObject(&to);
+ QV8Engine *engine = QQmlEnginePrivate::getV8Engine(&qmlengine);
+ v8::HandleScope handle_scope;
+ v8::Context::Scope scope(engine->context());
+ QJSValue v = engine->scriptValueFromInternal(engine->qobjectWrapper()->newQObject(&to));
- QScriptValueList args;
+ QJSValueList args;
args << v;
- QScriptValue prog = engine->evaluate(FUNCTION_ARGS_PROGRAM).call(engine->globalObject(), args);
+ QJSValue prog = qmlengine.evaluate(FUNCTION_ARGS_PROGRAM).call(args);
prog.call();
QBENCHMARK {
@@ -593,6 +615,34 @@ void tst_script::signal_unusedArgs()
delete object;
}
+void tst_script::signal_heavyArgsAccess()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine, TEST_FILE("signal_heavyArgsAccess.qml"));
+ TestObject *object = qobject_cast<TestObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QBENCHMARK {
+ object->emitMySignalWithArgs(11);
+ }
+
+ delete object;
+}
+
+void tst_script::signal_heavyIdAccess()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine, TEST_FILE("signal_heavyIdAccess.qml"));
+ TestObject *object = qobject_cast<TestObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QBENCHMARK {
+ object->emitMySignalWithArgs(11);
+ }
+
+ delete object;
+}
+
void tst_script::slot_simple()
{
QQmlEngine engine;
@@ -685,9 +735,9 @@ void tst_script::block()
void tst_script::global_property_js()
{
- QScriptEngine engine;
+ QJSEngine engine;
- QScriptValue prog = engine.evaluate(GLOBALPROPERTY_PROGRAM);
+ QJSValue prog = engine.evaluate(GLOBALPROPERTY_PROGRAM);
prog.call();
QBENCHMARK {
@@ -699,8 +749,7 @@ void tst_script::global_property_qml()
{
QQmlEngine qmlengine;
- QScriptEngine *engine = QQmlEnginePrivate::getScriptEngine(&qmlengine);
- QScriptValue prog = engine->evaluate(GLOBALPROPERTY_PROGRAM);
+ QJSValue prog = qmlengine.evaluate(GLOBALPROPERTY_PROGRAM);
prog.call();
QBENCHMARK {