| Index: src/log-utils.h
|
| diff --git a/src/log-utils.h b/src/log-utils.h
|
| index af788d0ded57fb912d5b95927aa7282318d119f4..fe6f01cac65d194310583cf03327c7c5b77f6823 100644
|
| --- a/src/log-utils.h
|
| +++ b/src/log-utils.h
|
| @@ -88,48 +88,6 @@ class LogDynamicBuffer {
|
| };
|
|
|
|
|
| -// An utility class for performing backward reference compression
|
| -// of string ends. It operates using a window of previous strings.
|
| -class LogRecordCompressor {
|
| - public:
|
| - // 'window_size' is the size of backward lookup window.
|
| - // 'start_pos' is the length of string prefix that must be left uncompressed.
|
| - LogRecordCompressor(int window_size, int start_pos)
|
| - : buffer_(window_size), start_pos_(start_pos), curr_(-1), prev_(-1) {
|
| - // Must have place for the current record and the previous.
|
| - ASSERT(window_size >= 2);
|
| - }
|
| - ~LogRecordCompressor();
|
| -
|
| - // Fills vector with a compressed version of the previous record.
|
| - // Returns false if there is no previous record.
|
| - bool RetrievePreviousCompressed(Vector<char>* prev_record);
|
| -
|
| - // Stores a record if it differs from a previous one (or there's no previous).
|
| - // Returns true, if the record has been stored.
|
| - bool Store(const Vector<const char>& record);
|
| -
|
| - private:
|
| - // Record field separator. It is assumed that it can't appear
|
| - // inside a field (a simplified version of CSV format).
|
| - static const char kFieldSeparator = ',';
|
| -
|
| - // Formatting string for back references.
|
| - static const char* kBackwardReferenceFormat;
|
| -
|
| - // A boundary value. If current record only differs in
|
| - // kUncompressibleBound chars, don't compress it.
|
| - // The value must be greater than the length of maximum
|
| - // projected backward reference length.
|
| - static const intptr_t kUncompressibleBound = 10;
|
| -
|
| - ScopedVector< Vector<const char> > buffer_;
|
| - const int start_pos_;
|
| - int curr_;
|
| - int prev_;
|
| -};
|
| -
|
| -
|
| // Functions and data for performing output of log messages.
|
| class Log : public AllStatic {
|
| public:
|
| @@ -156,9 +114,6 @@ class Log : public AllStatic {
|
| return !is_stopped_ && (output_handle_ != NULL || output_buffer_ != NULL);
|
| }
|
|
|
| - // Size of buffer used for record compression.
|
| - static const int kRecordCompressorWindow = 6;
|
| -
|
| private:
|
| typedef int (*WritePtr)(const char* msg, int length);
|
|
|
| @@ -214,12 +169,51 @@ class Log : public AllStatic {
|
| // mutex_ should be acquired before using it.
|
| static char* message_buffer_;
|
|
|
| - // An utility object for compressing repeated parts of records.
|
| - static LogRecordCompressor* record_compressor_;
|
| + friend class LogMessageBuilder;
|
| + friend class LogRecordCompressor;
|
| +};
|
| +
|
|
|
| - static const char* kCompressedTickEventName;
|
| +// An utility class for performing backward reference compression
|
| +// of string ends. It operates using a window of previous strings.
|
| +class LogRecordCompressor {
|
| + public:
|
| + // 'window_size' is the size of backward lookup window.
|
| + explicit LogRecordCompressor(int window_size)
|
| + : buffer_(window_size + kNoCompressionWindowSize),
|
| + kMaxBackwardReferenceSize(
|
| + GetBackwardReferenceSize(window_size, Log::kMessageBufferSize)),
|
| + curr_(-1), prev_(-1) {
|
| + }
|
|
|
| - friend class LogMessageBuilder;
|
| + ~LogRecordCompressor();
|
| +
|
| + // Fills vector with a compressed version of the previous record.
|
| + // Returns false if there is no previous record.
|
| + bool RetrievePreviousCompressed(Vector<char>* prev_record);
|
| +
|
| + // Stores a record if it differs from a previous one (or there's no previous).
|
| + // Returns true, if the record has been stored.
|
| + bool Store(const Vector<const char>& record);
|
| +
|
| + private:
|
| + // The minimum size of a buffer: a place needed for the current and
|
| + // the previous record. Since there is no place for precedessors of a previous
|
| + // record, it can't be compressed at all.
|
| + static const int kNoCompressionWindowSize = 2;
|
| +
|
| + // Formatting strings for back references.
|
| + static const char* kLineBackwardReferenceFormat;
|
| + static const char* kBackwardReferenceFormat;
|
| +
|
| + static int GetBackwardReferenceSize(int distance, int pos);
|
| +
|
| + static void PrintBackwardReference(Vector<char> dest, int distance, int pos);
|
| +
|
| + ScopedVector< Vector<const char> > buffer_;
|
| + const int kMaxBackwardReferenceSize;
|
| + int curr_;
|
| + int prev_;
|
| };
|
|
|
|
|
| @@ -244,20 +238,28 @@ class LogMessageBuilder BASE_EMBEDDED {
|
| // Append a heap string.
|
| void Append(String* str);
|
|
|
| + // Appends an address, compressing it if needed by offsetting
|
| + // from Logger::last_address_.
|
| + void AppendAddress(Address addr);
|
| +
|
| + // Appends an address, compressing it if needed.
|
| + void AppendAddress(Address addr, Address bias);
|
| +
|
| void AppendDetailed(String* str, bool show_impl_info);
|
|
|
| // Stores log message into compressor, returns true if the message
|
| - // was stored (i.e. doesn't repeat the previous one). If log compression is
|
| - // disabled, does nothing and returns true.
|
| - bool StoreInCompressor();
|
| + // was stored (i.e. doesn't repeat the previous one).
|
| + bool StoreInCompressor(LogRecordCompressor* compressor);
|
|
|
| // Sets log message to a previous version of compressed message.
|
| - // Returns false, if there is no previous message. If log compression
|
| - // is disabled, does nothing and retuns true.
|
| - bool RetrieveCompressedPrevious() { return RetrieveCompressedPrevious(""); }
|
| + // Returns false, if there is no previous message.
|
| + bool RetrieveCompressedPrevious(LogRecordCompressor* compressor) {
|
| + return RetrieveCompressedPrevious(compressor, "");
|
| + }
|
|
|
| // Does the same at the version without arguments, and sets a prefix.
|
| - bool RetrieveCompressedPrevious(const char* prefix);
|
| + bool RetrieveCompressedPrevious(LogRecordCompressor* compressor,
|
| + const char* prefix);
|
|
|
| // Write the log message to the log file currently opened.
|
| void WriteToLogFile();
|
|
|