From f3bdba6c77f8794d69b354663b98d42b2c8c225f Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Tue, 2 Sep 2014 17:09:27 +0200 Subject: [PATCH] QmlProfiler: Paint overview binding loops in separate passes Change-Id: If1bca8eb9b3db2d0249b8679e58ffd2fdebfc6d5 Task-number: QTCREATORBUG-12950 Reviewed-by: Kai Koehne --- src/plugins/qmlprofiler/qml/Overview.js | 26 +++++++++++------------- src/plugins/qmlprofiler/qml/Overview.qml | 6 ++++++ 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/plugins/qmlprofiler/qml/Overview.js b/src/plugins/qmlprofiler/qml/Overview.js index e300c49b77a..4369baf057d 100644 --- a/src/plugins/qmlprofiler/qml/Overview.js +++ b/src/plugins/qmlprofiler/qml/Overview.js @@ -44,13 +44,7 @@ function drawData(canvas, ctxt) if ((!qmlProfilerModelProxy) || qmlProfilerModelProxy.count() === 0) return; - var width = canvas.width; - var bump = 10; - var height = canvas.height - bump; - - var blockHeight = height / qmlProfilerModelProxy.modelCount(); - - var spacing = width / qmlProfilerModelProxy.traceDuration(); + var spacing = canvas.width / qmlProfilerModelProxy.traceDuration(); for (var modelIndex = 0; modelIndex < qmlProfilerModelProxy.modelCount(); ++modelIndex) { for (var ii = canvas.offset; ii < qmlProfilerModelProxy.count(modelIndex); @@ -66,26 +60,30 @@ function drawData(canvas, ctxt) xx = Math.round(xx); - var itemHeight = qmlProfilerModelProxy.relativeHeight(modelIndex, ii) * blockHeight; - var yy = (modelIndex + 1) * blockHeight - itemHeight ; + var itemHeight = qmlProfilerModelProxy.relativeHeight(modelIndex, ii) * + canvas.blockHeight; + var yy = (modelIndex + 1) * canvas.blockHeight - itemHeight ; ctxt.fillStyle = qmlProfilerModelProxy.color(modelIndex, ii); - ctxt.fillRect(xx, bump + yy, eventWidth, itemHeight); + ctxt.fillRect(xx, canvas.bump + yy, eventWidth, itemHeight); } } +} - // binding loops +function drawBindingLoops(canvas, ctxt) { ctxt.strokeStyle = "orange"; ctxt.lineWidth = 2; var radius = 1; - for (modelIndex = 0; modelIndex < qmlProfilerModelProxy.modelCount(); ++modelIndex) { - for (ii = canvas.offset; ii < qmlProfilerModelProxy.count(modelIndex); + var spacing = canvas.width / qmlProfilerModelProxy.traceDuration(); + for (var modelIndex = 0; modelIndex < qmlProfilerModelProxy.modelCount(); ++modelIndex) { + for (var ii = canvas.offset - canvas.increment; ii < qmlProfilerModelProxy.count(modelIndex); ii += canvas.increment) { if (qmlProfilerModelProxy.bindingLoopDest(modelIndex,ii) >= 0) { var xcenter = Math.round(qmlProfilerModelProxy.startTime(modelIndex,ii) + qmlProfilerModelProxy.duration(modelIndex,ii) - qmlProfilerModelProxy.traceStartTime()) * spacing; - var ycenter = Math.round(bump + blockHeight * modelIndex + blockHeight / 2); + var ycenter = Math.round(canvas.bump + canvas.blockHeight * modelIndex + + canvas.blockHeight / 2); ctxt.beginPath(); ctxt.arc(xcenter, ycenter, radius, 0, 2*Math.PI, true); ctxt.stroke(); diff --git a/src/plugins/qmlprofiler/qml/Overview.qml b/src/plugins/qmlprofiler/qml/Overview.qml index 50c5986f76f..b15cebd2a73 100644 --- a/src/plugins/qmlprofiler/qml/Overview.qml +++ b/src/plugins/qmlprofiler/qml/Overview.qml @@ -39,6 +39,8 @@ Canvas { property int eventsPerPass: 4096 property int increment: -1 property int offset: -1 + readonly property int bump: 10; + readonly property int blockHeight: (height - bump) / qmlProfilerModelProxy.models.length; // ***** properties height: 50 @@ -130,6 +132,10 @@ Canvas { ++offset; paintTimer.interval = 1; paintTimer.start(); + } else if (offset < 2 * increment) { + Plotter.drawBindingLoops(canvas, context); + ++offset; + paintTimer.start(); } }