aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/qmlprofiler/timelinerenderer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/qmlprofiler/timelinerenderer.cpp')
-rw-r--r--plugins/qmlprofiler/timelinerenderer.cpp129
1 files changed, 43 insertions, 86 deletions
diff --git a/plugins/qmlprofiler/timelinerenderer.cpp b/plugins/qmlprofiler/timelinerenderer.cpp
index 893eae01e6..288193a832 100644
--- a/plugins/qmlprofiler/timelinerenderer.cpp
+++ b/plugins/qmlprofiler/timelinerenderer.cpp
@@ -51,8 +51,6 @@ TimelineRenderer::TimelineRenderer(QDeclarativeItem *parent) :
setFlag(QGraphicsItem::ItemHasNoContents, false);
setAcceptedMouseButtons(Qt::LeftButton);
setAcceptHoverEvents(true);
- for (int i=0; i<QmlDebug::MaximumQmlEventType; i++)
- m_rowsExpanded << false;
}
void TimelineRenderer::componentComplete()
@@ -81,36 +79,8 @@ void TimelineRenderer::paint(QPainter *p, const QStyleOptionGraphicsItem *, QWid
m_spacing = qreal(width()) / windowDuration;
- // event rows
- m_rowWidths.clear();
-
- for (int i=0; i<QmlDebug::MaximumQmlEventType; i++) {
- m_rowWidths << m_profilerModelProxy->categoryDepth(i);
- }
-
- m_rowStarts.clear();
- int pos = 0;
- for (int i=0; i<QmlDebug::MaximumQmlEventType; i++) {
- m_rowStarts << pos;
- pos += DefaultRowHeight * m_rowWidths[i];
- }
-
- m_modelRowEnds.clear();
- pos = 0;
- for (int i = 0; i < m_profilerModelProxy->modelCount(); i++) {
- for (int j = 0; j < m_profilerModelProxy->categoryCount(i); j++)
- pos += DefaultRowHeight * m_profilerModelProxy->categoryDepth(i,j);
- m_modelRowEnds << pos;
- }
-
p->setPen(Qt::transparent);
- // speedup: don't draw overlapping events, just skip them
- m_rowLastX.clear();
- for (int i=0; i<QmlDebug::MaximumQmlEventType; i++)
- for (int j=0; j<m_rowWidths[i]; j++)
- m_rowLastX << -m_startTime * m_spacing;
-
for (int modelIndex = 0; modelIndex < m_profilerModelProxy->modelCount(); modelIndex++) {
int lastIndex = m_profilerModelProxy->findLastIndex(modelIndex, m_endTime);
if (lastIndex < m_profilerModelProxy->count(modelIndex)) {
@@ -128,13 +98,19 @@ void TimelineRenderer::paint(QPainter *p, const QStyleOptionGraphicsItem *, QWid
void TimelineRenderer::drawItemsToPainter(QPainter *p, int modelIndex, int fromIndex, int toIndex)
{
- int x, y, width, height, eventType;
+ int x, y, width, height;
+ p->save();
p->setPen(Qt::transparent);
+ int modelRowStart = 0;
+ for (int mi = 0; mi < modelIndex; mi++)
+ modelRowStart += m_profilerModelProxy->rowCount(mi);
+
for (int i = fromIndex; i <= toIndex; i++) {
x = (m_profilerModelProxy->getStartTime(modelIndex, i) - m_startTime) * m_spacing;
- eventType = m_profilerModelProxy->getEventType(modelIndex, i);
+
int rowNumber = m_profilerModelProxy->getEventRow(modelIndex, i);
- y = m_rowStarts[eventType] + rowNumber * DefaultRowHeight;
+ y = (modelRowStart + rowNumber) * DefaultRowHeight;
+
width = m_profilerModelProxy->getDuration(modelIndex, i)*m_spacing;
if (width < 1)
width = 1;
@@ -142,30 +118,11 @@ void TimelineRenderer::drawItemsToPainter(QPainter *p, int modelIndex, int fromI
height = DefaultRowHeight * m_profilerModelProxy->getHeight(modelIndex, i);
y += DefaultRowHeight - height;
- // special: animations
- /*if (eventType == 0 && m_profilerDataModel->getAnimationCount(i) >= 0) {
- double scale = m_profilerDataModel->getMaximumAnimationCount() -
- m_profilerDataModel->getMinimumAnimationCount();
- double fraction;
- if (scale > 1)
- fraction = (double)(m_profilerDataModel->getAnimationCount(i) -
- m_profilerDataModel->getMinimumAnimationCount()) / scale;
- else
- fraction = 1.0;
- height = DefaultRowHeight * (fraction * 0.85 + 0.15);
- y += DefaultRowHeight - height;
-
- double fpsFraction = m_profilerDataModel->getFramerate(i) / 60.0;
- if (fpsFraction > 1.0)
- fpsFraction = 1.0;
- p->setBrush(QColor::fromHsl((fpsFraction*96)+10, 76, 166));
- p->drawRect(x, y, width, height);
- } else */ {
- // normal events
- p->setBrush(m_profilerModelProxy->getColor(modelIndex, i));
- p->drawRect(x, y, width, height);
- }
+ // normal events
+ p->setBrush(m_profilerModelProxy->getColor(modelIndex, i));
+ p->drawRect(x, y, width, height);
}
+ p->restore();
}
void TimelineRenderer::drawSelectionBoxes(QPainter *p, int modelIndex, int fromIndex, int toIndex)
@@ -176,7 +133,12 @@ void TimelineRenderer::drawSelectionBoxes(QPainter *p, int modelIndex, int fromI
int id = m_profilerModelProxy->getEventId(modelIndex, m_selectedItem);
- p->setBrush(Qt::transparent);
+ int modelRowStart = 0;
+ for (int mi = 0; mi < modelIndex; mi++)
+ modelRowStart += m_profilerModelProxy->rowCount(mi);
+
+ p->save();
+
QColor selectionColor = Qt::blue;
if (m_selectionLocked)
selectionColor = QColor(96,0,255);
@@ -184,18 +146,16 @@ void TimelineRenderer::drawSelectionBoxes(QPainter *p, int modelIndex, int fromI
QPen lightPen(QBrush(selectionColor.lighter(130)), 2);
lightPen.setJoinStyle(Qt::MiterJoin);
p->setPen(lightPen);
+ p->setBrush(Qt::transparent);
- int x, y, width, eventType;
- p->setPen(lightPen);
-
+ int x, y, width;
QRect selectedItemRect(0,0,0,0);
for (int i = fromIndex; i <= toIndex; i++) {
if (m_profilerModelProxy->getEventId(modelIndex, i) != id)
continue;
x = (m_profilerModelProxy->getStartTime(modelIndex, i) - m_startTime) * m_spacing;
- eventType = m_profilerModelProxy->getEventType(modelIndex, i);
- y = m_rowStarts[eventType] + DefaultRowHeight * m_profilerModelProxy->getEventRow(modelIndex, i);
+ y = (modelRowStart + m_profilerModelProxy->getEventRow(modelIndex, i)) * DefaultRowHeight;
width = m_profilerModelProxy->getDuration(modelIndex, i)*m_spacing;
if (width<1)
@@ -212,6 +172,8 @@ void TimelineRenderer::drawSelectionBoxes(QPainter *p, int modelIndex, int fromI
p->setPen(strongPen);
p->drawRect(selectedItemRect);
}
+
+ p->restore();
}
void TimelineRenderer::drawBindingLoopMarkers(QPainter *p, int modelIndex, int fromIndex, int toIndex)
@@ -273,9 +235,12 @@ void TimelineRenderer::drawBindingLoopMarkers(QPainter *p, int modelIndex, int f
int TimelineRenderer::modelFromPosition(int y)
{
- for (int i = 0; i < m_modelRowEnds.count(); i++)
- if (y < m_modelRowEnds[i])
- return i;
+ y = y / DefaultRowHeight;
+ for (int modelIndex = 0; modelIndex < m_profilerModelProxy->modelCount(); modelIndex++) {
+ y -= m_profilerModelProxy->rowCount(modelIndex);
+ if (y < 0)
+ return modelIndex;
+ }
}
void TimelineRenderer::mousePressEvent(QGraphicsSceneMouseEvent *event)
@@ -350,17 +315,17 @@ void TimelineRenderer::manageHovered(int x, int y)
return;
}
+ int modelRowStart = 0;
+ for (int mi = 0; mi < modelIndex; mi++)
+ modelRowStart += m_profilerModelProxy->rowCount(mi);
+
// find if we are in the right column
- int itemRow, eventType;
+ int itemRow;
for (int i=eventTo; i>=eventFrom; --i) {
if (ceil(m_profilerModelProxy->getEndTime(modelIndex, i)*m_spacing) < floor(time*m_spacing))
continue;
-// qDebug() << i << m_profilerModelProxy->getStartTime(modelIndex,i) << m_profilerModelProxy->getDuration(modelIndex,i) << m_profilerModelProxy->getEndTime(modelIndex,i) << "at" << time;
-
- eventType = m_profilerModelProxy->getEventType(modelIndex, i);
- itemRow = m_rowStarts[eventType]/DefaultRowHeight +
- m_profilerModelProxy->getEventRow(modelIndex, i);
+ itemRow = modelRowStart + m_profilerModelProxy->getEventRow(modelIndex, i);
if (itemRow == row) {
// match
@@ -420,20 +385,17 @@ QString TimelineRenderer::getDetails(int index) const
int TimelineRenderer::getYPosition(int modelIndex, int index) const
{
Q_ASSERT(m_profilerModelProxy);
- if (index >= m_profilerModelProxy->count() || m_rowStarts.isEmpty())
+ if (index >= m_profilerModelProxy->count())
return 0;
- int eventType = m_profilerModelProxy->getEventType(modelIndex, index);
- int y = m_rowStarts[eventType] + DefaultRowHeight * m_profilerModelProxy->getEventRow(modelIndex, index);
+
+ int modelRowStart = 0;
+ for (int mi = 0; mi < modelIndex; mi++)
+ modelRowStart += m_profilerModelProxy->rowCount(mi);
+
+ int y = DefaultRowHeight * (modelRowStart + m_profilerModelProxy->getEventRow(modelIndex, index));
return y;
}
-//void TimelineRenderer::setRowExpanded(int modelIndex, int rowIndex, bool expanded)
-//{
-// // todo: m_rowsExpanded, should that be removed? where do I have it duplicated?
-// m_rowsExpanded[rowIndex] = expanded;
-// update();
-//}
-
void TimelineRenderer::selectNext()
{
if (m_profilerModelProxy->count() == 0)
@@ -601,8 +563,3 @@ void TimelineRenderer::selectPrevFromId(int modelIndex, int eventId)
setSelectedItem(eventIndex);
}
}
-
-int TimelineRenderer::modelIndexFromType(int typeIndex) const
-{
- return m_profilerModelProxy->modelIndexForCategory(typeIndex, &typeIndex);
-}