| Index: src/log-utils.cc
|
| ===================================================================
|
| --- src/log-utils.cc (revision 3427)
|
| +++ src/log-utils.cc (working copy)
|
| @@ -118,77 +118,85 @@
|
| return data_size;
|
| }
|
|
|
| +LogData::LogData()
|
| + :is_stopped_(false),
|
| + Write(NULL),
|
| + output_handle_(NULL),
|
| + mutex_(NULL),
|
| + message_buffer_(NULL),
|
| + write_failure_handler(NULL),
|
| + output_buffer_(NULL) {
|
| +}
|
|
|
| -bool Log::is_stopped_ = false;
|
| -Log::WritePtr Log::Write = NULL;
|
| -FILE* Log::output_handle_ = NULL;
|
| -LogDynamicBuffer* Log::output_buffer_ = NULL;
|
| // Must be the same message as in Logger::PauseProfiler.
|
| -const char* Log::kDynamicBufferSeal = "profiler,\"pause\"\n";
|
| -Mutex* Log::mutex_ = NULL;
|
| -char* Log::message_buffer_ = NULL;
|
| +const char Log::kDynamicBufferSeal[] = "profiler,\"pause\"\n";
|
|
|
| -
|
| void Log::Init() {
|
| - mutex_ = OS::CreateMutex();
|
| - message_buffer_ = NewArray<char>(kMessageBufferSize);
|
| + LogData& log_data = v8_context()->log_data_;
|
| + log_data.mutex_ = OS::CreateMutex();
|
| + log_data.message_buffer_ = NewArray<char>(kMessageBufferSize);
|
| }
|
|
|
|
|
| void Log::OpenStdout() {
|
| ASSERT(!IsEnabled());
|
| - output_handle_ = stdout;
|
| - Write = WriteToFile;
|
| + LogData& log_data = v8_context()->log_data_;
|
| + log_data.output_handle_ = stdout;
|
| + log_data.Write = WriteToFile;
|
| Init();
|
| }
|
|
|
|
|
| void Log::OpenFile(const char* name) {
|
| ASSERT(!IsEnabled());
|
| - output_handle_ = OS::FOpen(name, OS::LogFileOpenMode);
|
| - Write = WriteToFile;
|
| + LogData& log_data = v8_context()->log_data_;
|
| + log_data.output_handle_ = OS::FOpen(name, OS::LogFileOpenMode);
|
| + log_data.Write = WriteToFile;
|
| Init();
|
| }
|
|
|
|
|
| void Log::OpenMemoryBuffer() {
|
| ASSERT(!IsEnabled());
|
| - output_buffer_ = new LogDynamicBuffer(
|
| + LogData& log_data = v8_context()->log_data_;
|
| + log_data.output_buffer_ = new LogDynamicBuffer(
|
| kDynamicBufferBlockSize, kMaxDynamicBufferSize,
|
| kDynamicBufferSeal, StrLength(kDynamicBufferSeal));
|
| - Write = WriteToMemory;
|
| + log_data.Write = WriteToMemory;
|
| Init();
|
| }
|
|
|
|
|
| void Log::Close() {
|
| - if (Write == WriteToFile) {
|
| - if (output_handle_ != NULL) fclose(output_handle_);
|
| - output_handle_ = NULL;
|
| - } else if (Write == WriteToMemory) {
|
| - delete output_buffer_;
|
| - output_buffer_ = NULL;
|
| + LogData& log_data = v8_context()->log_data_;
|
| + if (log_data.Write == WriteToFile) {
|
| + if (log_data.output_handle_ != NULL) fclose(log_data.output_handle_);
|
| + log_data.output_handle_ = NULL;
|
| + } else if (log_data.Write == WriteToMemory) {
|
| + delete log_data.output_buffer_;
|
| + log_data.output_buffer_ = NULL;
|
| } else {
|
| - ASSERT(Write == NULL);
|
| + ASSERT(log_data.Write == NULL);
|
| }
|
| - Write = NULL;
|
| + log_data.Write = NULL;
|
|
|
| - DeleteArray(message_buffer_);
|
| - message_buffer_ = NULL;
|
| + DeleteArray(log_data.message_buffer_);
|
| + log_data.message_buffer_ = NULL;
|
|
|
| - delete mutex_;
|
| - mutex_ = NULL;
|
| + delete log_data.mutex_;
|
| + log_data.mutex_ = NULL;
|
|
|
| - is_stopped_ = false;
|
| + log_data.is_stopped_ = false;
|
| }
|
|
|
|
|
| int Log::GetLogLines(int from_pos, char* dest_buf, int max_size) {
|
| - if (Write != WriteToMemory) return 0;
|
| - ASSERT(output_buffer_ != NULL);
|
| + LogData& log_data = v8_context()->log_data_;
|
| + if (log_data.Write != WriteToMemory) return 0;
|
| + ASSERT(log_data.output_buffer_ != NULL);
|
| ASSERT(from_pos >= 0);
|
| ASSERT(max_size >= 0);
|
| - int actual_size = output_buffer_->Read(from_pos, dest_buf, max_size);
|
| + int actual_size = log_data.output_buffer_->Read(from_pos, dest_buf, max_size);
|
| ASSERT(actual_size <= max_size);
|
| if (actual_size == 0) return 0;
|
|
|
| @@ -200,18 +208,16 @@
|
| return actual_size;
|
| }
|
|
|
| -
|
| -LogMessageBuilder::WriteFailureHandler
|
| - LogMessageBuilder::write_failure_handler = NULL;
|
| -
|
| -
|
| -LogMessageBuilder::LogMessageBuilder(): sl(Log::mutex_), pos_(0) {
|
| - ASSERT(Log::message_buffer_ != NULL);
|
| +LogMessageBuilder::LogMessageBuilder()
|
| + :log_data_(v8_context()->log_data_),
|
| + sl(log_data_.mutex_),
|
| + pos_(0) {
|
| + ASSERT(log_data_.message_buffer_ != NULL);
|
| }
|
|
|
|
|
| void LogMessageBuilder::Append(const char* format, ...) {
|
| - Vector<char> buf(Log::message_buffer_ + pos_,
|
| + Vector<char> buf(log_data_.message_buffer_ + pos_,
|
| Log::kMessageBufferSize - pos_);
|
| va_list args;
|
| va_start(args, format);
|
| @@ -222,7 +228,7 @@
|
|
|
|
|
| void LogMessageBuilder::AppendVA(const char* format, va_list args) {
|
| - Vector<char> buf(Log::message_buffer_ + pos_,
|
| + Vector<char> buf(log_data_.message_buffer_ + pos_,
|
| Log::kMessageBufferSize - pos_);
|
| int result = v8::internal::OS::VSNPrintF(buf, format, args);
|
|
|
| @@ -238,7 +244,7 @@
|
|
|
| void LogMessageBuilder::Append(const char c) {
|
| if (pos_ < Log::kMessageBufferSize) {
|
| - Log::message_buffer_[pos_++] = c;
|
| + log_data_.message_buffer_[pos_++] = c;
|
| }
|
| ASSERT(pos_ <= Log::kMessageBufferSize);
|
| }
|
| @@ -316,7 +322,7 @@
|
| ASSERT(len >= 0);
|
| if (len == 0) return;
|
| }
|
| - Vector<char> buf(Log::message_buffer_ + pos_,
|
| + Vector<char> buf(log_data_.message_buffer_ + pos_,
|
| Log::kMessageBufferSize - pos_);
|
| OS::StrNCpy(buf, str, len);
|
| pos_ += len;
|
| @@ -325,7 +331,7 @@
|
|
|
|
|
| bool LogMessageBuilder::StoreInCompressor(LogRecordCompressor* compressor) {
|
| - return compressor->Store(Vector<const char>(Log::message_buffer_, pos_));
|
| + return compressor->Store(Vector<const char>(log_data_.message_buffer_, pos_));
|
| }
|
|
|
|
|
| @@ -333,7 +339,7 @@
|
| LogRecordCompressor* compressor, const char* prefix) {
|
| pos_ = 0;
|
| if (prefix[0] != '\0') Append(prefix);
|
| - Vector<char> prev_record(Log::message_buffer_ + pos_,
|
| + Vector<char> prev_record(log_data_.message_buffer_ + pos_,
|
| Log::kMessageBufferSize - pos_);
|
| const bool has_prev = compressor->RetrievePreviousCompressed(&prev_record);
|
| if (!has_prev) return false;
|
| @@ -344,18 +350,18 @@
|
|
|
| void LogMessageBuilder::WriteToLogFile() {
|
| ASSERT(pos_ <= Log::kMessageBufferSize);
|
| - const int written = Log::Write(Log::message_buffer_, pos_);
|
| - if (written != pos_ && write_failure_handler != NULL) {
|
| - write_failure_handler();
|
| + const int written = log_data_.Write(log_data_.message_buffer_, pos_);
|
| + if (written != pos_ && log_data_.write_failure_handler != NULL) {
|
| + log_data_.write_failure_handler();
|
| }
|
| }
|
|
|
|
|
| void LogMessageBuilder::WriteCStringToLogFile(const char* str) {
|
| const int len = StrLength(str);
|
| - const int written = Log::Write(str, len);
|
| - if (written != len && write_failure_handler != NULL) {
|
| - write_failure_handler();
|
| + const int written = log_data_.Write(str, len);
|
| + if (written != len && log_data_.write_failure_handler != NULL) {
|
| + log_data_.write_failure_handler();
|
| }
|
| }
|
|
|
|
|