diff options
Diffstat (limited to 'LibOVR/Src/Kernel/OVR_Log.h')
-rw-r--r-- | LibOVR/Src/Kernel/OVR_Log.h | 386 |
1 files changed, 193 insertions, 193 deletions
diff --git a/LibOVR/Src/Kernel/OVR_Log.h b/LibOVR/Src/Kernel/OVR_Log.h index acc298d..d49d466 100644 --- a/LibOVR/Src/Kernel/OVR_Log.h +++ b/LibOVR/Src/Kernel/OVR_Log.h @@ -1,193 +1,193 @@ -/************************************************************************************
-
-PublicHeader: OVR
-Filename : OVR_Log.h
-Content : Logging support
-Created : September 19, 2012
-Notes :
-
-Copyright : Copyright 2012 Oculus VR, Inc. All Rights reserved.
-
-Use of this software is subject to the terms of the Oculus license
-agreement provided at the time of installation or download, or which
-otherwise accompanies this software in either electronic or hard copy form.
-
-************************************************************************************/
-
-#ifndef OVR_Log_h
-#define OVR_Log_h
-
-#include "OVR_Types.h"
-#include <stdarg.h>
-
-namespace OVR {
-
-//-----------------------------------------------------------------------------------
-// ***** Logging Constants
-
-// LogMaskConstants defined bit mask constants that describe what log messages
-// should be displayed.
-enum LogMaskConstants
-{
- LogMask_Regular = 0x100,
- LogMask_Debug = 0x200,
- LogMask_None = 0,
- LogMask_All = LogMask_Regular|LogMask_Debug
-};
-
-
-// LogMessageType describes the type of the log message, controls when it is
-// displayed and what prefix/suffix is given to it. Messages are subdivided into
-// regular and debug logging types. Debug logging is only generated in debug builds.
-//
-// Log_Text - General output text displayed without prefix or new-line.
-// Used in OVR libraries for general log flow messages
-// such as "Device Initialized".
-//
-// Log_Error - Error message output with "Error: %s\n", intended for
-// application/sample-level use only, in cases where an expected
-// operation failed. OVR libraries should not use this internally,
-// reporting status codes instead.
-//
-// Log_DebugText - Message without prefix or new lines; output in Debug build only.
-//
-// Log_Debug - Debug-build only message, formatted with "Debug: %s\n".
-// Intended to comment on incorrect API usage that doesn't lead
-// to crashes but can be avoided with proper use.
-// There is no Debug Error on purpose, since real errors should
-// be handled by API user.
-//
-// Log_Assert - Debug-build only message, formatted with "Assert: %s\n".
-// Intended for severe unrecoverable conditions in library
-// source code. Generated though OVR_ASSERT_MSG(c, "Text").
-
-enum LogMessageType
-{
- // General Logging
- Log_Text = LogMask_Regular | 0,
- Log_Error = LogMask_Regular | 1, // "Error: %s\n".
-
- // Debug-only messages (not generated in release build)
- Log_DebugText = LogMask_Debug | 0,
- Log_Debug = LogMask_Debug | 1, // "Debug: %s\n".
- Log_Assert = LogMask_Debug | 2, // "Assert: %s\n".
-};
-
-
-// LOG_VAARG_ATTRIBUTE macro, enforces printf-style fromatting for message types
-#ifdef __GNUC__
-# define OVR_LOG_VAARG_ATTRIBUTE(a,b) __attribute__((format (printf, a, b)))
-#else
-# define OVR_LOG_VAARG_ATTRIBUTE(a,b)
-#endif
-
-
-//-----------------------------------------------------------------------------------
-// ***** Log
-
-// Log defines a base class interface that can be implemented to catch both
-// debug and runtime messages.
-// Debug logging can be overridden by calling Log::SetGlobalLog.
-
-class Log
-{
- friend class System;
-public:
- Log(unsigned logMask = LogMask_Debug) : LoggingMask(logMask) { }
- virtual ~Log();
-
- // Log formating buffer size used by default LogMessageVarg. Longer strings are truncated.
- enum { MaxLogBufferMessageSize = 2048 };
-
- unsigned GetLoggingMask() const { return LoggingMask; }
- void SetLoggingMask(unsigned logMask) { LoggingMask = logMask; }
-
- // This virtual function receives all the messages,
- // developers should override this function in order to do custom logging
- virtual void LogMessageVarg(LogMessageType messageType, const char* fmt, va_list argList);
-
- // Call the logging function with specific message type, with no type filtering.
- void LogMessage(LogMessageType messageType,
- const char* fmt, ...) OVR_LOG_VAARG_ATTRIBUTE(3,4);
-
-
- // Helper used by LogMessageVarg to format the log message, writing the resulting
- // string into buffer. It formats text based on fmt and appends prefix/new line
- // based on LogMessageType.
- static void FormatLog(char* buffer, unsigned bufferSize, LogMessageType messageType,
- const char* fmt, va_list argList);
-
- // Default log output implementation used by by LogMessageVarg.
- // Debug flag may be used to re-direct output on some platforms, but doesn't
- // necessarily disable it in release builds; that is the job of the called.
- static void DefaultLogOutput(const char* textBuffer, bool debug);
-
- // Determines if the specified message type is for debugging only.
- static bool IsDebugMessage(LogMessageType messageType)
- {
- return (messageType & LogMask_Debug) != 0;
- }
-
- // *** Global APIs
-
- // Global Log registration APIs.
- // - Global log is used for OVR_DEBUG messages. Set global log to null (0)
- // to disable all logging.
- static void SetGlobalLog(Log *log);
- static Log* GetGlobalLog();
-
- // Returns default log singleton instance.
- static Log* GetDefaultLog();
-
- // Applies logMask to the default log and returns a pointer to it.
- // By default, only Debug logging is enabled, so to avoid SDK generating console
- // messages in user app (those are always disabled in release build,
- // even if the flag is set). This function is useful in System constructor.
- static Log* ConfigureDefaultLog(unsigned logMask = LogMask_Debug)
- {
- Log* log = GetDefaultLog();
- log->SetLoggingMask(logMask);
- return log;
- }
-
-private:
- // Logging mask described by LogMaskConstants.
- unsigned LoggingMask;
-};
-
-
-//-----------------------------------------------------------------------------------
-// ***** Global Logging Functions and Debug Macros
-
-// These functions will output text to global log with semantics described by
-// their LogMessageType.
-void LogText(const char* fmt, ...) OVR_LOG_VAARG_ATTRIBUTE(1,2);
-void LogError(const char* fmt, ...) OVR_LOG_VAARG_ATTRIBUTE(1,2);
-
-#ifdef OVR_BUILD_DEBUG
-
- // Debug build only logging.
- void LogDebugText(const char* fmt, ...) OVR_LOG_VAARG_ATTRIBUTE(1,2);
- void LogDebug(const char* fmt, ...) OVR_LOG_VAARG_ATTRIBUTE(1,2);
- void LogAssert(const char* fmt, ...) OVR_LOG_VAARG_ATTRIBUTE(1,2);
-
- // Macro to do debug logging, printf-style.
- // An extra set of set of parenthesis must be used around arguments,
- // as in: OVR_LOG_DEBUG(("Value %d", 2)).
- #define OVR_DEBUG_LOG(args) do { OVR::LogDebug args; } while(0)
- #define OVR_DEBUG_LOG_TEXT(args) do { OVR::LogDebugText args; } while(0)
-
- #define OVR_ASSERT_LOG(c, args) do { if (!(c)) { OVR::LogAssert args; OVR_DEBUG_BREAK; } } while(0)
-
-#else
-
- // If not in debug build, macros do nothing.
- #define OVR_DEBUG_LOG(args) ((void)0)
- #define OVR_DEBUG_LOG_TEXT(args) ((void)0)
- #define OVR_ASSERT_LOG(c, args) ((void)0)
-
-#endif
-
-} // OVR
-
-#endif
+/************************************************************************************ + +PublicHeader: OVR +Filename : OVR_Log.h +Content : Logging support +Created : September 19, 2012 +Notes : + +Copyright : Copyright 2012 Oculus VR, Inc. All Rights reserved. + +Use of this software is subject to the terms of the Oculus license +agreement provided at the time of installation or download, or which +otherwise accompanies this software in either electronic or hard copy form. + +************************************************************************************/ + +#ifndef OVR_Log_h +#define OVR_Log_h + +#include "OVR_Types.h" +#include <stdarg.h> + +namespace OVR { + +//----------------------------------------------------------------------------------- +// ***** Logging Constants + +// LogMaskConstants defined bit mask constants that describe what log messages +// should be displayed. +enum LogMaskConstants +{ + LogMask_Regular = 0x100, + LogMask_Debug = 0x200, + LogMask_None = 0, + LogMask_All = LogMask_Regular|LogMask_Debug +}; + + +// LogMessageType describes the type of the log message, controls when it is +// displayed and what prefix/suffix is given to it. Messages are subdivided into +// regular and debug logging types. Debug logging is only generated in debug builds. +// +// Log_Text - General output text displayed without prefix or new-line. +// Used in OVR libraries for general log flow messages +// such as "Device Initialized". +// +// Log_Error - Error message output with "Error: %s\n", intended for +// application/sample-level use only, in cases where an expected +// operation failed. OVR libraries should not use this internally, +// reporting status codes instead. +// +// Log_DebugText - Message without prefix or new lines; output in Debug build only. +// +// Log_Debug - Debug-build only message, formatted with "Debug: %s\n". +// Intended to comment on incorrect API usage that doesn't lead +// to crashes but can be avoided with proper use. +// There is no Debug Error on purpose, since real errors should +// be handled by API user. +// +// Log_Assert - Debug-build only message, formatted with "Assert: %s\n". +// Intended for severe unrecoverable conditions in library +// source code. Generated though OVR_ASSERT_MSG(c, "Text"). + +enum LogMessageType +{ + // General Logging + Log_Text = LogMask_Regular | 0, + Log_Error = LogMask_Regular | 1, // "Error: %s\n". + + // Debug-only messages (not generated in release build) + Log_DebugText = LogMask_Debug | 0, + Log_Debug = LogMask_Debug | 1, // "Debug: %s\n". + Log_Assert = LogMask_Debug | 2, // "Assert: %s\n". +}; + + +// LOG_VAARG_ATTRIBUTE macro, enforces printf-style fromatting for message types +#ifdef __GNUC__ +# define OVR_LOG_VAARG_ATTRIBUTE(a,b) __attribute__((format (printf, a, b))) +#else +# define OVR_LOG_VAARG_ATTRIBUTE(a,b) +#endif + + +//----------------------------------------------------------------------------------- +// ***** Log + +// Log defines a base class interface that can be implemented to catch both +// debug and runtime messages. +// Debug logging can be overridden by calling Log::SetGlobalLog. + +class Log +{ + friend class System; +public: + Log(unsigned logMask = LogMask_Debug) : LoggingMask(logMask) { } + virtual ~Log(); + + // Log formating buffer size used by default LogMessageVarg. Longer strings are truncated. + enum { MaxLogBufferMessageSize = 2048 }; + + unsigned GetLoggingMask() const { return LoggingMask; } + void SetLoggingMask(unsigned logMask) { LoggingMask = logMask; } + + // This virtual function receives all the messages, + // developers should override this function in order to do custom logging + virtual void LogMessageVarg(LogMessageType messageType, const char* fmt, va_list argList); + + // Call the logging function with specific message type, with no type filtering. + void LogMessage(LogMessageType messageType, + const char* fmt, ...) OVR_LOG_VAARG_ATTRIBUTE(3,4); + + + // Helper used by LogMessageVarg to format the log message, writing the resulting + // string into buffer. It formats text based on fmt and appends prefix/new line + // based on LogMessageType. + static void FormatLog(char* buffer, unsigned bufferSize, LogMessageType messageType, + const char* fmt, va_list argList); + + // Default log output implementation used by by LogMessageVarg. + // Debug flag may be used to re-direct output on some platforms, but doesn't + // necessarily disable it in release builds; that is the job of the called. + static void DefaultLogOutput(const char* textBuffer, bool debug); + + // Determines if the specified message type is for debugging only. + static bool IsDebugMessage(LogMessageType messageType) + { + return (messageType & LogMask_Debug) != 0; + } + + // *** Global APIs + + // Global Log registration APIs. + // - Global log is used for OVR_DEBUG messages. Set global log to null (0) + // to disable all logging. + static void SetGlobalLog(Log *log); + static Log* GetGlobalLog(); + + // Returns default log singleton instance. + static Log* GetDefaultLog(); + + // Applies logMask to the default log and returns a pointer to it. + // By default, only Debug logging is enabled, so to avoid SDK generating console + // messages in user app (those are always disabled in release build, + // even if the flag is set). This function is useful in System constructor. + static Log* ConfigureDefaultLog(unsigned logMask = LogMask_Debug) + { + Log* log = GetDefaultLog(); + log->SetLoggingMask(logMask); + return log; + } + +private: + // Logging mask described by LogMaskConstants. + unsigned LoggingMask; +}; + + +//----------------------------------------------------------------------------------- +// ***** Global Logging Functions and Debug Macros + +// These functions will output text to global log with semantics described by +// their LogMessageType. +void LogText(const char* fmt, ...) OVR_LOG_VAARG_ATTRIBUTE(1,2); +void LogError(const char* fmt, ...) OVR_LOG_VAARG_ATTRIBUTE(1,2); + +#ifdef OVR_BUILD_DEBUG + + // Debug build only logging. + void LogDebugText(const char* fmt, ...) OVR_LOG_VAARG_ATTRIBUTE(1,2); + void LogDebug(const char* fmt, ...) OVR_LOG_VAARG_ATTRIBUTE(1,2); + void LogAssert(const char* fmt, ...) OVR_LOG_VAARG_ATTRIBUTE(1,2); + + // Macro to do debug logging, printf-style. + // An extra set of set of parenthesis must be used around arguments, + // as in: OVR_LOG_DEBUG(("Value %d", 2)). + #define OVR_DEBUG_LOG(args) do { OVR::LogDebug args; } while(0) + #define OVR_DEBUG_LOG_TEXT(args) do { OVR::LogDebugText args; } while(0) + + #define OVR_ASSERT_LOG(c, args) do { if (!(c)) { OVR::LogAssert args; OVR_DEBUG_BREAK; } } while(0) + +#else + + // If not in debug build, macros do nothing. + #define OVR_DEBUG_LOG(args) ((void)0) + #define OVR_DEBUG_LOG_TEXT(args) ((void)0) + #define OVR_ASSERT_LOG(c, args) ((void)0) + +#endif + +} // OVR + +#endif |