diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2013-06-24 11:26:22 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@digia.com> | 2013-06-24 11:48:46 +0200 |
commit | 1a9759855639b9e2b3cdc0687d3381dcbf6c9815 (patch) | |
tree | b2da51f6eddddb83c2d97cdcfac24d38d2e67a4e /src/qml/debugger/qqmlprofilerservice.cpp | |
parent | 8217ec1b888f3ff93f004801b018c5f85362c484 (diff) | |
parent | e1fc2793aef53b84a3f1e19b6d6bdf1141340074 (diff) |
Merge branch 'dev' of ssh://codereview.qt-project.org/qt/qtdeclarative into wip/v4
Conflicts:
src/imports/qtquick2/plugins.qmltypes
src/qml/debugger/qv8debugservice.cpp
src/qml/qml/qml.pri
src/qml/qml/qqmlcompiler.cpp
src/qml/qml/qqmlcomponent.cpp
src/qml/qml/qqmlcontext.cpp
src/qml/qml/qqmldata_p.h
src/qml/qml/qqmlengine_p.h
src/qml/qml/qqmljavascriptexpression.cpp
src/qml/qml/qqmlxmlhttprequest.cpp
src/qml/qml/v4/qv4bindings.cpp
src/qml/qml/v4/qv4irbuilder.cpp
src/qml/qml/v4/qv4jsonobject_p.h
src/qml/qml/v8/qqmlbuiltinfunctions.cpp
src/qml/qml/v8/qv8bindings.cpp
src/qml/qml/v8/qv8contextwrapper.cpp
src/qml/qml/v8/qv8listwrapper.cpp
src/qml/qml/v8/qv8qobjectwrapper.cpp
src/qml/qml/v8/qv8qobjectwrapper_p.h
src/qml/qml/v8/qv8sequencewrapper_p_p.h
src/qml/qml/v8/qv8typewrapper.cpp
src/qml/qml/v8/qv8valuetypewrapper.cpp
src/qml/types/qqmldelegatemodel.cpp
src/quick/items/context2d/qquickcanvasitem.cpp
src/quick/items/context2d/qquickcontext2d.cpp
sync.profile
tests/auto/qml/qjsengine/tst_qjsengine.cpp
tests/benchmarks/qml/animation/animation.pro
tools/qmlprofiler/qmlprofiler.pro
Change-Id: I18a76b8a81d87523247fa03a44ca334b1a2360c9
Diffstat (limited to 'src/qml/debugger/qqmlprofilerservice.cpp')
-rw-r--r-- | src/qml/debugger/qqmlprofilerservice.cpp | 137 |
1 files changed, 113 insertions, 24 deletions
diff --git a/src/qml/debugger/qqmlprofilerservice.cpp b/src/qml/debugger/qqmlprofilerservice.cpp index cb85fc0e1f..0ba939cdca 100644 --- a/src/qml/debugger/qqmlprofilerservice.cpp +++ b/src/qml/debugger/qqmlprofilerservice.cpp @@ -55,7 +55,7 @@ QT_BEGIN_NAMESPACE // instance will be set, unset in constructor. Allows static methods to be inlined. QQmlProfilerService *QQmlProfilerService::instance = 0; Q_GLOBAL_STATIC(QQmlProfilerService, profilerInstance) - +bool QQmlProfilerService::enabled = false; // convert to a QByteArray that can be sent to the debug client // use of QDataStream can skew results @@ -76,12 +76,46 @@ QByteArray QQmlProfilerData::toByteArray() const if (messageType == (int)QQmlProfilerService::Event && detailType == (int)QQmlProfilerService::AnimationFrame) ds << framerate << animationcount; + if (messageType == (int)QQmlProfilerService::PixmapCacheEvent) { + ds << detailData; + switch (detailType) { + case QQmlProfilerService::PixmapSizeKnown: ds << line << column; break; + case QQmlProfilerService::PixmapReferenceCountChanged: ds << animationcount; break; + case QQmlProfilerService::PixmapCacheCountChanged: ds << animationcount; break; + default: break; + } + } + if (messageType == (int)QQmlProfilerService::SceneGraphFrame) { + switch (detailType) { + // RendererFrame: preprocessTime, updateTime, bindingTime, renderTime + case QQmlProfilerService::SceneGraphRendererFrame: ds << subtime_1 << subtime_2 << subtime_3 << subtime_4; break; + // AdaptationLayerFrame: glyphCount (which is an integer), glyphRenderTime, glyphStoreTime + case QQmlProfilerService::SceneGraphAdaptationLayerFrame: ds << (int)subtime_1 << subtime_2 << subtime_3; break; + // ContextFrame: compiling material time + case QQmlProfilerService::SceneGraphContextFrame: ds << subtime_1; break; + // RenderLoop: syncTime, renderTime, swapTime + case QQmlProfilerService::SceneGraphRenderLoopFrame: ds << subtime_1 << subtime_2 << subtime_3; break; + // TexturePrepare: bind, convert, swizzle, upload, mipmap + case QQmlProfilerService::SceneGraphTexturePrepare: ds << subtime_1 << subtime_2 << subtime_3 << subtime_4 << subtime_5; break; + // TextureDeletion: deletionTime + case QQmlProfilerService::SceneGraphTextureDeletion: ds << subtime_1; break; + // PolishAndSync: polishTime, waitTime, syncTime, animationsTime, + case QQmlProfilerService::SceneGraphPolishAndSync: ds << subtime_1 << subtime_2 << subtime_3 << subtime_4; break; + // WindowsRenderLoop: GL time, make current time, SceneGraph time + case QQmlProfilerService::SceneGraphWindowsRenderShow: ds << subtime_1 << subtime_2 << subtime_3; break; + // WindowsAnimations: update time + case QQmlProfilerService::SceneGraphWindowsAnimations: ds << subtime_1; break; + // WindowsRenderWindow: polish time + case QQmlProfilerService::SceneGraphWindowsPolishFrame: ds << subtime_1; break; + default:break; + } + } + return data; } QQmlProfilerService::QQmlProfilerService() - : QQmlDebugService(QStringLiteral("CanvasFrameRate"), 1), - m_enabled(false) + : QQmlDebugService(QStringLiteral("CanvasFrameRate"), 1) { m_timer.start(); @@ -131,6 +165,11 @@ void QQmlProfilerService::animationFrame(qint64 delta) profilerInstance()->animationFrameImpl(delta); } +void QQmlProfilerService::sceneGraphFrame(SceneGraphFrameType frameType, qint64 value1, qint64 value2, qint64 value3, qint64 value4, qint64 value5) +{ + profilerInstance()->sceneGraphFrameImpl(frameType, value1, value2, value3, value4, value5); +} + void QQmlProfilerService::sendProfilingData() { profilerInstance()->sendMessages(); @@ -160,88 +199,136 @@ bool QQmlProfilerService::stopProfilingImpl() void QQmlProfilerService::sendStartedProfilingMessageImpl() { - if (!QQmlDebugService::isDebuggingEnabled() || !m_enabled) + if (!QQmlDebugService::isDebuggingEnabled() || !enabled) return; QQmlProfilerData ed = {m_timer.nsecsElapsed(), (int)Event, (int)StartTrace, - QString(), -1, -1, 0, 0, 0}; + QString(), -1, -1, 0, 0, 0, + 0, 0, 0, 0, 0}; QQmlDebugService::sendMessage(ed.toByteArray()); } void QQmlProfilerService::addEventImpl(EventType event) { - if (!QQmlDebugService::isDebuggingEnabled() || !m_enabled) + if (!QQmlDebugService::isDebuggingEnabled() || !enabled) return; QQmlProfilerData ed = {m_timer.nsecsElapsed(), (int)Event, (int)event, - QString(), -1, -1, 0, 0, 0}; + QString(), -1, -1, 0, 0, 0, + 0, 0, 0, 0, 0}; processMessage(ed); } void QQmlProfilerService::startRange(RangeType range, BindingType bindingType) { - if (!QQmlDebugService::isDebuggingEnabled() || !m_enabled) + if (!QQmlDebugService::isDebuggingEnabled() || !enabled) return; QQmlProfilerData rd = {m_timer.nsecsElapsed(), (int)RangeStart, (int)range, - QString(), -1, -1, 0, 0, (int)bindingType}; + QString(), -1, -1, 0, 0, (int)bindingType, + 0, 0, 0, 0, 0}; processMessage(rd); } void QQmlProfilerService::rangeData(RangeType range, const QString &rData) { - if (!QQmlDebugService::isDebuggingEnabled() || !m_enabled) + if (!QQmlDebugService::isDebuggingEnabled() || !enabled) return; QQmlProfilerData rd = {m_timer.nsecsElapsed(), (int)RangeData, (int)range, - rData, -1, -1, 0, 0, 0}; + rData, -1, -1, 0, 0, 0, + 0, 0, 0, 0, 0}; processMessage(rd); } void QQmlProfilerService::rangeData(RangeType range, const QUrl &rData) { - if (!QQmlDebugService::isDebuggingEnabled() || !m_enabled) + if (!QQmlDebugService::isDebuggingEnabled() || !enabled) return; QQmlProfilerData rd = {m_timer.nsecsElapsed(), (int)RangeData, (int)range, - rData.toString(), -1, -1, 0, 0, 0}; + rData.toString(), -1, -1, 0, 0, 0, + 0, 0, 0, 0, 0}; processMessage(rd); } void QQmlProfilerService::rangeLocation(RangeType range, const QString &fileName, int line, int column) { - if (!QQmlDebugService::isDebuggingEnabled() || !m_enabled) + if (!QQmlDebugService::isDebuggingEnabled() || !enabled) return; QQmlProfilerData rd = {m_timer.nsecsElapsed(), (int)RangeLocation, (int)range, - fileName, line, column, 0, 0, 0}; + fileName, line, column, 0, 0, 0, + 0, 0, 0, 0, 0}; processMessage(rd); } void QQmlProfilerService::rangeLocation(RangeType range, const QUrl &fileName, int line, int column) { - if (!QQmlDebugService::isDebuggingEnabled() || !m_enabled) + if (!QQmlDebugService::isDebuggingEnabled() || !enabled) return; QQmlProfilerData rd = {m_timer.nsecsElapsed(), (int)RangeLocation, (int)range, - fileName.toString(), line, column, 0, 0, 0}; + fileName.toString(), line, column, 0, 0, 0, + 0, 0, 0, 0, 0}; processMessage(rd); } void QQmlProfilerService::endRange(RangeType range) { - if (!QQmlDebugService::isDebuggingEnabled() || !m_enabled) + if (!QQmlDebugService::isDebuggingEnabled() || !enabled) return; QQmlProfilerData rd = {m_timer.nsecsElapsed(), (int)RangeEnd, (int)range, - QString(), -1, -1, 0, 0, 0}; + QString(), -1, -1, 0, 0, 0, + 0, 0, 0, 0, 0}; + processMessage(rd); +} + +void QQmlProfilerService::pixmapEventImpl(PixmapEventType eventType, const QUrl &url) +{ + // assuming enabled checked by caller + QQmlProfilerData rd = {m_timer.nsecsElapsed(), (int)PixmapCacheEvent, (int)eventType, + url.toString(), -1, -1, -1, -1, -1, + 0, 0, 0, 0, 0}; + processMessage(rd); +} + +void QQmlProfilerService::pixmapEventImpl(PixmapEventType eventType, const QUrl &url, int width, int height) +{ + // assuming enabled checked by caller + QQmlProfilerData rd = {m_timer.nsecsElapsed(), (int)PixmapCacheEvent, (int)eventType, + url.toString(), width, height, -1, -1, -1, + 0, 0, 0, 0, 0}; + processMessage(rd); +} + +void QQmlProfilerService::pixmapEventImpl(PixmapEventType eventType, const QUrl &url, int count) +{ + // assuming enabled checked by caller + QQmlProfilerData rd = {m_timer.nsecsElapsed(), (int)PixmapCacheEvent, (int)eventType, + url.toString(), -1, -1, -1, count, -1, + 0, 0, 0, 0, 0}; + processMessage(rd); +} + +void QQmlProfilerService::sceneGraphFrameImpl(SceneGraphFrameType frameType, qint64 value1, qint64 value2, qint64 value3, qint64 value4, qint64 value5) +{ + if (!QQmlDebugService::isDebuggingEnabled() || !enabled) + return; + + // because I already have some space to store ints in the struct, I'll use it to store the frame data + // even though the field names do not match + QQmlProfilerData rd = {m_timer.nsecsElapsed(), (int)SceneGraphFrame, (int)frameType, QString(), + -1, -1, -1, -1, -1, + value1, value2, value3, value4, value5}; processMessage(rd); } void QQmlProfilerService::animationFrameImpl(qint64 delta) { Q_ASSERT(QQmlDebugService::isDebuggingEnabled()); - if (!m_enabled) + if (!enabled) return; int animCount = QUnifiedTimer::instance()->runningAnimationCount(); @@ -250,7 +337,8 @@ void QQmlProfilerService::animationFrameImpl(qint64 delta) // trim fps to integer int fps = 1000 / delta; QQmlProfilerData ed = {m_timer.nsecsElapsed(), (int)Event, (int)AnimationFrame, - QString(), -1, -1, fps, animCount, 0}; + QString(), -1, -1, fps, animCount, 0, + 0, 0, 0, 0, 0}; processMessage(ed); } } @@ -267,12 +355,12 @@ void QQmlProfilerService::processMessage(const QQmlProfilerData &message) bool QQmlProfilerService::profilingEnabled() { - return m_enabled; + return enabled; } void QQmlProfilerService::setProfilingEnabled(bool enable) { - m_enabled = enable; + enabled = enable; } /* @@ -281,6 +369,7 @@ void QQmlProfilerService::setProfilingEnabled(bool enable) void QQmlProfilerService::sendMessages() { QMutexLocker locker(&m_dataMutex); + QList<QByteArray> messages; for (int i = 0; i < m_data.count(); ++i) messages << m_data.at(i).toByteArray(); @@ -303,7 +392,7 @@ void QQmlProfilerService::stateAboutToBeChanged(QQmlDebugService::State newState return; if (state() == Enabled - && m_enabled) { + && enabled) { stopProfilingImpl(); sendMessages(); } |