diff options
author | Kai Koehne <kai.koehne@nokia.com> | 2011-12-20 14:26:39 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-02-09 16:53:14 +0100 |
commit | 82dfecab38031f8009ea64ef93063c02b79eaf94 (patch) | |
tree | 2fb8e982b517d5b76bb228be477b92c0aa31788c /src/declarative/debugger/qv8profilerservice.cpp | |
parent | 4a224c4bd36e859c7b36867d4322321c0852c05a (diff) |
Debugger: Allow trace service to send data on exit
Add a statusAboutToBeChanged virtual that allows
services to send data e.g. on application exit.
Change-Id: I28fa513ab2a12d6973c444aac3062d64a0957207
Reviewed-by: Christiaan Janssen <christiaan.janssen@nokia.com>
Diffstat (limited to 'src/declarative/debugger/qv8profilerservice.cpp')
-rw-r--r-- | src/declarative/debugger/qv8profilerservice.cpp | 39 |
1 files changed, 30 insertions, 9 deletions
diff --git a/src/declarative/debugger/qv8profilerservice.cpp b/src/declarative/debugger/qv8profilerservice.cpp index 3abec3f6a2..743ee6ec4f 100644 --- a/src/declarative/debugger/qv8profilerservice.cpp +++ b/src/declarative/debugger/qv8profilerservice.cpp @@ -97,7 +97,7 @@ public: QList<QV8ProfilerData> m_data; bool initialized; - bool m_enabled; + QList<QString> m_ongoing; }; QV8ProfilerService::QV8ProfilerService(QObject *parent) @@ -105,8 +105,6 @@ QV8ProfilerService::QV8ProfilerService(QObject *parent) { Q_D(QV8ProfilerService); - d->m_enabled = false; - if (registerService() == Enabled) { // ,block mode, client attached while (!d->initialized) @@ -129,6 +127,20 @@ void QV8ProfilerService::initialize() v8ProfilerInstance(); } +void QV8ProfilerService::statusAboutToBeChanged(QDeclarativeDebugService::Status newStatus) +{ + Q_D(QV8ProfilerService); + + if (status() == newStatus) + return; + + if (status() == Enabled) { + foreach (const QString &title, d->m_ongoing) + QMetaObject::invokeMethod(this, "stopProfiling", Qt::QueuedConnection, Q_ARG(QString, title)); + sendProfilingData(); + } +} + void QV8ProfilerService::messageReceived(const QByteArray &message) { Q_D(QV8ProfilerService); @@ -141,13 +153,12 @@ void QV8ProfilerService::messageReceived(const QByteArray &message) if (command == "V8PROFILER") { ds >> title; - if (option == "start" && !d->m_enabled) { - QMetaObject::invokeMethod(this, "startProfiling", Qt::QueuedConnection, Q_ARG(QString, QString::fromUtf8(title))); - d->m_enabled = true; - } else if (option == "stop" && d->m_enabled) { - QMetaObject::invokeMethod(this, "stopProfiling", Qt::QueuedConnection, Q_ARG(QString, QString::fromUtf8(title))); + QString titleStr = QString::fromUtf8(title); + if (option == "start") { + QMetaObject::invokeMethod(this, "startProfiling", Qt::QueuedConnection, Q_ARG(QString, titleStr)); + } else if (option == "stop" && d->initialized) { + QMetaObject::invokeMethod(this, "stopProfiling", Qt::QueuedConnection, Q_ARG(QString, titleStr)); QMetaObject::invokeMethod(this, "sendProfilingData", Qt::QueuedConnection); - d->m_enabled = false; } d->initialized = true; } @@ -165,7 +176,12 @@ void QV8ProfilerService::messageReceived(const QByteArray &message) void QV8ProfilerService::startProfiling(const QString &title) { + Q_D(QV8ProfilerService); // Start Profiling + + if (d->m_ongoing.contains(title)) + return; + v8::HandleScope handle_scope; v8::Handle<v8::String> v8title = v8::String::New(reinterpret_cast<const uint16_t*>(title.data()), title.size()); v8::CpuProfiler::StartProfiling(v8title); @@ -175,6 +191,11 @@ void QV8ProfilerService::stopProfiling(const QString &title) { Q_D(QV8ProfilerService); // Stop profiling + + if (!d->m_ongoing.contains(title)) + return; + d->m_ongoing.removeOne(title); + v8::HandleScope handle_scope; v8::Handle<v8::String> v8title = v8::String::New(reinterpret_cast<const uint16_t*>(title.data()), title.size()); const v8::CpuProfile *cpuProfile = v8::CpuProfiler::StopProfiling(v8title); |