WebAssembly: Make caching code less cryptic

Change-Id: Ib768e6f41fe8c5218875287dd0e60c76cbe0053e
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Alessandro Portale
2023-05-17 20:09:43 +02:00
parent 22af1a0255
commit b1b9f54de7

View File

@@ -16,16 +16,24 @@ using namespace Utils;
namespace WebAssembly::Internal::WebAssemblyEmSdk { namespace WebAssembly::Internal::WebAssemblyEmSdk {
using EmSdkEnvCache = QCache<QString, QString>; using EmSdkEnvCache = QCache<FilePath, QString>;
Q_GLOBAL_STATIC_WITH_ARGS(EmSdkEnvCache, emSdkEnvCache, (10)) static EmSdkEnvCache *emSdkEnvCache()
using EmSdkVersionCache = QCache<QString, QVersionNumber>; {
Q_GLOBAL_STATIC_WITH_ARGS(EmSdkVersionCache, emSdkVersionCache, (10)) static EmSdkEnvCache cache(10);
return &cache;
}
using EmSdkVersionCache = QCache<FilePath, QVersionNumber>;
static EmSdkVersionCache *emSdkVersionCache()
{
static EmSdkVersionCache cache(10);
return &cache;
}
static QString emSdkEnvOutput(const FilePath &sdkRoot) static QString emSdkEnvOutput(const FilePath &sdkRoot)
{ {
const QString cacheKey = sdkRoot.toString();
const bool isWindows = sdkRoot.osType() == OsTypeWindows; const bool isWindows = sdkRoot.osType() == OsTypeWindows;
if (!emSdkEnvCache()->contains(cacheKey)) { if (!emSdkEnvCache()->contains(sdkRoot)) {
const FilePath scriptFile = sdkRoot.pathAppended(QLatin1String("emsdk_env") + const FilePath scriptFile = sdkRoot.pathAppended(QLatin1String("emsdk_env") +
(isWindows ? ".bat" : ".sh")); (isWindows ? ".bat" : ".sh"));
Process emSdkEnv; Process emSdkEnv;
@@ -37,9 +45,9 @@ static QString emSdkEnvOutput(const FilePath &sdkRoot)
} }
emSdkEnv.runBlocking(); emSdkEnv.runBlocking();
const QString output = emSdkEnv.allOutput(); const QString output = emSdkEnv.allOutput();
emSdkEnvCache()->insert(cacheKey, new QString(output)); emSdkEnvCache()->insert(sdkRoot, new QString(output));
} }
return *emSdkEnvCache()->object(cacheKey); return *emSdkEnvCache()->object(sdkRoot);
} }
void parseEmSdkEnvOutputAndAddToEnv(const QString &output, Environment &env) void parseEmSdkEnvOutputAndAddToEnv(const QString &output, Environment &env)
@@ -80,8 +88,7 @@ QVersionNumber version(const FilePath &sdkRoot)
{ {
if (!sdkRoot.exists()) if (!sdkRoot.exists())
return {}; return {};
const QString cacheKey = sdkRoot.toString(); if (!emSdkVersionCache()->contains(sdkRoot)) {
if (!emSdkVersionCache()->contains(cacheKey)) {
Environment env = sdkRoot.deviceEnvironment(); Environment env = sdkRoot.deviceEnvironment();
addToEnvironment(sdkRoot, env); addToEnvironment(sdkRoot, env);
QLatin1String scriptFile{sdkRoot.osType() == OsType::OsTypeWindows ? "emcc.bat" : "emcc"}; QLatin1String scriptFile{sdkRoot.osType() == OsType::OsTypeWindows ? "emcc.bat" : "emcc"};
@@ -92,10 +99,10 @@ QVersionNumber version(const FilePath &sdkRoot)
emcc.setEnvironment(env); emcc.setEnvironment(env);
emcc.runBlocking(); emcc.runBlocking();
const QString version = emcc.cleanedStdOut(); const QString version = emcc.cleanedStdOut();
emSdkVersionCache()->insert(cacheKey, emSdkVersionCache()->insert(sdkRoot,
new QVersionNumber(QVersionNumber::fromString(version))); new QVersionNumber(QVersionNumber::fromString(version)));
} }
return *emSdkVersionCache()->object(cacheKey); return *emSdkVersionCache()->object(sdkRoot);
} }
void clearCaches() void clearCaches()