OLD | NEW |
1 // Copyright 2009 the V8 project authors. All rights reserved. | 1 // Copyright 2009 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #include "src/log-utils.h" | 7 #include "src/log-utils.h" |
8 #include "src/string-stream.h" | 8 #include "src/string-stream.h" |
9 | 9 |
10 namespace v8 { | 10 namespace v8 { |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
47 } else if (strcmp(log_file_name, kLogToTemporaryFile) == 0) { | 47 } else if (strcmp(log_file_name, kLogToTemporaryFile) == 0) { |
48 OpenTemporaryFile(); | 48 OpenTemporaryFile(); |
49 } else { | 49 } else { |
50 OpenFile(log_file_name); | 50 OpenFile(log_file_name); |
51 } | 51 } |
52 } | 52 } |
53 } | 53 } |
54 | 54 |
55 | 55 |
56 void Log::OpenStdout() { | 56 void Log::OpenStdout() { |
57 ASSERT(!IsEnabled()); | 57 DCHECK(!IsEnabled()); |
58 output_handle_ = stdout; | 58 output_handle_ = stdout; |
59 } | 59 } |
60 | 60 |
61 | 61 |
62 void Log::OpenTemporaryFile() { | 62 void Log::OpenTemporaryFile() { |
63 ASSERT(!IsEnabled()); | 63 DCHECK(!IsEnabled()); |
64 output_handle_ = base::OS::OpenTemporaryFile(); | 64 output_handle_ = base::OS::OpenTemporaryFile(); |
65 } | 65 } |
66 | 66 |
67 | 67 |
68 void Log::OpenFile(const char* name) { | 68 void Log::OpenFile(const char* name) { |
69 ASSERT(!IsEnabled()); | 69 DCHECK(!IsEnabled()); |
70 output_handle_ = base::OS::FOpen(name, base::OS::LogFileOpenMode); | 70 output_handle_ = base::OS::FOpen(name, base::OS::LogFileOpenMode); |
71 } | 71 } |
72 | 72 |
73 | 73 |
74 FILE* Log::Close() { | 74 FILE* Log::Close() { |
75 FILE* result = NULL; | 75 FILE* result = NULL; |
76 if (output_handle_ != NULL) { | 76 if (output_handle_ != NULL) { |
77 if (strcmp(FLAG_logfile, kLogToTemporaryFile) != 0) { | 77 if (strcmp(FLAG_logfile, kLogToTemporaryFile) != 0) { |
78 fclose(output_handle_); | 78 fclose(output_handle_); |
79 } else { | 79 } else { |
80 result = output_handle_; | 80 result = output_handle_; |
81 } | 81 } |
82 } | 82 } |
83 output_handle_ = NULL; | 83 output_handle_ = NULL; |
84 | 84 |
85 DeleteArray(message_buffer_); | 85 DeleteArray(message_buffer_); |
86 message_buffer_ = NULL; | 86 message_buffer_ = NULL; |
87 | 87 |
88 is_stopped_ = false; | 88 is_stopped_ = false; |
89 return result; | 89 return result; |
90 } | 90 } |
91 | 91 |
92 | 92 |
93 Log::MessageBuilder::MessageBuilder(Log* log) | 93 Log::MessageBuilder::MessageBuilder(Log* log) |
94 : log_(log), | 94 : log_(log), |
95 lock_guard_(&log_->mutex_), | 95 lock_guard_(&log_->mutex_), |
96 pos_(0) { | 96 pos_(0) { |
97 ASSERT(log_->message_buffer_ != NULL); | 97 DCHECK(log_->message_buffer_ != NULL); |
98 } | 98 } |
99 | 99 |
100 | 100 |
101 void Log::MessageBuilder::Append(const char* format, ...) { | 101 void Log::MessageBuilder::Append(const char* format, ...) { |
102 Vector<char> buf(log_->message_buffer_ + pos_, | 102 Vector<char> buf(log_->message_buffer_ + pos_, |
103 Log::kMessageBufferSize - pos_); | 103 Log::kMessageBufferSize - pos_); |
104 va_list args; | 104 va_list args; |
105 va_start(args, format); | 105 va_start(args, format); |
106 AppendVA(format, args); | 106 AppendVA(format, args); |
107 va_end(args); | 107 va_end(args); |
108 ASSERT(pos_ <= Log::kMessageBufferSize); | 108 DCHECK(pos_ <= Log::kMessageBufferSize); |
109 } | 109 } |
110 | 110 |
111 | 111 |
112 void Log::MessageBuilder::AppendVA(const char* format, va_list args) { | 112 void Log::MessageBuilder::AppendVA(const char* format, va_list args) { |
113 Vector<char> buf(log_->message_buffer_ + pos_, | 113 Vector<char> buf(log_->message_buffer_ + pos_, |
114 Log::kMessageBufferSize - pos_); | 114 Log::kMessageBufferSize - pos_); |
115 int result = v8::internal::VSNPrintF(buf, format, args); | 115 int result = v8::internal::VSNPrintF(buf, format, args); |
116 | 116 |
117 // Result is -1 if output was truncated. | 117 // Result is -1 if output was truncated. |
118 if (result >= 0) { | 118 if (result >= 0) { |
119 pos_ += result; | 119 pos_ += result; |
120 } else { | 120 } else { |
121 pos_ = Log::kMessageBufferSize; | 121 pos_ = Log::kMessageBufferSize; |
122 } | 122 } |
123 ASSERT(pos_ <= Log::kMessageBufferSize); | 123 DCHECK(pos_ <= Log::kMessageBufferSize); |
124 } | 124 } |
125 | 125 |
126 | 126 |
127 void Log::MessageBuilder::Append(const char c) { | 127 void Log::MessageBuilder::Append(const char c) { |
128 if (pos_ < Log::kMessageBufferSize) { | 128 if (pos_ < Log::kMessageBufferSize) { |
129 log_->message_buffer_[pos_++] = c; | 129 log_->message_buffer_[pos_++] = c; |
130 } | 130 } |
131 ASSERT(pos_ <= Log::kMessageBufferSize); | 131 DCHECK(pos_ <= Log::kMessageBufferSize); |
132 } | 132 } |
133 | 133 |
134 | 134 |
135 void Log::MessageBuilder::AppendDoubleQuotedString(const char* string) { | 135 void Log::MessageBuilder::AppendDoubleQuotedString(const char* string) { |
136 Append('"'); | 136 Append('"'); |
137 for (const char* p = string; *p != '\0'; p++) { | 137 for (const char* p = string; *p != '\0'; p++) { |
138 if (*p == '"') { | 138 if (*p == '"') { |
139 Append('\\'); | 139 Append('\\'); |
140 } | 140 } |
141 Append(*p); | 141 Append(*p); |
(...skipping 10 matching lines...) Expand all Loading... |
152 } | 152 } |
153 } | 153 } |
154 | 154 |
155 | 155 |
156 void Log::MessageBuilder::AppendAddress(Address addr) { | 156 void Log::MessageBuilder::AppendAddress(Address addr) { |
157 Append("0x%" V8PRIxPTR, addr); | 157 Append("0x%" V8PRIxPTR, addr); |
158 } | 158 } |
159 | 159 |
160 | 160 |
161 void Log::MessageBuilder::AppendSymbolName(Symbol* symbol) { | 161 void Log::MessageBuilder::AppendSymbolName(Symbol* symbol) { |
162 ASSERT(symbol); | 162 DCHECK(symbol); |
163 Append("symbol("); | 163 Append("symbol("); |
164 if (!symbol->name()->IsUndefined()) { | 164 if (!symbol->name()->IsUndefined()) { |
165 Append("\""); | 165 Append("\""); |
166 AppendDetailed(String::cast(symbol->name()), false); | 166 AppendDetailed(String::cast(symbol->name()), false); |
167 Append("\" "); | 167 Append("\" "); |
168 } | 168 } |
169 Append("hash %x)", symbol->Hash()); | 169 Append("hash %x)", symbol->Hash()); |
170 } | 170 } |
171 | 171 |
172 | 172 |
(...skipping 26 matching lines...) Expand all Loading... |
199 } else { | 199 } else { |
200 Append("%lc", c); | 200 Append("%lc", c); |
201 } | 201 } |
202 } | 202 } |
203 } | 203 } |
204 | 204 |
205 | 205 |
206 void Log::MessageBuilder::AppendStringPart(const char* str, int len) { | 206 void Log::MessageBuilder::AppendStringPart(const char* str, int len) { |
207 if (pos_ + len > Log::kMessageBufferSize) { | 207 if (pos_ + len > Log::kMessageBufferSize) { |
208 len = Log::kMessageBufferSize - pos_; | 208 len = Log::kMessageBufferSize - pos_; |
209 ASSERT(len >= 0); | 209 DCHECK(len >= 0); |
210 if (len == 0) return; | 210 if (len == 0) return; |
211 } | 211 } |
212 Vector<char> buf(log_->message_buffer_ + pos_, | 212 Vector<char> buf(log_->message_buffer_ + pos_, |
213 Log::kMessageBufferSize - pos_); | 213 Log::kMessageBufferSize - pos_); |
214 StrNCpy(buf, str, len); | 214 StrNCpy(buf, str, len); |
215 pos_ += len; | 215 pos_ += len; |
216 ASSERT(pos_ <= Log::kMessageBufferSize); | 216 DCHECK(pos_ <= Log::kMessageBufferSize); |
217 } | 217 } |
218 | 218 |
219 | 219 |
220 void Log::MessageBuilder::WriteToLogFile() { | 220 void Log::MessageBuilder::WriteToLogFile() { |
221 ASSERT(pos_ <= Log::kMessageBufferSize); | 221 DCHECK(pos_ <= Log::kMessageBufferSize); |
222 // Assert that we do not already have a new line at the end. | 222 // Assert that we do not already have a new line at the end. |
223 ASSERT(pos_ == 0 || log_->message_buffer_[pos_ - 1] != '\n'); | 223 DCHECK(pos_ == 0 || log_->message_buffer_[pos_ - 1] != '\n'); |
224 if (pos_ == Log::kMessageBufferSize) pos_--; | 224 if (pos_ == Log::kMessageBufferSize) pos_--; |
225 log_->message_buffer_[pos_++] = '\n'; | 225 log_->message_buffer_[pos_++] = '\n'; |
226 const int written = log_->WriteToFile(log_->message_buffer_, pos_); | 226 const int written = log_->WriteToFile(log_->message_buffer_, pos_); |
227 if (written != pos_) { | 227 if (written != pos_) { |
228 log_->stop(); | 228 log_->stop(); |
229 log_->logger_->LogFailure(); | 229 log_->logger_->LogFailure(); |
230 } | 230 } |
231 } | 231 } |
232 | 232 |
233 | 233 |
234 } } // namespace v8::internal | 234 } } // namespace v8::internal |
OLD | NEW |