diff options
-rw-r--r-- | src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp | 11 | ||||
-rw-r--r-- | src/plugins/platforms/android/qandroidassetsfileenginehandler.h | 5 |
2 files changed, 12 insertions, 4 deletions
diff --git a/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp b/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp index b112e265a5..4968b8f188 100644 --- a/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp +++ b/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp @@ -262,17 +262,20 @@ private: AndroidAssetsFileEngineHandler::AndroidAssetsFileEngineHandler() : m_assetsCache(std::max(5, qgetenv("QT_ANDROID_MAX_ASSETS_CACHE_SIZE").toInt())) , m_hasPrepopulatedCache(false) + , m_hasTriedPrepopulatingCache(false) { m_assetManager = QtAndroid::assetManager(); - prepopulateCache(); } AndroidAssetsFileEngineHandler::~AndroidAssetsFileEngineHandler() { } -void AndroidAssetsFileEngineHandler::prepopulateCache() +void AndroidAssetsFileEngineHandler::prepopulateCache() const { + Q_ASSERT(!m_hasTriedPrepopulatingCache); + m_hasTriedPrepopulatingCache = true; + QMutexLocker locker(&m_assetsCacheMutext); Q_ASSERT(m_assetsCache.isEmpty()); @@ -364,7 +367,11 @@ QAbstractFileEngine * AndroidAssetsFileEngineHandler::create(const QString &file if (!path.size()) path = fileName.left(fileName.length() - 1).toUtf8(); + m_assetsCacheMutext.lock(); + if (!m_hasTriedPrepopulatingCache) + prepopulateCache(); + QSharedPointer<AndroidAssetDir> *aad = m_assetsCache.object(path); m_assetsCacheMutext.unlock(); if (!aad) { diff --git a/src/plugins/platforms/android/qandroidassetsfileenginehandler.h b/src/plugins/platforms/android/qandroidassetsfileenginehandler.h index d56367d4d8..ac16ad7b79 100644 --- a/src/plugins/platforms/android/qandroidassetsfileenginehandler.h +++ b/src/plugins/platforms/android/qandroidassetsfileenginehandler.h @@ -58,12 +58,13 @@ public: QAbstractFileEngine *create(const QString &fileName) const; private: - void prepopulateCache(); + void prepopulateCache() const; AAssetManager *m_assetManager; mutable QCache<QByteArray, QSharedPointer<AndroidAssetDir>> m_assetsCache; mutable QMutex m_assetsCacheMutext; - bool m_hasPrepopulatedCache; + mutable bool m_hasPrepopulatedCache; + mutable bool m_hasTriedPrepopulatingCache; }; #endif // QANDROIDASSETSFILEENGINEHANDLER_H |