/* * Copyright (C) 2018-2022 Intel Corporation * * SPDX-License-Identifier: MIT * */ #include "debug_settings_manager.h" #include "shared/source/debug_settings/debug_variables_helper.h" #include "shared/source/debug_settings/definitions/translate_debug_settings.h" #include "shared/source/helpers/debug_helpers.h" #include "shared/source/helpers/ptr_math.h" #include "shared/source/helpers/string.h" #include "shared/source/utilities/debug_settings_reader_creator.h" #include #include #include #include namespace std { static std::string to_string(const std::string &arg) { // NOLINT(readability-identifier-naming) return arg; } } // namespace std namespace NEO { template DebugSettingsManager::DebugSettingsManager(const char *registryPath) { readerImpl = SettingsReaderCreator::create(std::string(registryPath)); injectSettingsFromReader(); dumpFlags(); translateDebugSettings(flags); while (isLoopAtDriverInitEnabled()) ; } template DebugSettingsManager::~DebugSettingsManager() { readerImpl.reset(); }; template void DebugSettingsManager::getHardwareInfoOverride(std::string &hwInfoConfig) { std::string str = flags.HardwareInfoOverride.get(); if (str[0] == '\"') { str.pop_back(); hwInfoConfig = str.substr(1, std::string::npos); } else { hwInfoConfig = str; } } template template void DebugSettingsManager::dumpNonDefaultFlag(const char *variableName, const DataType &variableValue, const DataType &defaultValue) { if (variableValue != defaultValue) { const auto variableStringValue = std::to_string(variableValue); PRINT_DEBUG_STRING(true, stdout, "Non-default value of debug variable: %s = %s\n", variableName, variableStringValue.c_str()); } } template void DebugSettingsManager::dumpFlags() const { if (flags.PrintDebugSettings.get() == false) { return; } std::ofstream settingsDumpFile{settingsDumpFileName, std::ios::out}; DEBUG_BREAK_IF(!settingsDumpFile.good()); #define DECLARE_DEBUG_VARIABLE(dataType, variableName, defaultValue, description) \ settingsDumpFile << getNonReleaseKeyName(#variableName) << " = " << flags.variableName.get() << '\n'; \ dumpNonDefaultFlag(getNonReleaseKeyName(#variableName), flags.variableName.get(), defaultValue); if (registryReadAvailable() || isDebugKeysReadEnabled()) { #include "debug_variables.inl" } #undef DECLARE_DEBUG_VARIABLE #define DECLARE_DEBUG_VARIABLE(dataType, variableName, defaultValue, description) \ settingsDumpFile << #variableName << " = " << flags.variableName.get() << '\n'; \ dumpNonDefaultFlag(#variableName, flags.variableName.get(), defaultValue); #include "release_variables.inl" #undef DECLARE_DEBUG_VARIABLE } template void DebugSettingsManager::injectSettingsFromReader() { #undef DECLARE_DEBUG_VARIABLE #define DECLARE_DEBUG_VARIABLE(dataType, variableName, defaultValue, description) \ { \ dataType tempData = readerImpl->getSetting(getNonReleaseKeyName(#variableName), flags.variableName.get()); \ flags.variableName.set(tempData); \ } if (registryReadAvailable() || isDebugKeysReadEnabled()) { #include "debug_variables.inl" } #undef DECLARE_DEBUG_VARIABLE #define DECLARE_DEBUG_VARIABLE(dataType, variableName, defaultValue, description) \ { \ dataType tempData = readerImpl->getSetting(#variableName, flags.variableName.get()); \ flags.variableName.set(tempData); \ } #include "release_variables.inl" #undef DECLARE_DEBUG_VARIABLE } template class DebugSettingsManager; template class DebugSettingsManager; template class DebugSettingsManager; }; // namespace NEO