mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-06 00:07:29 -04:00
Avoid some other lengthy lambdas in call_once
This commit is contained in:
parent
7906258d01
commit
8159590ecf
@ -194,10 +194,7 @@ void QgsCallout::setEnabled( bool enabled )
|
||||
QgsPropertiesDefinition QgsCallout::propertyDefinitions()
|
||||
{
|
||||
static std::once_flag initialized;
|
||||
std::call_once( initialized, [ = ]( )
|
||||
{
|
||||
initPropertyDefinitions();
|
||||
} );
|
||||
std::call_once( initialized, initPropertyDefinitions );
|
||||
return sPropertyDefinitions;
|
||||
}
|
||||
|
||||
|
@ -123,75 +123,76 @@ void QgsNetworkDiskCache::clear()
|
||||
return sDiskCache.clear();
|
||||
}
|
||||
|
||||
qint64 QgsNetworkDiskCache::smartCacheSize( const QString &cacheDir )
|
||||
void determineSmartCacheSize( const QString &cacheDir, qint64 &cacheSize )
|
||||
{
|
||||
static qint64 cacheSize = 0;
|
||||
static std::once_flag initialized;
|
||||
std::call_once( initialized, [ = ]
|
||||
std::function<qint64( const QString & )> dirSize;
|
||||
dirSize = [&dirSize]( const QString & dirPath ) -> qint64
|
||||
{
|
||||
std::function<qint64( const QString & )> dirSize;
|
||||
dirSize = [&dirSize]( const QString & dirPath ) -> qint64
|
||||
qint64 size = 0;
|
||||
QDir dir( dirPath );
|
||||
|
||||
const QStringList filePaths = dir.entryList( QDir::Files | QDir::System | QDir::Hidden );
|
||||
for ( const QString &filePath : filePaths )
|
||||
{
|
||||
qint64 size = 0;
|
||||
QDir dir( dirPath );
|
||||
|
||||
const QStringList filePaths = dir.entryList( QDir::Files | QDir::System | QDir::Hidden );
|
||||
for ( const QString &filePath : filePaths )
|
||||
{
|
||||
QFileInfo fi( dir, filePath );
|
||||
size += fi.size();
|
||||
}
|
||||
|
||||
const QStringList childDirPaths = dir.entryList( QDir::Dirs | QDir::NoDotAndDotDot | QDir::System | QDir::Hidden | QDir::NoSymLinks );
|
||||
for ( const QString &childDirPath : childDirPaths )
|
||||
{
|
||||
size += dirSize( dirPath + QDir::separator() + childDirPath );
|
||||
}
|
||||
|
||||
return size;
|
||||
};
|
||||
|
||||
qint64 bytesFree;
|
||||
QStorageInfo storageInfo( cacheDir );
|
||||
bytesFree = storageInfo.bytesFree() + dirSize( cacheDir );
|
||||
|
||||
// NOLINTBEGIN(bugprone-narrowing-conversions)
|
||||
// Logic taken from Firefox's smart cache size handling
|
||||
qint64 available10MB = bytesFree / 1024 / ( 1024LL * 10 );
|
||||
qint64 cacheSize10MB = 0;
|
||||
if ( available10MB > 2500 )
|
||||
{
|
||||
// Cap the cache size to 1GB
|
||||
cacheSize10MB = 100;
|
||||
QFileInfo fi( dir, filePath );
|
||||
size += fi.size();
|
||||
}
|
||||
else
|
||||
|
||||
const QStringList childDirPaths = dir.entryList( QDir::Dirs | QDir::NoDotAndDotDot | QDir::System | QDir::Hidden | QDir::NoSymLinks );
|
||||
for ( const QString &childDirPath : childDirPaths )
|
||||
{
|
||||
if ( available10MB > 700 )
|
||||
{
|
||||
// Add 2.5% of the free space above 7GB
|
||||
cacheSize10MB += ( available10MB - 700 ) * 0.025;
|
||||
available10MB = 700;
|
||||
}
|
||||
if ( available10MB > 50 )
|
||||
{
|
||||
// Add 7.5% of free space between 500MB to 7GB
|
||||
cacheSize10MB += ( available10MB - 50 ) * 0.075;
|
||||
available10MB = 50;
|
||||
}
|
||||
size += dirSize( dirPath + QDir::separator() + childDirPath );
|
||||
}
|
||||
|
||||
return size;
|
||||
};
|
||||
|
||||
qint64 bytesFree;
|
||||
QStorageInfo storageInfo( cacheDir );
|
||||
bytesFree = storageInfo.bytesFree() + dirSize( cacheDir );
|
||||
|
||||
// NOLINTBEGIN(bugprone-narrowing-conversions)
|
||||
// Logic taken from Firefox's smart cache size handling
|
||||
qint64 available10MB = bytesFree / 1024 / ( 1024LL * 10 );
|
||||
qint64 cacheSize10MB = 0;
|
||||
if ( available10MB > 2500 )
|
||||
{
|
||||
// Cap the cache size to 1GB
|
||||
cacheSize10MB = 100;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( available10MB > 700 )
|
||||
{
|
||||
// Add 2.5% of the free space above 7GB
|
||||
cacheSize10MB += ( available10MB - 700 ) * 0.025;
|
||||
available10MB = 700;
|
||||
}
|
||||
if ( available10MB > 50 )
|
||||
{
|
||||
// Add 7.5% of free space between 500MB to 7GB
|
||||
cacheSize10MB += ( available10MB - 50 ) * 0.075;
|
||||
available10MB = 50;
|
||||
}
|
||||
|
||||
#if defined( Q_OS_ANDROID )
|
||||
// On Android, smaller/older devices may have very little storage
|
||||
// On Android, smaller/older devices may have very little storage
|
||||
|
||||
// Add 16% of free space up to 500 MB
|
||||
cacheSize10MB += std::max( 2LL, static_cast<qint64>( available10MB * 0.16 ) );
|
||||
#else
|
||||
// Add 30% of free space up to 500 MB
|
||||
cacheSize10MB += std::max( 5LL, static_cast<qint64>( available10MB * 0.30 ) );
|
||||
// Add 16% of free space up to 500 MB
|
||||
cacheSize10MB += std::max( 2LL, static_cast<qint64>( available10MB * 0.16 ) );
|
||||
#else \
|
||||
// Add 30% of free space up to 500 MB
|
||||
cacheSize10MB += std::max( 5LL, static_cast<qint64>( available10MB * 0.30 ) );
|
||||
#endif
|
||||
}
|
||||
cacheSize = cacheSize10MB * 10 * 1024 * 1024;
|
||||
// NOLINTEND(bugprone-narrowing-conversions)
|
||||
} );
|
||||
|
||||
return cacheSize;
|
||||
}
|
||||
cacheSize = cacheSize10MB * 10 * 1024 * 1024;
|
||||
// NOLINTEND(bugprone-narrowing-conversions)
|
||||
}
|
||||
|
||||
qint64 QgsNetworkDiskCache::smartCacheSize( const QString &cacheDir )
|
||||
{
|
||||
static qint64 sCacheSize = 0;
|
||||
static std::once_flag initialized;
|
||||
std::call_once( initialized, determineSmartCacheSize, cacheDir, sCacheSize );
|
||||
return sCacheSize;
|
||||
}
|
||||
|
@ -2961,7 +2961,7 @@ void buildSupportedRasterFileFilterAndExtensions( QString &fileFiltersString, QS
|
||||
|
||||
QgsDebugMsgLevel( "Raster filter list built: " + fileFiltersString, 2 );
|
||||
QgsDebugMsgLevel( "Raster extension list built: " + extensions.join( ' ' ), 2 );
|
||||
} // buildSupportedRasterFileFilter_()
|
||||
}
|
||||
|
||||
bool QgsGdalProvider::isValidRasterFileName( QString const &fileNameQString, QString &retErrMsg )
|
||||
{
|
||||
@ -4429,12 +4429,7 @@ QList<QgsProviderSublayerDetails> QgsGdalProviderMetadata::querySublayers( const
|
||||
|
||||
// get supported extensions
|
||||
static std::once_flag initialized;
|
||||
std::call_once( initialized, [ = ]
|
||||
{
|
||||
buildSupportedRasterFileFilterAndExtensions( sFilterString, sExtensions, sWildcards );
|
||||
QgsDebugMsgLevel( QStringLiteral( "extensions: " ) + sExtensions.join( ' ' ), 2 );
|
||||
QgsDebugMsgLevel( QStringLiteral( "wildcards: " ) + sWildcards.join( ' ' ), 2 );
|
||||
} );
|
||||
std::call_once( initialized, buildSupportedRasterFileFilterAndExtensions, sFilterString, sExtensions, sWildcards );
|
||||
|
||||
const QString suffix = uriParts.value( QStringLiteral( "vsiSuffix" ) ).toString().isEmpty()
|
||||
? pathInfo.suffix().toLower()
|
||||
|
@ -226,6 +226,73 @@ QgsApplication::QgsApplication( int &argc, char **argv, bool GUIenabled, const Q
|
||||
|
||||
}
|
||||
|
||||
void registerMetaTypes()
|
||||
{
|
||||
qRegisterMetaType<QgsGeometry::Error>( "QgsGeometry::Error" );
|
||||
qRegisterMetaType<QgsDatabaseQueryLogEntry>( "QgsDatabaseQueryLogEntry" );
|
||||
qRegisterMetaType<QgsProcessingFeatureSourceDefinition>( "QgsProcessingFeatureSourceDefinition" );
|
||||
qRegisterMetaType<QgsProcessingOutputLayerDefinition>( "QgsProcessingOutputLayerDefinition" );
|
||||
qRegisterMetaType<Qgis::LayoutUnit>( "Qgis::LayoutUnit" );
|
||||
qRegisterMetaType<QgsUnsetAttributeValue>( "QgsUnsetAttributeValue" );
|
||||
qRegisterMetaType<QgsFeatureId>( "QgsFeatureId" );
|
||||
qRegisterMetaType<QgsFields>( "QgsFields" );
|
||||
qRegisterMetaType<QgsFeatureIds>( "QgsFeatureIds" );
|
||||
qRegisterMetaType<QgsProperty>( "QgsProperty" );
|
||||
qRegisterMetaType<QgsFeatureStoreList>( "QgsFeatureStoreList" );
|
||||
qRegisterMetaType<Qgis::MessageLevel>( "Qgis::MessageLevel" );
|
||||
qRegisterMetaType<Qgis::BrowserItemState>( "Qgis::BrowserItemState" );
|
||||
qRegisterMetaType<Qgis::GpsFixStatus>( "Qgis::GpsFixStatus" );
|
||||
qRegisterMetaType<QgsReferencedRectangle>( "QgsReferencedRectangle" );
|
||||
qRegisterMetaType<QgsReferencedPointXY>( "QgsReferencedPointXY" );
|
||||
qRegisterMetaType<QgsReferencedGeometry>( "QgsReferencedGeometry" );
|
||||
qRegisterMetaType<QgsLayoutRenderContext::Flags>( "QgsLayoutRenderContext::Flags" );
|
||||
qRegisterMetaType<QgsStyle::StyleEntity>( "QgsStyle::StyleEntity" );
|
||||
qRegisterMetaType<QgsCoordinateReferenceSystem>( "QgsCoordinateReferenceSystem" );
|
||||
qRegisterMetaType<QgsAuthManager::MessageLevel>( "QgsAuthManager::MessageLevel" );
|
||||
qRegisterMetaType<QgsNetworkRequestParameters>( "QgsNetworkRequestParameters" );
|
||||
qRegisterMetaType<QgsNetworkReplyContent>( "QgsNetworkReplyContent" );
|
||||
qRegisterMetaType<QgsFeature>( "QgsFeature" );
|
||||
qRegisterMetaType<QgsGeometry>( "QgsGeometry" );
|
||||
qRegisterMetaType<QgsInterval>( "QgsInterval" );
|
||||
qRegisterMetaType<QgsRectangle>( "QgsRectangle" );
|
||||
qRegisterMetaType<QgsPointXY>( "QgsPointXY" );
|
||||
qRegisterMetaType<QgsPoint>( "QgsPoint" );
|
||||
qRegisterMetaType<QgsDatumTransform::GridDetails>( "QgsDatumTransform::GridDetails" );
|
||||
qRegisterMetaType<QgsDatumTransform::TransformDetails>( "QgsDatumTransform::TransformDetails" );
|
||||
qRegisterMetaType<QgsNewsFeedParser::Entry>( "QgsNewsFeedParser::Entry" );
|
||||
qRegisterMetaType<QgsRectangle>( "QgsRectangle" );
|
||||
qRegisterMetaType<QgsLocatorResult>( "QgsLocatorResult" );
|
||||
qRegisterMetaType<QgsGradientColorRamp>( "QgsGradientColorRamp" );
|
||||
qRegisterMetaType<QgsProcessingModelChildParameterSource>( "QgsProcessingModelChildParameterSource" );
|
||||
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
||||
// Qt6 documentation says these are not needed anymore (https://www.qt.io/blog/whats-new-in-qmetatype-qvariant) #spellok
|
||||
// TODO: when tests can run against Qt6 builds, check for any regressions
|
||||
qRegisterMetaTypeStreamOperators<QgsProcessingModelChildParameterSource>( "QgsProcessingModelChildParameterSource" );
|
||||
#endif
|
||||
qRegisterMetaType<QgsRemappingSinkDefinition>( "QgsRemappingSinkDefinition" );
|
||||
qRegisterMetaType<QgsProcessingModelChildDependency>( "QgsProcessingModelChildDependency" );
|
||||
qRegisterMetaType<QgsTextFormat>( "QgsTextFormat" );
|
||||
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
||||
QMetaType::registerComparators<QgsProcessingModelChildDependency>();
|
||||
QMetaType::registerEqualsComparator<QgsProcessingFeatureSourceDefinition>();
|
||||
QMetaType::registerEqualsComparator<QgsProperty>();
|
||||
QMetaType::registerEqualsComparator<QgsDateTimeRange>();
|
||||
QMetaType::registerEqualsComparator<QgsDateRange>();
|
||||
QMetaType::registerEqualsComparator<QgsUnsetAttributeValue>();
|
||||
#endif
|
||||
qRegisterMetaType<QPainter::CompositionMode>( "QPainter::CompositionMode" );
|
||||
qRegisterMetaType<QgsDateTimeRange>( "QgsDateTimeRange" );
|
||||
qRegisterMetaType<QgsDoubleRange>( "QgsDoubleRange" );
|
||||
qRegisterMetaType<QgsIntRange>( "QgsIntRange" );
|
||||
qRegisterMetaType<QList<QgsMapLayer *>>( "QList<QgsMapLayer*>" );
|
||||
qRegisterMetaType<QMap<QNetworkRequest::Attribute, QVariant>>( "QMap<QNetworkRequest::Attribute,QVariant>" );
|
||||
qRegisterMetaType<QMap<QNetworkRequest::KnownHeaders, QVariant>>( "QMap<QNetworkRequest::KnownHeaders,QVariant>" );
|
||||
qRegisterMetaType<QList<QNetworkReply::RawHeaderPair>>( "QList<QNetworkReply::RawHeaderPair>" );
|
||||
qRegisterMetaType< QAuthenticator * >( "QAuthenticator*" );
|
||||
qRegisterMetaType< QgsGpsInformation >( "QgsGpsInformation" );
|
||||
qRegisterMetaType< QgsSensorThingsExpansionDefinition >( "QgsSensorThingsExpansionDefinition" );
|
||||
};
|
||||
|
||||
void QgsApplication::init( QString profileFolder )
|
||||
{
|
||||
// Initialize application members in desktop app (at this point, profile folder is known)
|
||||
@ -257,72 +324,7 @@ void QgsApplication::init( QString profileFolder )
|
||||
*sProfilePath() = profileFolder;
|
||||
|
||||
static std::once_flag sMetaTypesRegistered;
|
||||
std::call_once( sMetaTypesRegistered, []
|
||||
{
|
||||
qRegisterMetaType<QgsGeometry::Error>( "QgsGeometry::Error" );
|
||||
qRegisterMetaType<QgsDatabaseQueryLogEntry>( "QgsDatabaseQueryLogEntry" );
|
||||
qRegisterMetaType<QgsProcessingFeatureSourceDefinition>( "QgsProcessingFeatureSourceDefinition" );
|
||||
qRegisterMetaType<QgsProcessingOutputLayerDefinition>( "QgsProcessingOutputLayerDefinition" );
|
||||
qRegisterMetaType<Qgis::LayoutUnit>( "Qgis::LayoutUnit" );
|
||||
qRegisterMetaType<QgsUnsetAttributeValue>( "QgsUnsetAttributeValue" );
|
||||
qRegisterMetaType<QgsFeatureId>( "QgsFeatureId" );
|
||||
qRegisterMetaType<QgsFields>( "QgsFields" );
|
||||
qRegisterMetaType<QgsFeatureIds>( "QgsFeatureIds" );
|
||||
qRegisterMetaType<QgsProperty>( "QgsProperty" );
|
||||
qRegisterMetaType<QgsFeatureStoreList>( "QgsFeatureStoreList" );
|
||||
qRegisterMetaType<Qgis::MessageLevel>( "Qgis::MessageLevel" );
|
||||
qRegisterMetaType<Qgis::BrowserItemState>( "Qgis::BrowserItemState" );
|
||||
qRegisterMetaType<Qgis::GpsFixStatus>( "Qgis::GpsFixStatus" );
|
||||
qRegisterMetaType<QgsReferencedRectangle>( "QgsReferencedRectangle" );
|
||||
qRegisterMetaType<QgsReferencedPointXY>( "QgsReferencedPointXY" );
|
||||
qRegisterMetaType<QgsReferencedGeometry>( "QgsReferencedGeometry" );
|
||||
qRegisterMetaType<QgsLayoutRenderContext::Flags>( "QgsLayoutRenderContext::Flags" );
|
||||
qRegisterMetaType<QgsStyle::StyleEntity>( "QgsStyle::StyleEntity" );
|
||||
qRegisterMetaType<QgsCoordinateReferenceSystem>( "QgsCoordinateReferenceSystem" );
|
||||
qRegisterMetaType<QgsAuthManager::MessageLevel>( "QgsAuthManager::MessageLevel" );
|
||||
qRegisterMetaType<QgsNetworkRequestParameters>( "QgsNetworkRequestParameters" );
|
||||
qRegisterMetaType<QgsNetworkReplyContent>( "QgsNetworkReplyContent" );
|
||||
qRegisterMetaType<QgsFeature>( "QgsFeature" );
|
||||
qRegisterMetaType<QgsGeometry>( "QgsGeometry" );
|
||||
qRegisterMetaType<QgsInterval>( "QgsInterval" );
|
||||
qRegisterMetaType<QgsRectangle>( "QgsRectangle" );
|
||||
qRegisterMetaType<QgsPointXY>( "QgsPointXY" );
|
||||
qRegisterMetaType<QgsPoint>( "QgsPoint" );
|
||||
qRegisterMetaType<QgsDatumTransform::GridDetails>( "QgsDatumTransform::GridDetails" );
|
||||
qRegisterMetaType<QgsDatumTransform::TransformDetails>( "QgsDatumTransform::TransformDetails" );
|
||||
qRegisterMetaType<QgsNewsFeedParser::Entry>( "QgsNewsFeedParser::Entry" );
|
||||
qRegisterMetaType<QgsRectangle>( "QgsRectangle" );
|
||||
qRegisterMetaType<QgsLocatorResult>( "QgsLocatorResult" );
|
||||
qRegisterMetaType<QgsGradientColorRamp>( "QgsGradientColorRamp" );
|
||||
qRegisterMetaType<QgsProcessingModelChildParameterSource>( "QgsProcessingModelChildParameterSource" );
|
||||
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
||||
// Qt6 documentation says these are not needed anymore (https://www.qt.io/blog/whats-new-in-qmetatype-qvariant) #spellok
|
||||
// TODO: when tests can run against Qt6 builds, check for any regressions
|
||||
qRegisterMetaTypeStreamOperators<QgsProcessingModelChildParameterSource>( "QgsProcessingModelChildParameterSource" );
|
||||
#endif
|
||||
qRegisterMetaType<QgsRemappingSinkDefinition>( "QgsRemappingSinkDefinition" );
|
||||
qRegisterMetaType<QgsProcessingModelChildDependency>( "QgsProcessingModelChildDependency" );
|
||||
qRegisterMetaType<QgsTextFormat>( "QgsTextFormat" );
|
||||
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
||||
QMetaType::registerComparators<QgsProcessingModelChildDependency>();
|
||||
QMetaType::registerEqualsComparator<QgsProcessingFeatureSourceDefinition>();
|
||||
QMetaType::registerEqualsComparator<QgsProperty>();
|
||||
QMetaType::registerEqualsComparator<QgsDateTimeRange>();
|
||||
QMetaType::registerEqualsComparator<QgsDateRange>();
|
||||
QMetaType::registerEqualsComparator<QgsUnsetAttributeValue>();
|
||||
#endif
|
||||
qRegisterMetaType<QPainter::CompositionMode>( "QPainter::CompositionMode" );
|
||||
qRegisterMetaType<QgsDateTimeRange>( "QgsDateTimeRange" );
|
||||
qRegisterMetaType<QgsDoubleRange>( "QgsDoubleRange" );
|
||||
qRegisterMetaType<QgsIntRange>( "QgsIntRange" );
|
||||
qRegisterMetaType<QList<QgsMapLayer *>>( "QList<QgsMapLayer*>" );
|
||||
qRegisterMetaType<QMap<QNetworkRequest::Attribute, QVariant>>( "QMap<QNetworkRequest::Attribute,QVariant>" );
|
||||
qRegisterMetaType<QMap<QNetworkRequest::KnownHeaders, QVariant>>( "QMap<QNetworkRequest::KnownHeaders,QVariant>" );
|
||||
qRegisterMetaType<QList<QNetworkReply::RawHeaderPair>>( "QList<QNetworkReply::RawHeaderPair>" );
|
||||
qRegisterMetaType< QAuthenticator * >( "QAuthenticator*" );
|
||||
qRegisterMetaType< QgsGpsInformation >( "QgsGpsInformation" );
|
||||
qRegisterMetaType< QgsSensorThingsExpansionDefinition >( "QgsSensorThingsExpansionDefinition" );
|
||||
} );
|
||||
std::call_once( sMetaTypesRegistered, registerMetaTypes );
|
||||
|
||||
( void ) resolvePkgPath();
|
||||
|
||||
|
@ -124,10 +124,7 @@ void QgsMapLayerElevationProperties::setDataDefinedProperties( const QgsProperty
|
||||
QgsPropertiesDefinition QgsMapLayerElevationProperties::propertyDefinitions()
|
||||
{
|
||||
static std::once_flag initialized;
|
||||
std::call_once( initialized, [ = ]( )
|
||||
{
|
||||
initPropertyDefinitions();
|
||||
} );
|
||||
std::call_once( initialized, initPropertyDefinitions );
|
||||
return sPropertyDefinitions;
|
||||
}
|
||||
|
||||
|
@ -454,9 +454,6 @@ void QgsRasterPipe::initPropertyDefinitions()
|
||||
QgsPropertiesDefinition QgsRasterPipe::propertyDefinitions()
|
||||
{
|
||||
static std::once_flag initialized;
|
||||
std::call_once( initialized, [ = ]( )
|
||||
{
|
||||
initPropertyDefinitions();
|
||||
} );
|
||||
std::call_once( initialized, initPropertyDefinitions );
|
||||
return sPropertyDefinitions;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user