mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-06 01:50:38 +00:00
Resource Usage UI changes
Add a column that shows the parent marker for the event range (by default the end event ID) Add an option to prevent combining resource usage across markers (group by marker) The tooltip for a resource usage entry contains the full marker path
This commit is contained in:
@@ -138,6 +138,8 @@ bool ResourceSorterModel::lessThan(const QModelIndex &source_left, const QModelI
|
||||
ResourceInspector::ResourceInspector(ICaptureContext &ctx, QWidget *parent)
|
||||
: QFrame(parent), ui(new Ui::ResourceInspector), m_Ctx(ctx)
|
||||
{
|
||||
m_SplitByMarker = ctx.Config().ResourceUsage_SplitByMarker;
|
||||
|
||||
ui->setupUi(this);
|
||||
|
||||
SetResourceNameDisplay(tr("No Resource Selected"));
|
||||
@@ -178,6 +180,10 @@ ResourceInspector::ResourceInspector(ICaptureContext &ctx, QWidget *parent)
|
||||
ui->relatedResources->setFont(Formatter::PreferredFont());
|
||||
ui->resourceUsage->setFont(Formatter::PreferredFont());
|
||||
|
||||
ui->resourceUsage->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||
QObject::connect(ui->resourceUsage, &QWidget::customContextMenuRequested, this,
|
||||
&ResourceInspector::resourceUsage_contextMenu);
|
||||
|
||||
{
|
||||
RDHeaderView *header = new RDHeaderView(Qt::Horizontal, this);
|
||||
ui->relatedResources->setHeader(header);
|
||||
@@ -190,8 +196,8 @@ ResourceInspector::ResourceInspector(ICaptureContext &ctx, QWidget *parent)
|
||||
RDHeaderView *header = new RDHeaderView(Qt::Horizontal, this);
|
||||
ui->resourceUsage->setHeader(header);
|
||||
|
||||
ui->resourceUsage->setColumns({tr("EID"), tr("Usage")});
|
||||
header->setColumnStretchHints({-1, 1});
|
||||
ui->resourceUsage->setColumns({tr("EID"), tr("Usage"), tr("End Marker")});
|
||||
header->setColumnStretchHints({-1, -1, 1});
|
||||
}
|
||||
|
||||
QObject::connect(ui->resourceList, &QListView::activated, this,
|
||||
@@ -309,31 +315,47 @@ void ResourceInspector::Inspect(ResourceId id)
|
||||
ui->resourceUsage->setEnabled(false);
|
||||
|
||||
ui->resourceUsage->addTopLevelItem(new RDTreeWidgetItem(
|
||||
{QString(), tr("Resource usage not tracked for this type of resource")}));
|
||||
{QString(), QString(), tr("Resource usage not tracked for this type of resource")}));
|
||||
}
|
||||
else if(usage.empty())
|
||||
{
|
||||
ui->resourceUsage->addTopLevelItem(
|
||||
new RDTreeWidgetItem({QString(), tr("No static usage observed for this resource")}));
|
||||
ui->resourceUsage->addTopLevelItem(new RDTreeWidgetItem(
|
||||
{QString(), QString(), tr("No static usage observed for this resource")}));
|
||||
}
|
||||
else
|
||||
{
|
||||
CombineUsageEvents(
|
||||
m_Ctx, usage, [this](uint32_t startEID, uint32_t endEID, ResourceUsage use) {
|
||||
QString text;
|
||||
CombineUsageEvents(m_Ctx, usage, m_SplitByMarker, [this](uint32_t startEID, uint32_t endEID, ResourceUsage use) {
|
||||
QString text;
|
||||
|
||||
if(startEID == endEID)
|
||||
text = QFormatStr("EID %1").arg(startEID);
|
||||
else
|
||||
text = QFormatStr("EID %1-%2").arg(startEID).arg(endEID);
|
||||
if(startEID == endEID)
|
||||
text = QFormatStr("EID %1").arg(startEID);
|
||||
else
|
||||
text = QFormatStr("EID %1-%2").arg(startEID).arg(endEID);
|
||||
uint32_t eid = m_SplitByMarker ? startEID : endEID;
|
||||
|
||||
RDTreeWidgetItem *item =
|
||||
new RDTreeWidgetItem({text, ToQStr(use, m_Ctx.APIProps().pipelineType)});
|
||||
item->setData(0, ResourceIdRole, QVariant(endEID));
|
||||
item->setData(1, ResourceIdRole, QVariant(endEID));
|
||||
QString markerName(GetParentMarkerName(m_Ctx, eid));
|
||||
bool hasParent = false;
|
||||
QString fullMarkerPath = GetParentMarkerPath(m_Ctx, eid, hasParent);
|
||||
|
||||
ui->resourceUsage->addTopLevelItem(item);
|
||||
});
|
||||
RDTreeWidgetItem *item =
|
||||
new RDTreeWidgetItem({text, ToQStr(use, m_Ctx.APIProps().pipelineType), markerName});
|
||||
item->setData(0, ResourceIdRole, QVariant(endEID));
|
||||
item->setData(1, ResourceIdRole, QVariant(endEID));
|
||||
item->setData(2, ResourceIdRole, QVariant(endEID));
|
||||
item->setToolTip(fullMarkerPath);
|
||||
|
||||
if(hasParent)
|
||||
{
|
||||
RDTreeWidgetItem *child = new RDTreeWidgetItem({QString(), QString(), fullMarkerPath});
|
||||
child->setData(0, ResourceIdRole, QVariant(endEID));
|
||||
child->setData(1, ResourceIdRole, QVariant(endEID));
|
||||
child->setData(2, ResourceIdRole, QVariant(endEID));
|
||||
child->setToolTip(fullMarkerPath);
|
||||
|
||||
item->addChild(child);
|
||||
}
|
||||
ui->resourceUsage->addTopLevelItem(item);
|
||||
});
|
||||
}
|
||||
|
||||
ui->resourceUsage->endUpdate();
|
||||
@@ -654,6 +676,44 @@ void ResourceInspector::on_resourceUsage_doubleClicked(const QModelIndex &index)
|
||||
m_Ctx.SetEventID({}, eid, eid);
|
||||
}
|
||||
|
||||
void ResourceInspector::on_resourceUsage_SplitByMarker_toggled()
|
||||
{
|
||||
m_SplitByMarker = !m_SplitByMarker;
|
||||
m_Ctx.Config().ResourceUsage_SplitByMarker = m_SplitByMarker;
|
||||
m_Ctx.Config().Save();
|
||||
|
||||
// force a refresh to pick up the new grouping of usage
|
||||
ResourceId id = m_Resource;
|
||||
m_Resource = ResourceId();
|
||||
Inspect(id);
|
||||
if(m_SplitByMarker)
|
||||
ui->resourceUsage->setColumns({tr("EID"), tr("Usage"), tr("Start Marker")});
|
||||
else
|
||||
ui->resourceUsage->setColumns({tr("EID"), tr("Usage"), tr("End Marker")});
|
||||
}
|
||||
|
||||
void ResourceInspector::resourceUsage_contextMenu(const QPoint &pos)
|
||||
{
|
||||
QMenu contextMenu(this);
|
||||
QAction copyText(tr("Copy"), this);
|
||||
QAction splitByMarker(tr("Split By Marker"), this);
|
||||
splitByMarker.setCheckable(true);
|
||||
splitByMarker.setChecked(m_SplitByMarker);
|
||||
|
||||
RDTreeWidget *resourceUsage = ui->resourceUsage;
|
||||
QModelIndex index = resourceUsage->indexAt(pos);
|
||||
|
||||
QObject::connect(©Text, &QAction::triggered,
|
||||
[resourceUsage, pos, index] { resourceUsage->copyIndex(pos, index); });
|
||||
QObject::connect(&splitByMarker, &QAction::triggered,
|
||||
[this] { this->on_resourceUsage_SplitByMarker_toggled(); });
|
||||
|
||||
contextMenu.addAction(©Text);
|
||||
contextMenu.addAction(&splitByMarker);
|
||||
|
||||
RDDialog::show(&contextMenu, ui->resourceUsage->viewport()->mapToGlobal(pos));
|
||||
}
|
||||
|
||||
void ResourceInspector::enterEvent(QEvent *event)
|
||||
{
|
||||
HighlightUsage();
|
||||
|
||||
Reference in New Issue
Block a user