diff --git a/CMakeLists.txt b/CMakeLists.txt index 4a5b2a6d818..a80019b4877 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -625,7 +625,6 @@ option(WITH_CYCLES "Enable Cycles Render Engine" ON) option(WITH_CYCLES_OSL "Build Cycles with OpenShadingLanguage support" ON) option(WITH_CYCLES_PATH_GUIDING "Build Cycles with path guiding support" ON) option(WITH_CYCLES_EMBREE "Build Cycles with Embree support" ON) -option(WITH_CYCLES_LOGGING "Build Cycles with logging support" ON) option(WITH_CYCLES_DEBUG "Build Cycles with options useful for debugging (e.g., MIS)" OFF) option(WITH_CYCLES_STANDALONE "Build Cycles standalone application" OFF) @@ -655,7 +654,6 @@ Run additional Cycles test with OSL enabled" OFF ) mark_as_advanced(WITH_CYCLES_KERNEL_ASAN) -mark_as_advanced(WITH_CYCLES_LOGGING) mark_as_advanced(WITH_CYCLES_DEBUG_NAN) mark_as_advanced(WITH_CYCLES_NATIVE_ONLY) mark_as_advanced(WITH_CYCLES_PRECOMPUTE) @@ -1711,7 +1709,7 @@ set_and_warn_incompatible(WITH_PYTHON_MODULE WITH_GTESTS OFF) # ----------------------------------------------------------------------------- # Configure `GLog/GFlags` -if(WITH_LIBMV OR WITH_GTESTS OR (WITH_CYCLES AND WITH_CYCLES_LOGGING)) +if(WITH_LIBMV OR WITH_GTESTS) if(WITH_SYSTEM_GFLAGS) find_package(Gflags) if(NOT GFLAGS_FOUND) @@ -2686,12 +2684,6 @@ elseif(WITH_CYCLES_STANDALONE OR WITH_CYCLES_HYDRA_RENDER_DELEGATE) add_subdirectory(intern/sky) add_subdirectory(intern/cycles) - if(WITH_CYCLES_LOGGING) - if(NOT WITH_SYSTEM_GFLAGS) - add_subdirectory(extern/gflags) - endif() - add_subdirectory(extern/glog) - endif() if(WITH_CUDA_DYNLOAD) add_subdirectory(extern/cuew) endif() diff --git a/extern/CMakeLists.txt b/extern/CMakeLists.txt index fb5232cca05..d384cf64425 100644 --- a/extern/CMakeLists.txt +++ b/extern/CMakeLists.txt @@ -86,7 +86,7 @@ if(WITH_LIBMV) add_subdirectory(ceres) endif() -if(WITH_LIBMV OR WITH_GTESTS OR (WITH_CYCLES AND WITH_CYCLES_LOGGING)) +if(WITH_LIBMV OR WITH_GTESTS) if(NOT WITH_SYSTEM_GFLAGS) add_subdirectory(gflags) endif() diff --git a/intern/cycles/CMakeLists.txt b/intern/cycles/CMakeLists.txt index 02aca6b299c..2772215b6eb 100644 --- a/intern/cycles/CMakeLists.txt +++ b/intern/cycles/CMakeLists.txt @@ -325,18 +325,6 @@ if(WITH_OPENIMAGEDENOISE) ) endif() -# Logging capabilities using GLog library. -if(WITH_CYCLES_LOGGING) - add_definitions(-DWITH_CYCLES_LOGGING) - add_definitions(${GLOG_DEFINES}) - add_definitions(-DCYCLES_GFLAGS_NAMESPACE=${GFLAGS_NAMESPACE}) - include_directories( - SYSTEM - ${GLOG_INCLUDE_DIRS} - ${GFLAGS_INCLUDE_DIRS} - ) -endif() - if(WITH_ALEMBIC) add_definitions(-DWITH_ALEMBIC) include_directories( diff --git a/intern/cycles/app/cycles_standalone.cpp b/intern/cycles/app/cycles_standalone.cpp index 2f042b00247..69518684103 100644 --- a/intern/cycles/app/cycles_standalone.cpp +++ b/intern/cycles/app/cycles_standalone.cpp @@ -405,9 +405,8 @@ static void options_parse(const int argc, const char **argv) ArgParse ap; bool help = false; bool profile = false; - bool debug = false; bool version = false; - int verbosity = 1; + string log_level; ap.usage("cycles [options] file.xml"); ap.arg("filename").hidden().action([&](auto argv) { options.filepath = argv[0]; }); @@ -442,12 +441,9 @@ static void options_parse(const int argc, const char **argv) }); ap.arg("--list-devices", &list).help("List information about all available devices"); ap.arg("--profile", &profile).help("Enable profile logging"); -#ifdef WITH_CYCLES_LOGGING - ap.arg("--debug", &debug).help("Enable debug logging"); - ap.arg("--verbose %d:VERBOSE").help("Set verbosity of the logger").action([&](auto argv) { - parse_int(argv, &verbosity); - }); -#endif + ap.arg("--log-level %s:LEVEL") + .help("Log verbosity: fatal, error, warning, info, stats, debug") + .action([&](auto argv) { parse_string(argv, &log_level); }); ap.arg("--help", &help).help("Print help message"); ap.arg("--version", &version).help("Print version number"); @@ -457,9 +453,8 @@ static void options_parse(const int argc, const char **argv) exit(EXIT_FAILURE); } - if (debug) { - util_logging_start(); - util_logging_verbosity_set(verbosity); + if (!log_level.empty()) { + log_level_set(log_level); } if (list) { @@ -544,7 +539,7 @@ using namespace ccl; int main(const int argc, const char **argv) { - util_logging_init(argv[0]); + log_init(argv[0]); path_init(); options_parse(argc, argv); diff --git a/intern/cycles/blender/CCL_api.h b/intern/cycles/blender/CCL_api.h index 8d66d5a8018..a27755e68b9 100644 --- a/intern/cycles/blender/CCL_api.h +++ b/intern/cycles/blender/CCL_api.h @@ -12,9 +12,7 @@ extern "C" { void *CCL_python_module_init(void); -void CCL_init_logging(const char *argv0); -void CCL_start_debug_logging(void); -void CCL_logging_verbosity_set(const int verbosity); +void CCL_log_init(void); #ifdef __cplusplus } diff --git a/intern/cycles/blender/CMakeLists.txt b/intern/cycles/blender/CMakeLists.txt index 0110d203a9d..e343502043a 100644 --- a/intern/cycles/blender/CMakeLists.txt +++ b/intern/cycles/blender/CMakeLists.txt @@ -58,6 +58,7 @@ set(LIB PRIVATE bf::imbuf PRIVATE bf::gpu PRIVATE bf::intern::guardedalloc + PRIVATE bf::intern::clog PRIVATE bf::render cycles_bvh cycles_device @@ -73,13 +74,6 @@ set(LIB ${PYTHON_LIBRARIES} ) -if(WITH_CYCLES_LOGGING) - list(APPEND LIB - ${GLOG_LIBRARIES} - ${GFLAGS_LIBRARIES} - ) -endif() - set(ADDON_FILES addon/__init__.py addon/camera.py diff --git a/intern/cycles/blender/logging.cpp b/intern/cycles/blender/logging.cpp index bc6a7e106c8..ca92da52412 100644 --- a/intern/cycles/blender/logging.cpp +++ b/intern/cycles/blender/logging.cpp @@ -5,17 +5,59 @@ #include "blender/CCL_api.h" #include "util/log.h" -void CCL_init_logging(const char *argv0) -{ - ccl::util_logging_init(argv0); -} +#include "CLG_log.h" -void CCL_start_debug_logging() -{ - ccl::util_logging_start(); -} +static CLG_LogRef LOG = {"cycles"}; -void CCL_logging_verbosity_set(const int verbosity) +void CCL_log_init() { - ccl::util_logging_verbosity_set(verbosity); + /* Set callback to pass log messages to CLOG. */ + ccl::log_init( + [](const ccl::LogLevel level, const char *file_line, const char *func, const char *msg) { + const CLG_LogType *log_type = CLOG_ENSURE(&LOG); + switch (level) { + case ccl::FATAL: + case ccl::DFATAL: + CLG_log_str(log_type, CLG_SEVERITY_FATAL, file_line, func, msg); + return; + case ccl::ERROR: + case ccl::DERROR: + CLG_log_str(log_type, CLG_SEVERITY_ERROR, file_line, func, msg); + return; + case ccl::WARNING: + case ccl::DWARNING: + CLG_log_str(log_type, CLG_SEVERITY_WARN, file_line, func, msg); + return; + case ccl::INFO: + case ccl::WORK: + case ccl::STATS: + case ccl::DEBUG: + case ccl::UNKNOWN: + CLG_log_str(log_type, CLG_SEVERITY_INFO, file_line, func, msg); + return; + } + }); + + /* Map log level from CLOG. */ + const CLG_LogType *log_type = CLOG_ENSURE(&LOG); + if (log_type->flag & CLG_FLAG_USE) { + switch (log_type->level) { + case 0: + case 1: + ccl::log_level_set(ccl::INFO); + break; + case 2: + ccl::log_level_set(ccl::WORK); + break; + case 3: + ccl::log_level_set(ccl::STATS); + break; + default: + ccl::log_level_set(ccl::DEBUG); + break; + } + } + else { + ccl::log_level_set(ccl::ERROR); + } } diff --git a/intern/cycles/cmake/macros.cmake b/intern/cycles/cmake/macros.cmake index 494618d6ddb..12f63cdb856 100644 --- a/intern/cycles/cmake/macros.cmake +++ b/intern/cycles/cmake/macros.cmake @@ -85,9 +85,6 @@ macro(cycles_external_libraries_append libraries) list(APPEND ${libraries} "opengl32") endif() endif() - if(WITH_CYCLES_LOGGING) - list(APPEND ${libraries} ${GLOG_LIBRARIES} ${GFLAGS_LIBRARIES}) - endif() if(WITH_CYCLES_OSL) list(APPEND ${libraries} ${OSL_LIBRARIES}) endif() diff --git a/intern/cycles/hydra/plugin.cpp b/intern/cycles/hydra/plugin.cpp index 1eac4ea495d..3a139cf960a 100644 --- a/intern/cycles/hydra/plugin.cpp +++ b/intern/cycles/hydra/plugin.cpp @@ -16,10 +16,8 @@ PXR_NAMESPACE_OPEN_SCOPE -#ifdef WITH_CYCLES_LOGGING TF_DEFINE_ENV_SETTING(CYCLES_LOGGING, false, "Enable Cycles logging") -TF_DEFINE_ENV_SETTING(CYCLES_LOGGING_SEVERITY, 1, "Cycles logging verbosity") -#endif +TF_DEFINE_ENV_SETTING(CYCLES_LOGGING_LEVEL, "warning", "Cycles logging level") HdCyclesPlugin::HdCyclesPlugin() { @@ -28,12 +26,9 @@ HdCyclesPlugin::HdCyclesPlugin() const std::string rootPath = PXR_NS::ArchAbsPath(plugin->GetResourcePath()); CCL_NS::path_init(std::move(rootPath)); -#ifdef WITH_CYCLES_LOGGING if (TfGetEnvSetting(CYCLES_LOGGING)) { - CCL_NS::util_logging_start(); - CCL_NS::util_logging_verbosity_set(TfGetEnvSetting(CYCLES_LOGGING_SEVERITY)); + CCL_NS::log_level_set(TfGetEnvSetting(CYCLES_LOGGING_LEVEL)); } -#endif } HdCyclesPlugin::~HdCyclesPlugin() {} diff --git a/intern/cycles/test/CMakeLists.txt b/intern/cycles/test/CMakeLists.txt index c83a3e9971a..09ae60c2d62 100644 --- a/intern/cycles/test/CMakeLists.txt +++ b/intern/cycles/test/CMakeLists.txt @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: Apache-2.0 -if(WITH_GTESTS AND WITH_CYCLES_LOGGING) +if(WITH_GTESTS) # Otherwise we get warnings here that we can't fix in external projects remove_strict_flags() endif() @@ -58,7 +58,7 @@ if(NOT APPLE) endif() endif() -if(WITH_GTESTS AND WITH_CYCLES_LOGGING) +if(WITH_GTESTS) set(INC_SYS ) blender_add_test_suite_executable(cycles "${SRC}" "${INC}" "${INC_SYS}" "${LIB}") endif() diff --git a/intern/cycles/test/render_graph_finalize_test.cpp b/intern/cycles/test/render_graph_finalize_test.cpp index 2d73616d277..3f1bfbf0705 100644 --- a/intern/cycles/test/render_graph_finalize_test.cpp +++ b/intern/cycles/test/render_graph_finalize_test.cpp @@ -2,7 +2,6 @@ * * SPDX-License-Identifier: Apache-2.0 */ -#include #include #include "device/device.h" @@ -145,16 +144,23 @@ class ShaderGraphBuilder { /* A ScopedMockLog object intercepts log messages issued during its lifespan, * to test if the approriate logs are output. */ -class ScopedMockLog : google::LogSink { +class ScopedMockLog { public: ScopedMockLog() { - AddLogSink(this); + log_init([](const LogLevel /*level*/, + const char * /*file_line*/, + const char * /*func*/, + const char *msg) { + static thread_mutex mutex; + thread_scoped_lock lock(mutex); + messages.push_back(msg); + }); } - ~ScopedMockLog() override + ~ScopedMockLog() { - RemoveLogSink(this); + log_init(nullptr); messages.free_memory(); } @@ -182,19 +188,6 @@ class ScopedMockLog : google::LogSink { private: static vector messages; - - void send(google::LogSeverity /*severity*/, - const char * /*full_filename*/, - const char * /*base_filename*/, - int /*line*/, - const tm * /*tm_time*/, - const char *message, - size_t /*message_len*/) override - { - static thread_mutex mutex; - thread_scoped_lock lock(mutex); - messages.push_back(message); - } }; vector ScopedMockLog::messages; @@ -230,15 +223,14 @@ class RenderGraph : public testing::Test { /* Initialize logging after the creation of the essential resources. This way the logging * mock sink does not warn about uninteresting messages which happens prior to the setup of * the actual mock sinks. */ - util_logging_start(); - util_logging_verbosity_set(5); + log_level_set(DEBUG); } void TearDown() override { /* Effectively disable logging, so that the next test suit starts in an environment which is * not logging by default. */ - util_logging_verbosity_set(0); + log_level_set(FATAL); scene.reset(); device_cpu.reset(); diff --git a/intern/cycles/util/log.cpp b/intern/cycles/util/log.cpp index 8fb42b59881..64c153aee51 100644 --- a/intern/cycles/util/log.cpp +++ b/intern/cycles/util/log.cpp @@ -3,9 +3,9 @@ * SPDX-License-Identifier: Apache-2.0 */ #include "util/log.h" - #include "util/math.h" #include "util/string.h" +#include "util/time.h" #include #ifdef _MSC_VER @@ -14,59 +14,122 @@ CCL_NAMESPACE_BEGIN -#ifdef WITH_CYCLES_LOGGING -static bool is_verbosity_set() +LogLevel LOG_LEVEL = DWARNING; +static LogFunction LOG_FUNCTION; +static double LOG_START_TIME = time_dt(); + +const char *log_level_to_string(const LogLevel level) { - using CYCLES_GFLAGS_NAMESPACE::GetCommandLineOption; - - string verbosity; - if (!GetCommandLineOption("v", &verbosity)) { - return false; + switch (level) { + case FATAL: + case DFATAL: + return "FATAL"; + case ERROR: + case DERROR: + return "ERROR"; + case WARNING: + case DWARNING: + return "WARNING"; + case INFO: + return "INFO"; + case WORK: + return "WORK"; + case STATS: + return "STATS"; + case DEBUG: + return "DEBUG"; + case UNKNOWN: + return "UNKNOWN"; } - return verbosity != "0"; -} -#endif -void util_logging_init(const char *argv0) -{ -#ifdef WITH_CYCLES_LOGGING - using CYCLES_GFLAGS_NAMESPACE::SetCommandLineOption; - - google::InitGoogleLogging(argv0); - SetCommandLineOption("logtostderr", "1"); - if (!is_verbosity_set()) { - SetCommandLineOption("v", "0"); - } - SetCommandLineOption("stderrthreshold", "0"); - SetCommandLineOption("minloglevel", "0"); -#else - (void)argv0; -#endif + return ""; } -void util_logging_start() +LogLevel log_string_to_level(const string &str) { -#ifdef WITH_CYCLES_LOGGING - using CYCLES_GFLAGS_NAMESPACE::SetCommandLineOption; - SetCommandLineOption("logtostderr", "1"); - if (!is_verbosity_set()) { - SetCommandLineOption("v", "2"); + const std::string str_lower = string_to_lower(str); + + if (str_lower == "fatal") { + return FATAL; } - SetCommandLineOption("stderrthreshold", "0"); - SetCommandLineOption("minloglevel", "0"); -#endif + if (str_lower == "error") { + return ERROR; + } + if (str_lower == "warning") { + return WARNING; + } + if (str_lower == "info") { + return FATAL; + } + if (str_lower == "work") { + return WORK; + } + if (str_lower == "stats") { + return STATS; + } + if (str_lower == "debug") { + return DEBUG; + } + return UNKNOWN; } -void util_logging_verbosity_set(const int verbosity) +void log_init(const LogFunction func) { -#ifdef WITH_CYCLES_LOGGING - using CYCLES_GFLAGS_NAMESPACE::SetCommandLineOption; - char val[10]; - snprintf(val, sizeof(val), "%d", verbosity); - SetCommandLineOption("v", val); -#else - (void)verbosity; -#endif + LOG_FUNCTION = func; + LOG_START_TIME = time_dt(); +} + +void log_level_set(const LogLevel level) +{ + LOG_LEVEL = level; +} + +void log_level_set(const std::string &level) +{ + const LogLevel new_level = log_string_to_level(level); + if (new_level == UNKNOWN) { + LOG(ERROR) << "Unknown log level specified: " << level; + return; + } + LOG_LEVEL = new_level; +} + +static void log_default(const LogLevel level, const std::string &time_str, const char *msg) +{ + if (level >= INFO) { + printf("%s | %s\n", time_str.c_str(), msg); + } + else { + fflush(stdout); + fprintf(stderr, "%s | %s: %s\n", time_str.c_str(), log_level_to_string(level), msg); + } +} + +void _log_message(const LogLevel level, const char *file_line, const char *func, const char *msg) +{ + assert(level <= LOG_LEVEL); + + if (LOG_FUNCTION) { + LOG_FUNCTION(level, file_line, func, msg); + return; + } + + const std::string time_str = time_human_readable_from_seconds(time_dt() - LOG_START_TIME); + + if (strchr(msg, '\n') == nullptr) { + log_default(level, time_str, msg); + return; + } + + vector lines; + string_split(lines, msg, "\n", false); + for (const string &line : lines) { + log_default(level, time_str, line.c_str()); + } + + if (level == FATAL || level == DFATAL) { + abort(); + } } std::ostream &operator<<(std::ostream &os, const int2 &value) diff --git a/intern/cycles/util/log.h b/intern/cycles/util/log.h index 20a2f919f40..2006e60b0e9 100644 --- a/intern/cycles/util/log.h +++ b/intern/cycles/util/log.h @@ -4,89 +4,154 @@ #pragma once -#if defined(WITH_CYCLES_LOGGING) && !defined(__KERNEL_GPU__) -# include // IWYU pragma: export -# include // IWYU pragma: export -#endif +#include "util/defines.h" +#include "util/string.h" +#include "util/types.h" -#include +#include CCL_NAMESPACE_BEGIN -#if !defined(WITH_CYCLES_LOGGING) || defined(__KERNEL_GPU__) -class StubStream { +enum LogLevel { + FATAL = 0, + DFATAL = 1, + ERROR = 2, + DERROR = 3, + WARNING = 4, + DWARNING = 5, + INFO = 6, + WORK = 7, + STATS = 8, + DEBUG = 9, + UNKNOWN = -1, +}; + +const char *log_level_to_string(const LogLevel level); +LogLevel log_string_to_level(const string &str); + +using LogFunction = void (*)(const LogLevel level, + const char *file_line, + const char *func, + const char *msg); + +void log_init(const LogFunction func = nullptr); +void log_level_set(const LogLevel level); +void log_level_set(const string &level); + +void _log_message(const LogLevel level, const char *file_line, const char *func, const char *msg); + +class LogMessage { public: - template StubStream &operator<<(const T &) + LogMessage(enum LogLevel level, const char *file_line, const char *func) + : level_(level), file_line_(file_line), func_(func) { - return *this; } + + ~LogMessage() + { + _log_message(level_, file_line_, func_, stream_.str().c_str()); + } + + std::ostream &stream() + { + return stream_; + } + + protected: + LogLevel level_; + const char *file_line_; + const char *func_; + std::stringstream stream_; }; -class LogMessageVoidify { - public: - LogMessageVoidify() {} - void operator&(const StubStream &) {} -}; +extern LogLevel LOG_LEVEL; -# define LOG_SUPPRESS() (true) ? ((void)0) : LogMessageVoidify() & StubStream() -# define LOG(severity) LOG_SUPPRESS() -# define VLOG(severity) LOG_SUPPRESS() -# define VLOG_IF(severity, condition) LOG_SUPPRESS() -# define VLOG_IS_ON(severity) false +#define LOG_STRINGIFY_APPEND(a, b) "" a #b +#define LOG_STRINGIFY(x) LOG_STRINGIFY_APPEND("", x) -# define CHECK(expression) LOG_SUPPRESS() +#ifdef NDEBUG +# define VLOG_IF(level, condition) \ + if constexpr (level != DFATAL && level != DERROR && level != DWARNING) \ + if (LIKELY(!(level <= LOG_LEVEL && (condition)))) \ + ; \ + else \ + LogMessage(level, __FILE__ ":" LOG_STRINGIFY(__LINE__), __func__).stream() +#else +# define VLOG_IF(level, condition) \ + if (LIKELY(!(level <= LOG_LEVEL && (condition)))) \ + ; \ + else \ + LogMessage(level, __FILE__ ":" LOG_STRINGIFY(__LINE__), __func__).stream() +#endif -# define CHECK_NOTNULL(expression) (expression) +// TODO: remove distinction +#define VLOG(level) VLOG_IF(level, true) +#define LOG(level) VLOG_IF(level, true) -# define CHECK_NEAR(actual, expected, eps) LOG_SUPPRESS() +#define VLOG_IS_ON(level) ((level) <= LOG_LEVEL) -# define CHECK_GE(a, b) LOG_SUPPRESS() -# define CHECK_NE(a, b) LOG_SUPPRESS() -# define CHECK_EQ(a, b) LOG_SUPPRESS() -# define CHECK_GT(a, b) LOG_SUPPRESS() -# define CHECK_LT(a, b) LOG_SUPPRESS() -# define CHECK_LE(a, b) LOG_SUPPRESS() +#define CHECK(expression) VLOG_IF(FATAL, !(expression)) +#define CHECK_OP(op, a, b) VLOG_IF(FATAL, !((a)op(b))) +#define CHECK_GE(a, b) CHECK_OP(>=, a, b) +#define CHECK_NE(a, b) CHECK_OP(!=, a, b) +#define CHECK_EQ(a, b) CHECK_OP(==, a, b) +#define CHECK_GT(a, b) CHECK_OP(>, a, b) +#define CHECK_LT(a, b) CHECK_OP(<, a, b) +#define CHECK_LE(a, b) CHECK_OP(<=, a, b) +#ifndef NDEBUG +template T DCheckNotNull(T &&t, const char *expression) +{ + if (t == nullptr) { + LOG(FATAL) << "Failed " << expression << "is not null"; + } + return std::forward(t); +} + +# define DCHECK(expression) VLOG_IF(DFATAL, !(expression)) << LOG_STRINGIFY(expression) << " " +# define DCHECK_NOTNULL(expression) DCheckNotNull(expression, LOG_STRINGIFY(expression)) +# define DCHECK_OP(op, a, b) \ + VLOG_IF(DFATAL, !((a)op(b))) << "Failed " << LOG_STRINGIFY(a) << " (" << a << ") " \ + << LOG_STRINGIFY(op) << " " << LOG_STRINGIFY(b) << " (" << b \ + << ") " +# define DCHECK_GE(a, b) DCHECK_OP(>=, a, b) +# define DCHECK_NE(a, b) DCHECK_OP(!=, a, b) +# define DCHECK_EQ(a, b) DCHECK_OP(==, a, b) +# define DCHECK_GT(a, b) DCHECK_OP(>, a, b) +# define DCHECK_LT(a, b) DCHECK_OP(<, a, b) +# define DCHECK_LE(a, b) DCHECK_OP(<=, a, b) +#else +# define LOG_SUPPRESS() VLOG_IF(DEBUG, false) # define DCHECK(expression) LOG_SUPPRESS() - # define DCHECK_NOTNULL(expression) (expression) - -# define DCHECK_NEAR(actual, expected, eps) LOG_SUPPRESS() - # define DCHECK_GE(a, b) LOG_SUPPRESS() # define DCHECK_NE(a, b) LOG_SUPPRESS() # define DCHECK_EQ(a, b) LOG_SUPPRESS() # define DCHECK_GT(a, b) LOG_SUPPRESS() # define DCHECK_LT(a, b) LOG_SUPPRESS() # define DCHECK_LE(a, b) LOG_SUPPRESS() - -# define LOG_ASSERT(expression) LOG_SUPPRESS() #endif /* Verbose logging categories. */ /* Warnings. */ -#define VLOG_WARNING VLOG(1) +#define VLOG_WARNING VLOG(WARNING) /* Info about devices, scene contents and features used. */ -#define VLOG_INFO VLOG(2) -#define VLOG_INFO_IS_ON VLOG_IS_ON(2) +#define VLOG_INFO VLOG(INFO) +#define VLOG_INFO_IS_ON VLOG_IS_ON(INFO) /* Work being performed and timing/memory stats about that work. */ -#define VLOG_WORK VLOG(3) -#define VLOG_WORK_IS_ON VLOG_IS_ON(3) +#define VLOG_WORK VLOG(WORK) +#define VLOG_WORK_IS_ON VLOG_IS_ON(WORK) /* Detailed device timing stats. */ -#define VLOG_DEVICE_STATS VLOG(4) -#define VLOG_DEVICE_STATS_IS_ON VLOG_IS_ON(4) +#define VLOG_DEVICE_STATS VLOG(STATS) +#define VLOG_DEVICE_STATS_IS_ON VLOG_IS_ON(STATS) /* Verbose debug messages. */ -#define VLOG_DEBUG VLOG(5) -#define VLOG_DEBUG_IS_ON VLOG_IS_ON(5) +#define VLOG_DEBUG VLOG(DEBUG) +#define VLOG_DEBUG_IS_ON VLOG_IS_ON(DEBUG) struct int2; struct float3; -void util_logging_init(const char *argv0); -void util_logging_start(); -void util_logging_verbosity_set(const int verbosity); - std::ostream &operator<<(std::ostream &os, const int2 &value); std::ostream &operator<<(std::ostream &os, const float3 &value); diff --git a/release/windows/batch/blender_debug_cycles.cmd b/release/windows/batch/blender_debug_cycles.cmd index a62893e1e2c..b41ca34b332 100644 --- a/release/windows/batch/blender_debug_cycles.cmd +++ b/release/windows/batch/blender_debug_cycles.cmd @@ -16,5 +16,5 @@ set PYTHONPATH= set DEBUGLOGS="%temp%\blender\debug_logs" mkdir "%DEBUGLOGS%" > NUL 2>&1 -"%~dp0\blender" --debug --debug-cycles --verbose 8 --log-level -1 --python-expr "import bpy; bpy.context.preferences.filepaths.temporary_directory=r'%DEBUGLOGS%'; bpy.ops.wm.sysinfo(filepath=r'%DEBUGLOGS%\blender_system_info.txt')" > "%DEBUGLOGS%\blender_debug_output.txt" 2>&1 < %0 +"%~dp0\blender" --debug --log cycles --log-level 4 --python-expr "import bpy; bpy.context.preferences.filepaths.temporary_directory=r'%DEBUGLOGS%'; bpy.ops.wm.sysinfo(filepath=r'%DEBUGLOGS%\blender_system_info.txt')" > "%DEBUGLOGS%\blender_debug_output.txt" 2>&1 < %0 explorer "%DEBUGLOGS%" diff --git a/release/windows/batch/blender_debug_gpu.cmd b/release/windows/batch/blender_debug_gpu.cmd index 3598583db05..3fb1a1dfce2 100644 --- a/release/windows/batch/blender_debug_gpu.cmd +++ b/release/windows/batch/blender_debug_gpu.cmd @@ -17,5 +17,5 @@ set DEBUGLOGS="%temp%\blender\debug_logs" set VK_LOADER_DEBUG=all mkdir "%DEBUGLOGS%" > NUL 2>&1 -"%~dp0\blender" --debug --debug-gpu --debug-cycles --python-expr "import bpy; bpy.context.preferences.filepaths.temporary_directory=r'%DEBUGLOGS%'; bpy.ops.wm.sysinfo(filepath=r'%DEBUGLOGS%\blender_system_info.txt')" > "%DEBUGLOGS%\blender_debug_output.txt" 2>&1 < %0 +"%~dp0\blender" --debug --debug-gpu --log cycles --python-expr "import bpy; bpy.context.preferences.filepaths.temporary_directory=r'%DEBUGLOGS%'; bpy.ops.wm.sysinfo(filepath=r'%DEBUGLOGS%\blender_system_info.txt')" > "%DEBUGLOGS%\blender_debug_output.txt" 2>&1 < %0 explorer "%DEBUGLOGS%" diff --git a/release/windows/batch/blender_debug_log.cmd b/release/windows/batch/blender_debug_log.cmd index 2676ef7887f..47e25ab740d 100644 --- a/release/windows/batch/blender_debug_log.cmd +++ b/release/windows/batch/blender_debug_log.cmd @@ -16,5 +16,5 @@ set PYTHONPATH= set DEBUGLOGS="%temp%\blender\debug_logs" mkdir "%DEBUGLOGS%" > NUL 2>&1 -"%~dp0\blender" --debug --debug-cycles --python-expr "import bpy; bpy.context.preferences.filepaths.temporary_directory=r'%DEBUGLOGS%'; bpy.ops.wm.sysinfo(filepath=r'%DEBUGLOGS%\blender_system_info.txt')" > "%DEBUGLOGS%\blender_debug_output.txt" 2>&1 < %0 +"%~dp0\blender" --debug --log cycles --python-expr "import bpy; bpy.context.preferences.filepaths.temporary_directory=r'%DEBUGLOGS%'; bpy.ops.wm.sysinfo(filepath=r'%DEBUGLOGS%\blender_system_info.txt')" > "%DEBUGLOGS%\blender_debug_output.txt" 2>&1 < %0 explorer "%DEBUGLOGS%" diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt index 30094afd520..4a49c7e0f8b 100644 --- a/source/creator/CMakeLists.txt +++ b/source/creator/CMakeLists.txt @@ -52,10 +52,7 @@ endif() if(WITH_CYCLES) add_definitions(-DWITH_CYCLES) - if(WITH_CYCLES_LOGGING) - list(APPEND INC ../../intern/cycles/blender) - add_definitions(-DWITH_CYCLES_LOGGING) - endif() + list(APPEND INC ../../intern/cycles/blender) endif() if(WITH_OPENGL_BACKEND) diff --git a/source/creator/creator.cc b/source/creator/creator.cc index afff8a69298..da9e250c0ee 100644 --- a/source/creator/creator.cc +++ b/source/creator/creator.cc @@ -93,7 +93,9 @@ #ifdef WITH_LIBMV # include "libmv-capi.h" -#elif defined(WITH_CYCLES_LOGGING) +#endif + +#ifdef WITH_CYCLES # include "CCL_api.h" #endif @@ -405,8 +407,6 @@ int main(int argc, #ifdef WITH_LIBMV libmv_initLogging(argv[0]); -#elif defined(WITH_CYCLES_LOGGING) - CCL_init_logging(argv[0]); #endif #if defined(WITH_TBB_MALLOC) && defined(_MSC_VER) && defined(NDEBUG) && defined(WITH_GMP) @@ -496,6 +496,10 @@ int main(int argc, /* Continue with regular initialization, no need to use "early" exit. */ app_init_data.early_exit = nullptr; +#ifdef WITH_CYCLES + CCL_log_init(); +#endif + /* Must be initialized after #BKE_appdir_init to account for color-management paths. */ IMB_init(); /* Keep after #ARG_PASS_SETTINGS since debug flags are checked. */ diff --git a/source/creator/creator_args.cc b/source/creator/creator_args.cc index 9b2dfb1efa9..feaa8fc0ce1 100644 --- a/source/creator/creator_args.cc +++ b/source/creator/creator_args.cc @@ -69,7 +69,7 @@ # include "libmv-capi.h" # endif -# ifdef WITH_CYCLES_LOGGING +# ifdef WITH_CYCLES # include "CCL_api.h" # endif @@ -90,7 +90,6 @@ struct BuildDefs { bool win32; bool with_cycles; - bool with_cycles_logging; bool with_ffmpeg; bool with_freestyle; bool with_libmv; @@ -117,9 +116,6 @@ static void build_defs_init(BuildDefs *build_defs, bool force_all) # ifdef WITH_CYCLES build_defs->with_cycles = true; # endif -# ifdef WITH_CYCLES_LOGGING - build_defs->with_cycles_logging = true; -# endif # ifdef WITH_FFMPEG build_defs->with_ffmpeg = true; # endif @@ -741,9 +737,6 @@ static void print_help(bArgs *ba, bool all) if (defs.with_libmv) { BLI_args_print_arg_doc(ba, "--debug-libmv"); } - if (defs.with_cycles_logging) { - BLI_args_print_arg_doc(ba, "--debug-cycles"); - } BLI_args_print_arg_doc(ba, "--debug-memory"); BLI_args_print_arg_doc(ba, "--debug-jobs"); BLI_args_print_arg_doc(ba, "--debug-python"); @@ -1393,9 +1386,6 @@ static int arg_handle_debug_mode_all(int /*argc*/, const char ** /*argv*/, void G.debug |= G_DEBUG_ALL; # ifdef WITH_LIBMV libmv_startDebugLogging(); -# endif -# ifdef WITH_CYCLES_LOGGING - CCL_start_debug_logging(); # endif return 0; } @@ -1416,9 +1406,8 @@ static const char arg_handle_debug_mode_cycles_doc[] = "Enable debug messages from Cycles."; static int arg_handle_debug_mode_cycles(int /*argc*/, const char ** /*argv*/, void * /*data*/) { -# ifdef WITH_CYCLES_LOGGING - CCL_start_debug_logging(); -# endif + const char *cycles_filter = "cycles.*"; + CLG_type_filter_include(cycles_filter, strlen(cycles_filter)); return 0; } @@ -2094,10 +2083,6 @@ static int arg_handle_verbosity_set(int argc, const char **argv, void * /*data*/ # ifdef WITH_LIBMV libmv_setLoggingVerbosity(level); -# elif defined(WITH_CYCLES_LOGGING) - CCL_logging_verbosity_set(level); -# else - (void)level; # endif return 1; @@ -2821,7 +2806,7 @@ void main_args_setup(bContext *C, bArgs *ba, bool all) if (defs.with_libmv) { BLI_args_add(ba, nullptr, "--debug-libmv", CB(arg_handle_debug_mode_libmv), nullptr); } - if (defs.with_cycles_logging) { + if (defs.with_cycles) { BLI_args_add(ba, nullptr, "--debug-cycles", CB(arg_handle_debug_mode_cycles), nullptr); } BLI_args_add(ba, nullptr, "--debug-memory", CB(arg_handle_debug_mode_memory_set), nullptr);