aboutsummaryrefslogtreecommitdiffstats
path: root/src/declarative/debugger/qv8profilerservice.cpp
diff options
context:
space:
mode:
authorKai Koehne <kai.koehne@nokia.com>2011-12-20 14:26:39 +0100
committerQt by Nokia <qt-info@nokia.com>2012-02-09 16:53:14 +0100
commit82dfecab38031f8009ea64ef93063c02b79eaf94 (patch)
tree2fb8e982b517d5b76bb228be477b92c0aa31788c /src/declarative/debugger/qv8profilerservice.cpp
parent4a224c4bd36e859c7b36867d4322321c0852c05a (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.cpp39
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);