From: Méven Car Date: Mon, 25 May 2020 15:31:51 +0000 (+0000) Subject: KDirectoryContentsCounter: scan first path not in cache X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/f6afbbc2401cdd2e722e2ea5d3ad59b960370433 KDirectoryContentsCounter: scan first path not in cache Use a secondary QLinkedList to store the priority path. --- diff --git a/src/kitemviews/private/kdirectorycontentscounter.cpp b/src/kitemviews/private/kdirectorycontentscounter.cpp index a0ed8c27c..05a6ff447 100644 --- a/src/kitemviews/private/kdirectorycontentscounter.cpp +++ b/src/kitemviews/private/kdirectorycontentscounter.cpp @@ -103,7 +103,9 @@ void KDirectoryContentsCounter::slotResult(const QString& path, int count, long m_watchedDirs.insert(resolvedPath); } - if (!m_queue.isEmpty()) { + if (!m_priorityQueue.isEmpty()) { + startWorker(m_priorityQueue.takeLast()); + } else if (!m_queue.isEmpty()) { startWorker(m_queue.takeFirst()); } @@ -167,7 +169,8 @@ void KDirectoryContentsCounter::slotItemsRemoved() void KDirectoryContentsCounter::startWorker(const QString& path) { - if (s_cache->contains(path)) { + const bool alreadyInCache = s_cache->contains(path); + if (alreadyInCache) { // fast path when in cache // will be updated later if result has changed const auto pair = s_cache->value(path); @@ -175,8 +178,13 @@ void KDirectoryContentsCounter::startWorker(const QString& path) } if (m_workerIsBusy) { - if (!m_queue.contains(path)) { - m_queue.append(path); + if (!m_queue.contains(path) && !m_priorityQueue.contains(path)) { + if (alreadyInCache) { + m_queue.append(path); + } else { + // append to priority queue + m_priorityQueue.append(path); + } } } else { KDirectoryContentsCounterWorker::Options options; diff --git a/src/kitemviews/private/kdirectorycontentscounter.h b/src/kitemviews/private/kdirectorycontentscounter.h index 287227bff..01bf30779 100644 --- a/src/kitemviews/private/kdirectorycontentscounter.h +++ b/src/kitemviews/private/kdirectorycontentscounter.h @@ -72,6 +72,7 @@ private: private: KFileItemModel* m_model; + QLinkedList m_priorityQueue; QLinkedList m_queue; static QThread* m_workerThread;