forked from qt-creator/qt-creator
Mimetypes v3: Reimplement mime startup phase
Which is used for sanity checking that we don't do expensive things on startup, e.g. by accessing mime types before registering the plugin provided mimetypes. Change-Id: Ib99a5ca3bdd489c86f48dc5fbc83273fc28cc0f9 Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
@@ -45,6 +45,7 @@
|
||||
|
||||
#include "mimeprovider_p.h"
|
||||
#include "mimetype_p.h"
|
||||
#include "mimeutils.h"
|
||||
|
||||
#include <QtCore/QFile>
|
||||
#include <QtCore/QFileInfo>
|
||||
@@ -531,6 +532,10 @@ MimeType MimeDatabase::mimeTypeForName(const QString &nameOrAlias) const
|
||||
{
|
||||
QMutexLocker locker(&d->mutex);
|
||||
|
||||
if (d->m_startupPhase <= int(MimeStartupPhase::PluginsInitializing))
|
||||
qWarning("Accessing MimeDatabase for %s before plugins are initialized",
|
||||
qPrintable(nameOrAlias));
|
||||
|
||||
return d->mimeTypeForName(nameOrAlias);
|
||||
}
|
||||
|
||||
@@ -566,6 +571,10 @@ MimeType MimeDatabase::mimeTypeForFile(const QFileInfo &fileInfo, MatchMode mode
|
||||
{
|
||||
QMutexLocker locker(&d->mutex);
|
||||
|
||||
if (d->m_startupPhase <= int(MimeStartupPhase::PluginsInitializing))
|
||||
qWarning("Accessing MimeDatabase for %s before plugins are initialized",
|
||||
qPrintable(fileInfo.filePath()));
|
||||
|
||||
if (fileInfo.isDir())
|
||||
return d->mimeTypeForName(QLatin1String("inode/directory"));
|
||||
|
||||
@@ -619,6 +628,11 @@ MimeType MimeDatabase::mimeTypeForFile(const QString &fileName, MatchMode mode)
|
||||
{
|
||||
if (mode == MatchExtension) {
|
||||
QMutexLocker locker(&d->mutex);
|
||||
|
||||
if (d->m_startupPhase <= int(MimeStartupPhase::PluginsInitializing))
|
||||
qWarning("Accessing MimeDatabase for %s before plugins are initialized",
|
||||
qPrintable(fileName));
|
||||
|
||||
const QStringList matches = d->mimeTypeForFileName(fileName);
|
||||
const int matchCount = matches.count();
|
||||
if (matchCount == 0) {
|
||||
@@ -652,6 +666,10 @@ QList<MimeType> MimeDatabase::mimeTypesForFileName(const QString &fileName) cons
|
||||
{
|
||||
QMutexLocker locker(&d->mutex);
|
||||
|
||||
if (d->m_startupPhase <= int(MimeStartupPhase::PluginsInitializing))
|
||||
qWarning("Accessing MimeDatabase for %s before plugins are initialized",
|
||||
qPrintable(fileName));
|
||||
|
||||
const QStringList matches = d->mimeTypeForFileName(fileName);
|
||||
QList<MimeType> mimes;
|
||||
mimes.reserve(matches.count());
|
||||
@@ -683,6 +701,9 @@ MimeType MimeDatabase::mimeTypeForData(const QByteArray &data) const
|
||||
{
|
||||
QMutexLocker locker(&d->mutex);
|
||||
|
||||
if (d->m_startupPhase <= int(MimeStartupPhase::PluginsInitializing))
|
||||
qWarning("Accessing MimeDatabase for data before plugins are initialized");
|
||||
|
||||
int accuracy = 0;
|
||||
return d->findByData(data, &accuracy);
|
||||
}
|
||||
@@ -812,6 +833,9 @@ QList<MimeType> MimeDatabase::allMimeTypes() const
|
||||
{
|
||||
QMutexLocker locker(&d->mutex);
|
||||
|
||||
if (d->m_startupPhase <= int(MimeStartupPhase::PluginsInitializing))
|
||||
qWarning("Accessing MimeDatabase for all mime types before plugins are initialized");
|
||||
|
||||
return d->allMimeTypes();
|
||||
}
|
||||
|
||||
|
@@ -116,6 +116,9 @@ private:
|
||||
public:
|
||||
const QString m_defaultMimeType;
|
||||
QMutex mutex;
|
||||
|
||||
// added for Qt Creator
|
||||
int m_startupPhase = 0;
|
||||
};
|
||||
|
||||
} // namespace Utils
|
||||
|
@@ -94,11 +94,14 @@ QList<MimeType> allMimeTypes()
|
||||
|
||||
void setMimeStartupPhase(MimeStartupPhase phase)
|
||||
{
|
||||
// auto d = MimeDatabasePrivate::instance();
|
||||
// QMutexLocker locker(&d->mutex);
|
||||
// if (int(phase) != d->m_startupPhase + 1)
|
||||
// qWarning("Unexpected jump in MimedDatabase lifetime from %d to %d", d->m_startupPhase, int(phase));
|
||||
// d->m_startupPhase = int(phase);
|
||||
auto d = MimeDatabasePrivate::instance();
|
||||
QMutexLocker locker(&d->mutex);
|
||||
if (int(phase) != d->m_startupPhase + 1) {
|
||||
qWarning("Unexpected jump in MimedDatabase lifetime from %d to %d",
|
||||
d->m_startupPhase,
|
||||
int(phase));
|
||||
}
|
||||
d->m_startupPhase = int(phase);
|
||||
}
|
||||
|
||||
void addMimeTypes(const QString &fileName, const QByteArray &data)
|
||||
|
Reference in New Issue
Block a user