From c603e01535dd50849ae17498922f27a142db7b01 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 17 May 2023 17:38:10 +0200 Subject: [PATCH] TaskTree: Don't derive TaskNode from QObject It reduces the time spent inside TaskTree::setupRoot() by ~30% for big trees (~7000 tasks). Change-Id: Ic65ed0fdf511977d9cc2fe22bdac814516e9883d Reviewed-by: Qt CI Bot Reviewed-by: hjk --- src/libs/solutions/tasking/tasktree.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/libs/solutions/tasking/tasktree.cpp b/src/libs/solutions/tasking/tasktree.cpp index 58235cd814f..e3605aaf027 100644 --- a/src/libs/solutions/tasking/tasktree.cpp +++ b/src/libs/solutions/tasking/tasktree.cpp @@ -298,7 +298,7 @@ public: std::optional m_runtimeData; }; -class TaskNode : public QObject +class TaskNode { public: TaskNode(TaskTreePrivate *taskTreePrivate, const TaskItem &task, @@ -316,6 +316,7 @@ public: bool isTask() const { return bool(m_taskHandler.m_createHandler); } int taskCount() const { return isTask() ? 1 : m_container.m_constData.m_taskCount; } TaskContainer *parentContainer() const { return m_container.m_constData.m_parentContainer; } + TaskTree *taskTree() const { return m_container.m_constData.m_taskTreePrivate->q; } private: const TaskItem::TaskHandler m_taskHandler; @@ -647,9 +648,9 @@ TaskAction TaskNode::start() } const std::shared_ptr unwindAction = std::make_shared(TaskAction::Continue); - connect(m_task.get(), &TaskInterface::done, this, [=](bool success) { + QObject::connect(m_task.get(), &TaskInterface::done, taskTree(), [=](bool success) { invokeEndHandler(success); - disconnect(m_task.get(), &TaskInterface::done, this, nullptr); + QObject::disconnect(m_task.get(), &TaskInterface::done, taskTree(), nullptr); m_task.release()->deleteLater(); QTC_ASSERT(parentContainer() && parentContainer()->isRunning(), return); if (parentContainer()->isStarting())