bool ApiTrace::isCallAFrameMarker(const ApiTraceCall *call,
ApiTrace::FrameMarker marker)
{
- if (!call)
+ if (!call) {
return false;
+ }
switch (marker) {
case FrameMarker_SwapBuffers:
QString ApiTrace::fileName() const
{
- if (edited())
+ if (edited()) {
return m_tempFileName;
+ }
return m_fileName;
}
int ApiTrace::numCallsInFrame(int idx) const
{
const ApiTraceFrame *frame = frameAt(idx);
- if (frame)
+ if (frame) {
return frame->numChildren();
- else
+ } else {
return 0;
+ }
}
void ApiTrace::setFileName(const QString &name)
m_needsSaving = false;
emit invalidated();
-// m_loader->loadTrace(m_fileName);
emit loadTrace(m_fileName);
}
}
void ApiTrace::addFrames(const QList<ApiTraceFrame*> &frames)
{
- QVector<ApiTraceCall*> calls;
int currentFrames = m_frames.count();
int numNewFrames = frames.count();
m_frames += frames;
- int numNewCalls = 0;
foreach(ApiTraceFrame *frame, frames) {
frame->setParentTrace(this);
- numNewCalls += frame->numChildren();
- calls += frame->calls();
}
emit endAddingFrames();
{
for (int i = 0; i < m_frames.count(); ++i) {
ApiTraceCall *call = m_frames[i]->callWithIndex(idx);
- if (call)
+ if (call) {
return call;
+ }
}
return NULL;
}
ApiTraceState ApiTrace::defaultState() const
{
ApiTraceFrame *frame = frameAt(0);
- if (!frame || !frame->hasState())
+ if (!frame || !frame->isLoaded() || frame->isEmpty()) {
return ApiTraceState();
+ }
- return *frame->state();
+ ApiTraceCall *firstCall = frame->calls().first();
+ if (!firstCall->hasState()) {
+ return ApiTraceState();
+ }
+
+ return *firstCall->state();
}
void ApiTrace::callEdited(ApiTraceCall *call)
return m_saver->isRunning();
}
-void ApiTrace::callError(ApiTraceCall *call)
-{
- Q_ASSERT(call);
-
- if (call->hasError())
- m_errors.insert(call);
- else
- m_errors.remove(call);
-
- emit changed(call);
-}
-
bool ApiTrace::hasErrors() const
{
return !m_errors.isEmpty();
void ApiTrace::loadFrame(ApiTraceFrame *frame)
{
- Q_ASSERT(!frame->loaded());
+ Q_ASSERT(!frame->isLoaded());
emit requestFrame(frame);
}
void ApiTrace::finishedParsing()
{
ApiTraceFrame *firstFrame = m_frames[0];
- if (firstFrame && !firstFrame->loaded()) {
+ if (firstFrame && !firstFrame->isLoaded()) {
loadFrame(firstFrame);
}
}
emit beginLoadingFrame(frame, calls.size());
frame->setCalls(calls, binaryDataSize);
emit endLoadingFrame(frame);
+
+ if (!m_queuedErrors.isEmpty()) {
+ QList< QPair<ApiTraceFrame*, ApiTraceError> >::iterator itr;
+ for (itr = m_queuedErrors.begin(); itr != m_queuedErrors.end();
+ ++itr) {
+ const ApiTraceError &error = (*itr).second;
+ if ((*itr).first == frame) {
+ ApiTraceCall *call = frame->callWithIndex(error.callIndex);
+
+ if (!call) {
+ continue;
+ }
+
+ call->setError(error.message);
+ m_queuedErrors.erase(itr);
+
+ if (call->hasError()) {
+ m_errors.insert(call);
+ } else {
+ m_errors.remove(call);
+ }
+ emit changed(call);
+ }
+ }
+ }
}
void ApiTrace::findNext(ApiTraceFrame *frame,
ApiTraceCall *foundCall = 0;
int frameIdx = m_frames.indexOf(frame);
- if (frame->loaded()) {
+ if (frame->isLoaded()) {
foundCall = frame->findNextCall(from, str, sensitivity);
if (foundCall) {
- emit findResult(SearchFound, foundCall);
+ emit findResult(SearchResult_Found, foundCall);
return;
}
for (int i = frameIdx; i < m_frames.count(); ++i) {
ApiTraceFrame *frame = m_frames[i];
- if (!frame->loaded()) {
+ if (!frame->isLoaded()) {
emit loaderSearchNext(i, str, sensitivity);
return;
} else {
ApiTraceCall *call = frame->findNextCall(0, str, sensitivity);
if (call) {
- emit findResult(SearchFound, call);
+ emit findResult(SearchResult_Found, call);
return;
}
}
}
- emit findResult(SearchWrapped, 0);
+ emit findResult(SearchResult_Wrapped, 0);
}
void ApiTrace::findPrev(ApiTraceFrame *frame,
ApiTraceCall *foundCall = 0;
int frameIdx = m_frames.indexOf(frame);
- if (frame->loaded()) {
+ if (frame->isLoaded()) {
foundCall = frame->findPrevCall(from, str, sensitivity);
if (foundCall) {
- emit findResult(SearchFound, foundCall);
+ emit findResult(SearchResult_Found, foundCall);
return;
}
for (int i = frameIdx; i >= 0; --i) {
ApiTraceFrame *frame = m_frames[i];
- if (!frame->loaded()) {
+ if (!frame->isLoaded()) {
emit loaderSearchPrev(i, str, sensitivity);
return;
} else {
ApiTraceCall *call = frame->findPrevCall(0, str, sensitivity);
if (call) {
- emit findResult(SearchFound, call);
+ emit findResult(SearchResult_Found, call);
return;
}
}
}
- emit findResult(SearchWrapped, 0);
+ emit findResult(SearchResult_Wrapped, 0);
}
void ApiTrace::loaderSearchResult(ApiTrace::SearchResult result,
void ApiTrace::findFrameStart(ApiTraceFrame *frame)
{
- if (frame->loaded()) {
+ if (frame->isLoaded()) {
emit foundFrameStart(frame);
} else {
emit loaderFindFrameStart(frame);
void ApiTrace::findFrameEnd(ApiTraceFrame *frame)
{
- if (frame->loaded()) {
+ if (frame->isLoaded()) {
emit foundFrameEnd(frame);
} else {
emit loaderFindFrameEnd(frame);
frame = m_frames[frameIdx];
if (frame) {
- if (frame->loaded()) {
+ if (frame->isLoaded()) {
ApiTraceCall *call = frame->callWithIndex(index);
emit foundCallIndex(call);
} else {
for (int frameIdx = 0; frameIdx <= m_frames.size(); ++frameIdx) {
const ApiTraceFrame *frame = m_frames[frameIdx];
- unsigned numCallsInFrame = frame->loaded()
+ unsigned numCallsInFrame = frame->isLoaded()
? frame->numChildren()
: frame->numChildrenToLoad();
unsigned firstCall = numCalls;
return -1;
}
+void ApiTrace::setCallError(const ApiTraceError &error)
+{
+ int frameIdx = callInFrame(error.callIndex);
+ ApiTraceFrame *frame = 0;
+
+ if (frameIdx < 0) {
+ return;
+ }
+ frame = m_frames[frameIdx];
+
+ if (frame->isLoaded()) {
+ ApiTraceCall *call = frame->callWithIndex(error.callIndex);
+ call->setError(error.message);
+ if (call->hasError()) {
+ m_errors.insert(call);
+ } else {
+ m_errors.remove(call);
+ }
+ emit changed(call);
+ } else {
+ emit requestFrame(frame);
+ m_queuedErrors.append(qMakePair(frame, error));
+ }
+}
+
#include "apitrace.moc"