forked from qt-creator/qt-creator
WebAssembly: Make caching code less cryptic
Change-Id: Ib768e6f41fe8c5218875287dd0e60c76cbe0053e Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -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()
|
||||||
|
Reference in New Issue
Block a user