aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/qml/qjsengine
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2018-03-26 13:42:08 +0200
committerUlf Hermann <ulf.hermann@qt.io>2018-03-27 13:52:52 +0000
commit2f0d959bfb324b7e7f0c79b26819700e66b4c44a (patch)
treed03265799e7abb459cd4d6226beaa8ff2d1cd085 /tests/auto/qml/qjsengine
parentfe4aaf9cc11467aa5cab0d9d1d2706b283719b0a (diff)
Use a separate process for testing perf.map file
The environment change was too fragile. If the JIT ran before the relevant test function was executed, it would set the doProfile flag to false, and never re-evaluate the environment variable. The qmljs binary is only available for private tests, and the test didn't quite fit into qjsengine anyway. Therefore a new test for the QV4Assembler class that genertes the map files is added. Change-Id: Ice0c18daaee9f0f4f0f15eba0261bcc01aa4b105 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'tests/auto/qml/qjsengine')
-rw-r--r--tests/auto/qml/qjsengine/tst_qjsengine.cpp68
1 files changed, 0 insertions, 68 deletions
diff --git a/tests/auto/qml/qjsengine/tst_qjsengine.cpp b/tests/auto/qml/qjsengine/tst_qjsengine.cpp
index 8a017fd573..0455895c14 100644
--- a/tests/auto/qml/qjsengine/tst_qjsengine.cpp
+++ b/tests/auto/qml/qjsengine/tst_qjsengine.cpp
@@ -203,7 +203,6 @@ private slots:
void malformedExpression();
void scriptScopes();
- void perfMapFile();
signals:
void testSignal();
@@ -4145,73 +4144,6 @@ void tst_QJSEngine::scriptScopes()
QCOMPARE(use.toInt(), 42);
}
-static const char *perfMapKey = "QV4_PROFILE_WRITE_PERF_MAP";
-static const char *jitCallKey = "QV4_JIT_CALL_THRESHOLD";
-
-struct EnvironmentModifier {
- const bool hasPerfMap = false;
- const bool hasJitCall = false;
- const QByteArray perfMap;
- const QByteArray jitCall;
-
- EnvironmentModifier() :
- hasPerfMap(qEnvironmentVariableIsSet(perfMapKey)),
- hasJitCall(qEnvironmentVariableIsSet(jitCallKey)),
- perfMap(qgetenv(perfMapKey)),
- jitCall(qgetenv(jitCallKey))
- {
- qputenv(perfMapKey, "1");
- qputenv(jitCallKey, "0");
- }
-
- ~EnvironmentModifier()
- {
- if (hasPerfMap)
- qputenv(perfMapKey, perfMap);
- else
- qunsetenv(perfMapKey);
-
- if (hasJitCall)
- qputenv(jitCallKey, jitCall);
- else
- qunsetenv(jitCallKey);
- }
-};
-
-void tst_QJSEngine::perfMapFile()
-{
-#if !defined(Q_OS_LINUX)
- QSKIP("perf map files are only generated on linux");
-#else
- EnvironmentModifier modifier;
- Q_UNUSED(modifier);
- QJSEngine engine;
- QJSValue def = engine.evaluate("'use strict'; function foo() { return 42 }");
- QVERIFY(!def.isError());
- QJSValue use = engine.evaluate("'use strict'; foo()");
- QVERIFY(use.isNumber());
- QFile file(QString::fromLatin1("/tmp/perf-%1.map").arg(QCoreApplication::applicationPid()));
- QVERIFY(file.exists());
- QVERIFY(file.open(QIODevice::ReadOnly));
- QList<QByteArray> functions;
- while (!file.atEnd()) {
- const QByteArray contents = file.readLine();
- QVERIFY(contents.endsWith('\n'));
- QList<QByteArray> fields = contents.split(' ');
- QCOMPARE(fields.length(), 3);
- bool ok = false;
- const qulonglong address = fields[0].toULongLong(&ok, 16);
- QVERIFY(ok);
- QVERIFY(address > 0);
- const ulong size = fields[1].toULong(&ok, 16);
- QVERIFY(ok);
- QVERIFY(size > 0);
- functions.append(fields[2]);
- }
- QVERIFY(functions.contains("foo\n"));
-#endif
-}
-
QTEST_MAIN(tst_QJSEngine)
#include "tst_qjsengine.moc"