Index: src/log-utils.h |
=================================================================== |
--- src/log-utils.h (revision 7267) |
+++ src/log-utils.h (working copy) |
@@ -33,6 +33,8 @@ |
#ifdef ENABLE_LOGGING_AND_PROFILING |
+class Logger; |
+ |
// A memory buffer that increments its size as you write in it. Size |
// is incremented with 'block_size' steps, never exceeding 'max_size'. |
// During growth, memory contents are never copied. At the end of the |
@@ -89,28 +91,23 @@ |
// Functions and data for performing output of log messages. |
-class Log : public AllStatic { |
+class Log { |
public: |
- // Opens stdout for logging. |
- static void OpenStdout(); |
- // Opens file for logging. |
- static void OpenFile(const char* name); |
+ // Performs process-wide initialization. |
+ void Initialize(); |
- // Opens memory buffer for logging. |
- static void OpenMemoryBuffer(); |
- |
// Disables logging, but preserves acquired resources. |
- static void stop() { is_stopped_ = true; } |
+ void stop() { is_stopped_ = true; } |
- // Frees all resources acquired in Open... functions. |
- static void Close(); |
+ // Frees all resources acquired in Initialize and Open... functions. |
+ void Close(); |
// See description in include/v8.h. |
- static int GetLogLines(int from_pos, char* dest_buf, int max_size); |
+ int GetLogLines(int from_pos, char* dest_buf, int max_size); |
// Returns whether logging is enabled. |
- static bool IsEnabled() { |
+ bool IsEnabled() { |
return !is_stopped_ && (output_handle_ != NULL || output_buffer_ != NULL); |
} |
@@ -118,16 +115,19 @@ |
static const int kMessageBufferSize = v8::V8::kMinimumSizeForLogLinesBuffer; |
private: |
- typedef int (*WritePtr)(const char* msg, int length); |
+ explicit Log(Logger* logger); |
- // Initialization function called from Open... functions. |
- static void Init(); |
+ // Opens stdout for logging. |
+ void OpenStdout(); |
- // Write functions assume that mutex_ is acquired by the caller. |
- static WritePtr Write; |
+ // Opens file for logging. |
+ void OpenFile(const char* name); |
+ // Opens memory buffer for logging. |
+ void OpenMemoryBuffer(); |
+ |
// Implementation of writing to a log file. |
- static int WriteToFile(const char* msg, int length) { |
+ int WriteToFile(const char* msg, int length) { |
ASSERT(output_handle_ != NULL); |
size_t rv = fwrite(msg, 1, length, output_handle_); |
ASSERT(static_cast<size_t>(length) == rv); |
@@ -137,25 +137,27 @@ |
} |
// Implementation of writing to a memory buffer. |
- static int WriteToMemory(const char* msg, int length) { |
+ int WriteToMemory(const char* msg, int length) { |
ASSERT(output_buffer_ != NULL); |
return output_buffer_->Write(msg, length); |
} |
+ bool write_to_file_; |
+ |
// Whether logging is stopped (e.g. due to insufficient resources). |
- static bool is_stopped_; |
+ bool is_stopped_; |
// When logging is active, either output_handle_ or output_buffer_ is used |
// to store a pointer to log destination. If logging was opened via OpenStdout |
// or OpenFile, then output_handle_ is used. If logging was opened |
// via OpenMemoryBuffer, then output_buffer_ is used. |
// mutex_ should be acquired before using output_handle_ or output_buffer_. |
- static FILE* output_handle_; |
+ FILE* output_handle_; |
// Used when low-level profiling is active to save code object contents. |
- static FILE* output_code_handle_; |
+ FILE* output_code_handle_; |
- static LogDynamicBuffer* output_buffer_; |
+ LogDynamicBuffer* output_buffer_; |
// Size of dynamic buffer block (and dynamic buffer initial size). |
static const int kDynamicBufferBlockSize = 65536; |
@@ -164,16 +166,18 @@ |
static const int kMaxDynamicBufferSize = 50 * 1024 * 1024; |
// Message to "seal" dynamic buffer with. |
- static const char* kDynamicBufferSeal; |
+ static const char* const kDynamicBufferSeal; |
// mutex_ is a Mutex used for enforcing exclusive |
// access to the formatting buffer and the log file or log memory buffer. |
- static Mutex* mutex_; |
+ Mutex* mutex_; |
// Buffer used for formatting log messages. This is a singleton buffer and |
// mutex_ should be acquired before using it. |
- static char* message_buffer_; |
+ char* message_buffer_; |
+ Logger* logger_; |
+ |
friend class Logger; |
friend class LogMessageBuilder; |
}; |
@@ -185,7 +189,7 @@ |
public: |
// Create a message builder starting from position 0. This acquires the mutex |
// in the log as well. |
- explicit LogMessageBuilder(); |
+ explicit LogMessageBuilder(Logger* logger); |
~LogMessageBuilder() { } |
// Append string data to the log message. |
@@ -211,16 +215,9 @@ |
// Write the log message to the log file currently opened. |
void WriteToLogFile(); |
- // A handler that is called when Log::Write fails. |
- typedef void (*WriteFailureHandler)(); |
- |
- static void set_write_failure_handler(WriteFailureHandler handler) { |
- write_failure_handler = handler; |
- } |
- |
private: |
- static WriteFailureHandler write_failure_handler; |
+ Log* log_; |
ScopedLock sl; |
int pos_; |
}; |