{
m_loaderThread->quit();
m_loaderThread->deleteLater();
- qDeleteAll(m_calls);
qDeleteAll(m_frames);
delete m_loader;
delete m_saver;
bool ApiTrace::isEmpty() const
{
- return m_calls.isEmpty();
+ return m_frames.isEmpty();
}
QString ApiTrace::fileName() const
m_fileName = name;
m_frames.clear();
- m_calls.clear();
m_errors.clear();
m_editedCalls.clear();
m_needsSaving = false;
}
}
-void ApiTrace::setFrameMarker(FrameMarker marker)
-{
- if (m_frameMarker != marker) {
- emit framesInvalidated();
-
- qDeleteAll(m_frames);
- m_frames.clear();
- detectFrames();
- }
-}
-
void ApiTrace::addFrames(const QList<ApiTraceFrame*> &frames)
{
QVector<ApiTraceCall*> calls;
m_frames += frames;
- int currentCalls = m_calls.count();
int numNewCalls = 0;
foreach(ApiTraceFrame *frame, frames) {
frame->setParentTrace(this);
numNewCalls += frame->numChildren();
calls += frame->calls();
}
- m_calls.reserve(m_calls.count() + calls.count() + 1);
- m_calls += calls;
-
- emit endAddingFrames();
- emit callsAdded(currentCalls, numNewCalls);
-}
-void ApiTrace::detectFrames()
-{
- if (m_calls.isEmpty())
- return;
-
- emit beginAddingFrames(0, m_frames.count());
-
- ApiTraceFrame *currentFrame = 0;
- foreach(ApiTraceCall *apiCall, m_calls) {
- if (!currentFrame) {
- currentFrame = new ApiTraceFrame(this);
- currentFrame->number = m_frames.count();
- currentFrame->setLoaded(true);
- }
- apiCall->setParentFrame(currentFrame);
- currentFrame->addCall(apiCall);
- if (ApiTrace::isCallAFrameMarker(apiCall,
- m_frameMarker)) {
- m_frames.append(currentFrame);
- currentFrame = 0;
- }
- }
- //last frames won't have markers
- // it's just a bunch of Delete calls for every object
- // after the last SwapBuffers
- if (currentFrame) {
- m_frames.append(currentFrame);
- currentFrame = 0;
- }
emit endAddingFrames();
}
ApiTraceCall * ApiTrace::callWithIndex(int idx) const
{
- for (int i = 0; i < m_calls.count(); ++i) {
- ApiTraceCall *call = m_calls[i];
- if (call->index() == idx)
+ for (int i = 0; i < m_frames.count(); ++i) {
+ ApiTraceCall *call = m_frames[i]->callWithIndex(idx);
+ if (call)
return call;
}
return NULL;
QDir dir;
emit startedSaving();
dir.mkpath(fi.absolutePath());
- m_saver->saveFile(m_tempFileName, m_calls);
+ Q_ASSERT(!"saving not implemented");
+ m_saver->saveFile(m_tempFileName, QVector<ApiTraceCall*>());
}
void ApiTrace::slotSaved()
public slots:
void setFileName(const QString &name);
- void setFrameMarker(FrameMarker marker);
void save();
void loadFrame(ApiTraceFrame *frame);
void findNext(ApiTraceFrame *frame,
void beginAddingFrames(int oldCount, int numAdded);
void endAddingFrames();
- void callsAdded(int oldCount, int numAdded);
void beginLoadingFrame(ApiTraceFrame *frame, int numAdded);
void endLoadingFrame(ApiTraceFrame *frame);
void foundFrameStart(ApiTraceFrame *frame);
ApiTraceCall *call);
private:
- void detectFrames();
int callInFrame(int callIdx) const;
private:
QString m_fileName;