#define FRAMES_TO_CACHE 100
static ApiTraceCall *
-apiCallFromTraceCall(const Trace::Call *call,
+apiCallFromTraceCall(const trace::Call *call,
const QHash<QString, QUrl> &helpHash,
ApiTraceFrame *frame,
TraceLoader *loader)
}
TraceLoader::TraceLoader(QObject *parent)
- : QObject(parent),
- m_frameMarker(ApiTrace::FrameMarker_SwapBuffers)
+ : QObject(parent)
{
}
//Load the entire file into memory
parseTrace();
}
+ emit guessedApi(static_cast<int>(m_parser.api));
emit finishedParsing();
}
fetchFrameContents(currentFrame);
}
-void TraceLoader::setFrameMarker(ApiTrace::FrameMarker marker)
-{
- m_frameMarker = marker;
-}
-
-bool TraceLoader::isCallAFrameMarker(const Trace::Call *call) const
-{
- std::string name = call->name();
-
- switch (m_frameMarker) {
- case ApiTrace::FrameMarker_SwapBuffers:
- return name.find("SwapBuffers") != std::string::npos ||
- name == "CGLFlushDrawable" ||
- name == "glFrameTerminatorGREMEDY";
- break;
- case ApiTrace::FrameMarker_Flush:
- return name == "glFlush";
- break;
- case ApiTrace::FrameMarker_Finish:
- return name == "glFinish";
- break;
- case ApiTrace::FrameMarker_Clear:
- return name == "glClear";
- break;
- }
- return false;
-}
-
int TraceLoader::numberOfFrames() const
{
return m_frameBookmarks.size();
int TraceLoader::numberOfCallsInFrame(int frameIdx) const
{
- if (frameIdx > m_frameBookmarks.size()) {
+ if (frameIdx >= m_frameBookmarks.size()) {
return 0;
}
FrameBookmarks::const_iterator itr =
QList<ApiTraceFrame*> frames;
ApiTraceFrame *currentFrame = 0;
- Trace::Call *call;
- Trace::ParseBookmark startBookmark;
+ trace::Call *call;
+ trace::ParseBookmark startBookmark;
int numOfFrames = 0;
int numOfCalls = 0;
int lastPercentReport = 0;
while ((call = m_parser.scan_call())) {
++numOfCalls;
- if (isCallAFrameMarker(call)) {
+ if (call->flags & trace::CALL_FLAG_END_FRAME) {
FrameBookmark frameBookmark(startBookmark);
frameBookmark.numberOfCalls = numOfCalls;
}
if (numOfCalls) {
- //Trace::File::Bookmark endBookmark = m_parser.currentBookmark();
+ //trace::File::Bookmark endBookmark = m_parser.currentBookmark();
FrameBookmark frameBookmark(startBookmark);
frameBookmark.numberOfCalls = numOfCalls;
int lastPercentReport = 0;
- Trace::Call *call = m_parser.parse_call();
+ trace::Call *call = m_parser.parse_call();
while (call) {
//std::cout << *call;
if (!currentFrame) {
apiCall->arguments()[apiCall->binaryDataIndex()].toByteArray();
binaryDataSize += data.size();
}
- if (ApiTrace::isCallAFrameMarker(apiCall,
- m_frameMarker)) {
+ if (call->flags & trace::CALL_FLAG_END_FRAME) {
calls.squeeze();
currentFrame->setCalls(calls, binaryDataSize);
calls.clear();
int startFrame = m_createdFrames.indexOf(request.frame);
const FrameBookmark &frameBookmark = m_frameBookmarks[startFrame];
m_parser.setBookmark(frameBookmark.start);
- Trace::Call *call = 0;
+ trace::Call *call = 0;
while ((call = m_parser.parse_call())) {
if (callContains(call, request.text, request.cs)) {
Q_ASSERT(m_parser.supportsOffsets());
if (m_parser.supportsOffsets()) {
int startFrame = m_createdFrames.indexOf(request.frame);
- Trace::Call *call = 0;
- QList<Trace::Call*> frameCalls;
+ trace::Call *call = 0;
+ QList<trace::Call*> frameCalls;
int frameIdx = startFrame;
const FrameBookmark &frameBookmark = m_frameBookmarks[frameIdx];
emit searchResult(request, ApiTrace::SearchResult_NotFound, 0);
}
-bool TraceLoader::searchCallsBackwards(const QList<Trace::Call*> &calls,
+bool TraceLoader::searchCallsBackwards(const QList<trace::Call*> &calls,
int frameIdx,
const ApiTrace::SearchRequest &request)
{
for (int i = calls.count() - 1; i >= 0; --i) {
- Trace::Call *call = calls[i];
+ trace::Call *call = calls[i];
if (callContains(call, request.text, request.cs)) {
ApiTraceFrame *frame = m_createdFrames[frameIdx];
const QVector<ApiTraceCall*> apiCalls =
{
unsigned numCalls = 0;
- for (int frameIdx = 0; frameIdx <= m_frameBookmarks.size(); ++frameIdx) {
+ for (int frameIdx = 0; frameIdx < m_frameBookmarks.size(); ++frameIdx) {
const FrameBookmark &frameBookmark = m_frameBookmarks[frameIdx];
unsigned firstCall = numCalls;
unsigned endCall = numCalls + frameBookmark.numberOfCalls;
return 0;
}
-bool TraceLoader::callContains(Trace::Call *call,
+bool TraceLoader::callContains(trace::Call *call,
const QString &str,
Qt::CaseSensitivity sensitivity)
{
/*
- * FIXME: do string comparison directly on Trace::Call
+ * FIXME: do string comparison directly on trace::Call
*/
ApiTraceCall *apiCall = apiCallFromTraceCall(call, m_helpHash,
0, this);
m_parser.setBookmark(frameBookmark.start);
- Trace::Call *call;
+ trace::Call *call;
int parsedCalls = 0;
while ((call = m_parser.parse_call())) {
ApiTraceCall *apiCall =
delete call;
- if (ApiTrace::isCallAFrameMarker(apiCall, m_frameMarker)) {
+ if (apiCall->flags() & trace::CALL_FLAG_END_FRAME) {
break;
}