diff options
Diffstat (limited to 'src/system_wrappers/interface/trace.h')
-rw-r--r-- | src/system_wrappers/interface/trace.h | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/src/system_wrappers/interface/trace.h b/src/system_wrappers/interface/trace.h new file mode 100644 index 0000000000..0f7df4d46e --- /dev/null +++ b/src/system_wrappers/interface/trace.h @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +// System independant wrapper for logging runtime information to file. +// Note: All log messages will be written to the same trace file. +// Note: If to many messages are written to file there will be a build up of +// messages. Apply filtering to avoid that. +#ifndef WEBRTC_SYSTEM_WRAPPERS_INTERFACE_TRACE_H_ +#define WEBRTC_SYSTEM_WRAPPERS_INTERFACE_TRACE_H_ + +#include "common_types.h" +#include "typedefs.h" + +#ifdef WEBRTC_NO_TRACE + #define WEBRTC_TRACE +#else + // Ideally we would use __VA_ARGS__ but it's not supported by all compilers + // such as VS2003 (it's supported in VS2005). TODO (hellner) why + // would this be better than current implementation (not convinced)? + #define WEBRTC_TRACE Trace::Add +#endif + +namespace webrtc { +class Trace +{ +public: + + // Increments the reference count to the trace. + static void CreateTrace(); + // Decrements the reference count to the trace. + static void ReturnTrace(); + // Note: any instance that writes to the trace file should increment and + // decrement the reference count on construction and destruction + // respectively + + // Specifies what type of messages should be written to the trace file. The + // filter parameter is a bitmask where each message type is enumerated by + // the TraceLevel enumerator. TODO (hellner) why is the + // TraceLevel enumerator not defined in this file? + static WebRtc_Word32 SetLevelFilter(const WebRtc_UWord32 filter); + + // Returns what type of messages are written to the trace file. + static WebRtc_Word32 LevelFilter(WebRtc_UWord32& filter); + + // Sets the file name. If addFileCounter is false the same file will be + // reused when it fills up. If it's true a new file with incremented name + // will be used. + static WebRtc_Word32 SetTraceFile(const WebRtc_Word8* fileName, + const bool addFileCounter = false); + + // Returns the name of the file that the trace is currently writing to. + static WebRtc_Word32 TraceFile(WebRtc_Word8 fileName[1024]); + + // Registers callback to receive trace messages. TODO (hellner) + // why not use OutStream instead? Why is TraceCallback not defined in this + // file + static WebRtc_Word32 SetTraceCallback(TraceCallback* callback); + + // Adds a trace message for writing to file. The message is put in a queue + // for writing to file whenever possible for performance reasons. I.e. there + // is a crash it is possible that the last, vital logs are not logged yet. + // level is the the type of message to log. If that type of messages is + // filtered it will not be written to file. module is an identifier for what + // part of the code the message is comming. + // id is an identifier that should be unique for that set of classes that + // are associated (e.g. all instances owned by an engine). + // msg and the elipsis are the same as e.g. sprintf. + // TODO (hellner) Why is TraceModule not defined in this file? + static void Add(const TraceLevel level, + const TraceModule module, + const WebRtc_Word32 id, + const char* msg, ...); + +}; +} // namespace webrtc +#endif // WEBRTC_SYSTEM_WRAPPERS_INTERFACE_TRACE_H_ |