From 758dd81a177c953395bd474d6a5e338365747eb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Harboe?= Date: Sat, 12 Oct 2024 09:00:56 +0200 Subject: [PATCH 1/2] gui: remove click+wait forever trap in Timing Report MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In small designs a large number of paths can easily be displayed, but for large designs this effectively runs forever. To avoid this lockup, do not save number of timing paths Signed-off-by: Øyvind Harboe --- src/gui/src/timingWidget.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/gui/src/timingWidget.cpp b/src/gui/src/timingWidget.cpp index 07ec321dad3..1cee9574ac4 100644 --- a/src/gui/src/timingWidget.cpp +++ b/src/gui/src/timingWidget.cpp @@ -281,8 +281,6 @@ void TimingWidget::readSettings(QSettings* settings) { settings->beginGroup(objectName()); - settings_->setPathCount( - settings->value("path_count", settings_->getPathCount()).toInt()); settings_->setOnePathPerEndpoint( settings->value("one_path_per_endpoint").toBool()); settings_->setExpandClock( @@ -308,7 +306,10 @@ void TimingWidget::writeSettings(QSettings* settings) { settings->beginGroup(objectName()); - settings->setValue("path_count", settings_->getPathCount()); + // NOTE! Don't save path count, this can introduce problems when + // switching between large and small designs. Clicking Timing Report + // Update for a large number of paths will freeze the GUI, effectively + // for large designs. settings->setValue("one_path_per_endpoint", settings_->getOnePathPerEndpoint()); settings->setValue("expand_clk", settings_->getExpandClock()); From fda8dcf9888ea5e75942a212f35018eb96313930 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Harboe?= Date: Sat, 12 Oct 2024 16:32:37 +0200 Subject: [PATCH 2/2] gui: disable reading of number of timing paths to read MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit until a sufficiently good heuristic can be found or a better way to handle long update times without blocking the GUI Signed-off-by: Øyvind Harboe --- src/gui/src/timingWidget.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/gui/src/timingWidget.cpp b/src/gui/src/timingWidget.cpp index 1cee9574ac4..3ab210719e0 100644 --- a/src/gui/src/timingWidget.cpp +++ b/src/gui/src/timingWidget.cpp @@ -281,6 +281,18 @@ void TimingWidget::readSettings(QSettings* settings) { settings->beginGroup(objectName()); + // FIXME don't read count, this can introduce problems when + // switching between large and small designs. Clicking Timing Report + // Update for a large number of paths will freeze the GUI, effectively + // for large designs. + // + // A better approach would be to read the settings only when the + // the Timing Report won't be so slow as to lock the GUI, but + // it is unclear what heuristic could be used. +#if 0 + settings_->setPathCount( + settings->value("path_count", settings_->getPathCount()).toInt()); +#endif settings_->setOnePathPerEndpoint( settings->value("one_path_per_endpoint").toBool()); settings_->setExpandClock( @@ -306,10 +318,7 @@ void TimingWidget::writeSettings(QSettings* settings) { settings->beginGroup(objectName()); - // NOTE! Don't save path count, this can introduce problems when - // switching between large and small designs. Clicking Timing Report - // Update for a large number of paths will freeze the GUI, effectively - // for large designs. + settings->setValue("path_count", settings_->getPathCount()); settings->setValue("one_path_per_endpoint", settings_->getOnePathPerEndpoint()); settings->setValue("expand_clk", settings_->getExpandClock());