QmlProfiler: Consistently clear when clear button pressed

Several QML properties need extra treatment to avoid stale data
after clearing. Toggling the visibility of the timeline renderer
doesn't really help there.

Task-number: QTCREATORBUG-11833

Change-Id: I1903d7bd69d6fe31ecc4cadca8e30fa2104fa09a
Reviewed-by: Christian Stenger <christian.stenger@digia.com>
Reviewed-by: Kai Koehne <kai.koehne@digia.com>
This commit is contained in:
Ulf Hermann
2014-03-25 17:10:25 +01:00
parent 85b7d34ea8
commit 0c9a9348f9
6 changed files with 24 additions and 26 deletions

View File

@@ -82,16 +82,14 @@ Rectangle {
onStateChanged: { onStateChanged: {
// Clear if model is empty. // Clear if model is empty.
if (qmlProfilerModelProxy.getState() === 0) if (qmlProfilerModelProxy.getState() === 0)
root.clearAll(); root.clear();
} }
onDataAvailable: { onDataAvailable: {
view.clearData(); view.clearData();
zoomControl.setRange(0,0);
view.visible = true;
view.requestPaint();
zoomControl.setRange(qmlProfilerModelProxy.traceStartTime(), zoomControl.setRange(qmlProfilerModelProxy.traceStartTime(),
qmlProfilerModelProxy.traceStartTime() + qmlProfilerModelProxy.traceStartTime() +
qmlProfilerModelProxy.traceDuration()/10); qmlProfilerModelProxy.traceDuration()/10);
view.requestPaint();
} }
} }
@@ -106,21 +104,18 @@ Rectangle {
} }
} }
function clearData() { function clear() {
flick.contentY = 0;
flick.contentX = 0;
flick.contentWidth = 0;
view.clearData(); view.clearData();
view.startTime = view.endTime = 0;
hideRangeDetails(); hideRangeDetails();
selectionRangeMode = false; selectionRangeMode = false;
updateRangeButton(); updateRangeButton();
zoomControl.setRange(0,0); zoomControl.setRange(0,0);
} zoomSlider.externalUpdate = true;
zoomSlider.value = zoomSlider.minimumValue;
function clearDisplay() {
clearData();
view.visible = false;
}
function clearAll() {
clearDisplay();
} }
function nextEvent() { function nextEvent() {

View File

@@ -43,7 +43,7 @@ Canvas {
property real endTime : 0 property real endTime : 0
// ***** functions // ***** functions
function clearDisplay() function clear()
{ {
dataReady = false; dataReady = false;
requestPaint(); requestPaint();

View File

@@ -37,7 +37,6 @@ Canvas {
property real startTime : 0 property real startTime : 0
property real endTime : 0 property real endTime : 0
property real timePerPixel: 0
Connections { Connections {
target: zoomControl target: zoomControl
@@ -55,7 +54,7 @@ Canvas {
context.fillRect(0, 0, width, height); context.fillRect(0, 0, width, height);
var realWidth = width - 1; // account for left border var realWidth = width - 1; // account for left border
var totalTime = endTime - startTime; var totalTime = Math.max(1, endTime - startTime);
var spacing = realWidth / totalTime; var spacing = realWidth / totalTime;
var initialBlockLength = 120; var initialBlockLength = 120;
@@ -67,7 +66,7 @@ Canvas {
var realStartTime = Math.floor(startTime/timePerBlock) * timePerBlock; var realStartTime = Math.floor(startTime/timePerBlock) * timePerBlock;
var realStartPos = (startTime - realStartTime) * spacing - 1; var realStartPos = (startTime - realStartTime) * spacing - 1;
timePerPixel = timePerBlock/pixelsPerBlock; var timePerPixel = timePerBlock/pixelsPerBlock;
var initialColor = Math.floor(realStartTime/timePerBlock) % 2; var initialColor = Math.floor(realStartTime/timePerBlock) % 2;
@@ -100,6 +99,12 @@ Canvas {
context.fillRect(0, 0, 1, height); context.fillRect(0, 0, 1, height);
} }
function clear()
{
startTime = endTime = 0;
requestPaint();
}
function prettyPrintTime( t ) function prettyPrintTime( t )
{ {
var round = 1; var round = 1;

View File

@@ -292,13 +292,11 @@ qint64 QmlProfilerTraceView::selectionEnd() const
return 0; return 0;
} }
void QmlProfilerTraceView::clearDisplay() void QmlProfilerTraceView::clear()
{ {
d->m_zoomControl->setRange(0,0); QMetaObject::invokeMethod(d->m_mainView->rootObject(), "clear");
d->m_mainView->rootObject()->setProperty("scrollY", QVariant(0)); QMetaObject::invokeMethod(d->m_overview->rootObject(), "clear");
QMetaObject::invokeMethod(d->m_timebar->rootObject(), "clear");
QMetaObject::invokeMethod(d->m_mainView->rootObject(), "clearAll");
QMetaObject::invokeMethod(d->m_overview->rootObject(), "clearDisplay");
} }
void QmlProfilerTraceView::selectNextEventByHash(const QString &hash) void QmlProfilerTraceView::selectNextEventByHash(const QString &hash)

View File

@@ -78,7 +78,7 @@ public:
void showContextMenu(QPoint position); void showContextMenu(QPoint position);
public slots: public slots:
void clearDisplay(); void clear();
void selectNextEventByHash(const QString &eventHash); void selectNextEventByHash(const QString &eventHash);
void selectNextEventByLocation(const QString &filename, const int line, const int column); void selectNextEventByLocation(const QString &filename, const int line, const int column);

View File

@@ -170,7 +170,7 @@ void QmlProfilerViewManager::getStatisticsInRange(qint64 rangeStart, qint64 rang
void QmlProfilerViewManager::clear() void QmlProfilerViewManager::clear()
{ {
d->traceView->clearDisplay(); d->traceView->clear();
d->eventsView->clear(); d->eventsView->clear();
d->v8profilerView->clear(); d->v8profilerView->clear();
} }