Debugger: Make the time stamp recording option work for single items

Should help to drill down to individual expensive dumpers.

Change-Id: I983ba075231784f71dd9d5c3bda375a3ee508bf6
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2019-04-09 08:23:24 +02:00
parent 57cac11e20
commit e95fd876aa
10 changed files with 53 additions and 18 deletions

View File

@@ -484,7 +484,7 @@ WatchModel::WatchModel(WatchHandler *handler, DebuggerEngine *engine)
m_contentsValid = true;
setHeader({tr("Name"), tr("Value"), tr("Type")});
setHeader({tr("Name"), tr("Time"), tr("Value"), tr("Type")});
m_localsRoot = new WatchItem;
m_localsRoot->iname = "local";
m_localsRoot->name = tr("Locals");
@@ -901,7 +901,7 @@ static QColor valueColor(const WatchItem *item, int column)
if (const WatchModel *model = watchModel(item)) {
if (!model->m_contentsValid && !item->isInspect()) {
color = Theme::Debugger_WatchItem_ValueInvalid;
} else if (column == 1) {
} else if (column == WatchModel::ValueColumn) {
if (!item->valueEnabled)
color = Theme::Debugger_WatchItem_ValueInvalid;
else if (!model->m_contentsValid && !item->isInspect())
@@ -1011,11 +1011,13 @@ QVariant WatchModel::data(const QModelIndex &idx, int role) const
case Qt::EditRole: {
switch (column) {
case 0:
case TimeColumn:
return item->time;
case NameColumn:
return item->expression();
case 1:
case ValueColumn:
return item->editValue();
case 2:
case TypeColumn:
return item->type;
}
break;
@@ -1023,11 +1025,13 @@ QVariant WatchModel::data(const QModelIndex &idx, int role) const
case Qt::DisplayRole: {
switch (column) {
case 0:
case TimeColumn:
return int(1000 * item->time);
case NameColumn:
return displayName(item);
case 1:
case ValueColumn:
return displayValue(item);
case 2:
case TypeColumn:
return displayType(item);
}
break;
@@ -1129,14 +1133,14 @@ bool WatchModel::setData(const QModelIndex &idx, const QVariant &value, int role
switch (role) {
case Qt::EditRole:
switch (idx.column()) {
case 0: {
case NameColumn: {
m_handler->updateWatchExpression(item, value.toString().trimmed());
break;
}
case 1: // Change value
case ValueColumn: // Change value
m_engine->assignValueInDebugger(item, item->expression(), value);
break;
case 2: // TODO: Implement change type.
case TypeColumn: // TODO: Implement change type.
m_engine->assignValueInDebugger(item, item->expression(), value);
break;
}
@@ -1206,20 +1210,20 @@ Qt::ItemFlags WatchModel::flags(const QModelIndex &idx) const
if (item->isWatcher()) {
if (state == InferiorUnrunnable)
return (column == 0 && item->iname.count('.') == 1) ? editable : notEditable;
return (column == NameColumn && item->iname.count('.') == 1) ? editable : notEditable;
if (isRunning && !m_engine->hasCapability(AddWatcherWhileRunningCapability))
return notEditable;
if (column == 0 && item->iname.count('.') == 1)
if (column == NameColumn && item->iname.count('.') == 1)
return editable; // Watcher names are editable.
if (column == 1 && item->arrayIndex >= 0)
if (column == ValueColumn && item->arrayIndex >= 0)
return editable;
if (!item->name.isEmpty()) {
// FIXME: Forcing types is not implemented yet.
//if (idx.column() == 2)
// return editable; // Watcher types can be set by force.
if (column == 1 && item->valueEditable && !item->elided)
if (column == ValueColumn && item->valueEditable && !item->elided)
return editable; // Watcher values are sometimes editable.
}
} else if (item->isLocal()) {
@@ -1227,12 +1231,12 @@ Qt::ItemFlags WatchModel::flags(const QModelIndex &idx) const
return notEditable;
if (isRunning && !m_engine->hasCapability(AddWatcherWhileRunningCapability))
return notEditable;
if (column == 1 && item->valueEditable && !item->elided)
if (column == ValueColumn && item->valueEditable && !item->elided)
return editable; // Locals values are sometimes editable.
if (column == 1 && item->arrayIndex >= 0)
if (column == ValueColumn && item->arrayIndex >= 0)
return editable;
} else if (item->isInspect()) {
if (column == 1 && item->valueEditable)
if (column == ValueColumn && item->valueEditable)
return editable; // Inspector values are sometimes editable.
}
return notEditable;