From d2682828fc08bc706d7da0f0310527a037d0e718 Mon Sep 17 00:00:00 2001
From: dt <qtc-committer@nokia.com>
Date: Wed, 28 Jan 2009 18:14:01 +0100
Subject: [PATCH] Fixes:    On session restore, start less indexers.

Details:  This should improve performance a bit. Instead of starting on indexer per .pro file, schedule and compress updates of ui files. And don't update if we have a full project code model update scheduled anyway. Which helps the startup case.
---
 src/plugins/qt4projectmanager/qt4nodes.cpp   |  2 +-
 src/plugins/qt4projectmanager/qt4project.cpp | 25 ++++++++++++++++++++
 src/plugins/qt4projectmanager/qt4project.h   |  6 +++++
 3 files changed, 32 insertions(+), 1 deletion(-)

diff --git a/src/plugins/qt4projectmanager/qt4nodes.cpp b/src/plugins/qt4projectmanager/qt4nodes.cpp
index f9990c522fb..5d05003e8ce 100644
--- a/src/plugins/qt4projectmanager/qt4nodes.cpp
+++ b/src/plugins/qt4projectmanager/qt4nodes.cpp
@@ -845,7 +845,7 @@ void Qt4ProFileNode::updateUiFiles()
         }
         addFileNodes(toAdd, this);
     }
-    modelManager->updateSourceFiles(toUpdate);
+    m_project->addUiFilesToCodeModel(toUpdate);
 }
 
 ProFileReader *Qt4PriFileNode::createProFileReader() const
diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp
index a8fdc907cd0..9885221c0c4 100644
--- a/src/plugins/qt4projectmanager/qt4project.cpp
+++ b/src/plugins/qt4projectmanager/qt4project.cpp
@@ -255,6 +255,10 @@ Qt4Project::Qt4Project(Qt4Manager *manager, const QString& fileName) :
     m_updateCodeModelTimer.setSingleShot(true);
     m_updateCodeModelTimer.setInterval(20);
     connect(&m_updateCodeModelTimer, SIGNAL(timeout()), this, SLOT(updateCodeModel()));
+
+    m_addUiFilesTimer.setSingleShot(true);
+    m_addUiFilesTimer.setInterval(20);
+    connect(&m_addUiFilesTimer, SIGNAL(timeout()), this, SLOT(addUiFiles()));
 }
 
 Qt4Project::~Qt4Project()
@@ -370,6 +374,27 @@ namespace {
     };
 }
 
+void Qt4Project::addUiFilesToCodeModel(const QStringList &files)
+{
+    // if we already have a full updateCodeModel() scheduled
+    // then we don't need to this seperately
+    // since that one will add also all the ui files
+    if (m_updateCodeModelTimer.isActive())
+        return;
+    m_addUiFilesTimer.start();
+    m_uiFilesToAdd << files;
+}
+
+void Qt4Project::addUiFiles()
+{
+    if (m_updateCodeModelTimer.isActive())
+        return;
+    CppTools::CppModelManagerInterface *modelManager =
+        ExtensionSystem::PluginManager::instance()->getObject<CppTools::CppModelManagerInterface>();
+    modelManager->updateSourceFiles(m_uiFilesToAdd);
+    m_uiFilesToAdd.clear();
+}
+
 void Qt4Project::scheduleUpdateCodeModel()
 {
     m_updateCodeModelTimer.start();
diff --git a/src/plugins/qt4projectmanager/qt4project.h b/src/plugins/qt4projectmanager/qt4project.h
index 24b7e45d6e8..0c4a5fb57dc 100644
--- a/src/plugins/qt4projectmanager/qt4project.h
+++ b/src/plugins/qt4projectmanager/qt4project.h
@@ -182,6 +182,9 @@ public:
 
     void notifyChanged(const QString &name);
 
+    // called by qt4ProjectNode to add ui_*.h files to the codemodel
+    void addUiFilesToCodeModel(const QStringList &files);
+
 public slots:
     void update();
     void proFileParseError(const QString &errorMessage);
@@ -200,6 +203,7 @@ private slots:
                             const Qt4ProjectManager::Internal::Qt4ProjectType oldType,
                             const Qt4ProjectManager::Internal::Qt4ProjectType newType);
     void proFileUpdated(Qt4ProjectManager::Internal::Qt4ProFileNode *node);
+    void addUiFiles();
 
 protected:
     virtual void restoreSettingsImpl(ProjectExplorer::PersistentSettingsReader &settingsReader);
@@ -232,6 +236,8 @@ private:
     Internal::Qt4ProjectFiles *m_projectFiles;
 
     QTimer m_updateCodeModelTimer;
+    QTimer m_addUiFilesTimer;
+    QStringList m_uiFilesToAdd;
     Internal::GCCPreprocessor m_preproc;
 
     friend class Qt4ProjectFile;
-- 
GitLab