Q_GLOBAL_STATIC(QV8ProfilerService, v8ProfilerInstance)
-class ByteArrayOutputStream : public v8::OutputStream
+class DebugServiceOutputStream : public v8::OutputStream
{
- QByteArray *_buffer;
+ QDeclarativeDebugService &_service;
public:
- ByteArrayOutputStream(QByteArray *buffer)
+ DebugServiceOutputStream(QDeclarativeDebugService &service)
: v8::OutputStream(),
- _buffer(buffer) {}
+ _service(service) {}
void EndOfStream() {}
- WriteResult WriteAsciiChunk(char *data, int size)
+ WriteResult WriteAsciiChunk(char *rawData, int size)
{
- QByteArray b(data, size);
- _buffer->append(b);
+ QByteArray data;
+ QDataStream ds(&data, QIODevice::WriteOnly);
+ ds << QV8ProfilerService::V8SnapshotChunk << QByteArray(rawData, size);
+ _service.sendMessage(data);
return kContinue;
}
};
v8::HandleScope scope;
v8::Local<v8::String> title = v8::String::New("");
- QByteArray jsonSnapshot;
- ByteArrayOutputStream bos(&jsonSnapshot);
+ DebugServiceOutputStream outputStream(*q);
const v8::HeapSnapshot *snapshot = v8::HeapProfiler::TakeSnapshot(title, snapshotType);
- snapshot->Serialize(&bos, v8::HeapSnapshot::kJSON);
+ snapshot->Serialize(&outputStream, v8::HeapSnapshot::kJSON);
+ //indicate completion
QByteArray data;
QDataStream ds(&data, QIODevice::WriteOnly);
- ds << (int)QV8ProfilerService::V8Snapshot << jsonSnapshot;
+ ds << (int)QV8ProfilerService::V8SnapshotComplete;
q->sendMessage(data);
}
}
QList<QV8ProfilerData> traceMessages;
+ QList<QByteArray> snapshotMessages;
signals:
void complete();
+ void snapshot();
protected:
void messageReceived(const QByteArray &message);
void blockingConnectWithTraceEnabled();
void blockingConnectWithTraceDisabled();
void nonBlockingConnect();
+ void snapshot();
};
void QV8ProfilerClient::messageReceived(const QByteArray &message)
case QV8ProfilerService::V8Complete:
emit complete();
break;
- case QV8ProfilerService::V8Snapshot:
+ case QV8ProfilerService::V8SnapshotChunk: {
+ QByteArray json;
+ stream >> json;
+ snapshotMessages.append(json);
+ break;
+ }
+ case QV8ProfilerService::V8SnapshotComplete:
+ emit snapshot();
break;
default:
QString failMessage = QString("Unknown message type: %1").arg(messageType);
}
}
+void tst_QV8ProfilerService::snapshot()
+{
+ connect(false);
+ QTRY_COMPARE(m_client->status(), QDeclarativeDebugClient::Enabled);
+
+ m_client->takeSnapshot();
+ if (!QDeclarativeDebugTest::waitForSignal(m_client, SIGNAL(snapshot()))) {
+ QString failMsg
+ = QString("No snapshot received in time. App output: %1\n\n").arg(m_process->output());
+ QFAIL(qPrintable(failMsg));
+ }
+}
+
QTEST_MAIN(tst_QV8ProfilerService)
#include "tst_qv8profilerservice.moc"