Merge pull request #15278 from kitely/clear-more-disk-caches

case 21983: Clear more disk caches
This commit is contained in:
Sam Gateau 2019-11-18 11:11:26 -08:00 committed by GitHub
commit 048626ba9a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 68 additions and 3 deletions

View file

@ -29,6 +29,8 @@
#include <VrMenu.h>
#include <ScriptEngines.h>
#include <MenuItemProperties.h>
#include <ui/types/FileTypeProfile.h>
#include <ui/types/HFWebEngineProfile.h>
#include "Application.h"
#include "AccountManager.h"
@ -582,8 +584,20 @@ Menu::Menu() {
QString("hifi/tablet/TabletNetworkingPreferences.qml"), "NetworkingPreferencesDialog");
});
addActionToQMenuAndActionHash(networkMenu, MenuOption::ReloadContent, 0, qApp, SLOT(reloadResourceCaches()));
addActionToQMenuAndActionHash(networkMenu, MenuOption::ClearDiskCache, 0,
DependencyManager::get<AssetClient>().data(), SLOT(clearCache()));
action = addActionToQMenuAndActionHash(networkMenu, MenuOption::ClearDiskCaches);
connect(action, &QAction::triggered, [] {
// The following caches are cleared immediately
DependencyManager::get<AssetClient>()->clearCache();
#ifndef Q_OS_ANDROID
FileTypeProfile::clearCache();
HFWebEngineProfile::clearCache();
#endif
// Clear the KTX cache on the next restart. It can't be cleared immediately because its files might be in use.
Setting::Handle<int>(KTXCache::SETTING_VERSION_NAME, KTXCache::INVALID_VERSION).set(KTXCache::INVALID_VERSION);
});
addCheckableActionToQMenuAndActionHash(networkMenu,
MenuOption::DisableActivityLogger,
0,

View file

@ -56,7 +56,7 @@ namespace MenuOption {
const QString CalibrateCamera = "Calibrate Camera";
const QString CenterPlayerInView = "Center Player In View";
const QString Chat = "Chat...";
const QString ClearDiskCache = "Clear Disk Cache";
const QString ClearDiskCaches = "Clear Disk Caches (requires restart)";
const QString Collisions = "Collisions";
const QString Connexion = "Activate 3D Connexion Devices";
const QString Console = "Console...";

View file

@ -11,6 +11,8 @@
#include "FileTypeProfile.h"
#include <set>
#include <mutex>
#include <QtQml/QQmlContext>
#include "RequestFilters.h"
@ -18,14 +20,28 @@
#if !defined(Q_OS_ANDROID)
static const QString QML_WEB_ENGINE_STORAGE_NAME = "qmlWebEngine";
static std::set<FileTypeProfile*> FileTypeProfile_instances;
static std::mutex FileTypeProfile_mutex;
FileTypeProfile::FileTypeProfile(QQmlContext* parent) :
ContextAwareProfile(parent)
{
static const QString WEB_ENGINE_USER_AGENT = "Chrome/48.0 (HighFidelityInterface)";
setHttpUserAgent(WEB_ENGINE_USER_AGENT);
setStorageName(QML_WEB_ENGINE_STORAGE_NAME);
setOffTheRecord(false);
auto requestInterceptor = new RequestInterceptor(this);
setRequestInterceptor(requestInterceptor);
std::lock_guard<std::mutex> lock(FileTypeProfile_mutex);
FileTypeProfile_instances.insert(this);
}
FileTypeProfile::~FileTypeProfile() {
std::lock_guard<std::mutex> lock(FileTypeProfile_mutex);
FileTypeProfile_instances.erase(this);
}
void FileTypeProfile::RequestInterceptor::interceptRequest(QWebEngineUrlRequestInfo& info) {
@ -37,5 +53,11 @@ void FileTypeProfile::registerWithContext(QQmlContext* context) {
context->setContextProperty("FileTypeProfile", new FileTypeProfile(context));
}
void FileTypeProfile::clearCache() {
std::lock_guard<std::mutex> lock(FileTypeProfile_mutex);
foreach (auto instance, FileTypeProfile_instances) {
instance->clearHttpCache();
}
}
#endif

View file

@ -25,8 +25,12 @@ class FileTypeProfile : public ContextAwareProfile {
public:
static void registerWithContext(QQmlContext* parent);
static void clearCache();
protected:
FileTypeProfile(QQmlContext* parent);
virtual ~FileTypeProfile();
class RequestInterceptor : public Parent::RequestInterceptor {
public:
RequestInterceptor(ContextAwareProfile* parent) : Parent::RequestInterceptor(parent) {}

View file

@ -11,6 +11,8 @@
#include "HFWebEngineProfile.h"
#include <set>
#include <mutex>
#include <QtQml/QQmlContext>
#include "RequestFilters.h"
@ -19,12 +21,24 @@
static const QString QML_WEB_ENGINE_STORAGE_NAME = "qmlWebEngine";
static std::set<HFWebEngineProfile*> HFWebEngineProfile_instances;
static std::mutex HFWebEngineProfile_mutex;
HFWebEngineProfile::HFWebEngineProfile(QQmlContext* parent) : Parent(parent)
{
setStorageName(QML_WEB_ENGINE_STORAGE_NAME);
setOffTheRecord(false);
// we use the HFWebEngineRequestInterceptor to make sure that web requests are authenticated for the interface user
setRequestInterceptor(new RequestInterceptor(this));
std::lock_guard<std::mutex> lock(HFWebEngineProfile_mutex);
HFWebEngineProfile_instances.insert(this);
}
HFWebEngineProfile::~HFWebEngineProfile() {
std::lock_guard<std::mutex> lock(HFWebEngineProfile_mutex);
HFWebEngineProfile_instances.erase(this);
}
void HFWebEngineProfile::RequestInterceptor::interceptRequest(QWebEngineUrlRequestInfo& info) {
@ -35,4 +49,11 @@ void HFWebEngineProfile::registerWithContext(QQmlContext* context) {
context->setContextProperty("HFWebEngineProfile", new HFWebEngineProfile(context));
}
void HFWebEngineProfile::clearCache() {
std::lock_guard<std::mutex> lock(HFWebEngineProfile_mutex);
foreach (auto instance, HFWebEngineProfile_instances) {
instance->clearHttpCache();
}
}
#endif

View file

@ -23,8 +23,12 @@ class HFWebEngineProfile : public ContextAwareProfile {
public:
static void registerWithContext(QQmlContext* parent);
static void clearCache();
protected:
HFWebEngineProfile(QQmlContext* parent);
virtual ~HFWebEngineProfile();
class RequestInterceptor : public Parent::RequestInterceptor {
public:
RequestInterceptor(ContextAwareProfile* parent) : Parent::RequestInterceptor(parent) {}