| Index: src/log-utils.cc
|
| diff --git a/src/log-utils.cc b/src/log-utils.cc
|
| index d6d8754b23e1a38e0bd1d5b583124464d8f54bae..c7b75679ea9ba2acb6f54b21b03c7a34610f4908 100644
|
| --- a/src/log-utils.cc
|
| +++ b/src/log-utils.cc
|
| @@ -273,29 +273,7 @@ void LogMessageBuilder::Append(String* str) {
|
|
|
|
|
| void LogMessageBuilder::AppendAddress(Address addr) {
|
| - static Address last_address_ = NULL;
|
| - AppendAddress(addr, last_address_);
|
| - last_address_ = addr;
|
| -}
|
| -
|
| -
|
| -void LogMessageBuilder::AppendAddress(Address addr, Address bias) {
|
| - if (!FLAG_compress_log) {
|
| - Append("0x%" V8PRIxPTR, addr);
|
| - } else if (bias == NULL) {
|
| - Append("%" V8PRIxPTR, addr);
|
| - } else {
|
| - uintptr_t delta;
|
| - char sign;
|
| - if (addr >= bias) {
|
| - delta = addr - bias;
|
| - sign = '+';
|
| - } else {
|
| - delta = bias - addr;
|
| - sign = '-';
|
| - }
|
| - Append("%c%" V8PRIxPTR, sign, delta);
|
| - }
|
| + Append("0x%" V8PRIxPTR, addr);
|
| }
|
|
|
|
|
| @@ -343,24 +321,6 @@ void LogMessageBuilder::AppendStringPart(const char* str, int len) {
|
| }
|
|
|
|
|
| -bool LogMessageBuilder::StoreInCompressor(LogRecordCompressor* compressor) {
|
| - return compressor->Store(Vector<const char>(Log::message_buffer_, pos_));
|
| -}
|
| -
|
| -
|
| -bool LogMessageBuilder::RetrieveCompressedPrevious(
|
| - LogRecordCompressor* compressor, const char* prefix) {
|
| - pos_ = 0;
|
| - if (prefix[0] != '\0') Append(prefix);
|
| - Vector<char> prev_record(Log::message_buffer_ + pos_,
|
| - Log::kMessageBufferSize - pos_);
|
| - const bool has_prev = compressor->RetrievePreviousCompressed(&prev_record);
|
| - if (!has_prev) return false;
|
| - pos_ += prev_record.length();
|
| - return true;
|
| -}
|
| -
|
| -
|
| void LogMessageBuilder::WriteToLogFile() {
|
| ASSERT(pos_ <= Log::kMessageBufferSize);
|
| const int written = Log::Write(Log::message_buffer_, pos_);
|
| @@ -369,145 +329,6 @@ void LogMessageBuilder::WriteToLogFile() {
|
| }
|
| }
|
|
|
| -
|
| -// Formatting string for back references to the whole line. E.g. "#2" means
|
| -// "the second line above".
|
| -const char* LogRecordCompressor::kLineBackwardReferenceFormat = "#%d";
|
| -
|
| -// Formatting string for back references. E.g. "#2:10" means
|
| -// "the second line above, start from char 10 (0-based)".
|
| -const char* LogRecordCompressor::kBackwardReferenceFormat = "#%d:%d";
|
| -
|
| -
|
| -LogRecordCompressor::~LogRecordCompressor() {
|
| - for (int i = 0; i < buffer_.length(); ++i) {
|
| - buffer_[i].Dispose();
|
| - }
|
| -}
|
| -
|
| -
|
| -static int GetNumberLength(int number) {
|
| - ASSERT(number >= 0);
|
| - ASSERT(number < 10000);
|
| - if (number < 10) return 1;
|
| - if (number < 100) return 2;
|
| - if (number < 1000) return 3;
|
| - return 4;
|
| -}
|
| -
|
| -
|
| -int LogRecordCompressor::GetBackwardReferenceSize(int distance, int pos) {
|
| - // See kLineBackwardReferenceFormat and kBackwardReferenceFormat.
|
| - return pos == 0 ? GetNumberLength(distance) + 1
|
| - : GetNumberLength(distance) + GetNumberLength(pos) + 2;
|
| -}
|
| -
|
| -
|
| -void LogRecordCompressor::PrintBackwardReference(Vector<char> dest,
|
| - int distance,
|
| - int pos) {
|
| - if (pos == 0) {
|
| - OS::SNPrintF(dest, kLineBackwardReferenceFormat, distance);
|
| - } else {
|
| - OS::SNPrintF(dest, kBackwardReferenceFormat, distance, pos);
|
| - }
|
| -}
|
| -
|
| -
|
| -bool LogRecordCompressor::Store(const Vector<const char>& record) {
|
| - // Check if the record is the same as the last stored one.
|
| - if (curr_ != -1) {
|
| - Vector<const char>& curr = buffer_[curr_];
|
| - if (record.length() == curr.length()
|
| - && strncmp(record.start(), curr.start(), record.length()) == 0) {
|
| - return false;
|
| - }
|
| - }
|
| - // buffer_ is circular.
|
| - prev_ = curr_++;
|
| - curr_ %= buffer_.length();
|
| - Vector<char> record_copy = Vector<char>::New(record.length());
|
| - memcpy(record_copy.start(), record.start(), record.length());
|
| - buffer_[curr_].Dispose();
|
| - buffer_[curr_] =
|
| - Vector<const char>(record_copy.start(), record_copy.length());
|
| - return true;
|
| -}
|
| -
|
| -
|
| -bool LogRecordCompressor::RetrievePreviousCompressed(
|
| - Vector<char>* prev_record) {
|
| - if (prev_ == -1) return false;
|
| -
|
| - int index = prev_;
|
| - // Distance from prev_.
|
| - int distance = 0;
|
| - // Best compression result among records in the buffer.
|
| - struct {
|
| - intptr_t truncated_len;
|
| - int distance;
|
| - int copy_from_pos;
|
| - int backref_size;
|
| - } best = {-1, 0, 0, 0};
|
| - Vector<const char>& prev = buffer_[prev_];
|
| - const char* const prev_start = prev.start();
|
| - const char* const prev_end = prev.start() + prev.length();
|
| - do {
|
| - // We're moving backwards until we reach the current record.
|
| - // Remember that buffer_ is circular.
|
| - if (--index == -1) index = buffer_.length() - 1;
|
| - ++distance;
|
| - if (index == curr_) break;
|
| -
|
| - Vector<const char>& data = buffer_[index];
|
| - if (data.start() == NULL) break;
|
| - const char* const data_end = data.start() + data.length();
|
| - const char* prev_ptr = prev_end;
|
| - const char* data_ptr = data_end;
|
| - // Compare strings backwards, stop on the last matching character.
|
| - while (prev_ptr != prev_start && data_ptr != data.start()
|
| - && *(prev_ptr - 1) == *(data_ptr - 1)) {
|
| - --prev_ptr;
|
| - --data_ptr;
|
| - }
|
| - const intptr_t truncated_len = prev_end - prev_ptr;
|
| - const int copy_from_pos = static_cast<int>(data_ptr - data.start());
|
| - // Check if the length of compressed tail is enough.
|
| - if (truncated_len <= kMaxBackwardReferenceSize
|
| - && truncated_len <= GetBackwardReferenceSize(distance, copy_from_pos)) {
|
| - continue;
|
| - }
|
| -
|
| - // Record compression results.
|
| - if (truncated_len > best.truncated_len) {
|
| - best.truncated_len = truncated_len;
|
| - best.distance = distance;
|
| - best.copy_from_pos = copy_from_pos;
|
| - best.backref_size = GetBackwardReferenceSize(distance, copy_from_pos);
|
| - }
|
| - } while (true);
|
| -
|
| - if (best.distance == 0) {
|
| - // Can't compress the previous record. Return as is.
|
| - ASSERT(prev_record->length() >= prev.length());
|
| - memcpy(prev_record->start(), prev.start(), prev.length());
|
| - prev_record->Truncate(prev.length());
|
| - } else {
|
| - // Copy the uncompressible part unchanged.
|
| - const intptr_t unchanged_len = prev.length() - best.truncated_len;
|
| - // + 1 for '\0'.
|
| - ASSERT(prev_record->length() >= unchanged_len + best.backref_size + 1);
|
| - memcpy(prev_record->start(), prev.start(), unchanged_len);
|
| - // Append the backward reference.
|
| - Vector<char> backref(
|
| - prev_record->start() + unchanged_len, best.backref_size + 1);
|
| - PrintBackwardReference(backref, best.distance, best.copy_from_pos);
|
| - ASSERT(strlen(backref.start()) - best.backref_size == 0);
|
| - prev_record->Truncate(static_cast<int>(unchanged_len + best.backref_size));
|
| - }
|
| - return true;
|
| -}
|
| -
|
| #endif // ENABLE_LOGGING_AND_PROFILING
|
|
|
| } } // namespace v8::internal
|
|
|