diff --git a/modules/core/src/trace.cpp b/modules/core/src/trace.cpp index e1c58bb79b..4245ab2080 100644 --- a/modules/core/src/trace.cpp +++ b/modules/core/src/trace.cpp @@ -196,14 +196,27 @@ static __itt_domain* domain = NULL; static bool isITTEnabled() { - static bool isInitialized = false; + static volatile bool isInitialized = false; static bool isEnabled = false; if (!isInitialized) { - isEnabled = !!(__itt_api_version()); - CV_LOG_ITT("ITT is " << (isEnabled ? "enabled" : "disabled")); - domain = __itt_domain_create("OpenCVTrace"); - isInitialized = true; + cv::AutoLock lock(cv::getInitializationMutex()); + if (!isInitialized) + { + bool param_traceITTEnable = utils::getConfigurationParameterBool("OPENCV_TRACE_ITT_ENABLE", true); + if (param_traceITTEnable) + { + isEnabled = !!(__itt_api_version()); + CV_LOG_ITT("ITT is " << (isEnabled ? "enabled" : "disabled")); + domain = __itt_domain_create("OpenCVTrace"); + } + else + { + CV_LOG_ITT("ITT is disabled through OpenCV parameter"); + isEnabled = false; + } + isInitialized = true; + } } return isEnabled; }