void Trace(LogSeverity severity, const char *message) { if (!ShouldCreateLogMessage(severity)) { return; } std::string str(message); if (DebugAnnotationsActive()) { std::wstring formattedWideMessage(str.begin(), str.end()); switch (severity) { case LOG_EVENT: g_debugAnnotator->beginEvent(formattedWideMessage.c_str()); break; default: g_debugAnnotator->setMarker(formattedWideMessage.c_str()); break; } } if (severity == LOG_ERR) { // Note: we use fprintf because <iostream> includes static initializers. fprintf(stderr, "%s: %s\n", LogSeverityName(severity), str.c_str()); } #if defined(ANGLE_PLATFORM_WINDOWS) && \ (defined(ANGLE_ENABLE_DEBUG_TRACE_TO_DEBUGGER) || !defined(NDEBUG)) #if !defined(ANGLE_ENABLE_DEBUG_TRACE_TO_DEBUGGER) if (severity == LOG_ERR) #endif // !defined(ANGLE_ENABLE_DEBUG_TRACE_TO_DEBUGGER) { OutputDebugStringA(str.c_str()); } #endif #if defined(ANGLE_ENABLE_DEBUG_TRACE) #if defined(NDEBUG) if (severity == LOG_EVENT || severity == LOG_WARN) { return; } #endif // defined(NDEBUG) static std::ofstream file(TRACE_OUTPUT_FILE, std::ofstream::app); if (file) { file << LogSeverityName(severity) << ": " << str << std::endl; file.flush(); } #endif // defined(ANGLE_ENABLE_DEBUG_TRACE) }
static void output(bool traceInDebugOnly, DebugTraceOutputType outputType, const char *format, va_list vararg) { #if defined(ANGLE_ENABLE_DEBUG_ANNOTATIONS) static std::vector<char> buffer(512); if (perfActive()) { size_t len = FormatStringIntoVector(format, vararg, buffer); std::wstring formattedWideMessage(buffer.begin(), buffer.begin() + len); switch (outputType) { case DebugTraceOutputTypeNone: break; case DebugTraceOutputTypeBeginEvent: g_DebugAnnotationWrapper->beginEvent(formattedWideMessage); break; case DebugTraceOutputTypeSetMarker: g_DebugAnnotationWrapper->setMarker(formattedWideMessage); break; } } #endif // ANGLE_ENABLE_DEBUG_ANNOTATIONS #if defined(ANGLE_ENABLE_DEBUG_TRACE) #if defined(NDEBUG) if (traceInDebugOnly) { return; } #endif // NDEBUG std::string formattedMessage = FormatString(format, vararg); static std::ofstream file(TRACE_OUTPUT_FILE, std::ofstream::app); if (file) { file.write(formattedMessage.c_str(), formattedMessage.length()); file.flush(); } #if defined(ANGLE_ENABLE_DEBUG_TRACE_TO_DEBUGGER) OutputDebugStringA(formattedMessage.c_str()); #endif // ANGLE_ENABLE_DEBUG_TRACE_TO_DEBUGGER #endif // ANGLE_ENABLE_DEBUG_TRACE }