Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(239)

Side by Side Diff: src/log-utils.h

Issue 123012: Implement tick events compression in a log file. (Closed)
Patch Set: Created 11 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2006-2009 the V8 project authors. All rights reserved. 1 // Copyright 2006-2009 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 const char* seal_; 81 const char* seal_;
82 const int seal_size_; 82 const int seal_size_;
83 ScopedVector<char*> blocks_; 83 ScopedVector<char*> blocks_;
84 int write_pos_; 84 int write_pos_;
85 int block_index_; 85 int block_index_;
86 int block_write_pos_; 86 int block_write_pos_;
87 bool is_sealed_; 87 bool is_sealed_;
88 }; 88 };
89 89
90 90
91 // An utility class for performing backward reference compression
92 // of string ends. It operates using a window of previous strings.
93 class LogRecordCompressor {
94 public:
95 explicit LogRecordCompressor(int window_size_)
96 : buffer_(window_size_), curr_(-1), prev_(-1) {
97 // Must have place for the current record and the previous.
98 ASSERT(window_size_ >= 2);
99 }
100 ~LogRecordCompressor();
101
102 // Fills vector with a compressed version of the previous record.
103 // Returns false if there is no previous record.
104 bool RetrievePreviousCompressed(Vector<char>* prev_record);
105
106 // Stores a record if it differs from a previous one (or there's no previous).
107 // Returns true, if the record has been stored.
108 bool Store(const Vector<const char>& record);
109
110 private:
111 // Record field separator. It is assumed that it can't appear
112 // inside a field (a simplified version of CSV format).
113 static const char kFieldSeparator = ',';
114
115 // Formatting string for back references.
116 static const char* kBackwardReferenceFormat;
117
118 // A boundary value. If current record only differs in
119 // kUncompressibleBound chars, don't compress it.
120 // The value must be greater than the length of maximum
121 // projected backward reference length.
122 static const intptr_t kUncompressibleBound = 10;
123
124 ScopedVector< Vector<const char> > buffer_;
125 int curr_;
126 int prev_;
127 };
128
129
91 // Functions and data for performing output of log messages. 130 // Functions and data for performing output of log messages.
92 class Log : public AllStatic { 131 class Log : public AllStatic {
93 public: 132 public:
94 // Opens stdout for logging. 133 // Opens stdout for logging.
95 static void OpenStdout(); 134 static void OpenStdout();
96 135
97 // Opens file for logging. 136 // Opens file for logging.
98 static void OpenFile(const char* name); 137 static void OpenFile(const char* name);
99 138
100 // Opens memory buffer for logging. 139 // Opens memory buffer for logging.
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
162 // access to the formatting buffer and the log file or log memory buffer. 201 // access to the formatting buffer and the log file or log memory buffer.
163 static Mutex* mutex_; 202 static Mutex* mutex_;
164 203
165 // Size of buffer used for formatting log messages. 204 // Size of buffer used for formatting log messages.
166 static const int kMessageBufferSize = 2048; 205 static const int kMessageBufferSize = 2048;
167 206
168 // Buffer used for formatting log messages. This is a singleton buffer and 207 // Buffer used for formatting log messages. This is a singleton buffer and
169 // mutex_ should be acquired before using it. 208 // mutex_ should be acquired before using it.
170 static char* message_buffer_; 209 static char* message_buffer_;
171 210
211 // Size of buffer used for record compression.
212 static const int kRecordCompressorWindow = 6;
213
214 // An utility object for compressing repeated parts of records.
215 static LogRecordCompressor* record_compressor_;
216
172 friend class LogMessageBuilder; 217 friend class LogMessageBuilder;
173 }; 218 };
174 219
175 220
176 // Utility class for formatting log messages. It fills the message into the 221 // Utility class for formatting log messages. It fills the message into the
177 // static buffer in Log. 222 // static buffer in Log.
178 class LogMessageBuilder BASE_EMBEDDED { 223 class LogMessageBuilder BASE_EMBEDDED {
179 public: 224 public:
180 // Create a message builder starting from position 0. This acquires the mutex 225 // Create a message builder starting from position 0. This acquires the mutex
181 // in the log as well. 226 // in the log as well.
182 explicit LogMessageBuilder(); 227 explicit LogMessageBuilder();
183 ~LogMessageBuilder() { } 228 ~LogMessageBuilder() { }
184 229
185 // Append string data to the log message. 230 // Append string data to the log message.
186 void Append(const char* format, ...); 231 void Append(const char* format, ...);
187 232
188 // Append string data to the log message. 233 // Append string data to the log message.
189 void Append(const char* format, va_list args); 234 void Append(const char* format, va_list args);
190 235
191 // Append a character to the log message. 236 // Append a character to the log message.
192 void Append(const char c); 237 void Append(const char c);
193 238
194 // Append a heap string. 239 // Append a heap string.
195 void Append(String* str); 240 void Append(String* str);
196 241
197 void AppendDetailed(String* str, bool show_impl_info); 242 void AppendDetailed(String* str, bool show_impl_info);
198 243
244 // Stores log message into compressor, returns true if the message
245 // was stored (i.e. doesn't repeat the previous one). If log compression is
246 // disabled, does nothing and returns true.
247 bool StoreInCompressor();
248
249 // Sets log message to a previous version of compressed message.
250 // Returns false, if there is no previous message. If log compression
251 // is disabled, does nothing and retuns true.
252 bool RetrieveCompressedPrevious() { return RetrieveCompressedPrevious(""); }
253
254 // Does the same at the version without arguments, and sets a prefix.
255 bool RetrieveCompressedPrevious(const char* prefix);
256
199 // Write the log message to the log file currently opened. 257 // Write the log message to the log file currently opened.
200 void WriteToLogFile(); 258 void WriteToLogFile();
201 259
202 // Write a null-terminated string to to the log file currently opened. 260 // Write a null-terminated string to to the log file currently opened.
203 void WriteCStringToLogFile(const char* str); 261 void WriteCStringToLogFile(const char* str);
204 262
205 // A handler that is called when Log::Write fails. 263 // A handler that is called when Log::Write fails.
206 typedef void (*WriteFailureHandler)(); 264 typedef void (*WriteFailureHandler)();
207 265
208 static void set_write_failure_handler(WriteFailureHandler handler) { 266 static void set_write_failure_handler(WriteFailureHandler handler) {
209 write_failure_handler = handler; 267 write_failure_handler = handler;
210 } 268 }
211 269
212 private: 270 private:
213 static WriteFailureHandler write_failure_handler; 271 static WriteFailureHandler write_failure_handler;
214 272
215 ScopedLock sl; 273 ScopedLock sl;
216 int pos_; 274 int pos_;
217 }; 275 };
218 276
219 #endif // ENABLE_LOGGING_AND_PROFILING 277 #endif // ENABLE_LOGGING_AND_PROFILING
220 278
221 } } // namespace v8::internal 279 } } // namespace v8::internal
222 280
223 #endif // V8_LOG_UTILS_H_ 281 #endif // V8_LOG_UTILS_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698