return m_frameMarker;
}
-QList<ApiTraceCall*> ApiTrace::calls() const
+QVector<ApiTraceCall*> ApiTrace::calls() const
{
return m_calls;
}
void ApiTrace::addFrames(const QList<ApiTraceFrame*> &frames)
{
- QList<ApiTraceCall*> calls;
+ QVector<ApiTraceCall*> calls;
int currentFrames = m_frames.count();
int numNewFrames = frames.count();
numNewCalls += frame->numChildren();
calls += frame->calls();
}
- m_calls.reserve(m_calls.count() + calls.count());
+ m_calls.reserve(m_calls.count() + calls.count() + 1);
m_calls += calls;
emit endAddingFrames();
void addEnumSignature(unsigned id, ApiTraceEnumSignature *signature);
- QList<ApiTraceCall*> calls() const;
+ QVector<ApiTraceCall*> calls() const;
ApiTraceCall *callAt(int idx) const;
ApiTraceCall *callWithIndex(int idx) const;
int numCalls() const;
QString m_tempFileName;
QList<ApiTraceFrame*> m_frames;
- QList<ApiTraceCall*> m_calls;
+ QVector<ApiTraceCall*> m_calls;
FrameMarker m_frameMarker;
}
}
-QList<ApiTraceCall*> ApiTraceFrame::calls() const
+QVector<ApiTraceCall*> ApiTraceFrame::calls() const
{
return m_calls;
}
{
return m_binaryDataSize;
}
+
+void ApiTraceFrame::setCalls(const QVector<ApiTraceCall*> &calls,
+ quint64 binaryDataSize)
+{
+ m_calls = calls;
+ m_binaryDataSize = binaryDataSize;
+}
int callIndex(ApiTraceCall *call) const;
ApiTraceCall *call(int idx) const;
void addCall(ApiTraceCall *call);
- QList<ApiTraceCall*> calls() const;
+ QVector<ApiTraceCall*> calls() const;
+ void setCalls(const QVector<ApiTraceCall*> &calls,
+ quint64 binaryDataSize);
int binaryDataSize() const;
private:
ApiTrace *m_parentTrace;
quint64 m_binaryDataSize;
- QList<ApiTraceCall*> m_calls;
+ QVector<ApiTraceCall*> m_calls;
};
Q_DECLARE_METATYPE(ApiTraceFrame*);
file.close();
Trace::Parser p;
+ QVector<ApiTraceCall*> calls;
+ quint64 binaryDataSize = 0;
if (p.open(m_fileName.toLatin1().constData())) {
Trace::Call *call = p.parse_call();
while (call) {
}
ApiTraceCall *apiCall =
apiCallFromTraceCall(call, helpHash, currentFrame);
- currentFrame->addCall(apiCall);
+ calls.append(apiCall);
+ if (apiCall->hasBinaryData()) {
+ QByteArray data =
+ apiCall->arguments()[apiCall->binaryDataIndex()].toByteArray();
+ binaryDataSize += data.size();
+ }
if (ApiTrace::isCallAFrameMarker(apiCall,
m_frameMarker)) {
+ calls.squeeze();
+ currentFrame->setCalls(calls, binaryDataSize);
+ calls.clear();
frames.append(currentFrame);
currentFrame = 0;
+ binaryDataSize = 0;
if (frames.count() >= FRAMES_TO_CACHE) {
emit parsedFrames(frames);
frames.clear();
m_searchWidget->setFound(false);
return;
}
- const QList<ApiTraceCall*> &calls = m_trace->calls();
+ const QVector<ApiTraceCall*> &calls = m_trace->calls();
int callNum = calls.indexOf(call);
for (int i = callNum + 1; i < calls.count(); ++i) {
m_searchWidget->setFound(false);
return;
}
- const QList<ApiTraceCall*> &calls = m_trace->calls();
+ const QVector<ApiTraceCall*> &calls = m_trace->calls();
int callNum = calls.indexOf(call);
for (int i = callNum - 1; i >= 0; --i) {
return;
}
- QList<ApiTraceCall*>::const_iterator itr;
- QList<ApiTraceCall*> calls = frame->calls();
+ QVector<ApiTraceCall*>::const_iterator itr;
+ QVector<ApiTraceCall*> calls = frame->calls();
itr = calls.constBegin();
while (itr != calls.constEnd()) {
if (!frame || frame->isEmpty()) {
return;
}
- QList<ApiTraceCall*>::const_iterator itr;
- QList<ApiTraceCall*> calls = frame->calls();
+ QVector<ApiTraceCall*>::const_iterator itr;
+ QVector<ApiTraceCall*> calls = frame->calls();
itr = calls.constEnd();
do {
}
void SaverThread::saveFile(const QString &fileName,
- const QList<ApiTraceCall*> &calls)
+ const QVector<ApiTraceCall*> &calls)
{
m_fileName = fileName;
m_calls = calls;
#include "apitrace.h"
#include <QThread>
-#include <QList>
+#include <QVector>
class ApiTraceCall;
class ApiTraceFrame;
public slots:
void saveFile(const QString &fileName,
- const QList<ApiTraceCall*> &calls);
+ const QVector<ApiTraceCall*> &calls);
signals:
void traceSaved();
private:
QString m_fileName;
- QList<ApiTraceCall*> m_calls;
+ QVector<ApiTraceCall*> m_calls;
};