diff --git a/libraries/script-engine/src/v8/ScriptObjectV8Proxy.cpp b/libraries/script-engine/src/v8/ScriptObjectV8Proxy.cpp index 76b049bc5e..58708be9c6 100644 --- a/libraries/script-engine/src/v8/ScriptObjectV8Proxy.cpp +++ b/libraries/script-engine/src/v8/ScriptObjectV8Proxy.cpp @@ -13,6 +13,7 @@ #include "ScriptObjectV8Proxy.h" +#include #include #include @@ -1161,7 +1162,15 @@ int ScriptSignalV8Proxy::qt_metacall(QMetaObject::Call call, int id, void** argu if (id != 0 || call != QMetaObject::InvokeMetaMethod) { return id; } - + + _callCounter++; + if (_callCounter % 10 == 0) { + qDebug() << "Script engine: " << _engine->manager()->getFilename() << " Signal proxy " << fullName() + << " call count: " << _callCounter << " total time: " << _totalCallTime_s; + } + QElapsedTimer callTimer; + callTimer.start(); + auto isolate = _engine->getIsolate(); v8::Locker locker(isolate); v8::Isolate::Scope isolateScope(isolate); @@ -1251,6 +1260,8 @@ int ScriptSignalV8Proxy::qt_metacall(QMetaObject::Call call, int id, void** argu } }); + _totalCallTime_s += callTimer.elapsed() / 1000.0; + return -1; } diff --git a/libraries/script-engine/src/v8/ScriptObjectV8Proxy.h b/libraries/script-engine/src/v8/ScriptObjectV8Proxy.h index c7d243e51b..e553cfa6d4 100644 --- a/libraries/script-engine/src/v8/ScriptObjectV8Proxy.h +++ b/libraries/script-engine/src/v8/ScriptObjectV8Proxy.h @@ -257,6 +257,9 @@ private: // storage bool _isConnected{ false }; // Context in which it was created v8::UniquePersistent _v8Context; + // Call counter for debugging purposes. It can be used to determine which signals are overwhelming script engine. + int _callCounter{0}; + float _totalCallTime_s{ 0.0 }; Q_DISABLE_COPY(ScriptSignalV8Proxy) };