forked from qt-creator/qt-creator
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 <qt_ci_bot@qt-project.org> Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -298,7 +298,7 @@ public:
|
|||||||
std::optional<RuntimeData> m_runtimeData;
|
std::optional<RuntimeData> m_runtimeData;
|
||||||
};
|
};
|
||||||
|
|
||||||
class TaskNode : public QObject
|
class TaskNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TaskNode(TaskTreePrivate *taskTreePrivate, const TaskItem &task,
|
TaskNode(TaskTreePrivate *taskTreePrivate, const TaskItem &task,
|
||||||
@@ -316,6 +316,7 @@ public:
|
|||||||
bool isTask() const { return bool(m_taskHandler.m_createHandler); }
|
bool isTask() const { return bool(m_taskHandler.m_createHandler); }
|
||||||
int taskCount() const { return isTask() ? 1 : m_container.m_constData.m_taskCount; }
|
int taskCount() const { return isTask() ? 1 : m_container.m_constData.m_taskCount; }
|
||||||
TaskContainer *parentContainer() const { return m_container.m_constData.m_parentContainer; }
|
TaskContainer *parentContainer() const { return m_container.m_constData.m_parentContainer; }
|
||||||
|
TaskTree *taskTree() const { return m_container.m_constData.m_taskTreePrivate->q; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const TaskItem::TaskHandler m_taskHandler;
|
const TaskItem::TaskHandler m_taskHandler;
|
||||||
@@ -647,9 +648,9 @@ TaskAction TaskNode::start()
|
|||||||
}
|
}
|
||||||
const std::shared_ptr<TaskAction> unwindAction
|
const std::shared_ptr<TaskAction> unwindAction
|
||||||
= std::make_shared<TaskAction>(TaskAction::Continue);
|
= std::make_shared<TaskAction>(TaskAction::Continue);
|
||||||
connect(m_task.get(), &TaskInterface::done, this, [=](bool success) {
|
QObject::connect(m_task.get(), &TaskInterface::done, taskTree(), [=](bool success) {
|
||||||
invokeEndHandler(success);
|
invokeEndHandler(success);
|
||||||
disconnect(m_task.get(), &TaskInterface::done, this, nullptr);
|
QObject::disconnect(m_task.get(), &TaskInterface::done, taskTree(), nullptr);
|
||||||
m_task.release()->deleteLater();
|
m_task.release()->deleteLater();
|
||||||
QTC_ASSERT(parentContainer() && parentContainer()->isRunning(), return);
|
QTC_ASSERT(parentContainer() && parentContainer()->isRunning(), return);
|
||||||
if (parentContainer()->isStarting())
|
if (parentContainer()->isStarting())
|
||||||
|
Reference in New Issue
Block a user