1755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org// Copyright 2009 the V8 project authors. All rights reserved. 23484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// Use of this source code is governed by a BSD-style license that can be 33484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// found in the LICENSE file. 4755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org 5196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/v8.h" 6755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org 7196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/log-utils.h" 8196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/string-stream.h" 9755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org 10755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.orgnamespace v8 { 11755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.orgnamespace internal { 12755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org 13755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org 147c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.orgconst char* const Log::kLogToTemporaryFile = "&"; 1510480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.orgconst char* const Log::kLogToConsole = "-"; 16755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org 17755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org 18ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgLog::Log(Logger* logger) 19030d38ee536bc25856546e75fdac60d1a0c42bddwhesse@chromium.org : is_stopped_(false), 20ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org output_handle_(NULL), 21ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org message_buffer_(NULL), 22ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org logger_(logger) { 23ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org} 24ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 25ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 2610480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.orgvoid Log::Initialize(const char* log_file_name) { 27755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org message_buffer_ = NewArray<char>(kMessageBufferSize); 28ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 29ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org // --log-all enables all the log flags. 30ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org if (FLAG_log_all) { 31ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org FLAG_log_api = true; 32ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org FLAG_log_code = true; 33ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org FLAG_log_gc = true; 34ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org FLAG_log_suspect = true; 35ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org FLAG_log_handles = true; 36ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org FLAG_log_regexp = true; 3732280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org FLAG_log_internal_timer_events = true; 38ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } 39ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 40ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org // --prof implies --log-code. 41ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org if (FLAG_prof) FLAG_log_code = true; 42ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 43ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org // If we're logging anything, we need to open the log file. 44ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org if (Log::InitLogAtStart()) { 4510480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org if (strcmp(log_file_name, kLogToConsole) == 0) { 46ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org OpenStdout(); 4710480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org } else if (strcmp(log_file_name, kLogToTemporaryFile) == 0) { 48030d38ee536bc25856546e75fdac60d1a0c42bddwhesse@chromium.org OpenTemporaryFile(); 49030d38ee536bc25856546e75fdac60d1a0c42bddwhesse@chromium.org } else { 5010480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org OpenFile(log_file_name); 51ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } 52ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } 53755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org} 54755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org 55755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org 56755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.orgvoid Log::OpenStdout() { 57e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(!IsEnabled()); 58755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org output_handle_ = stdout; 59030d38ee536bc25856546e75fdac60d1a0c42bddwhesse@chromium.org} 60030d38ee536bc25856546e75fdac60d1a0c42bddwhesse@chromium.org 61030d38ee536bc25856546e75fdac60d1a0c42bddwhesse@chromium.org 62030d38ee536bc25856546e75fdac60d1a0c42bddwhesse@chromium.orgvoid Log::OpenTemporaryFile() { 63e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(!IsEnabled()); 645de0074a922429f5e0ec2cf140c2d2989bf88140yangguo@chromium.org output_handle_ = base::OS::OpenTemporaryFile(); 65755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org} 66755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org 67755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org 68755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.orgvoid Log::OpenFile(const char* name) { 69e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(!IsEnabled()); 705de0074a922429f5e0ec2cf140c2d2989bf88140yangguo@chromium.org output_handle_ = base::OS::FOpen(name, base::OS::LogFileOpenMode); 71755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org} 72755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org 73755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org 74030d38ee536bc25856546e75fdac60d1a0c42bddwhesse@chromium.orgFILE* Log::Close() { 75030d38ee536bc25856546e75fdac60d1a0c42bddwhesse@chromium.org FILE* result = NULL; 76030d38ee536bc25856546e75fdac60d1a0c42bddwhesse@chromium.org if (output_handle_ != NULL) { 77030d38ee536bc25856546e75fdac60d1a0c42bddwhesse@chromium.org if (strcmp(FLAG_logfile, kLogToTemporaryFile) != 0) { 78030d38ee536bc25856546e75fdac60d1a0c42bddwhesse@chromium.org fclose(output_handle_); 79030d38ee536bc25856546e75fdac60d1a0c42bddwhesse@chromium.org } else { 80030d38ee536bc25856546e75fdac60d1a0c42bddwhesse@chromium.org result = output_handle_; 81030d38ee536bc25856546e75fdac60d1a0c42bddwhesse@chromium.org } 82755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org } 83030d38ee536bc25856546e75fdac60d1a0c42bddwhesse@chromium.org output_handle_ = NULL; 84755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org 85eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org DeleteArray(message_buffer_); 86eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org message_buffer_ = NULL; 87eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 88755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org is_stopped_ = false; 89030d38ee536bc25856546e75fdac60d1a0c42bddwhesse@chromium.org return result; 90755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org} 91755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org 92755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org 93ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.orgLog::MessageBuilder::MessageBuilder(Log* log) 94ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org : log_(log), 95dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org lock_guard_(&log_->mutex_), 96ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org pos_(0) { 97e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(log_->message_buffer_ != NULL); 98755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org} 99755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org 100755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org 101ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.orgvoid Log::MessageBuilder::Append(const char* format, ...) { 102ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org Vector<char> buf(log_->message_buffer_ + pos_, 103755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org Log::kMessageBufferSize - pos_); 104755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org va_list args; 105755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org va_start(args, format); 106eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org AppendVA(format, args); 107755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org va_end(args); 108e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(pos_ <= Log::kMessageBufferSize); 109755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org} 110755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org 111755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org 112ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.orgvoid Log::MessageBuilder::AppendVA(const char* format, va_list args) { 113ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org Vector<char> buf(log_->message_buffer_ + pos_, 114755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org Log::kMessageBufferSize - pos_); 11570ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org int result = v8::internal::VSNPrintF(buf, format, args); 116755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org 117755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org // Result is -1 if output was truncated. 118755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org if (result >= 0) { 119755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org pos_ += result; 120755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org } else { 121755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org pos_ = Log::kMessageBufferSize; 122755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org } 123e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(pos_ <= Log::kMessageBufferSize); 124755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org} 125755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org 126755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org 127ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.orgvoid Log::MessageBuilder::Append(const char c) { 128755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org if (pos_ < Log::kMessageBufferSize) { 129ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org log_->message_buffer_[pos_++] = c; 130755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org } 131e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(pos_ <= Log::kMessageBufferSize); 132755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org} 133755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org 134755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org 135ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.orgvoid Log::MessageBuilder::AppendDoubleQuotedString(const char* string) { 1361510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org Append('"'); 1371510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org for (const char* p = string; *p != '\0'; p++) { 1381510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org if (*p == '"') { 1391510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org Append('\\'); 1401510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org } 1411510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org Append(*p); 1421510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org } 1431510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org Append('"'); 1441510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org} 1451510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 1461510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 147ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.orgvoid Log::MessageBuilder::Append(String* str) { 14879e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org DisallowHeapAllocation no_gc; // Ensure string stay valid. 149755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org int length = str->length(); 150755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org for (int i = 0; i < length; i++) { 151755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org Append(static_cast<char>(str->Get(i))); 152755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org } 153755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org} 154755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org 155755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org 156ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.orgvoid Log::MessageBuilder::AppendAddress(Address addr) { 1575f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org Append("0x%" V8PRIxPTR, addr); 158eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org} 159eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 160eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 161ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.orgvoid Log::MessageBuilder::AppendSymbolName(Symbol* symbol) { 162e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(symbol); 163ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org Append("symbol("); 164ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org if (!symbol->name()->IsUndefined()) { 165ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org Append("\""); 166ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org AppendDetailed(String::cast(symbol->name()), false); 167ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org Append("\" "); 168ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org } 169ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org Append("hash %x)", symbol->Hash()); 170ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org} 171ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org 172ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org 173ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.orgvoid Log::MessageBuilder::AppendDetailed(String* str, bool show_impl_info) { 1748e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org if (str == NULL) return; 17579e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org DisallowHeapAllocation no_gc; // Ensure string stay valid. 176755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org int len = str->length(); 177755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org if (len > 0x1000) 178755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org len = 0x1000; 179755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org if (show_impl_info) { 1808e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org Append(str->IsOneByteRepresentation() ? 'a' : '2'); 181755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org if (StringShape(str).IsExternal()) 182755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org Append('e'); 1834a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org if (StringShape(str).IsInternalized()) 184755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org Append('#'); 185755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org Append(":%i:", str->length()); 186755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org } 187755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org for (int i = 0; i < len; i++) { 188755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org uc32 c = str->Get(i); 189755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org if (c > 0xff) { 190755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org Append("\\u%04x", c); 191755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org } else if (c < 32 || c > 126) { 192755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org Append("\\x%02x", c); 193755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org } else if (c == ',') { 194755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org Append("\\,"); 195755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org } else if (c == '\\') { 196755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org Append("\\\\"); 1973a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org } else if (c == '\"') { 1983a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org Append("\"\""); 199755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org } else { 200755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org Append("%lc", c); 201755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org } 202755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org } 203755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org} 204755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org 205755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org 206ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.orgvoid Log::MessageBuilder::AppendStringPart(const char* str, int len) { 2072bc58ef330b2d92ba287754282872699c151db4achristian.plesner.hansen@gmail.com if (pos_ + len > Log::kMessageBufferSize) { 2082bc58ef330b2d92ba287754282872699c151db4achristian.plesner.hansen@gmail.com len = Log::kMessageBufferSize - pos_; 209e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(len >= 0); 2102bc58ef330b2d92ba287754282872699c151db4achristian.plesner.hansen@gmail.com if (len == 0) return; 2112bc58ef330b2d92ba287754282872699c151db4achristian.plesner.hansen@gmail.com } 212ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org Vector<char> buf(log_->message_buffer_ + pos_, 2132bc58ef330b2d92ba287754282872699c151db4achristian.plesner.hansen@gmail.com Log::kMessageBufferSize - pos_); 21470ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org StrNCpy(buf, str, len); 2152bc58ef330b2d92ba287754282872699c151db4achristian.plesner.hansen@gmail.com pos_ += len; 216e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(pos_ <= Log::kMessageBufferSize); 2172bc58ef330b2d92ba287754282872699c151db4achristian.plesner.hansen@gmail.com} 2182bc58ef330b2d92ba287754282872699c151db4achristian.plesner.hansen@gmail.com 2192bc58ef330b2d92ba287754282872699c151db4achristian.plesner.hansen@gmail.com 220ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.orgvoid Log::MessageBuilder::WriteToLogFile() { 221e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(pos_ <= Log::kMessageBufferSize); 2229bf7aff6cc5ed8807b7b2abc11b6cf77b928ded1machenbach@chromium.org // Assert that we do not already have a new line at the end. 223e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(pos_ == 0 || log_->message_buffer_[pos_ - 1] != '\n'); 2249bf7aff6cc5ed8807b7b2abc11b6cf77b928ded1machenbach@chromium.org if (pos_ == Log::kMessageBufferSize) pos_--; 2259bf7aff6cc5ed8807b7b2abc11b6cf77b928ded1machenbach@chromium.org log_->message_buffer_[pos_++] = '\n'; 226030d38ee536bc25856546e75fdac60d1a0c42bddwhesse@chromium.org const int written = log_->WriteToFile(log_->message_buffer_, pos_); 227ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org if (written != pos_) { 228ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org log_->stop(); 229ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org log_->logger_->LogFailure(); 230755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org } 231755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org} 232755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org 233ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 234755c5b1cc880bc54405d2652f934a941e8fcda4asgjesse@chromium.org} } // namespace v8::internal 235