0
0
mirror of https://github.com/yse/easy_profiler.git synced 2025-01-14 00:27:55 +08:00

[ui] rearrange settings; some renames

This commit is contained in:
Victor Zarubkin 2019-10-27 14:27:53 +03:00
parent 33850d5abf
commit 0dc5a71aad
16 changed files with 218 additions and 211 deletions

View File

@ -6,7 +6,7 @@
* email : v.s.zarubkin@gmail.com * email : v.s.zarubkin@gmail.com
* ----------------- : * ----------------- :
* description : The file contains implementation of ArbitraryValueToolTip which is used * description : The file contains implementation of ArbitraryValueToolTip which is used
* : for displaying arbitrary value in Diagram and Hierarchy widgets. * : for displaying arbitrary value in Diagram and StatsTree widgets.
* ----------------- : * ----------------- :
* license : Lightweight profiler library for c++ * license : Lightweight profiler library for c++
* : Copyright(C) 2016-2019 Sergey Yagovtsev, Victor Zarubkin * : Copyright(C) 2016-2019 Sergey Yagovtsev, Victor Zarubkin

View File

@ -6,7 +6,7 @@
* email : v.s.zarubkin@gmail.com * email : v.s.zarubkin@gmail.com
* ----------------- : * ----------------- :
* description : The file contains declaration of ArbitraryValueToolTip which is used * description : The file contains declaration of ArbitraryValueToolTip which is used
* : for displaying arbitrary value in Diagram and Hierarchy widgets. * : for displaying arbitrary value in Diagram and StatsTree widgets.
* ----------------- : * ----------------- :
* license : Lightweight profiler library for c++ * license : Lightweight profiler library for c++
* : Copyright(C) 2016-2019 Sergey Yagovtsev, Victor Zarubkin * : Copyright(C) 2016-2019 Sergey Yagovtsev, Victor Zarubkin

View File

