Not really used. Also, calls now have flags with this sort of info.
#include <QThread>
ApiTrace::ApiTrace()
- : m_frameMarker(ApiTrace::FrameMarker_SwapBuffers),
- m_needsSaving(false)
+ : m_needsSaving(false)
{
m_loader = new TraceLoader();
delete m_saver;
}
-bool ApiTrace::isCallAFrameMarker(const ApiTraceCall *call,
- ApiTrace::FrameMarker marker)
-{
- if (!call) {
- return false;
- }
-
- switch (marker) {
- case FrameMarker_SwapBuffers:
- return call->flags() & trace::CALL_FLAG_END_FRAME;
- case FrameMarker_Flush:
- return call->name() == QLatin1String("glFlush");
- case FrameMarker_Finish:
- return call->name() == QLatin1String("glFinish");
- case FrameMarker_Clear:
- return call->name() == QLatin1String("glClear");
- }
-
- Q_ASSERT(!"unknown frame marker");
-
- return false;
-}
-
bool ApiTrace::isEmpty() const
{
return m_frames.isEmpty();
return m_fileName;
}
-ApiTrace::FrameMarker ApiTrace::frameMarker() const
-{
- return m_frameMarker;
-}
-
const QList<ApiTraceFrame*> & ApiTrace::frames() const
{
return m_frames;
{
Q_OBJECT
public:
- enum FrameMarker {
- FrameMarker_SwapBuffers,
- FrameMarker_Flush,
- FrameMarker_Finish,
- FrameMarker_Clear
- };
enum SearchResult {
SearchResult_NotFound,
SearchResult_Found,
Qt::CaseSensitivity cs;
};
- static bool isCallAFrameMarker(const ApiTraceCall *call,
- FrameMarker marker);
public:
ApiTrace();
~ApiTrace();
QString fileName() const;
- FrameMarker frameMarker() const;
-
ApiTraceState defaultState() const;
ApiTraceCall *callWithIndex(int idx) const;
QList<ApiTraceFrame*> m_frames;
- FrameMarker m_frameMarker;
-
TraceLoader *m_loader;
QThread *m_loaderThread;
SaverThread *m_saver;
}
TraceLoader::TraceLoader(QObject *parent)
- : QObject(parent),
- m_frameMarker(ApiTrace::FrameMarker_SwapBuffers)
+ : QObject(parent)
{
}
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();
while ((call = m_parser.scan_call())) {
++numOfCalls;
- if (isCallAFrameMarker(call)) {
+ if (call->flags & trace::CALL_FLAG_END_FRAME) {
FrameBookmark frameBookmark(startBookmark);
frameBookmark.numberOfCalls = numOfCalls;
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();
delete call;
- if (ApiTrace::isCallAFrameMarker(apiCall, m_frameMarker)) {
+ if (apiCall->flags() & trace::CALL_FLAG_END_FRAME) {
break;
}
public slots:
void loadTrace(const QString &filename);
void loadFrame(ApiTraceFrame *frame);
- void setFrameMarker(ApiTrace::FrameMarker marker);
void findFrameStart(ApiTraceFrame *frame);
void findFrameEnd(ApiTraceFrame *frame);
void findCallIndex(int index);
trace::ParseBookmark start;
int numberOfCalls;
};
- bool isCallAFrameMarker(const trace::Call *call) const;
int numberOfFrames() const;
int numberOfCallsInFrame(int frameIdx) const;
private:
trace::Parser m_parser;
- ApiTrace::FrameMarker m_frameMarker;
typedef QMap<int, FrameBookmark> FrameBookmarks;
FrameBookmarks m_frameBookmarks;