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

Side by Side Diff: src/log.cc

Issue 56064: Fixed numerous issues that were causing errors in profiler log processing (Closed)
Patch Set: Updated according to Soeren's comments Created 11 years, 8 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
« no previous file with comments | « src/log.h ('k') | src/platform.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2009 the V8 project authors. All rights reserved. 1 // Copyright 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 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 explicit LogMessageBuilder(); 292 explicit LogMessageBuilder();
293 ~LogMessageBuilder() { } 293 ~LogMessageBuilder() { }
294 294
295 void Append(const char* format, ...); 295 void Append(const char* format, ...);
296 void Append(const char* format, va_list args); 296 void Append(const char* format, va_list args);
297 void Append(const char c); 297 void Append(const char c);
298 void Append(String *str); 298 void Append(String *str);
299 void AppendDetailed(String* str, bool show_impl_info); 299 void AppendDetailed(String* str, bool show_impl_info);
300 300
301 void WriteToLogFile(); 301 void WriteToLogFile();
302 void WriteCStringToLogFile(const char* str);
302 303
303 private: 304 private:
304 ScopedLock sl; 305 ScopedLock sl;
305 int pos_; 306 int pos_;
306 }; 307 };
307 308
308 309
309 // Create a message builder starting from position 0. This acquires the mutex 310 // Create a message builder starting from position 0. This acquires the mutex
310 // in the logger as well. 311 // in the logger as well.
311 LogMessageBuilder::LogMessageBuilder(): sl(Logger::mutex_), pos_(0) { 312 LogMessageBuilder::LogMessageBuilder(): sl(Logger::mutex_), pos_(0) {
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 } 389 }
389 } 390 }
390 391
391 // Write the log message to the log file currently opened. 392 // Write the log message to the log file currently opened.
392 void LogMessageBuilder::WriteToLogFile() { 393 void LogMessageBuilder::WriteToLogFile() {
393 ASSERT(pos_ <= Logger::kMessageBufferSize); 394 ASSERT(pos_ <= Logger::kMessageBufferSize);
394 size_t rv = fwrite(Logger::message_buffer_, 1, pos_, Logger::logfile_); 395 size_t rv = fwrite(Logger::message_buffer_, 1, pos_, Logger::logfile_);
395 ASSERT(rv == static_cast<size_t>(pos_)); 396 ASSERT(rv == static_cast<size_t>(pos_));
396 USE(rv); 397 USE(rv);
397 } 398 }
399
400 // Write a null-terminated string to to the log file currently opened.
401 void LogMessageBuilder::WriteCStringToLogFile(const char* str) {
402 size_t len = strlen(str);
403 size_t rv = fwrite(str, 1, len, Logger::logfile_);
404 ASSERT(rv == len);
405 USE(rv);
406 }
398 #endif 407 #endif
399 408
400 409
401 // 410 //
402 // Logger class implementation. 411 // Logger class implementation.
403 // 412 //
404 Ticker* Logger::ticker_ = NULL; 413 Ticker* Logger::ticker_ = NULL;
405 char* Logger::message_buffer_ = NULL; 414 char* Logger::message_buffer_ = NULL;
406 FILE* Logger::logfile_ = NULL; 415 FILE* Logger::logfile_ = NULL;
407 Profiler* Logger::profiler_ = NULL; 416 Profiler* Logger::profiler_ = NULL;
408 Mutex* Logger::mutex_ = NULL; 417 Mutex* Logger::mutex_ = NULL;
409 VMState* Logger::current_state_ = NULL; 418 VMState* Logger::current_state_ = NULL;
410 VMState Logger::bottom_state_(EXTERNAL); 419 VMState Logger::bottom_state_(EXTERNAL);
411 SlidingStateWindow* Logger::sliding_state_window_ = NULL; 420 SlidingStateWindow* Logger::sliding_state_window_ = NULL;
412 421
413 #endif // ENABLE_LOGGING_AND_PROFILING 422 #endif // ENABLE_LOGGING_AND_PROFILING
414 423
415 424
416 void Logger::Preamble(const char* content) { 425 void Logger::Preamble(const char* content) {
417 #ifdef ENABLE_LOGGING_AND_PROFILING 426 #ifdef ENABLE_LOGGING_AND_PROFILING
418 if (logfile_ == NULL || !FLAG_log_code) return; 427 if (logfile_ == NULL || !FLAG_log_code) return;
419 LogMessageBuilder msg; 428 LogMessageBuilder msg;
420 msg.Append("%s", content); 429 msg.WriteCStringToLogFile(content);
421 msg.WriteToLogFile();
422 #endif 430 #endif
423 } 431 }
424 432
425 433
426 void Logger::StringEvent(const char* name, const char* value) { 434 void Logger::StringEvent(const char* name, const char* value) {
427 #ifdef ENABLE_LOGGING_AND_PROFILING 435 #ifdef ENABLE_LOGGING_AND_PROFILING
428 if (FLAG_log) UncheckedStringEvent(name, value); 436 if (FLAG_log) UncheckedStringEvent(name, value);
429 #endif 437 #endif
430 } 438 }
431 439
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after
751 LogMessageBuilder msg; 759 LogMessageBuilder msg;
752 msg.Append("code-creation,%s,0x%x,%d,\"args_count: %d\"\n", tag, 760 msg.Append("code-creation,%s,0x%x,%d,\"args_count: %d\"\n", tag,
753 reinterpret_cast<unsigned int>(code->address()), 761 reinterpret_cast<unsigned int>(code->address()),
754 code->ExecutableSize(), 762 code->ExecutableSize(),
755 args_count); 763 args_count);
756 msg.WriteToLogFile(); 764 msg.WriteToLogFile();
757 #endif 765 #endif
758 } 766 }
759 767
760 768
769 void Logger::RegExpCodeCreateEvent(Code* code, String* source) {
770 #ifdef ENABLE_LOGGING_AND_PROFILING
771 if (logfile_ == NULL || !FLAG_log_code) return;
772 LogMessageBuilder msg;
773 msg.Append("code-creation,%s,0x%x,%d,\"", "RegExp",
774 reinterpret_cast<unsigned int>(code->address()),
775 code->ExecutableSize());
776 msg.AppendDetailed(source, false);
777 msg.Append("\"\n");
778 msg.WriteToLogFile();
779 #endif
780 }
781
782
761 void Logger::CodeAllocateEvent(Code* code, Assembler* assem) { 783 void Logger::CodeAllocateEvent(Code* code, Assembler* assem) {
762 #ifdef ENABLE_LOGGING_AND_PROFILING 784 #ifdef ENABLE_LOGGING_AND_PROFILING
763 if (logfile_ == NULL || !FLAG_log_code) return; 785 if (logfile_ == NULL || !FLAG_log_code) return;
764 LogMessageBuilder msg; 786 LogMessageBuilder msg;
765 msg.Append("code-allocate,0x%x,0x%x\n", 787 msg.Append("code-allocate,0x%x,0x%x\n",
766 reinterpret_cast<unsigned int>(code->address()), 788 reinterpret_cast<unsigned int>(code->address()),
767 reinterpret_cast<unsigned int>(assem)); 789 reinterpret_cast<unsigned int>(assem));
768 msg.WriteToLogFile(); 790 msg.WriteToLogFile();
769 #endif 791 #endif
770 } 792 }
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
1003 // All other %'s expand to themselves. 1025 // All other %'s expand to themselves.
1004 stream.Put('%'); 1026 stream.Put('%');
1005 stream.Put(*p); 1027 stream.Put(*p);
1006 break; 1028 break;
1007 } 1029 }
1008 } else { 1030 } else {
1009 stream.Put(*p); 1031 stream.Put(*p);
1010 } 1032 }
1011 } 1033 }
1012 SmartPointer<const char> expanded = stream.ToCString(); 1034 SmartPointer<const char> expanded = stream.ToCString();
1013 logfile_ = OS::FOpen(*expanded, "w"); 1035 logfile_ = OS::FOpen(*expanded, OS::LogFileOpenMode);
1014 } else { 1036 } else {
1015 logfile_ = OS::FOpen(FLAG_logfile, "w"); 1037 logfile_ = OS::FOpen(FLAG_logfile, OS::LogFileOpenMode);
1016 } 1038 }
1017 message_buffer_ = NewArray<char>(kMessageBufferSize); 1039 message_buffer_ = NewArray<char>(kMessageBufferSize);
1018 mutex_ = OS::CreateMutex(); 1040 mutex_ = OS::CreateMutex();
1019 } 1041 }
1020 1042
1021 current_state_ = &bottom_state_; 1043 current_state_ = &bottom_state_;
1022 1044
1023 // as log is initialized early with V8, we can assume that JS execution 1045 // as log is initialized early with V8, we can assume that JS execution
1024 // frames can never reach this point on stack 1046 // frames can never reach this point on stack
1025 int stack_var; 1047 int stack_var;
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
1162 } else if (previous_->state_ == EXTERNAL) { 1184 } else if (previous_->state_ == EXTERNAL) {
1163 // We are leaving V8. 1185 // We are leaving V8.
1164 Heap::Protect(); 1186 Heap::Protect();
1165 } 1187 }
1166 } 1188 }
1167 #endif 1189 #endif
1168 } 1190 }
1169 #endif 1191 #endif
1170 1192
1171 } } // namespace v8::internal 1193 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/log.h ('k') | src/platform.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698