tests/benchmarks/declarative/script/tst_script.cpp
changeset 33 3e2da88830cd
parent 30 5dc02b23752f
--- a/tests/benchmarks/declarative/script/tst_script.cpp	Tue Jul 06 15:10:48 2010 +0300
+++ b/tests/benchmarks/declarative/script/tst_script.cpp	Wed Aug 18 10:37:55 2010 +0300
@@ -92,7 +92,12 @@
 
     void block_data();
     void block();
-private:
+
+    void global_property_js();
+    void global_property_qml();
+    void global_property_qml_js();
+
+    void scriptfile_property();
 };
 
 inline QUrl TEST_FILE(const QString &filename)
@@ -625,6 +630,74 @@
     delete rect;
 }
 
+#define GLOBALPROPERTY_PROGRAM \
+    "(function() { " \
+    "    for (var ii = 0; ii < 10000; ++ii) { " \
+    "        Math.sin(90); " \
+    "    } " \
+    "})"
+
+void tst_script::global_property_js()
+{
+    QScriptEngine engine;
+
+    QScriptValue prog = engine.evaluate(GLOBALPROPERTY_PROGRAM);
+    prog.call();
+
+    QBENCHMARK {
+        prog.call();
+    }
+}
+
+void tst_script::global_property_qml()
+{
+    QDeclarativeEngine qmlengine;
+
+    QScriptEngine *engine = QDeclarativeEnginePrivate::getScriptEngine(&qmlengine);
+    QScriptValue prog = engine->evaluate(GLOBALPROPERTY_PROGRAM);
+    prog.call();
+
+    QBENCHMARK {
+        prog.call();
+    }
+}
+
+void tst_script::global_property_qml_js()
+{
+    QDeclarativeEngine engine;
+    QDeclarativeComponent component(&engine, TEST_FILE("global_prop.qml"));
+    QDeclarativeRectangle *rect = qobject_cast<QDeclarativeRectangle *>(component.create());
+    QVERIFY(rect != 0);
+
+    int index = rect->metaObject()->indexOfMethod("triggered()");
+    QVERIFY(index != -1);
+    QMetaMethod method = rect->metaObject()->method(index);
+
+    QBENCHMARK {
+        method.invoke(rect, Qt::DirectConnection);
+    }
+
+    delete rect;
+}
+
+void tst_script::scriptfile_property()
+{
+    QDeclarativeEngine engine;
+    QDeclarativeComponent component(&engine, TEST_FILE("global_prop.qml"));
+    QDeclarativeRectangle *rect = qobject_cast<QDeclarativeRectangle *>(component.create());
+    QVERIFY(rect != 0);
+
+    int index = rect->metaObject()->indexOfMethod("incrementTriggered()");
+    QVERIFY(index != -1);
+    QMetaMethod method = rect->metaObject()->method(index);
+
+    QBENCHMARK {
+        method.invoke(rect, Qt::DirectConnection);
+    }
+
+    delete rect;
+}
+
 QTEST_MAIN(tst_script)
 
 #include "tst_script.moc"