#include <QtCore/qthread.h>
#include <QtCore/qcoreapplication.h>
+// this contains QUnifiedTimer
+#include <private/qabstractanimation_p.h>
+
QT_BEGIN_NAMESPACE
Q_GLOBAL_STATIC(QDeclarativeDebugTrace, traceInstance);
ds << detailData;
if (messageType == (int)QDeclarativeDebugTrace::RangeLocation)
ds << detailData << line;
+ if (messageType == (int)QDeclarativeDebugTrace::Event &&
+ detailType == (int)QDeclarativeDebugTrace::AnimationFrame)
+ ds << framerate << animationcount;
return data;
}
// wait for first message indicating whether to trace or not
while (!m_messageReceived)
waitForMessage();
+
+ QUnifiedTimer::instance()->registerProfilerCallback( &animationFrame );
}
}
+QDeclarativeDebugTrace::~QDeclarativeDebugTrace()
+{
+ // unregister the callback
+ QUnifiedTimer::instance()->registerProfilerCallback( 0 );
+}
+
void QDeclarativeDebugTrace::addEngine(QDeclarativeEngine * /*engine*/)
{
// just make sure that the service is properly registered
void QDeclarativeDebugTrace::removeEngine(QDeclarativeEngine */*engine*/)
{
+
}
void QDeclarativeDebugTrace::addEvent(EventType t)
traceInstance()->endRangeImpl(t);
}
+void QDeclarativeDebugTrace::animationFrame(qint64 delta)
+{
+ Q_ASSERT(QDeclarativeDebugService::isDebuggingEnabled());
+ traceInstance()->animationFrameImpl(delta);
+}
+
void QDeclarativeDebugTrace::addEventImpl(EventType event)
{
if (status() != Enabled || !m_enabled)
return;
- QDeclarativeDebugData ed = {m_timer.nsecsElapsed(), (int)Event, (int)event, QString(), -1};
+ QDeclarativeDebugData ed = {m_timer.nsecsElapsed(), (int)Event, (int)event, QString(), -1, 0, 0};
processMessage(ed);
}
if (status() != Enabled || !m_enabled)
return;
- QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeStart, (int)range, QString(), -1};
+ QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeStart, (int)range, QString(), -1, 0, 0};
processMessage(rd);
}
if (status() != Enabled || !m_enabled)
return;
- QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeData, (int)range, rData, -1};
+ QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeData, (int)range, rData, -1, 0, 0};
processMessage(rd);
}
if (status() != Enabled || !m_enabled)
return;
- QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeData, (int)range, rData.toString(QUrl::FormattingOption(0x100)), -1};
+ QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeData, (int)range, rData.toString(QUrl::FormattingOption(0x100)), -1, 0, 0};
processMessage(rd);
}
if (status() != Enabled || !m_enabled)
return;
- QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeLocation, (int)range, fileName, line};
+ QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeLocation, (int)range, fileName, line, 0, 0};
processMessage(rd);
}
if (status() != Enabled || !m_enabled)
return;
- QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeLocation, (int)range, fileName.toString(QUrl::FormattingOption(0x100)), line};
+ QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeLocation, (int)range, fileName.toString(QUrl::FormattingOption(0x100)), line, 0, 0};
processMessage(rd);
}
if (status() != Enabled || !m_enabled)
return;
- QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeEnd, (int)range, QString(), -1};
+ QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeEnd, (int)range, QString(), -1, 0, 0};
processMessage(rd);
}
+void QDeclarativeDebugTrace::animationFrameImpl(qint64 delta)
+{
+ if (status() != Enabled || !m_enabled)
+ return;
+
+ int animCount = QUnifiedTimer::instance()->runningAnimationCount();
+
+ if (animCount > 0 && delta > 0) {
+ // trim fps to integer
+ int fps = 1000 / delta;
+ QDeclarativeDebugData ed = {m_timer.nsecsElapsed(), (int)Event, (int)AnimationFrame, QString(), -1, fps, animCount};
+ processMessage(ed);
+ }
+}
+
/*
Either send the message directly, or queue up
a list of messages to send later (via sendMessages)
//###
QString detailData; //used by RangeData and RangeLocation
int line; //used by RangeLocation
+ int framerate; //used by animation events
+ int animationcount; //used by animation events
QByteArray toByteArray() const;
};
FramePaint,
Mouse,
Key,
+ AnimationFrame,
MaximumEventType
};
static void rangeLocation(RangeType, const QString &, int);
static void rangeLocation(RangeType, const QUrl &, int);
static void endRange(RangeType);
+ static void animationFrame(qint64);
QDeclarativeDebugTrace();
+ ~QDeclarativeDebugTrace();
protected:
virtual void messageReceived(const QByteArray &);
private:
void rangeLocationImpl(RangeType, const QString &, int);
void rangeLocationImpl(RangeType, const QUrl &, int);
void endRangeImpl(RangeType);
+ void animationFrameImpl(qint64);
void processMessage(const QDeclarativeDebugData &);
void sendMessages();
QElapsedTimer m_timer;