From 04b80f092ad3e574e9179ec8f66716b309114ce3 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Sun, 21 Jan 2024 10:19:46 +0100 Subject: [PATCH] ProcessProgress: Add setExpectedDuration() method This is not the same as process timeout, so make these two settings orthogonal. Change-Id: I3fc774c183282fe770feb49258d77d0ce3637b38 Reviewed-by: Orgad Shaneh --- src/plugins/cmakeprojectmanager/cmakeprocess.cpp | 1 - .../coreplugin/progressmanager/processprogress.cpp | 10 +++++++++- .../coreplugin/progressmanager/processprogress.h | 1 + src/plugins/mesonprojectmanager/mesonprojectparser.cpp | 1 - src/plugins/vcsbase/vcscommand.cpp | 3 ++- 5 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakeprocess.cpp b/src/plugins/cmakeprojectmanager/cmakeprocess.cpp index 93c93c2ec7b..1762684a744 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprocess.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeprocess.cpp @@ -147,7 +147,6 @@ void CMakeProcess::run(const BuildDirParameters ¶meters, const QStringList & ProcessProgress *progress = new ProcessProgress(m_process.get()); progress->setDisplayName(::CMakeProjectManager::Tr::tr("Configuring \"%1\"") .arg(parameters.projectName)); - m_process->setTimeoutS(10); // for process progress timeout estimation m_process->setCommand(commandLine); m_elapsed.start(); m_process->start(); diff --git a/src/plugins/coreplugin/progressmanager/processprogress.cpp b/src/plugins/coreplugin/progressmanager/processprogress.cpp index 6a82f5dde82..9ebd5d35b06 100644 --- a/src/plugins/coreplugin/progressmanager/processprogress.cpp +++ b/src/plugins/coreplugin/progressmanager/processprogress.cpp @@ -14,6 +14,8 @@ using namespace Utils; +using namespace std::chrono_literals; + namespace Core { class ProcessProgressPrivate : public QObject @@ -32,6 +34,7 @@ public: QPointer m_futureProgress; QString m_displayName; FutureProgress::KeepOnFinishType m_keep = FutureProgress::HideOnFinish; + std::chrono::seconds m_expectedDuration = 2s; }; ProcessProgressPrivate::ProcessProgressPrivate(ProcessProgress *progress, Process *process) @@ -98,7 +101,7 @@ ProcessProgress::ProcessProgress(Process *process) d->m_futureProgress = ProgressManager::addTask(d->m_futureInterface.future(), name, id); } else { d->m_futureProgress = ProgressManager::addTimedTask(d->m_futureInterface, name, id, - qMax(2, d->m_process->timeoutS() / 5)); + d->m_expectedDuration.count()); } d->m_futureProgress->setKeepOnFinish(d->m_keep); }); @@ -145,4 +148,9 @@ void ProcessProgress::setProgressParser(const ProgressParser &parser) d.get(), &ProcessProgressPrivate::parseProgress); } +void ProcessProgress::setExpectedDuration(std::chrono::seconds duration) +{ + d->m_expectedDuration = qMin(1s, duration); +} + } // namespace Core diff --git a/src/plugins/coreplugin/progressmanager/processprogress.h b/src/plugins/coreplugin/progressmanager/processprogress.h index e91c0b7b3c7..4b4202a45e9 100644 --- a/src/plugins/coreplugin/progressmanager/processprogress.h +++ b/src/plugins/coreplugin/progressmanager/processprogress.h @@ -26,6 +26,7 @@ public: void setDisplayName(const QString &name); void setKeepOnFinish(FutureProgress::KeepOnFinishType keepType); void setProgressParser(const ProgressParser &parser); + void setExpectedDuration(std::chrono::seconds duration); // 2s by default private: std::unique_ptr d; diff --git a/src/plugins/mesonprojectmanager/mesonprojectparser.cpp b/src/plugins/mesonprojectmanager/mesonprojectparser.cpp index 9c34a3714de..4d1eebc3056 100644 --- a/src/plugins/mesonprojectmanager/mesonprojectparser.cpp +++ b/src/plugins/mesonprojectmanager/mesonprojectparser.cpp @@ -377,7 +377,6 @@ void MesonProjectParser::setupProcess(const Command &command, const Environment MessageManager::writeFlashing(Tr::tr("Running %1 in %2.") .arg(command.toUserOutput(), command.workDir().toUserOutput())); m_process->setCommand(command.cmdLine()); - m_process->setTimeoutS(10); ProcessProgress *progress = new ProcessProgress(m_process.get()); progress->setDisplayName(Tr::tr("Configuring \"%1\".").arg(projectName)); } diff --git a/src/plugins/vcsbase/vcscommand.cpp b/src/plugins/vcsbase/vcscommand.cpp index 20f9b292935..56dbebdb9f2 100644 --- a/src/plugins/vcsbase/vcscommand.cpp +++ b/src/plugins/vcsbase/vcscommand.cpp @@ -104,7 +104,6 @@ void VcsCommandPrivate::cleanup() void VcsCommandPrivate::setupProcess(Process *process, const Job &job) { - process->setTimeoutS(job.timeoutS); if (!job.workingDirectory.isEmpty()) process->setWorkingDirectory(job.workingDirectory); if (!(m_flags & RunFlags::SuppressCommandLogging)) @@ -125,6 +124,7 @@ void VcsCommandPrivate::setupProcess(Process *process, const Job &job) ProcessProgress *progress = new ProcessProgress(process); progress->setDisplayName(m_displayName); + progress->setExpectedDuration(std::chrono::seconds(qMin(1, job.timeoutS / 5))); if (m_progressParser) progress->setProgressParser(m_progressParser); } @@ -314,6 +314,7 @@ CommandResult VcsCommand::runBlockingHelper(const CommandLine &command, int time return {}; d->setupProcess(&process, {command, timeoutS, d->m_defaultWorkingDirectory, {}}); + process.setTimeoutS(timeoutS); const EventLoopMode eventLoopMode = d->eventLoopMode(); process.setTimeOutMessageBoxEnabled(eventLoopMode == EventLoopMode::On);