@ -1721,7 +1721,7 @@ void BlocksGraphicsView::mouseReleaseEvent(QMouseEvent* _event)
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
void BlocksGraphicsView::addSelectionToHierarchy() void BlocksGraphicsView::addSelectionToStatsTree()
{ {
if (!m_selectionItem->isVisible()) if (!m_selectionItem->isVisible())
return; return;
@ -1806,7 +1806,7 @@ void BlocksGraphicsView::onInspectCurrentView(bool strict)
emit EASY_GLOBALS.events.rulerVisible(true); emit EASY_GLOBALS.events.rulerVisible(true);
addSelectionToHierarchy(); addSelectionToStatsTree();
} }
else else
{ {

View File

@ -301,7 +301,7 @@ private:
void revalidateOffset(); void revalidateOffset();
void addSelectionToHierarchy(); void addSelectionToStatsTree();
private slots: private slots:

View File

@ -97,7 +97,9 @@
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
const int HIERARCHY_BUILDER_TIMER_INTERVAL = 40; namespace {
const int TREE_BUILDER_TIMER_INTERVAL = 40;
const bool PLAIN_MODE_COLUMNS[COL_COLUMNS_NUMBER] = { const bool PLAIN_MODE_COLUMNS[COL_COLUMNS_NUMBER] = {
true // COL_NAME = 0, true // COL_NAME = 0,
@ -183,6 +185,8 @@ const bool SELECTION_MODE_COLUMNS[COL_COLUMNS_NUMBER] = {
, true // COL_NCALLS_PER_AREA, , true // COL_NCALLS_PER_AREA,
}; };
} // end of namespace <noname>.
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
BlocksTreeWidget::BlocksTreeWidget(QWidget* _parent) BlocksTreeWidget::BlocksTreeWidget(QWidget* _parent)
@ -366,7 +370,7 @@ BlocksTreeWidget::BlocksTreeWidget(QWidget* _parent)
} }
} }
m_hintLabel = new QLabel("Use Right Mouse Button on the Diagram to build a hierarchy...\n" m_hintLabel = new QLabel("Use Right Mouse Button on the Diagram to build a tree...\n"
"Way 1: Press the button >> Move mouse >> Release the button\n" "Way 1: Press the button >> Move mouse >> Release the button\n"
"Way 2: Just click the right mouse button on any block", this); "Way 2: Just click the right mouse button on any block", this);
m_hintLabel->setObjectName(QStringLiteral("BlocksTreeWidget_HintLabel")); m_hintLabel->setObjectName(QStringLiteral("BlocksTreeWidget_HintLabel"));
@ -492,15 +496,15 @@ void BlocksTreeWidget::mousePressEvent(QMouseEvent* _event)
void BlocksTreeWidget::onFillTimerTimeout() void BlocksTreeWidget::onFillTimerTimeout()
{ {
if (m_hierarchyBuilder.done()) if (m_treeBuilder.done())
{ {
m_fillTimer.stop(); m_fillTimer.stop();
ThreadedItems toplevelitems; ThreadedItems toplevelitems;
m_hierarchyBuilder.takeItems(m_items); m_treeBuilder.takeItems(m_items);
m_hierarchyBuilder.takeTopLevelItems(toplevelitems); m_treeBuilder.takeTopLevelItems(toplevelitems);
auto error = m_hierarchyBuilder.error(); auto error = m_treeBuilder.error();
m_hierarchyBuilder.interrupt(); m_treeBuilder.interrupt();
{ {
const QSignalBlocker b(this); const QSignalBlocker b(this);
for (auto& item : toplevelitems) for (auto& item : toplevelitems)
@ -557,7 +561,7 @@ void BlocksTreeWidget::onFillTimerTimeout()
} }
else if (m_progress != nullptr) else if (m_progress != nullptr)
{ {
m_progress->setValue(m_hierarchyBuilder.progress()); m_progress->setValue(m_treeBuilder.progress());
} }
} }
@ -614,8 +618,8 @@ void BlocksTreeWidget::setTreeBlocks(const profiler_gui::TreeBlocks& _blocks, pr
m_bLocked = true; m_bLocked = true;
m_hintLabel->hide(); m_hintLabel->hide();
createProgressDialog(); createProgressDialog();
m_hierarchyBuilder.fillTreeBlocks(m_inputBlocks, _session_begin_time, _left, _right, _strict, m_mode); m_treeBuilder.fillTreeBlocks(m_inputBlocks, _session_begin_time, _left, _right, _strict, m_mode);
m_fillTimer.start(HIERARCHY_BUILDER_TIMER_INTERVAL); m_fillTimer.start(TREE_BUILDER_TIMER_INTERVAL);
} }
//StubLocker l; //StubLocker l;
@ -647,7 +651,7 @@ void BlocksTreeWidget::clearSilent(bool _global)
{ {
const QSignalBlocker b(this); const QSignalBlocker b(this);
m_hierarchyBuilder.interrupt(); m_treeBuilder.interrupt();
destroyProgressDialog(); destroyProgressDialog();
m_hintLabel->show(); m_hintLabel->show();
@ -1545,7 +1549,7 @@ void BlocksTreeWidget::saveSettings()
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
HierarchyWidget::HierarchyWidget(QWidget* _parent) : Parent(_parent) StatsWidget::StatsWidget(QWidget* _parent) : Parent(_parent)
, m_tree(new BlocksTreeWidget(this)) , m_tree(new BlocksTreeWidget(this))
, m_searchBox(new QLineEdit(this)) , m_searchBox(new QLineEdit(this))
, m_foundNumber(new QLabel(QStringLiteral("<font color=\"red\">0</font> matches"), this)) , m_foundNumber(new QLabel(QStringLiteral("<font color=\"red\">0</font> matches"), this))
@ -1613,12 +1617,12 @@ HierarchyWidget::HierarchyWidget(QWidget* _parent) : Parent(_parent)
m_foundNumber->hide(); m_foundNumber->hide();
} }
HierarchyWidget::~HierarchyWidget() StatsWidget::~StatsWidget()
{ {
saveSettings(); saveSettings();
} }
void HierarchyWidget::loadSettings() void StatsWidget::loadSettings()
{ {
QSettings settings(profiler_gui::ORGANAZATION_NAME, profiler_gui::APPLICATION_NAME); QSettings settings(profiler_gui::ORGANAZATION_NAME, profiler_gui::APPLICATION_NAME);
settings.beginGroup("HierarchyWidget"); settings.beginGroup("HierarchyWidget");
@ -1630,7 +1634,7 @@ void HierarchyWidget::loadSettings()
settings.endGroup(); settings.endGroup();
} }
void HierarchyWidget::saveSettings() void StatsWidget::saveSettings()
{ {
QSettings settings(profiler_gui::ORGANAZATION_NAME, profiler_gui::APPLICATION_NAME); QSettings settings(profiler_gui::ORGANAZATION_NAME, profiler_gui::APPLICATION_NAME);
settings.beginGroup("HierarchyWidget"); settings.beginGroup("HierarchyWidget");
@ -1638,19 +1642,19 @@ void HierarchyWidget::saveSettings()
settings.endGroup(); settings.endGroup();
} }
void HierarchyWidget::enterEvent(QEvent* event) void StatsWidget::enterEvent(QEvent* event)
{ {
Parent::enterEvent(event); Parent::enterEvent(event);
m_tree->updateHintLabelOnHover(true); m_tree->updateHintLabelOnHover(true);
} }
void HierarchyWidget::leaveEvent(QEvent* event) void StatsWidget::leaveEvent(QEvent* event)
{ {
Parent::leaveEvent(event); Parent::leaveEvent(event);
m_tree->updateHintLabelOnHover(false); m_tree->updateHintLabelOnHover(false);
} }
void HierarchyWidget::keyPressEvent(QKeyEvent* _event) void StatsWidget::keyPressEvent(QKeyEvent* _event)
{ {
switch (_event->key()) switch (_event->key())
{ {
@ -1677,12 +1681,12 @@ void HierarchyWidget::keyPressEvent(QKeyEvent* _event)
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void HierarchyWidget::contextMenuEvent(QContextMenuEvent* _event) void StatsWidget::contextMenuEvent(QContextMenuEvent* _event)
{ {
m_tree->contextMenuEvent(_event); m_tree->contextMenuEvent(_event);
} }
void HierarchyWidget::showEvent(QShowEvent* event) void StatsWidget::showEvent(QShowEvent* event)
{ {
Parent::showEvent(event); Parent::showEvent(event);
m_searchBox->setFixedWidth(px(300)); m_searchBox->setFixedWidth(px(300));
@ -1690,19 +1694,19 @@ void HierarchyWidget::showEvent(QShowEvent* event)
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BlocksTreeWidget* HierarchyWidget::tree() BlocksTreeWidget* StatsWidget::tree()
{ {
return m_tree; return m_tree;
} }
void HierarchyWidget::clear(bool _global) void StatsWidget::clear(bool _global)
{ {
m_tree->clearSilent(_global); m_tree->clearSilent(_global);
m_foundNumber->setText(QStringLiteral("<font color=\"red\">0</font> matches")); m_foundNumber->setText(QStringLiteral("<font color=\"red\">0</font> matches"));
m_foundNumber->hide(); m_foundNumber->hide();
} }
void HierarchyWidget::onSeachBoxReturnPressed() void StatsWidget::onSeachBoxReturnPressed()
{ {
if (m_searchButton->data().toBool()) if (m_searchButton->data().toBool())
findNext(true); findNext(true);
@ -1710,7 +1714,7 @@ void HierarchyWidget::onSeachBoxReturnPressed()
findPrev(true); findPrev(true);
} }
void HierarchyWidget::onSearchBoxTextChanged(const QString& _text) void StatsWidget::onSearchBoxTextChanged(const QString& _text)
{ {
if (_text.isEmpty()) if (_text.isEmpty())
{ {
@ -1719,7 +1723,7 @@ void HierarchyWidget::onSearchBoxTextChanged(const QString& _text)
} }
} }
void HierarchyWidget::findNext(bool) void StatsWidget::findNext(bool)
{ {
auto text = m_searchBox->text(); auto text = m_searchBox->text();
if (text.isEmpty()) if (text.isEmpty())
@ -1752,7 +1756,7 @@ void HierarchyWidget::findNext(bool)
m_foundNumber->show(); m_foundNumber->show();
} }
void HierarchyWidget::findPrev(bool) void StatsWidget::findPrev(bool)
{ {
auto text = m_searchBox->text(); auto text = m_searchBox->text();
if (text.isEmpty()) if (text.isEmpty())
@ -1785,7 +1789,7 @@ void HierarchyWidget::findPrev(bool)
m_foundNumber->show(); m_foundNumber->show();
} }
void HierarchyWidget::findNextFromMenu(bool _checked) void StatsWidget::findNextFromMenu(bool _checked)
{ {
if (!_checked) if (!_checked)
return; return;
@ -1802,7 +1806,7 @@ void HierarchyWidget::findNextFromMenu(bool _checked)
findNext(true); findNext(true);
} }
void HierarchyWidget::findPrevFromMenu(bool _checked) void StatsWidget::findPrevFromMenu(bool _checked)
{ {
if (!_checked) if (!_checked)
return; return;

View File

@ -82,7 +82,7 @@ class BlocksTreeWidget : public QTreeWidget
protected: protected:
TreeWidgetLoader m_hierarchyBuilder; TreeWidgetLoader m_treeBuilder;
Items m_items; Items m_items;
RootsMap m_roots; RootsMap m_roots;
::profiler_gui::TreeBlocks m_inputBlocks; ::profiler_gui::TreeBlocks m_inputBlocks;
@ -189,12 +189,12 @@ private:
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
class HierarchyWidget : public QWidget class StatsWidget : public QWidget
{ {
Q_OBJECT Q_OBJECT
using Parent = QWidget; using Parent = QWidget;
using This = HierarchyWidget; using This = StatsWidget;
private: private:
@ -208,8 +208,8 @@ public:
// Public virtual methods // Public virtual methods
explicit HierarchyWidget(QWidget* _parent = nullptr); explicit StatsWidget(QWidget* _parent = nullptr);
~HierarchyWidget() override; ~StatsWidget() override;
void enterEvent(QEvent* event) override; void enterEvent(QEvent* event) override;
void leaveEvent(QEvent* event) override; void leaveEvent(QEvent* event) override;

View File

@ -89,6 +89,7 @@ Globals::Globals()
, frame_time(16700) , frame_time(16700)
, blocks_spacing(0) , blocks_spacing(0)
, blocks_size_min(2) , blocks_size_min(2)
, histogram_column_width_min(2)
, blocks_narrow_size(20) , blocks_narrow_size(20)
, max_fps_history(90) , max_fps_history(90)
, fps_timer_interval(500) , fps_timer_interval(500)
@ -111,7 +112,7 @@ Globals::Globals()
, draw_histogram_borders(true) , draw_histogram_borders(true)
, hide_narrow_children(false) , hide_narrow_children(false)
, hide_minsize_blocks(false) , hide_minsize_blocks(false)
, display_only_relevant_stats(false) , hide_stats_for_single_blocks(false)
, collapse_items_on_tree_close(false) , collapse_items_on_tree_close(false)
, all_items_expanded_by_default(true) , all_items_expanded_by_default(true)
, only_current_thread_hierarchy(false) , only_current_thread_hierarchy(false)

View File

@ -215,11 +215,12 @@ namespace profiler_gui {
::profiler::block_id_t selected_block_id; ///< Current selected profiler block id ::profiler::block_id_t selected_block_id; ///< Current selected profiler block id
uint32_t version; ///< Opened file version (files may have different format) uint32_t version; ///< Opened file version (files may have different format)
uint32_t max_rows_count; ///< Maximum blocks count for the Hierarchy widget for the full call-stack mode uint32_t max_rows_count; ///< Maximum blocks count for the StatsTree widget for the full call-stack mode
float frame_time; ///< Expected frame time value in microseconds to be displayed at minimap on graphics scrollbar float frame_time; ///< Expected frame time value in microseconds to be displayed at minimap on graphics scrollbar
int blocks_spacing; ///< Minimum blocks spacing on diagram int blocks_spacing; ///< Minimum blocks spacing on diagram
int blocks_size_min; ///< Minimum blocks size on diagram int blocks_size_min; ///< Minimum blocks size on diagram
int histogram_column_width_min; ///< Minimum column width on histogram when borders are enabled
int blocks_narrow_size; ///< Width indicating narrow blocks int blocks_narrow_size; ///< Width indicating narrow blocks
int max_fps_history; ///< Max frames history displayed in FPS Monitor int max_fps_history; ///< Max frames history displayed in FPS Monitor
int fps_timer_interval; ///< Interval in milliseconds for sending network requests to the profiled application (used by FPS Monitor) int fps_timer_interval; ///< Interval in milliseconds for sending network requests to the profiled application (used by FPS Monitor)
@ -245,7 +246,7 @@ namespace profiler_gui {
bool draw_histogram_borders; ///< Draw borders for histogram columns or not bool draw_histogram_borders; ///< Draw borders for histogram columns or not
bool hide_narrow_children; ///< Hide children for narrow graphics blocks (See blocks_narrow_size) bool hide_narrow_children; ///< Hide children for narrow graphics blocks (See blocks_narrow_size)
bool hide_minsize_blocks; ///< Hide blocks which screen size is less than blocks_size_min bool hide_minsize_blocks; ///< Hide blocks which screen size is less than blocks_size_min
bool display_only_relevant_stats; ///< Display only relevant information in ProfTreeWidget (excludes min, max, average times if there are only 1 calls number) bool hide_stats_for_single_blocks; ///< Hide min, max, avg, median durations in stats tree if there is only 1 call for a block
bool collapse_items_on_tree_close; ///< Collapse all items which were displayed in the hierarchy tree after tree close/reset bool collapse_items_on_tree_close; ///< Collapse all items which were displayed in the hierarchy tree after tree close/reset
bool all_items_expanded_by_default; ///< Expand all items after file is opened bool all_items_expanded_by_default; ///< Expand all items after file is opened
bool only_current_thread_hierarchy; ///< Build hierarchy tree for current thread only bool only_current_thread_hierarchy; ///< Build hierarchy tree for current thread only

View File

@ -66,7 +66,6 @@ namespace {
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
EASY_CONSTEXPR int HIST_COLUMN_MIN_HEIGHT = 2; EASY_CONSTEXPR int HIST_COLUMN_MIN_HEIGHT = 2;
EASY_CONSTEXPR qreal HIST_COLUMN_MIN_WIDTH_WITH_BORDER = 3;
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
@ -251,24 +250,6 @@ void GraphicsHistogramItem::paintByPtr(QPainter* _painter)
// MEDIAN & EXPECTED FRAME TIME // MEDIAN & EXPECTED FRAME TIME
if (!isEmpty()) if (!isEmpty())
{ {
const qreal mdn = m_medianDuration * 1e-3;
if (m_bottomValue < mdn && mdn < m_topValue)
{
// Draw marker displaying expected frame_time step
const auto h = bottom - (mdn - m_bottomValue) * coeff;
_painter->setPen(Qt::DashDotDotLine);
auto w = width;
const auto boundary = widget->margin() - font_h;
if (h < (m_boundingRect.top() - boundary))
w = top_width;
else if (h > (bottom + boundary))
w = bottom_width;
_painter->drawLine(QLineF(0, h, w, h));
}
if (m_bottomValue < EASY_GLOBALS.frame_time && EASY_GLOBALS.frame_time < m_topValue) if (m_bottomValue < EASY_GLOBALS.frame_time && EASY_GLOBALS.frame_time < m_topValue)
{ {
// Draw marker displaying expected frame_time step // Draw marker displaying expected frame_time step
@ -406,24 +387,6 @@ void GraphicsHistogramItem::paintById(QPainter* _painter)
// MEDIAN & EXPECTED FRAME TIME // MEDIAN & EXPECTED FRAME TIME
if (!isEmpty()) if (!isEmpty())
{ {
const qreal mdn = m_medianDuration * 1e-3;
if (m_bottomValue < mdn && mdn < m_topValue)
{
// Draw marker displaying expected frame_time step
const auto h = bottom - (mdn - m_bottomValue) * coeff;
_painter->setPen(Qt::DashDotDotLine);
auto w = width;
const auto boundary = widget->margin() - font_h;
if (h < (m_boundingRect.top() - boundary))
w = top_width;
else if (h > (bottom + boundary))
w = bottom_width;
_painter->drawLine(QLineF(0, h, w, h));
}
if (m_bottomValue < EASY_GLOBALS.frame_time && EASY_GLOBALS.frame_time < m_topValue) if (m_bottomValue < EASY_GLOBALS.frame_time && EASY_GLOBALS.frame_time < m_topValue)
{ {
// Draw marker displaying required frame_time step // Draw marker displaying required frame_time step
@ -1057,9 +1020,10 @@ bool GraphicsHistogramItem::updateImage()
const auto beginTime = EASY_GLOBALS.begin_time; const auto beginTime = EASY_GLOBALS.begin_time;
const auto autoHeight = EASY_GLOBALS.auto_adjust_histogram_height; const auto autoHeight = EASY_GLOBALS.auto_adjust_histogram_height;
const auto drawBorders = EASY_GLOBALS.draw_histogram_borders; const auto drawBorders = EASY_GLOBALS.draw_histogram_borders;
const auto minColumnWidth = EASY_GLOBALS.histogram_column_width_min;
m_worker.enqueue([=] { m_worker.enqueue([=] {
updateImageAsync(rect, regime, scale, left, right, right - left, value, window, top, bottom, bindMode, updateImageAsync(rect, regime, scale, left, right, right - left, value, window, top, bottom,
frameTime, beginTime, autoHeight, drawBorders); minColumnWidth, bindMode, frameTime, beginTime, autoHeight, drawBorders);
}, m_bReady); }, m_bReady);
return true; return true;
@ -1095,9 +1059,8 @@ void GraphicsHistogramItem::onImageUpdated()
} }
void GraphicsHistogramItem::updateImageAsync(QRectF _boundingRect, HistRegime _regime, qreal _current_scale, void GraphicsHistogramItem::updateImageAsync(QRectF _boundingRect, HistRegime _regime, qreal _current_scale,
qreal _minimum, qreal _maximum, qreal _range, qreal _minimum, qreal _maximum, qreal _range, qreal _value, qreal _width, qreal _top_duration, qreal _bottom_duration,
qreal _value, qreal _width, qreal _top_duration, qreal _bottom_duration, int _min_column_width, bool _bindMode, float _frame_time, profiler::timestamp_t _begin_time, bool _autoAdjustHist, bool _drawBorders)
bool _bindMode, float _frame_time, profiler::timestamp_t _begin_time, bool _autoAdjustHist, bool _drawBorders)
{ {
const auto bottom = _boundingRect.height();//_boundingRect.bottom(); const auto bottom = _boundingRect.height();//_boundingRect.bottom();
const auto screenWidth = _boundingRect.width() * _current_scale; const auto screenWidth = _boundingRect.width() * _current_scale;
@ -1225,7 +1188,7 @@ void GraphicsHistogramItem::updateImageAsync(QRectF _boundingRect, HistRegime _r
const auto dtime = _top_duration - _bottom_duration; const auto dtime = _top_duration - _bottom_duration;
const auto coeff = _boundingRect.height() / (dtime > 1e-3 ? dtime : 1.); const auto coeff = _boundingRect.height() / (dtime > 1e-3 ? dtime : 1.);
const qreal minWidth = _drawBorders ? HIST_COLUMN_MIN_WIDTH_WITH_BORDER : 1.; const qreal minWidth = _drawBorders ? _min_column_width : 1;
if (_drawBorders) if (_drawBorders)
p.setPen(profiler_gui::BLOCK_BORDER_COLOR); p.setPen(profiler_gui::BLOCK_BORDER_COLOR);
@ -1433,7 +1396,7 @@ void GraphicsHistogramItem::updateImageAsync(QRectF _boundingRect, HistRegime _r
const auto dtime = _top_duration - _bottom_duration; const auto dtime = _top_duration - _bottom_duration;
const auto coeff = _boundingRect.height() / (dtime > 1e-3 ? dtime : 1.); const auto coeff = _boundingRect.height() / (dtime > 1e-3 ? dtime : 1.);
const qreal minWidth = _drawBorders ? HIST_COLUMN_MIN_WIDTH_WITH_BORDER : 1.; const qreal minWidth = _drawBorders ? _min_column_width : 1;
if (_drawBorders) if (_drawBorders)
p.setPen(profiler_gui::BLOCK_BORDER_COLOR); p.setPen(profiler_gui::BLOCK_BORDER_COLOR);

View File

@ -143,8 +143,8 @@ private:
void paintById(QPainter* _painter); void paintById(QPainter* _painter);
void updateImageAsync(QRectF _boundingRect, HistRegime _regime, qreal _current_scale, void updateImageAsync(QRectF _boundingRect, HistRegime _regime, qreal _current_scale,
qreal _minimum, qreal _maximum, qreal _range, qreal _minimum, qreal _maximum, qreal _range, qreal _value, qreal _width,
qreal _value, qreal _width, qreal _top_duration, qreal _bottom_duration, bool _bindMode, qreal _top_duration, qreal _bottom_duration, int _min_column_width, bool _bindMode,
float _frame_time, profiler::timestamp_t _begin_time, bool _autoAdjustHist, bool _drawBorders); float _frame_time, profiler::timestamp_t _begin_time, bool _autoAdjustHist, bool _drawBorders);
}; // END of class GraphicsHistogramItem. }; // END of class GraphicsHistogramItem.

View File

@ -366,12 +366,12 @@ MainWindow::MainWindow() : Parent(), m_theme("default"), m_lastAddress("localhos
connect(this, &MainWindow::activationChanged, graphicsView->threadsView(), &ThreadNamesWidget::onWindowActivationChanged, Qt::QueuedConnection); connect(this, &MainWindow::activationChanged, graphicsView->threadsView(), &ThreadNamesWidget::onWindowActivationChanged, Qt::QueuedConnection);
m_graphicsView->setWidget(graphicsView); m_graphicsView->setWidget(graphicsView);
m_treeWidget = new DockWidget("Hierarchy", this); m_treeWidget = new DockWidget("Stats", this);
m_treeWidget->setObjectName("ProfilerGUI_Hierarchy"); m_treeWidget->setObjectName("ProfilerGUI_Hierarchy");
m_treeWidget->setMinimumHeight(px(50)); m_treeWidget->setMinimumHeight(px(50));
m_treeWidget->setAllowedAreas(Qt::AllDockWidgetAreas); m_treeWidget->setAllowedAreas(Qt::AllDockWidgetAreas);
auto treeWidget = new HierarchyWidget(this); auto treeWidget = new StatsWidget(this);
m_treeWidget->setWidget(treeWidget); m_treeWidget->setWidget(treeWidget);
m_fpsViewer = new DockWidget("FPS Monitor", this); m_fpsViewer = new DockWidget("FPS Monitor", this);
@ -464,8 +464,8 @@ MainWindow::MainWindow() : Parent(), m_theme("default"), m_lastAddress("localhos
toolbar->addAction(QIcon(imagePath("expand")), "Expand all", this, SLOT(onExpandAllClicked(bool))); toolbar->addAction(QIcon(imagePath("expand")), "Expand all", this, SLOT(onExpandAllClicked(bool)));
toolbar->addAction(QIcon(imagePath("collapse")), "Collapse all", this, SLOT(onCollapseAllClicked(bool))); toolbar->addAction(QIcon(imagePath("collapse")), "Collapse all", this, SLOT(onCollapseAllClicked(bool)));
action = toolbar->addAction(QIcon(imagePath("binoculars")), "See blocks hierarchy"); action = toolbar->addAction(QIcon(imagePath("binoculars")), "Build stats tree");
action->setToolTip("Build blocks hierarchy\nfor current visible area\nor zoom to current selected area."); action->setToolTip("Build stats tree\nfor current visible area\nor zoom to current selected area.");
connect(action, &QAction::triggered, [this] (bool) { connect(action, &QAction::triggered, [this] (bool) {
static_cast<DiagramWidget*>(m_graphicsView->widget())->view()->inspectCurrentView(true); static_cast<DiagramWidget*>(m_graphicsView->widget())->view()->inspectCurrentView(true);
}); });
@ -486,40 +486,11 @@ MainWindow::MainWindow() : Parent(), m_theme("default"), m_lastAddress("localhos
toolButton->setPopupMode(QToolButton::InstantPopup); toolButton->setPopupMode(QToolButton::InstantPopup);
toolbar->addWidget(toolButton); toolbar->addWidget(toolButton);
action = menu->addAction("Statistics enabled");
action->setCheckable(true);
action->setChecked(EASY_GLOBALS.enable_statistics);
connect(action, &QAction::triggered, this, &This::onEnableDisableStatistics);
if (EASY_GLOBALS.enable_statistics)
{
auto f = action->font();
f.setBold(true);
action->setFont(f);
action->setIcon(QIcon(imagePath("stats")));
}
else
{
action->setText("Statistics disabled");
action->setIcon(QIcon(imagePath("stats-off")));
}
auto submenu = menu->addMenu("Diagram");
action = menu->addAction("Only frames on histogram");
action->setToolTip("Display only top-level blocks on histogram.");
action->setCheckable(true);
action->setChecked(EASY_GLOBALS.display_only_frames_on_histogram);
connect(action, &QAction::triggered, [this](bool _checked)
{
EASY_GLOBALS.display_only_frames_on_histogram = _checked;
emit EASY_GLOBALS.events.displayOnlyFramesOnHistogramChanged();
});
menu->addSeparator();
auto submenu = menu->addMenu("View");
submenu->setToolTipsVisible(true); submenu->setToolTipsVisible(true);
action = submenu->addAction("Diagram borders"); action = submenu->addAction("Draw borders");
action->setToolTip("Draw borders for blocks on diagram.\nThis slightly reduces performance."); action->setToolTip("Draw borders for blocks on diagram.\nThis slightly reduces performance.");
action->setCheckable(true); action->setCheckable(true);
action->setChecked(EASY_GLOBALS.draw_graphics_items_borders); action->setChecked(EASY_GLOBALS.draw_graphics_items_borders);
@ -528,15 +499,6 @@ MainWindow::MainWindow() : Parent(), m_theme("default"), m_lastAddress("localhos
refreshDiagram(); refreshDiagram();
}); });
action = submenu->addAction("Histogram borders");
action->setToolTip("Draw borders for histogram columns.");
action->setCheckable(true);
action->setChecked(EASY_GLOBALS.draw_histogram_borders);
connect(action, &QAction::triggered, [this] (bool _checked) {
EASY_GLOBALS.draw_histogram_borders = _checked;
refreshHistogramImage();
});
action = submenu->addAction("Overlap narrow children"); action = submenu->addAction("Overlap narrow children");
action->setToolTip("Children blocks will be overlaped by narrow\nparent blocks. See also \'Blocks narrow size\'.\nThis improves performance."); action->setToolTip("Children blocks will be overlaped by narrow\nparent blocks. See also \'Blocks narrow size\'.\nThis improves performance.");
action->setCheckable(true); action->setCheckable(true);
@ -549,22 +511,6 @@ MainWindow::MainWindow() : Parent(), m_theme("default"), m_lastAddress("localhos
action->setChecked(EASY_GLOBALS.hide_minsize_blocks); action->setChecked(EASY_GLOBALS.hide_minsize_blocks);
connect(action, &QAction::triggered, [this] (bool _checked) { EASY_GLOBALS.hide_minsize_blocks = _checked; refreshDiagram(); }); connect(action, &QAction::triggered, [this] (bool _checked) { EASY_GLOBALS.hide_minsize_blocks = _checked; refreshDiagram(); });
action = submenu->addAction("Build hierarchy only for current thread");
action->setToolTip("Hierarchy tree will be built\nfor blocks from current thread only.\nThis improves performance\nand saves a lot of memory.");
action->setCheckable(true);
action->setChecked(EASY_GLOBALS.only_current_thread_hierarchy);
connect(action, &QAction::triggered, this, &This::onHierarchyFlagChange);
action = submenu->addAction("Add zero blocks to hierarchy");
action->setToolTip("Zero duration blocks will be added into hierarchy tree.\nThis reduces performance and increases memory consumption.");
action->setCheckable(true);
action->setChecked(EASY_GLOBALS.add_zero_blocks_to_hierarchy);
connect(action, &QAction::triggered, [this](bool _checked)
{
EASY_GLOBALS.add_zero_blocks_to_hierarchy = _checked;
emit EASY_GLOBALS.events.hierarchyFlagChanged(_checked);
});
action = submenu->addAction("Enable zero duration blocks on diagram"); action = submenu->addAction("Enable zero duration blocks on diagram");
action->setToolTip("If checked then allows diagram to paint zero duration blocks\nwith 1px width on each scale. Otherwise, such blocks will be resized\nto 250ns duration."); action->setToolTip("If checked then allows diagram to paint zero duration blocks\nwith 1px width on each scale. Otherwise, such blocks will be resized\nto 250ns duration.");
action->setCheckable(true); action->setCheckable(true);
@ -578,7 +524,7 @@ MainWindow::MainWindow() : Parent(), m_theme("default"), m_lastAddress("localhos
connect(action, &QAction::triggered, [this] (bool _checked) { EASY_GLOBALS.highlight_blocks_with_same_id = _checked; refreshDiagram(); }); connect(action, &QAction::triggered, [this] (bool _checked) { EASY_GLOBALS.highlight_blocks_with_same_id = _checked; refreshDiagram(); });
action = submenu->addAction("Collapse blocks on tree reset"); action = submenu->addAction("Collapse blocks on tree reset");
action->setToolTip("This collapses all blocks on diagram\nafter hierarchy tree reset."); action->setToolTip("This collapses all blocks on diagram\nafter stats tree reset.");
action->setCheckable(true); action->setCheckable(true);
action->setChecked(EASY_GLOBALS.collapse_items_on_tree_close); action->setChecked(EASY_GLOBALS.collapse_items_on_tree_close);
connect(action, &QAction::triggered, this, &This::onCollapseItemsAfterCloseChanged); connect(action, &QAction::triggered, this, &This::onCollapseItemsAfterCloseChanged);
@ -590,17 +536,11 @@ MainWindow::MainWindow() : Parent(), m_theme("default"), m_lastAddress("localhos
connect(action, &QAction::triggered, this, &This::onAllItemsExpandedByDefaultChange); connect(action, &QAction::triggered, this, &This::onAllItemsExpandedByDefaultChange);
action = submenu->addAction("Bind diagram and tree expand"); action = submenu->addAction("Bind diagram and tree expand");
action->setToolTip("Expanding/collapsing blocks at diagram expands/collapses\nblocks at hierarchy tree and wise versa."); action->setToolTip("Expanding/collapsing blocks at diagram expands/collapses\nblocks at stats tree and wise versa.");
action->setCheckable(true); action->setCheckable(true);
action->setChecked(EASY_GLOBALS.bind_scene_and_tree_expand_status); action->setChecked(EASY_GLOBALS.bind_scene_and_tree_expand_status);
connect(action, &QAction::triggered, this, &This::onBindExpandStatusChange); connect(action, &QAction::triggered, this, &This::onBindExpandStatusChange);
action = submenu->addAction("Hide stats for single blocks in tree");
action->setToolTip("If checked then such stats like Min,Max,Avg etc.\nwill not be displayed in stats tree for blocks\nwith number of calls == 1");
action->setCheckable(true);
action->setChecked(EASY_GLOBALS.display_only_relevant_stats);
connect(action, &QAction::triggered, this, &This::onDisplayRelevantStatsChange);
action = submenu->addAction("Selecting block changes current thread"); action = submenu->addAction("Selecting block changes current thread");
action->setToolTip("Automatically select thread while selecting a block.\nIf not checked then you will have to select current thread\nmanually double clicking on thread name on a diagram."); action->setToolTip("Automatically select thread while selecting a block.\nIf not checked then you will have to select current thread\nmanually double clicking on thread name on a diagram.");
action->setCheckable(true); action->setCheckable(true);
@ -617,46 +557,6 @@ MainWindow::MainWindow() : Parent(), m_theme("default"), m_lastAddress("localhos
refreshDiagram(); refreshDiagram();
}); });
action = submenu->addAction("Automatically adjust histogram height");
action->setToolTip("You do not need to adjust boundaries manually,\nbut this restricts you from adjusting boundaries at all (zoom mode).\nYou can still adjust boundaries in overview mode though.");
action->setCheckable(true);
action->setChecked(EASY_GLOBALS.auto_adjust_histogram_height);
connect(action, &QAction::triggered, [](bool _checked)
{
EASY_GLOBALS.auto_adjust_histogram_height = _checked;
emit EASY_GLOBALS.events.autoAdjustHistogramChanged();
});
action = submenu->addAction("Automatically adjust chart height");
action->setToolTip("Same as similar option for histogram\nbut used for arbitrary values charts.");
action->setCheckable(true);
action->setChecked(EASY_GLOBALS.auto_adjust_chart_height);
connect(action, &QAction::triggered, [](bool _checked)
{
EASY_GLOBALS.auto_adjust_chart_height = _checked;
emit EASY_GLOBALS.events.autoAdjustChartChanged();
});
action = submenu->addAction("Use decorated thread names");
action->setToolTip("Add \'Thread\' word into thread name if there is no one already.\nExamples: \'Render\' will change to \'Render Thread\'\n\'WorkerThread\' will not change.");
action->setCheckable(true);
action->setChecked(EASY_GLOBALS.use_decorated_thread_name);
connect(action, &QAction::triggered, [this](bool _checked)
{
EASY_GLOBALS.use_decorated_thread_name = _checked;
emit EASY_GLOBALS.events.threadNameDecorationChanged();
});
action = submenu->addAction("Display hex thread id");
action->setToolTip("Display hex thread id instead of decimal.");
action->setCheckable(true);
action->setChecked(EASY_GLOBALS.hex_thread_id);
connect(action, &QAction::triggered, [this](bool _checked)
{
EASY_GLOBALS.hex_thread_id = _checked;
emit EASY_GLOBALS.events.hexThreadIdChanged();
});
submenu->addSeparator(); submenu->addSeparator();
auto actionGroup = new QActionGroup(this); auto actionGroup = new QActionGroup(this);
actionGroup->setExclusive(true); actionGroup->setExclusive(true);
@ -735,7 +635,100 @@ MainWindow::MainWindow() : Parent(), m_theme("default"), m_lastAddress("localhos
submenu->addAction(waction); submenu->addAction(waction);
submenu = menu->addMenu("Histogram");
submenu->setToolTipsVisible(true);
action = submenu->addAction("Draw borders");
action->setToolTip("Draw borders for histogram columns.");
action->setCheckable(true);
action->setChecked(EASY_GLOBALS.draw_histogram_borders);
connect(action, &QAction::triggered, [this] (bool _checked) {
EASY_GLOBALS.draw_histogram_borders = _checked;
refreshHistogramImage();
});
action = submenu->addAction("Automatically adjust histogram height");
action->setToolTip("You do not need to adjust boundaries manually,\n"
"but this restricts you from adjusting boundaries at all (zoom mode).\n"
"You can still adjust boundaries in overview mode though.");
action->setCheckable(true);
action->setChecked(EASY_GLOBALS.auto_adjust_histogram_height);
connect(action, &QAction::triggered, [] (bool _checked)
{
EASY_GLOBALS.auto_adjust_histogram_height = _checked;
emit EASY_GLOBALS.events.autoAdjustHistogramChanged();
});
action = submenu->addAction("Only frames on histogram");
action->setToolTip("Display only top-level blocks on histogram.");
action->setCheckable(true);
action->setChecked(EASY_GLOBALS.display_only_frames_on_histogram);
connect(action, &QAction::triggered, [this] (bool _checked)
{
EASY_GLOBALS.display_only_frames_on_histogram = _checked;
emit EASY_GLOBALS.events.displayOnlyFramesOnHistogramChanged();
});
submenu->addSeparator(); submenu->addSeparator();
w = new QWidget(submenu);
l = new QHBoxLayout(w);
l->setContentsMargins(26, 1, 16, 1);
l->addWidget(new QLabel("Min column width, px", w), 0, Qt::AlignLeft);
spinbox = new QSpinBox(w);
spinbox->setRange(1, 400);
spinbox->setValue(EASY_GLOBALS.histogram_column_width_min);
spinbox->setFixedWidth(px(70));
connect(spinbox, Overload<int>::of(&QSpinBox::valueChanged), this, &This::onHistogramMinSizeChange);
l->addWidget(spinbox);
w->setLayout(l);
waction = new QWidgetAction(submenu);
waction->setDefaultWidget(w);
waction->setToolTip("Minimum column width when borders are enabled.");
submenu->addAction(waction);
submenu = menu->addMenu("Stats");
submenu->setToolTipsVisible(true);
action = submenu->addAction("Statistics enabled");
action->setCheckable(true);
action->setChecked(EASY_GLOBALS.enable_statistics);
connect(action, &QAction::triggered, this, &This::onEnableDisableStatistics);
if (EASY_GLOBALS.enable_statistics)
{
auto f = action->font();
f.setBold(true);
action->setFont(f);
action->setIcon(QIcon(imagePath("stats")));
}
else
{
action->setText("Statistics disabled");
action->setIcon(QIcon(imagePath("stats-off")));
}
action = submenu->addAction("Build tree only for current thread");
action->setToolTip("Stats tree will be built\nfor blocks from current thread only.\nThis improves performance\nand saves a lot of memory for Call-stack mode.");
action->setCheckable(true);
action->setChecked(EASY_GLOBALS.only_current_thread_hierarchy);
connect(action, &QAction::triggered, this, &This::onHierarchyFlagChange);
action = submenu->addAction("Add zero blocks to the tree");
action->setToolTip("Zero duration blocks will be added into stats tree.\nThis reduces performance and increases memory consumption.");
action->setCheckable(true);
action->setChecked(EASY_GLOBALS.add_zero_blocks_to_hierarchy);
connect(action, &QAction::triggered, [this](bool _checked)
{
EASY_GLOBALS.add_zero_blocks_to_hierarchy = _checked;
emit EASY_GLOBALS.events.hierarchyFlagChanged(_checked);
});
action = submenu->addAction("Hide stats for single blocks in tree");
action->setToolTip("If checked then such stats like Min,Max,Avg etc.\nwill not be displayed in stats tree for blocks\nwith number of calls == 1");
action->setCheckable(true);
action->setChecked(EASY_GLOBALS.hide_stats_for_single_blocks);
connect(action, &QAction::triggered, this, &This::onDisplayRelevantStatsChange);
w = new QWidget(submenu); w = new QWidget(submenu);
l = new QHBoxLayout(w); l = new QHBoxLayout(w);
l->setContentsMargins(26, 1, 16, 1); l->setContentsMargins(26, 1, 16, 1);
@ -752,6 +745,39 @@ MainWindow::MainWindow() : Parent(), m_theme("default"), m_lastAddress("localhos
submenu->addAction(waction); submenu->addAction(waction);
submenu = menu->addMenu("General");
submenu->setToolTipsVisible(true);
action = submenu->addAction("Automatically adjust values chart height");
action->setToolTip("Automatically adjusts arbitrary values chart height\nfor currently visible region.");
action->setCheckable(true);
action->setChecked(EASY_GLOBALS.auto_adjust_chart_height);
connect(action, &QAction::triggered, [](bool _checked)
{
EASY_GLOBALS.auto_adjust_chart_height = _checked;
emit EASY_GLOBALS.events.autoAdjustChartChanged();
});
action = submenu->addAction("Use decorated thread names");
action->setToolTip("Add \'Thread\' word into thread name if there is no one already.\nExamples: \'Render\' will change to \'Render Thread\'\n\'WorkerThread\' will not change.");
action->setCheckable(true);
action->setChecked(EASY_GLOBALS.use_decorated_thread_name);
connect(action, &QAction::triggered, [this](bool _checked)
{
EASY_GLOBALS.use_decorated_thread_name = _checked;
emit EASY_GLOBALS.events.threadNameDecorationChanged();
});
action = submenu->addAction("Display hex thread id");
action->setToolTip("Display hex thread id instead of decimal.");
action->setCheckable(true);
action->setChecked(EASY_GLOBALS.hex_thread_id);
connect(action, &QAction::triggered, [this](bool _checked)
{
EASY_GLOBALS.hex_thread_id = _checked;
emit EASY_GLOBALS.events.hexThreadIdChanged();
});
submenu = menu->addMenu("FPS Monitor"); submenu = menu->addMenu("FPS Monitor");
w = new QWidget(submenu); w = new QWidget(submenu);
@ -1457,7 +1483,7 @@ void MainWindow::onBindExpandStatusChange(bool _checked)
void MainWindow::onDisplayRelevantStatsChange(bool _checked) void MainWindow::onDisplayRelevantStatsChange(bool _checked)
{ {
EASY_GLOBALS.display_only_relevant_stats = _checked; EASY_GLOBALS.hide_stats_for_single_blocks = _checked;
} }
void MainWindow::onHierarchyFlagChange(bool _checked) void MainWindow::onHierarchyFlagChange(bool _checked)
@ -1475,7 +1501,7 @@ void MainWindow::onExpandAllClicked(bool)
emit EASY_GLOBALS.events.itemsExpandStateChanged(); emit EASY_GLOBALS.events.itemsExpandStateChanged();
auto tree = static_cast<HierarchyWidget*>(m_treeWidget->widget())->tree(); auto tree = static_cast<StatsWidget*>(m_treeWidget->widget())->tree();
const QSignalBlocker b(tree); const QSignalBlocker b(tree);
tree->expandAll(); tree->expandAll();
} }
@ -1487,7 +1513,7 @@ void MainWindow::onCollapseAllClicked(bool)
emit EASY_GLOBALS.events.itemsExpandStateChanged(); emit EASY_GLOBALS.events.itemsExpandStateChanged();
auto tree = static_cast<HierarchyWidget*>(m_treeWidget->widget())->tree(); auto tree = static_cast<StatsWidget*>(m_treeWidget->widget())->tree();
const QSignalBlocker b(tree); const QSignalBlocker b(tree);
tree->collapseAll(); tree->collapseAll();
} }
@ -1527,6 +1553,12 @@ void MainWindow::onMinSizeChange(int _value)
refreshDiagram(); refreshDiagram();
} }
void MainWindow::onHistogramMinSizeChange(int _value)
{
EASY_GLOBALS.histogram_column_width_min = _value;
refreshHistogramImage();
}
void MainWindow::onNarrowSizeChange(int _value) void MainWindow::onNarrowSizeChange(int _value)
{ {
EASY_GLOBALS.blocks_narrow_size = _value; EASY_GLOBALS.blocks_narrow_size = _value;
@ -1733,6 +1765,10 @@ void MainWindow::loadSettings()
if (!val.isNull()) if (!val.isNull())
EASY_GLOBALS.blocks_size_min = val.toInt(); EASY_GLOBALS.blocks_size_min = val.toInt();
val = settings.value("histogram_column_width_min");
if (!val.isNull())
EASY_GLOBALS.histogram_column_width_min = val.toInt();
val = settings.value("blocks_narrow_size"); val = settings.value("blocks_narrow_size");
if (!val.isNull()) if (!val.isNull())
EASY_GLOBALS.blocks_narrow_size = val.toInt(); EASY_GLOBALS.blocks_narrow_size = val.toInt();
@ -1783,9 +1819,9 @@ void MainWindow::loadSettings()
if (!flag.isNull()) if (!flag.isNull())
EASY_GLOBALS.bind_scene_and_tree_expand_status = flag.toBool(); EASY_GLOBALS.bind_scene_and_tree_expand_status = flag.toBool();
flag = settings.value("display_only_relevant_stats"); flag = settings.value("hide_stats_for_single_blocks");
if (!flag.isNull()) if (!flag.isNull())
EASY_GLOBALS.display_only_relevant_stats = flag.toBool(); EASY_GLOBALS.hide_stats_for_single_blocks = flag.toBool();
flag = settings.value("selecting_block_changes_thread"); flag = settings.value("selecting_block_changes_thread");
if (!flag.isNull()) if (!flag.isNull())
@ -1909,6 +1945,7 @@ void MainWindow::saveSettingsAndGeometry()
settings.setValue("max_rows_count", EASY_GLOBALS.max_rows_count); settings.setValue("max_rows_count", EASY_GLOBALS.max_rows_count);
settings.setValue("blocks_spacing", EASY_GLOBALS.blocks_spacing); settings.setValue("blocks_spacing", EASY_GLOBALS.blocks_spacing);
settings.setValue("blocks_size_min", EASY_GLOBALS.blocks_size_min); settings.setValue("blocks_size_min", EASY_GLOBALS.blocks_size_min);
settings.setValue("histogram_column_width_min", EASY_GLOBALS.histogram_column_width_min);
settings.setValue("blocks_narrow_size", EASY_GLOBALS.blocks_narrow_size); settings.setValue("blocks_narrow_size", EASY_GLOBALS.blocks_narrow_size);
settings.setValue("draw_graphics_items_borders", EASY_GLOBALS.draw_graphics_items_borders); settings.setValue("draw_graphics_items_borders", EASY_GLOBALS.draw_graphics_items_borders);
settings.setValue("draw_histogram_borders", EASY_GLOBALS.draw_histogram_borders); settings.setValue("draw_histogram_borders", EASY_GLOBALS.draw_histogram_borders);
@ -1921,7 +1958,7 @@ void MainWindow::saveSettingsAndGeometry()
settings.setValue("add_zero_blocks_to_hierarchy", EASY_GLOBALS.add_zero_blocks_to_hierarchy); settings.setValue("add_zero_blocks_to_hierarchy", EASY_GLOBALS.add_zero_blocks_to_hierarchy);
settings.setValue("highlight_blocks_with_same_id", EASY_GLOBALS.highlight_blocks_with_same_id); settings.setValue("highlight_blocks_with_same_id", EASY_GLOBALS.highlight_blocks_with_same_id);
settings.setValue("bind_scene_and_tree_expand_status", EASY_GLOBALS.bind_scene_and_tree_expand_status); settings.setValue("bind_scene_and_tree_expand_status", EASY_GLOBALS.bind_scene_and_tree_expand_status);
settings.setValue("display_only_relevant_stats", EASY_GLOBALS.display_only_relevant_stats); settings.setValue("hide_stats_for_single_blocks", EASY_GLOBALS.hide_stats_for_single_blocks);
settings.setValue("selecting_block_changes_thread", EASY_GLOBALS.selecting_block_changes_thread); settings.setValue("selecting_block_changes_thread", EASY_GLOBALS.selecting_block_changes_thread);
settings.setValue("enable_event_indicators", EASY_GLOBALS.enable_event_markers); settings.setValue("enable_event_indicators", EASY_GLOBALS.enable_event_markers);
settings.setValue("auto_adjust_histogram_height", EASY_GLOBALS.auto_adjust_histogram_height); settings.setValue("auto_adjust_histogram_height", EASY_GLOBALS.auto_adjust_histogram_height);

View File

@ -347,6 +347,7 @@ protected slots:
void onMaxBlocksCountChange(int _value); void onMaxBlocksCountChange(int _value);
void onSpacingChange(int _value); void onSpacingChange(int _value);
void onMinSizeChange(int _value); void onMinSizeChange(int _value);
void onHistogramMinSizeChange(int _value);
void onNarrowSizeChange(int _value); void onNarrowSizeChange(int _value);
void onFpsIntervalChange(int _value); void onFpsIntervalChange(int _value);
void onFpsHistoryChange(int _value); void onFpsHistoryChange(int _value);

View File

@ -310,7 +310,7 @@ QMenu {
QMenu::item { QMenu::item {
height: 15ex; height: 15ex;
padding-left: 17ex; padding-left: 17ex;
padding-right: 5ex; padding-right: 10ex;
border: 1px solid transparent; border: 1px solid transparent;
/* reserve space for selection border */ } /* reserve space for selection border */ }

View File

@ -425,7 +425,7 @@ QMenu {
QMenu::item { QMenu::item {
height: $InputHeight; height: $InputHeight;
padding-left: 17ex; padding-left: 17ex;
padding-right: 5ex; padding-right: 10ex;
border: 1px solid transparent; /* reserve space for selection border */ border: 1px solid transparent; /* reserve space for selection border */
} }

View File

@ -272,7 +272,7 @@ QVariant TreeWidgetItem::relevantData(int _column, int _role) const
} }
} }
if (EASY_GLOBALS.display_only_relevant_stats && _role == Qt::DisplayRole) if (EASY_GLOBALS.hide_stats_for_single_blocks && _role == Qt::DisplayRole)
{ {
return QVariant(); return QVariant();
} }

View File

@ -128,7 +128,7 @@ static void fillStatsColumns(
item->setData(max_column, MinMaxBlockIndexRole, stats->max_duration_block); item->setData(max_column, MinMaxBlockIndexRole, stats->max_duration_block);
} }
if (stats->calls_number < 2)// && EASY_GLOBALS.display_only_relevant_stats) if (stats->calls_number < 2)
{ {
return; return;
} }