Skip to content

Commit

Permalink
vkconfig3: Refactor active configuration and executable code
Browse files Browse the repository at this point in the history
Change-Id: I563dc678cda6e0104fa2c57538a8ecd0e86babf2
  • Loading branch information
christophe-lunarg committed Oct 10, 2024
1 parent eaff4b5 commit f520578
Show file tree
Hide file tree
Showing 6 changed files with 156 additions and 94 deletions.
80 changes: 42 additions & 38 deletions vkconfig_core/configuration_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@
const char *GLOBAL_CONFIGURATION_TOKEN = "GLOBAL";

ConfigurationManager::ConfigurationManager() {
ConfigurationInfo info;
this->configuration_infos.insert(std::make_pair(GLOBAL_CONFIGURATION_TOKEN, info));
// ConfigurationInfo info;
// this->configuration_infos.insert(std::make_pair(GLOBAL_CONFIGURATION_TOKEN, info));
}

ConfigurationManager::~ConfigurationManager() {}
Expand All @@ -38,7 +38,7 @@ bool ConfigurationManager::Load(const QJsonObject &json_root_object) {
const QJsonObject &json_configurations_object = json_root_object.value("configurations").toObject();
this->use_per_executable_configuration = json_configurations_object.value("use_per_executable").toBool();
this->use_system_tray = json_configurations_object.value("use_system_tray").toBool();
this->active_executable = json_configurations_object.value("active_executable").toString().toStdString();
// this->active_executable = json_configurations_object.value("active_executable").toString().toStdString();

if (json_configurations_object.value("last_path_export") != QJsonValue::Undefined) {
this->last_path_export = json_configurations_object.value("last_path_export").toString().toStdString();
Expand All @@ -47,20 +47,22 @@ bool ConfigurationManager::Load(const QJsonObject &json_root_object) {
this->last_path_import = json_configurations_object.value("last_path_import").toString().toStdString();
}

if (json_configurations_object.value("infos") != QJsonValue::Undefined) {
this->configuration_infos.clear();

const QJsonObject &json_infos_object = json_configurations_object.value("infos").toObject();
const QStringList &json_infos_keys = json_infos_object.keys();
for (int i = 0, n = json_infos_keys.length(); i < n; ++i) {
const std::string &key = json_infos_keys[i].toStdString();
const QJsonObject &json_info_object = json_infos_object.value(key.c_str()).toObject();
ConfigurationInfo info;
info.name = json_info_object.value("name").toString().toStdString();
info.mode = ::GetLayersMode(json_info_object.value("mode").toString().toStdString().c_str());
this->configuration_infos.insert(std::make_pair(key, info));
}
}
/*
if (json_configurations_object.value("infos") != QJsonValue::Undefined) {
this->configuration_infos.clear();
const QJsonObject &json_infos_object = json_configurations_object.value("infos").toObject();
const QStringList &json_infos_keys = json_infos_object.keys();
for (int i = 0, n = json_infos_keys.length(); i < n; ++i) {
const std::string &key = json_infos_keys[i].toStdString();
const QJsonObject &json_info_object = json_infos_object.value(key.c_str()).toObject();
ConfigurationInfo info;
info.name = json_info_object.value("name").toString().toStdString();
info.mode = ::GetLayersMode(json_info_object.value("mode").toString().toStdString().c_str());
this->configuration_infos.insert(std::make_pair(key, info));
}
}
*/

if (json_configurations_object.value("removed_builtin") != QJsonValue::Undefined) {
const QJsonObject &json_removed_builtin_object = json_configurations_object.value("removed_builtin").toObject();
Expand Down Expand Up @@ -88,21 +90,23 @@ bool ConfigurationManager::Save(QJsonObject &json_root_object) const {
json_removed_builtin_configurations_object.insert(it->first.c_str(), it->second);
}

QJsonObject json_infos_object;
for (auto it = this->configuration_infos.begin(), end = this->configuration_infos.end(); it != end; ++it) {
QJsonObject json_info_object;
json_info_object.insert("name", it->second.name.c_str());
json_info_object.insert("mode", GetToken(it->second.mode));
json_infos_object.insert(it->first.c_str(), json_info_object);
}
/*
QJsonObject json_infos_object;
for (auto it = this->configuration_infos.begin(), end = this->configuration_infos.end(); it != end; ++it) {
QJsonObject json_info_object;
json_info_object.insert("name", it->second.name.c_str());
json_info_object.insert("mode", GetToken(it->second.mode));
json_infos_object.insert(it->first.c_str(), json_info_object);
}
*/

QJsonObject json_configurations_object;
json_configurations_object.insert("use_per_executable", this->use_per_executable_configuration);
json_configurations_object.insert("use_system_tray", this->use_system_tray);
json_configurations_object.insert("active_executable", this->active_executable.c_str());
// json_configurations_object.insert("active_executable", this->active_executable.c_str());
json_configurations_object.insert("last_path_export", this->last_path_export.RelativePath().c_str());
json_configurations_object.insert("last_path_import", this->last_path_import.RelativePath().c_str());
json_configurations_object.insert("infos", json_infos_object);
// json_configurations_object.insert("infos", json_infos_object);
json_configurations_object.insert("removed_builtin", json_removed_builtin_configurations_object);

json_root_object.insert("configurations", json_configurations_object);
Expand All @@ -114,17 +118,17 @@ void ConfigurationManager::Reset() {
this->removed_built_in_configuration.clear();
this->use_per_executable_configuration = false;
this->use_system_tray = false;
this->active_executable.clear();
this->configuration_infos.clear();
// this->active_executable.clear();
// this->configuration_infos.clear();
this->available_configurations.clear();
this->last_path_import = Get(Path::HOME);
this->last_path_export = Get(Path::HOME);

this->LoadDefaultConfigurations(Configurator::Get().layers);
this->SortConfigurations();

ConfigurationInfo info;
this->configuration_infos.insert(std::make_pair(GLOBAL_CONFIGURATION_TOKEN, info));
// ConfigurationInfo info;
// this->configuration_infos.insert(std::make_pair(GLOBAL_CONFIGURATION_TOKEN, info));
}

void ConfigurationManager::LoadAllConfigurations(const LayerManager &layers) {
Expand Down Expand Up @@ -221,7 +225,7 @@ void ConfigurationManager::SaveAllConfigurations() const {
available_configurations[i].Save(path);
}
}

/*
const ConfigurationInfo *ConfigurationManager::GetActiveConfigurationInfo() const {
if (this->use_per_executable_configuration) {
if (this->active_executable.empty())
Expand Down Expand Up @@ -268,7 +272,7 @@ bool ConfigurationManager::HasActiveConfiguration() const {
const std::map<std::string, ConfigurationInfo> &ConfigurationManager::GetConfigurationInfos() const {
return this->configuration_infos;
}

*/
Configuration &ConfigurationManager::CreateConfiguration(const LayerManager &layers, const std::string &configuration_name) {
std::string configuration_key = MakeConfigurationName(available_configurations, configuration_name);

Expand All @@ -277,7 +281,7 @@ Configuration &ConfigurationManager::CreateConfiguration(const LayerManager &lay
this->available_configurations.push_back(new_configuration);
this->SortConfigurations();

this->GetActiveConfigurationInfo()->name = new_configuration.key;
// this->GetActiveConfigurationInfo()->name = new_configuration.key;

return *this->FindConfiguration(new_configuration.key);
}
Expand All @@ -300,7 +304,7 @@ Configuration &ConfigurationManager::DuplicateConfiguration(const LayerManager &
this->available_configurations.push_back(reloaded_configuration);
this->SortConfigurations(); // invalidated all pointers to configuration object

this->GetActiveConfigurationInfo()->name = reloaded_configuration.key;
// this->GetActiveConfigurationInfo()->name = reloaded_configuration.key;

return *this->FindConfiguration(reloaded_configuration.key);
}
Expand Down Expand Up @@ -361,9 +365,9 @@ void ConfigurationManager::RemoveConfiguration(const std::string &configuration_
std::swap(updated_configurations, this->available_configurations);
this->SortConfigurations();

if (this->GetActiveConfigurationInfo()->name == configuration_name) {
this->GetActiveConfigurationInfo()->name.clear();
}
// if (this->GetActiveConfigurationInfo()->name == configuration_name) {
// this->GetActiveConfigurationInfo()->name.clear();
//}
}

int ConfigurationManager::GetConfigurationIndex(const std::string &configuration_name) const {
Expand Down Expand Up @@ -430,7 +434,7 @@ bool ConfigurationManager::ImportConfiguration(const LayerManager &layers, const
this->available_configurations.push_back(configuration);
this->SortConfigurations();

this->GetActiveConfigurationInfo()->name = configuration.key;
// this->GetActiveConfigurationInfo()->name = configuration.key;

return true;
}
Expand Down
18 changes: 10 additions & 8 deletions vkconfig_core/configuration_manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
#pragma once

#include "configuration.h"
#include "configuration_info.h"
//#include "configuration_info.h"
#include "path.h"
#include "serialization.h"

Expand All @@ -42,11 +42,13 @@ class ConfigurationManager : public Serialize {
void LoadAllConfigurations(const LayerManager& layers);
void SaveAllConfigurations() const;

const ConfigurationInfo* GetActiveConfigurationInfo() const;
ConfigurationInfo* GetActiveConfigurationInfo();
const ConfigurationInfo* FindConfigurationInfo(const std::string& key) const;
const std::map<std::string, ConfigurationInfo>& GetConfigurationInfos() const;
bool HasActiveConfiguration() const;
/*
const ConfigurationInfo* GetActiveConfigurationInfo() const;
ConfigurationInfo* GetActiveConfigurationInfo();
const ConfigurationInfo* FindConfigurationInfo(const std::string& key) const;
const std::map<std::string, ConfigurationInfo>& GetConfigurationInfos() const;
bool HasActiveConfiguration() const;
*/

Configuration& CreateConfiguration(const LayerManager& layers, const std::string& configuration_name);
Configuration& DuplicateConfiguration(const LayerManager& layers, const std::string& configuration_name);
Expand Down Expand Up @@ -84,6 +86,6 @@ class ConfigurationManager : public Serialize {
std::map<std::string, int> removed_built_in_configuration;
bool use_system_tray = false;
bool use_per_executable_configuration = false;
std::string active_executable;
std::map<std::string, ConfigurationInfo> configuration_infos;
// std::string active_executable;
// std::map<std::string, ConfigurationInfo> configuration_infos;
};
101 changes: 76 additions & 25 deletions vkconfig_core/configurator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -148,19 +148,19 @@ static QJsonObject CreateJsonSettingObject(const Configurator::LoaderSettings& l
return json_settings;
}

void Configurator::BuildLoaderSettings(const ConfigurationInfo& info, const std::string& executable_path,
void Configurator::BuildLoaderSettings(const std::string& configuration_key, LayersMode mode, const std::string& executable_path,
std::vector<LoaderSettings>& loader_settings_array) const {
LoaderSettings result;
result.executable_path = executable_path;

static Configuration disbled_configuration = Configuration::CreateDisabled(this->layers);
const Configuration* configuration = nullptr;

switch (info.mode) {
switch (mode) {
case LAYERS_CONTROLLED_BY_APPLICATIONS:
return;
case LAYERS_CONTROLLED_BY_CONFIGURATOR: {
configuration = this->configurations.FindConfiguration(info.name);
configuration = this->configurations.FindConfiguration(configuration_key);
if (configuration == nullptr) {
return;
}
Expand Down Expand Up @@ -211,22 +211,16 @@ bool Configurator::WriteLoaderSettings(OverrideArea override_area, const Path& l
if (override_area & OVERRIDE_AREA_LOADER_SETTINGS_BIT) {
std::vector<LoaderSettings> loader_settings_array;

const std::map<std::string, ConfigurationInfo>& infos = this->configurations.GetConfigurationInfos();
for (auto it = infos.begin(), end = infos.end(); it != end; ++it) {
if (this->configurations.GetPerExecutableConfig()) {
if (it->first == GLOBAL_CONFIGURATION_TOKEN) {
continue;
}

this->BuildLoaderSettings(it->second, it->first, loader_settings_array);
} else {
if (it->first != GLOBAL_CONFIGURATION_TOKEN) {
continue;
}

this->BuildLoaderSettings(it->second, "", loader_settings_array);
break;
if (this->configurations.GetPerExecutableConfig()) {
const std::vector<Executable>& collection = this->executables.GetExecutables();
for (std::size_t i = 0, n = collection.size(); i < n; ++i) {
this->BuildLoaderSettings(collection[i].GetActiveOptions()->configuration,
collection[i].GetActiveOptions()->layers_mode, collection[i].path.AbsolutePath(),
loader_settings_array);
}
} else {
this->BuildLoaderSettings(this->selected_global_configuration, this->selected_global_layers_mode, "",
loader_settings_array);
}

if (!loader_settings_array.empty()) {
Expand Down Expand Up @@ -267,14 +261,14 @@ bool Configurator::WriteLayersSettings(OverrideArea override_area, const Path& l

for (std::size_t i = 0, n = executables.size(); i < n; ++i) {
LayersSettings settings;
settings.configuration_name = this->configurations.FindConfigurationInfo(executables[i].path.AbsolutePath())->name;
settings.executable_path = executables[i].path;
settings.configuration_name = executables[i].GetActiveOptions()->configuration;
settings.settings_path = executables[i].GetActiveOptions()->working_folder;
layers_settings_array.push_back(settings);
}
} else {
LayersSettings settings;
settings.configuration_name = this->configurations.FindConfigurationInfo(GLOBAL_CONFIGURATION_TOKEN)->name;
settings.configuration_name = this->selected_global_configuration;
settings.settings_path = layers_settings_path;
layers_settings_array.push_back(settings);
}
Expand Down Expand Up @@ -467,14 +461,71 @@ void Configurator::Reset(bool hard) {
this->configurations.Reset();
}

void Configurator::SetActiveConfigurationName(const std::string& configuration_name) {
if (this->configurations.GetPerExecutableConfig()) {
Executable* executable = this->executables.GetActiveExecutable();
executable->GetActiveOptions()->configuration = configuration_name;
} else {
this->selected_global_configuration = configuration_name;
}
}

std::string Configurator::GetActionConfigurationName() const {
if (this->configurations.GetPerExecutableConfig()) {
const Executable* executable = this->executables.GetActiveExecutable();
return executable->GetActiveOptions()->configuration;
} else {
return this->selected_global_configuration;
}
}

void Configurator::SetActiveLayersMode(LayersMode mode) {
if (this->configurations.GetPerExecutableConfig()) {
Executable* executable = this->executables.GetActiveExecutable();
executable->GetActiveOptions()->layers_mode = mode;
} else {
this->selected_global_layers_mode = mode;
}
}

LayersMode Configurator::GetActiveLayersMode() const {
if (this->configurations.GetPerExecutableConfig()) {
const Executable* executable = this->executables.GetActiveExecutable();
return executable->GetActiveOptions()->layers_mode;
} else {
return this->selected_global_layers_mode;
}
}

Configuration* Configurator::GetActiveConfiguration() {
const ConfigurationInfo* info = this->configurations.GetActiveConfigurationInfo();
return this->configurations.FindConfiguration(info->name);
if (this->configurations.GetPerExecutableConfig()) {
const Executable* executable = this->executables.GetActiveExecutable();
return this->configurations.FindConfiguration(executable->GetActiveOptions()->configuration);
} else {
return this->configurations.FindConfiguration(this->selected_global_configuration);
}
}

const Configuration* Configurator::GetActiveConfiguration() const {
const ConfigurationInfo* info = this->configurations.GetActiveConfigurationInfo();
return this->configurations.FindConfiguration(info->name);
if (this->configurations.GetPerExecutableConfig()) {
const Executable* executable = this->executables.GetActiveExecutable();
return this->configurations.FindConfiguration(executable->GetActiveOptions()->configuration);
} else {
return this->configurations.FindConfiguration(this->selected_global_configuration);
}
}

bool Configurator::HasActiveConfiguration() const { return this->configurations.HasActiveConfiguration(); }
bool Configurator::HasActiveConfiguration() const {
if (this->configurations.GetPerExecutableConfig()) {
const std::vector<Executable>& data = this->executables.GetExecutables();
for (std::size_t i = 0, n = data.size(); i < n; ++i) {
if (data[i].GetActiveOptions()->layers_mode != LAYERS_CONTROLLED_BY_APPLICATIONS) {
return true;
}
}
} else {
return this->selected_global_layers_mode != LAYERS_CONTROLLED_BY_APPLICATIONS;
}

return false;
}
11 changes: 10 additions & 1 deletion vkconfig_core/configurator.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@

#include "../vkconfig_core/version.h"
#include "../vkconfig_core/configuration_manager.h"
#include "../vkconfig_core/configuration_manager.h"
#include "../vkconfig_core/layer_manager.h"
#include "../vkconfig_core/executable_manager.h"
#include "../vkconfig_core/environment.h"
Expand Down Expand Up @@ -63,6 +64,11 @@ class Configurator {

void Reset(bool hard);

void SetActiveConfigurationName(const std::string& configuration_name);
std::string GetActionConfigurationName() const;
void SetActiveLayersMode(LayersMode mode);
LayersMode GetActiveLayersMode() const;

Configuration* GetActiveConfiguration();
const Configuration* GetActiveConfiguration() const;
bool HasActiveConfiguration() const;
Expand All @@ -78,7 +84,7 @@ class Configurator {
Configurator(const Configurator&) = delete;
Configurator& operator=(const Configurator&) = delete;

void BuildLoaderSettings(const ConfigurationInfo& info, const std::string& executable_path,
void BuildLoaderSettings(const std::string& configuration_key, LayersMode mode, const std::string& executable_path,
std::vector<LoaderSettings>& loader_settings_array) const;

public:
Expand All @@ -88,4 +94,7 @@ class Configurator {
ConfigurationManager configurations;
ExecutableManager executables;
VulkanSystemInfo vulkan_system_info;

std::string selected_global_configuration;
LayersMode selected_global_layers_mode;
};
Loading

0 comments on commit f520578

Please sign in to comment.