summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cpptoolseditorsupport.cpp
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@me.com>2013-10-10 10:26:39 +0200
committerNikolai Kosjar <nikolai.kosjar@digia.com>2013-11-12 09:24:13 +0100
commit566be0995d184cd2c3f99d006ffb7249aeff2e57 (patch)
tree132192382cda9797eb5ea05a792938f1e3148c3b /src/plugins/cpptools/cpptoolseditorsupport.cpp
parentd58da4bd7eb4d1f6c983a4a62e5845fe08ede539 (diff)
downloadqt-creator-566be0995d184cd2c3f99d006ffb7249aeff2e57.tar.gz
C++: Release more documents.
- fix memory leak in find-usages - do not retain snapshot in search history - when an editor is invisible for more than 2 minutes, release the backing snapshot Retaining snapshots will retain their documents, and if done for too long, the memory consumption might grow. This is especially the case when switching to a different kit (Qt version): in that case, the new versions of headers will be indexed, while the old ones stay around. Task-number: QTCREATORBUG-5583 Task-number: QTCREATORBUG-7645 Task-number: QTCREATORBUG-9842 Change-Id: I045eda1565e0a3fa702baeffaab9c12662f90289 Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com> Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
Diffstat (limited to 'src/plugins/cpptools/cpptoolseditorsupport.cpp')
-rw-r--r--src/plugins/cpptools/cpptoolseditorsupport.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/plugins/cpptools/cpptoolseditorsupport.cpp b/src/plugins/cpptools/cpptoolseditorsupport.cpp
index 631b1c1a44..e9ec1d23a0 100644
--- a/src/plugins/cpptools/cpptoolseditorsupport.cpp
+++ b/src/plugins/cpptools/cpptoolseditorsupport.cpp
@@ -115,6 +115,7 @@ CppEditorSupport::CppEditorSupport(CppModelManager *modelManager, BaseTextEditor
, m_textEditor(textEditor)
, m_updateDocumentInterval(UpdateDocumentDefaultInterval)
, m_revision(0)
+ , m_editorVisible(textEditor->widget()->isVisible())
, m_cachedContentsEditorRevision(-1)
, m_fileIsBeingReloaded(false)
, m_initialized(false)
@@ -152,6 +153,13 @@ CppEditorSupport::CppEditorSupport(CppModelManager *modelManager, BaseTextEditor
connect(m_textEditor->document(), SIGNAL(reloadFinished(bool)),
this, SLOT(onReloadFinished()));
+ connect(Core::EditorManager::instance(), SIGNAL(currentEditorChanged(Core::IEditor *)),
+ this, SLOT(onCurrentEditorChanged()));
+ m_editorGCTimer = new QTimer(this);
+ m_editorGCTimer->setSingleShot(true);
+ m_editorGCTimer->setInterval(EditorHiddenGCTimeout);
+ connect(m_editorGCTimer, SIGNAL(timeout()), this, SLOT(releaseResources()));
+
updateDocument();
}
@@ -460,6 +468,30 @@ void CppEditorSupport::updateEditorNow()
editorWidget->setIfdefedOutBlocks(m_editorUpdates.ifdefedOutBlocks);
}
+void CppEditorSupport::onCurrentEditorChanged()
+{
+ bool editorVisible = m_textEditor->widget()->isVisible();
+
+ if (m_editorVisible != editorVisible) {
+ m_editorVisible = editorVisible;
+ if (editorVisible) {
+ m_editorGCTimer->stop();
+ QMutexLocker locker(&m_lastSemanticInfoLock);
+ if (!m_lastSemanticInfo.doc)
+ updateDocumentNow();
+ } else {
+ m_editorGCTimer->start(EditorHiddenGCTimeout);
+ }
+ }
+}
+
+void CppEditorSupport::releaseResources()
+{
+ snapshotUpdater()->releaseSnapshot();
+ QMutexLocker semanticLocker(&m_lastSemanticInfoLock);
+ m_lastSemanticInfo = SemanticInfo();
+}
+
SemanticInfo::Source CppEditorSupport::currentSource(bool force)
{
int line = 0, column = 0;