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

Side by Side Diff: src/log.cc

Issue 5862002: Version 3.0.2. (Closed)
Patch Set: Created 10 years 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
« ChangeLog ('K') | « src/log.h ('k') | src/log-utils.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 285 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 } 296 }
297 297
298 // Start thread processing the profiler buffer. 298 // Start thread processing the profiler buffer.
299 running_ = true; 299 running_ = true;
300 Start(); 300 Start();
301 301
302 // Register to get ticks. 302 // Register to get ticks.
303 Logger::ticker_->SetProfiler(this); 303 Logger::ticker_->SetProfiler(this);
304 304
305 Logger::ProfilerBeginEvent(); 305 Logger::ProfilerBeginEvent();
306 Logger::LogAliases();
306 } 307 }
307 308
308 309
309 void Profiler::Disengage() { 310 void Profiler::Disengage() {
310 if (!engaged_) return; 311 if (!engaged_) return;
311 312
312 // Stop receiving ticks. 313 // Stop receiving ticks.
313 Logger::ticker_->ClearProfiler(); 314 Logger::ticker_->ClearProfiler();
314 315
315 // Terminate the worker thread by setting running_ to false, 316 // Terminate the worker thread by setting running_ to false,
(...skipping 19 matching lines...) Expand all
335 } 336 }
336 } 337 }
337 338
338 339
339 // 340 //
340 // Logger class implementation. 341 // Logger class implementation.
341 // 342 //
342 Ticker* Logger::ticker_ = NULL; 343 Ticker* Logger::ticker_ = NULL;
343 Profiler* Logger::profiler_ = NULL; 344 Profiler* Logger::profiler_ = NULL;
344 SlidingStateWindow* Logger::sliding_state_window_ = NULL; 345 SlidingStateWindow* Logger::sliding_state_window_ = NULL;
346 const char** Logger::log_events_ = NULL;
347 CompressionHelper* Logger::compression_helper_ = NULL;
345 int Logger::logging_nesting_ = 0; 348 int Logger::logging_nesting_ = 0;
346 int Logger::cpu_profiler_nesting_ = 0; 349 int Logger::cpu_profiler_nesting_ = 0;
347 int Logger::heap_profiler_nesting_ = 0; 350 int Logger::heap_profiler_nesting_ = 0;
348 351
349 #define DECLARE_EVENT(ignore1, name) name, 352 #define DECLARE_LONG_EVENT(ignore1, long_name, ignore2) long_name,
350 const char* kLogEventsNames[Logger::NUMBER_OF_LOG_EVENTS] = { 353 const char* kLongLogEventsNames[Logger::NUMBER_OF_LOG_EVENTS] = {
351 LOG_EVENTS_AND_TAGS_LIST(DECLARE_EVENT) 354 LOG_EVENTS_AND_TAGS_LIST(DECLARE_LONG_EVENT)
352 }; 355 };
353 #undef DECLARE_EVENT 356 #undef DECLARE_LONG_EVENT
357
358 #define DECLARE_SHORT_EVENT(ignore1, ignore2, short_name) short_name,
359 const char* kCompressedLogEventsNames[Logger::NUMBER_OF_LOG_EVENTS] = {
360 LOG_EVENTS_AND_TAGS_LIST(DECLARE_SHORT_EVENT)
361 };
362 #undef DECLARE_SHORT_EVENT
354 363
355 364
356 void Logger::ProfilerBeginEvent() { 365 void Logger::ProfilerBeginEvent() {
357 if (!Log::IsEnabled()) return; 366 if (!Log::IsEnabled()) return;
358 LogMessageBuilder msg; 367 LogMessageBuilder msg;
359 msg.Append("profiler,\"begin\",%d\n", kSamplingIntervalMs); 368 msg.Append("profiler,\"begin\",%d\n", kSamplingIntervalMs);
369 if (FLAG_compress_log) {
370 msg.Append("profiler,\"compression\",%d\n", kCompressionWindowSize);
371 }
360 msg.WriteToLogFile(); 372 msg.WriteToLogFile();
361 } 373 }
362 374
375
376 void Logger::LogAliases() {
377 if (!Log::IsEnabled() || !FLAG_compress_log) return;
378 LogMessageBuilder msg;
379 for (int i = 0; i < NUMBER_OF_LOG_EVENTS; ++i) {
380 msg.Append("alias,%s,%s\n",
381 kCompressedLogEventsNames[i], kLongLogEventsNames[i]);
382 }
383 msg.WriteToLogFile();
384 }
385
363 #endif // ENABLE_LOGGING_AND_PROFILING 386 #endif // ENABLE_LOGGING_AND_PROFILING
364 387
365 388
366 void Logger::StringEvent(const char* name, const char* value) { 389 void Logger::StringEvent(const char* name, const char* value) {
367 #ifdef ENABLE_LOGGING_AND_PROFILING 390 #ifdef ENABLE_LOGGING_AND_PROFILING
368 if (FLAG_log) UncheckedStringEvent(name, value); 391 if (FLAG_log) UncheckedStringEvent(name, value);
369 #endif 392 #endif
370 } 393 }
371 394
372 395
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
657 #ifdef ENABLE_LOGGING_AND_PROFILING 680 #ifdef ENABLE_LOGGING_AND_PROFILING
658 if (!Log::IsEnabled() || !FLAG_log) return; 681 if (!Log::IsEnabled() || !FLAG_log) return;
659 LogMessageBuilder msg; 682 LogMessageBuilder msg;
660 msg.Append("delete,%s,0x%" V8PRIxPTR "\n", name, object); 683 msg.Append("delete,%s,0x%" V8PRIxPTR "\n", name, object);
661 msg.WriteToLogFile(); 684 msg.WriteToLogFile();
662 #endif 685 #endif
663 } 686 }
664 687
665 688
666 #ifdef ENABLE_LOGGING_AND_PROFILING 689 #ifdef ENABLE_LOGGING_AND_PROFILING
690
691 // A class that contains all common code dealing with record compression.
692 class CompressionHelper {
693 public:
694 explicit CompressionHelper(int window_size)
695 : compressor_(window_size), repeat_count_(0) { }
696
697 // Handles storing message in compressor, retrieving the previous one and
698 // prefixing it with repeat count, if needed.
699 // Returns true if message needs to be written to log.
700 bool HandleMessage(LogMessageBuilder* msg) {
701 if (!msg->StoreInCompressor(&compressor_)) {
702 // Current message repeats the previous one, don't write it.
703 ++repeat_count_;
704 return false;
705 }
706 if (repeat_count_ == 0) {
707 return msg->RetrieveCompressedPrevious(&compressor_);
708 }
709 OS::SNPrintF(prefix_, "%s,%d,",
710 Logger::log_events_[Logger::REPEAT_META_EVENT],
711 repeat_count_ + 1);
712 repeat_count_ = 0;
713 return msg->RetrieveCompressedPrevious(&compressor_, prefix_.start());
714 }
715
716 private:
717 LogRecordCompressor compressor_;
718 int repeat_count_;
719 EmbeddedVector<char, 20> prefix_;
720 };
721
722 #endif // ENABLE_LOGGING_AND_PROFILING
723
724
725 #ifdef ENABLE_LOGGING_AND_PROFILING
667 void Logger::CallbackEventInternal(const char* prefix, const char* name, 726 void Logger::CallbackEventInternal(const char* prefix, const char* name,
668 Address entry_point) { 727 Address entry_point) {
669 if (!Log::IsEnabled() || !FLAG_log_code) return; 728 if (!Log::IsEnabled() || !FLAG_log_code) return;
670 LogMessageBuilder msg; 729 LogMessageBuilder msg;
671 msg.Append("%s,%s,", 730 msg.Append("%s,%s,",
672 kLogEventsNames[CODE_CREATION_EVENT], 731 log_events_[CODE_CREATION_EVENT], log_events_[CALLBACK_TAG]);
673 kLogEventsNames[CALLBACK_TAG]);
674 msg.AppendAddress(entry_point); 732 msg.AppendAddress(entry_point);
675 msg.Append(",1,\"%s%s\"", prefix, name); 733 msg.Append(",1,\"%s%s\"", prefix, name);
734 if (FLAG_compress_log) {
735 ASSERT(compression_helper_ != NULL);
736 if (!compression_helper_->HandleMessage(&msg)) return;
737 }
676 msg.Append('\n'); 738 msg.Append('\n');
677 msg.WriteToLogFile(); 739 msg.WriteToLogFile();
678 } 740 }
679 #endif 741 #endif
680 742
681 743
682 void Logger::CallbackEvent(String* name, Address entry_point) { 744 void Logger::CallbackEvent(String* name, Address entry_point) {
683 #ifdef ENABLE_LOGGING_AND_PROFILING 745 #ifdef ENABLE_LOGGING_AND_PROFILING
684 if (!Log::IsEnabled() || !FLAG_log_code) return; 746 if (!Log::IsEnabled() || !FLAG_log_code) return;
685 SmartPointer<char> str = 747 SmartPointer<char> str =
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
717 } 779 }
718 } 780 }
719 781
720 782
721 void Logger::CodeCreateEvent(LogEventsAndTags tag, 783 void Logger::CodeCreateEvent(LogEventsAndTags tag,
722 Code* code, 784 Code* code,
723 const char* comment) { 785 const char* comment) {
724 #ifdef ENABLE_LOGGING_AND_PROFILING 786 #ifdef ENABLE_LOGGING_AND_PROFILING
725 if (!Log::IsEnabled() || !FLAG_log_code) return; 787 if (!Log::IsEnabled() || !FLAG_log_code) return;
726 LogMessageBuilder msg; 788 LogMessageBuilder msg;
727 msg.Append("%s,%s,", 789 msg.Append("%s,%s,", log_events_[CODE_CREATION_EVENT], log_events_[tag]);
728 kLogEventsNames[CODE_CREATION_EVENT],
729 kLogEventsNames[tag]);
730 msg.AppendAddress(code->address()); 790 msg.AppendAddress(code->address());
731 msg.Append(",%d,\"%s", code->ExecutableSize(), ComputeMarker(code)); 791 msg.Append(",%d,\"%s", code->ExecutableSize(), ComputeMarker(code));
732 for (const char* p = comment; *p != '\0'; p++) { 792 for (const char* p = comment; *p != '\0'; p++) {
733 if (*p == '"') { 793 if (*p == '"') {
734 msg.Append('\\'); 794 msg.Append('\\');
735 } 795 }
736 msg.Append(*p); 796 msg.Append(*p);
737 } 797 }
738 msg.Append('"'); 798 msg.Append('"');
739 LowLevelCodeCreateEvent(code, &msg); 799 LowLevelCodeCreateEvent(code, &msg);
800 if (FLAG_compress_log) {
801 ASSERT(compression_helper_ != NULL);
802 if (!compression_helper_->HandleMessage(&msg)) return;
803 }
740 msg.Append('\n'); 804 msg.Append('\n');
741 msg.WriteToLogFile(); 805 msg.WriteToLogFile();
742 #endif 806 #endif
743 } 807 }
744 808
745 809
746 void Logger::CodeCreateEvent(LogEventsAndTags tag, Code* code, String* name) { 810 void Logger::CodeCreateEvent(LogEventsAndTags tag, Code* code, String* name) {
747 #ifdef ENABLE_LOGGING_AND_PROFILING 811 #ifdef ENABLE_LOGGING_AND_PROFILING
748 if (!Log::IsEnabled() || !FLAG_log_code) return; 812 if (!Log::IsEnabled() || !FLAG_log_code) return;
749 LogMessageBuilder msg; 813 LogMessageBuilder msg;
750 SmartPointer<char> str = 814 SmartPointer<char> str =
751 name->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); 815 name->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
752 msg.Append("%s,%s,", 816 msg.Append("%s,%s,", log_events_[CODE_CREATION_EVENT], log_events_[tag]);
753 kLogEventsNames[CODE_CREATION_EVENT],
754 kLogEventsNames[tag]);
755 msg.AppendAddress(code->address()); 817 msg.AppendAddress(code->address());
756 msg.Append(",%d,\"%s%s\"", code->ExecutableSize(), ComputeMarker(code), *str); 818 msg.Append(",%d,\"%s%s\"", code->ExecutableSize(), ComputeMarker(code), *str);
757 LowLevelCodeCreateEvent(code, &msg); 819 LowLevelCodeCreateEvent(code, &msg);
820 if (FLAG_compress_log) {
821 ASSERT(compression_helper_ != NULL);
822 if (!compression_helper_->HandleMessage(&msg)) return;
823 }
758 msg.Append('\n'); 824 msg.Append('\n');
759 msg.WriteToLogFile(); 825 msg.WriteToLogFile();
760 #endif 826 #endif
761 } 827 }
762 828
763 829
764 void Logger::CodeCreateEvent(LogEventsAndTags tag, 830 void Logger::CodeCreateEvent(LogEventsAndTags tag,
765 Code* code, String* name, 831 Code* code, String* name,
766 String* source, int line) { 832 String* source, int line) {
767 #ifdef ENABLE_LOGGING_AND_PROFILING 833 #ifdef ENABLE_LOGGING_AND_PROFILING
768 if (!Log::IsEnabled() || !FLAG_log_code) return; 834 if (!Log::IsEnabled() || !FLAG_log_code) return;
769 LogMessageBuilder msg; 835 LogMessageBuilder msg;
770 SmartPointer<char> str = 836 SmartPointer<char> str =
771 name->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); 837 name->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
772 SmartPointer<char> sourcestr = 838 SmartPointer<char> sourcestr =
773 source->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); 839 source->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
774 msg.Append("%s,%s,", 840 msg.Append("%s,%s,", log_events_[CODE_CREATION_EVENT], log_events_[tag]);
775 kLogEventsNames[CODE_CREATION_EVENT],
776 kLogEventsNames[tag]);
777 msg.AppendAddress(code->address()); 841 msg.AppendAddress(code->address());
778 msg.Append(",%d,\"%s%s %s:%d\"", 842 msg.Append(",%d,\"%s%s %s:%d\"",
779 code->ExecutableSize(), 843 code->ExecutableSize(),
780 ComputeMarker(code), 844 ComputeMarker(code),
781 *str, 845 *str,
782 *sourcestr, 846 *sourcestr,
783 line); 847 line);
784 LowLevelCodeCreateEvent(code, &msg); 848 LowLevelCodeCreateEvent(code, &msg);
849 if (FLAG_compress_log) {
850 ASSERT(compression_helper_ != NULL);
851 if (!compression_helper_->HandleMessage(&msg)) return;
852 }
785 msg.Append('\n'); 853 msg.Append('\n');
786 msg.WriteToLogFile(); 854 msg.WriteToLogFile();
787 #endif 855 #endif
788 } 856 }
789 857
790 858
791 void Logger::CodeCreateEvent(LogEventsAndTags tag, Code* code, int args_count) { 859 void Logger::CodeCreateEvent(LogEventsAndTags tag, Code* code, int args_count) {
792 #ifdef ENABLE_LOGGING_AND_PROFILING 860 #ifdef ENABLE_LOGGING_AND_PROFILING
793 if (!Log::IsEnabled() || !FLAG_log_code) return; 861 if (!Log::IsEnabled() || !FLAG_log_code) return;
794 LogMessageBuilder msg; 862 LogMessageBuilder msg;
795 msg.Append("%s,%s,", 863 msg.Append("%s,%s,", log_events_[CODE_CREATION_EVENT], log_events_[tag]);
796 kLogEventsNames[CODE_CREATION_EVENT],
797 kLogEventsNames[tag]);
798 msg.AppendAddress(code->address()); 864 msg.AppendAddress(code->address());
799 msg.Append(",%d,\"args_count: %d\"", code->ExecutableSize(), args_count); 865 msg.Append(",%d,\"args_count: %d\"", code->ExecutableSize(), args_count);
800 LowLevelCodeCreateEvent(code, &msg); 866 LowLevelCodeCreateEvent(code, &msg);
867 if (FLAG_compress_log) {
868 ASSERT(compression_helper_ != NULL);
869 if (!compression_helper_->HandleMessage(&msg)) return;
870 }
801 msg.Append('\n'); 871 msg.Append('\n');
802 msg.WriteToLogFile(); 872 msg.WriteToLogFile();
803 #endif 873 #endif
804 } 874 }
805 875
806 876
807 void Logger::CodeMovingGCEvent() { 877 void Logger::CodeMovingGCEvent() {
808 #ifdef ENABLE_LOGGING_AND_PROFILING 878 #ifdef ENABLE_LOGGING_AND_PROFILING
809 if (!Log::IsEnabled() || !FLAG_log_code || !FLAG_ll_prof) return; 879 if (!Log::IsEnabled() || !FLAG_log_code || !FLAG_ll_prof) return;
810 LogMessageBuilder msg; 880 LogMessageBuilder msg;
811 msg.Append("%s\n", kLogEventsNames[CODE_MOVING_GC]); 881 msg.Append("%s\n", log_events_[CODE_MOVING_GC]);
812 msg.WriteToLogFile(); 882 msg.WriteToLogFile();
813 OS::SignalCodeMovingGC(); 883 OS::SignalCodeMovingGC();
814 #endif 884 #endif
815 } 885 }
816 886
817 887
818 void Logger::RegExpCodeCreateEvent(Code* code, String* source) { 888 void Logger::RegExpCodeCreateEvent(Code* code, String* source) {
819 #ifdef ENABLE_LOGGING_AND_PROFILING 889 #ifdef ENABLE_LOGGING_AND_PROFILING
820 if (!Log::IsEnabled() || !FLAG_log_code) return; 890 if (!Log::IsEnabled() || !FLAG_log_code) return;
821 LogMessageBuilder msg; 891 LogMessageBuilder msg;
822 msg.Append("%s,%s,", 892 msg.Append("%s,%s,",
823 kLogEventsNames[CODE_CREATION_EVENT], 893 log_events_[CODE_CREATION_EVENT], log_events_[REG_EXP_TAG]);
824 kLogEventsNames[REG_EXP_TAG]);
825 msg.AppendAddress(code->address()); 894 msg.AppendAddress(code->address());
826 msg.Append(",%d,\"", code->ExecutableSize()); 895 msg.Append(",%d,\"", code->ExecutableSize());
827 msg.AppendDetailed(source, false); 896 msg.AppendDetailed(source, false);
828 msg.Append('\"'); 897 msg.Append('\"');
829 LowLevelCodeCreateEvent(code, &msg); 898 LowLevelCodeCreateEvent(code, &msg);
899 if (FLAG_compress_log) {
900 ASSERT(compression_helper_ != NULL);
901 if (!compression_helper_->HandleMessage(&msg)) return;
902 }
830 msg.Append('\n'); 903 msg.Append('\n');
831 msg.WriteToLogFile(); 904 msg.WriteToLogFile();
832 #endif 905 #endif
833 } 906 }
834 907
835 908
836 void Logger::CodeMoveEvent(Address from, Address to) { 909 void Logger::CodeMoveEvent(Address from, Address to) {
837 #ifdef ENABLE_LOGGING_AND_PROFILING 910 #ifdef ENABLE_LOGGING_AND_PROFILING
838 MoveEventInternal(CODE_MOVE_EVENT, from, to); 911 MoveEventInternal(CODE_MOVE_EVENT, from, to);
839 #endif 912 #endif
840 } 913 }
841 914
842 915
843 void Logger::CodeDeleteEvent(Address from) { 916 void Logger::CodeDeleteEvent(Address from) {
844 #ifdef ENABLE_LOGGING_AND_PROFILING 917 #ifdef ENABLE_LOGGING_AND_PROFILING
845 DeleteEventInternal(CODE_DELETE_EVENT, from); 918 DeleteEventInternal(CODE_DELETE_EVENT, from);
846 #endif 919 #endif
847 } 920 }
848 921
849 922
850 void Logger::SnapshotPositionEvent(Address addr, int pos) { 923 void Logger::SnapshotPositionEvent(Address addr, int pos) {
851 #ifdef ENABLE_LOGGING_AND_PROFILING 924 #ifdef ENABLE_LOGGING_AND_PROFILING
852 if (!Log::IsEnabled() || !FLAG_log_snapshot_positions) return; 925 if (!Log::IsEnabled() || !FLAG_log_snapshot_positions) return;
853 LogMessageBuilder msg; 926 LogMessageBuilder msg;
854 msg.Append("%s,", kLogEventsNames[SNAPSHOT_POSITION_EVENT]); 927 msg.Append("%s,", log_events_[SNAPSHOT_POSITION_EVENT]);
855 msg.AppendAddress(addr); 928 msg.AppendAddress(addr);
856 msg.Append(",%d", pos); 929 msg.Append(",%d", pos);
930 if (FLAG_compress_log) {
931 ASSERT(compression_helper_ != NULL);
932 if (!compression_helper_->HandleMessage(&msg)) return;
933 }
857 msg.Append('\n'); 934 msg.Append('\n');
858 msg.WriteToLogFile(); 935 msg.WriteToLogFile();
859 #endif 936 #endif
860 } 937 }
861 938
862 939
863 void Logger::FunctionCreateEvent(JSFunction* function) { 940 void Logger::FunctionCreateEvent(JSFunction* function) {
864 #ifdef ENABLE_LOGGING_AND_PROFILING 941 #ifdef ENABLE_LOGGING_AND_PROFILING
865 // This function can be called from GC iterators (during Scavenge, 942 // This function can be called from GC iterators (during Scavenge,
866 // MC, and MS), so marking bits can be set on objects. That's 943 // MC, and MS), so marking bits can be set on objects. That's
867 // why unchecked accessors are used here. 944 // why unchecked accessors are used here.
945 static Address prev_code = NULL;
868 if (!Log::IsEnabled() || !FLAG_log_code) return; 946 if (!Log::IsEnabled() || !FLAG_log_code) return;
869 LogMessageBuilder msg; 947 LogMessageBuilder msg;
870 msg.Append("%s,", kLogEventsNames[FUNCTION_CREATION_EVENT]); 948 msg.Append("%s,", log_events_[FUNCTION_CREATION_EVENT]);
871 msg.AppendAddress(function->address()); 949 msg.AppendAddress(function->address());
872 msg.Append(','); 950 msg.Append(',');
873 msg.AppendAddress(function->unchecked_code()->address()); 951 msg.AppendAddress(function->unchecked_code()->address(), prev_code);
952 prev_code = function->unchecked_code()->address();
953 if (FLAG_compress_log) {
954 ASSERT(compression_helper_ != NULL);
955 if (!compression_helper_->HandleMessage(&msg)) return;
956 }
874 msg.Append('\n'); 957 msg.Append('\n');
875 msg.WriteToLogFile(); 958 msg.WriteToLogFile();
876 #endif 959 #endif
877 } 960 }
878 961
879 962
880 void Logger::FunctionCreateEventFromMove(JSFunction* function) { 963 void Logger::FunctionCreateEventFromMove(JSFunction* function) {
881 #ifdef ENABLE_LOGGING_AND_PROFILING 964 #ifdef ENABLE_LOGGING_AND_PROFILING
882 if (function->unchecked_code() != Builtins::builtin(Builtins::LazyCompile)) { 965 if (function->unchecked_code() != Builtins::builtin(Builtins::LazyCompile)) {
883 FunctionCreateEvent(function); 966 FunctionCreateEvent(function);
(...skipping 13 matching lines...) Expand all
897 #ifdef ENABLE_LOGGING_AND_PROFILING 980 #ifdef ENABLE_LOGGING_AND_PROFILING
898 DeleteEventInternal(FUNCTION_DELETE_EVENT, from); 981 DeleteEventInternal(FUNCTION_DELETE_EVENT, from);
899 #endif 982 #endif
900 } 983 }
901 984
902 985
903 #ifdef ENABLE_LOGGING_AND_PROFILING 986 #ifdef ENABLE_LOGGING_AND_PROFILING
904 void Logger::MoveEventInternal(LogEventsAndTags event, 987 void Logger::MoveEventInternal(LogEventsAndTags event,
905 Address from, 988 Address from,
906 Address to) { 989 Address to) {
990 static Address prev_to_ = NULL;
907 if (!Log::IsEnabled() || !FLAG_log_code) return; 991 if (!Log::IsEnabled() || !FLAG_log_code) return;
908 LogMessageBuilder msg; 992 LogMessageBuilder msg;
909 msg.Append("%s,", kLogEventsNames[event]); 993 msg.Append("%s,", log_events_[event]);
910 msg.AppendAddress(from); 994 msg.AppendAddress(from);
911 msg.Append(','); 995 msg.Append(',');
912 msg.AppendAddress(to); 996 msg.AppendAddress(to, prev_to_);
997 prev_to_ = to;
998 if (FLAG_compress_log) {
999 ASSERT(compression_helper_ != NULL);
1000 if (!compression_helper_->HandleMessage(&msg)) return;
1001 }
913 msg.Append('\n'); 1002 msg.Append('\n');
914 msg.WriteToLogFile(); 1003 msg.WriteToLogFile();
915 } 1004 }
916 #endif 1005 #endif
917 1006
918 1007
919 #ifdef ENABLE_LOGGING_AND_PROFILING 1008 #ifdef ENABLE_LOGGING_AND_PROFILING
920 void Logger::DeleteEventInternal(LogEventsAndTags event, Address from) { 1009 void Logger::DeleteEventInternal(LogEventsAndTags event, Address from) {
921 if (!Log::IsEnabled() || !FLAG_log_code) return; 1010 if (!Log::IsEnabled() || !FLAG_log_code) return;
922 LogMessageBuilder msg; 1011 LogMessageBuilder msg;
923 msg.Append("%s,", kLogEventsNames[event]); 1012 msg.Append("%s,", log_events_[event]);
924 msg.AppendAddress(from); 1013 msg.AppendAddress(from);
1014 if (FLAG_compress_log) {
1015 ASSERT(compression_helper_ != NULL);
1016 if (!compression_helper_->HandleMessage(&msg)) return;
1017 }
925 msg.Append('\n'); 1018 msg.Append('\n');
926 msg.WriteToLogFile(); 1019 msg.WriteToLogFile();
927 } 1020 }
928 #endif 1021 #endif
929 1022
930 1023
931 void Logger::ResourceEvent(const char* name, const char* tag) { 1024 void Logger::ResourceEvent(const char* name, const char* tag) {
932 #ifdef ENABLE_LOGGING_AND_PROFILING 1025 #ifdef ENABLE_LOGGING_AND_PROFILING
933 if (!Log::IsEnabled() || !FLAG_log) return; 1026 if (!Log::IsEnabled() || !FLAG_log) return;
934 LogMessageBuilder msg; 1027 LogMessageBuilder msg;
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
1102 parameter_string); 1195 parameter_string);
1103 DeleteArray(parameter_string); 1196 DeleteArray(parameter_string);
1104 msg.WriteToLogFile(); 1197 msg.WriteToLogFile();
1105 #endif 1198 #endif
1106 } 1199 }
1107 1200
1108 1201
1109 #ifdef ENABLE_LOGGING_AND_PROFILING 1202 #ifdef ENABLE_LOGGING_AND_PROFILING
1110 void Logger::TickEvent(TickSample* sample, bool overflow) { 1203 void Logger::TickEvent(TickSample* sample, bool overflow) {
1111 if (!Log::IsEnabled() || !FLAG_prof) return; 1204 if (!Log::IsEnabled() || !FLAG_prof) return;
1205 static Address prev_sp = NULL;
1206 static Address prev_function = NULL;
1112 LogMessageBuilder msg; 1207 LogMessageBuilder msg;
1113 msg.Append("%s,", kLogEventsNames[TICK_EVENT]); 1208 msg.Append("%s,", log_events_[TICK_EVENT]);
1114 msg.AppendAddress(sample->pc); 1209 Address prev_addr = sample->pc;
1210 msg.AppendAddress(prev_addr);
1115 msg.Append(','); 1211 msg.Append(',');
1116 msg.AppendAddress(sample->sp); 1212 msg.AppendAddress(sample->sp, prev_sp);
1213 prev_sp = sample->sp;
1117 msg.Append(','); 1214 msg.Append(',');
1118 msg.AppendAddress(sample->function); 1215 msg.AppendAddress(sample->function, prev_function);
1216 prev_function = sample->function;
1119 msg.Append(",%d", static_cast<int>(sample->state)); 1217 msg.Append(",%d", static_cast<int>(sample->state));
1120 if (overflow) { 1218 if (overflow) {
1121 msg.Append(",overflow"); 1219 msg.Append(",overflow");
1122 } 1220 }
1123 for (int i = 0; i < sample->frames_count; ++i) { 1221 for (int i = 0; i < sample->frames_count; ++i) {
1124 msg.Append(','); 1222 msg.Append(',');
1125 msg.AppendAddress(sample->stack[i]); 1223 msg.AppendAddress(sample->stack[i], prev_addr);
1224 prev_addr = sample->stack[i];
1225 }
1226 if (FLAG_compress_log) {
1227 ASSERT(compression_helper_ != NULL);
1228 if (!compression_helper_->HandleMessage(&msg)) return;
1126 } 1229 }
1127 msg.Append('\n'); 1230 msg.Append('\n');
1128 msg.WriteToLogFile(); 1231 msg.WriteToLogFile();
1129 } 1232 }
1130 1233
1131 1234
1132 int Logger::GetActiveProfilerModules() { 1235 int Logger::GetActiveProfilerModules() {
1133 int result = PROFILER_MODULE_NONE; 1236 int result = PROFILER_MODULE_NONE;
1134 if (profiler_ != NULL && !profiler_->paused()) { 1237 if (profiler_ != NULL && !profiler_->paused()) {
1135 result |= PROFILER_MODULE_CPU; 1238 result |= PROFILER_MODULE_CPU;
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after
1544 } 1647 }
1545 1648
1546 if (FLAG_ll_prof) LogCodeInfo(); 1649 if (FLAG_ll_prof) LogCodeInfo();
1547 1650
1548 ticker_ = new Ticker(kSamplingIntervalMs); 1651 ticker_ = new Ticker(kSamplingIntervalMs);
1549 1652
1550 if (FLAG_sliding_state_window && sliding_state_window_ == NULL) { 1653 if (FLAG_sliding_state_window && sliding_state_window_ == NULL) {
1551 sliding_state_window_ = new SlidingStateWindow(); 1654 sliding_state_window_ = new SlidingStateWindow();
1552 } 1655 }
1553 1656
1657 log_events_ = FLAG_compress_log ?
1658 kCompressedLogEventsNames : kLongLogEventsNames;
1659 if (FLAG_compress_log) {
1660 compression_helper_ = new CompressionHelper(kCompressionWindowSize);
1661 }
1662
1554 if (start_logging) { 1663 if (start_logging) {
1555 logging_nesting_ = 1; 1664 logging_nesting_ = 1;
1556 } 1665 }
1557 1666
1558 if (FLAG_prof) { 1667 if (FLAG_prof) {
1559 profiler_ = new Profiler(); 1668 profiler_ = new Profiler();
1560 if (!FLAG_prof_auto) { 1669 if (!FLAG_prof_auto) {
1561 profiler_->pause(); 1670 profiler_->pause();
1562 } else { 1671 } else {
1563 logging_nesting_ = 1; 1672 logging_nesting_ = 1;
(...skipping 27 matching lines...) Expand all
1591 #ifdef ENABLE_LOGGING_AND_PROFILING 1700 #ifdef ENABLE_LOGGING_AND_PROFILING
1592 LogMessageBuilder::set_write_failure_handler(NULL); 1701 LogMessageBuilder::set_write_failure_handler(NULL);
1593 1702
1594 // Stop the profiler before closing the file. 1703 // Stop the profiler before closing the file.
1595 if (profiler_ != NULL) { 1704 if (profiler_ != NULL) {
1596 profiler_->Disengage(); 1705 profiler_->Disengage();
1597 delete profiler_; 1706 delete profiler_;
1598 profiler_ = NULL; 1707 profiler_ = NULL;
1599 } 1708 }
1600 1709
1710 delete compression_helper_;
1711 compression_helper_ = NULL;
1712
1601 delete sliding_state_window_; 1713 delete sliding_state_window_;
1602 sliding_state_window_ = NULL; 1714 sliding_state_window_ = NULL;
1603 1715
1604 delete ticker_; 1716 delete ticker_;
1605 ticker_ = NULL; 1717 ticker_ = NULL;
1606 1718
1607 Log::Close(); 1719 Log::Close();
1608 #endif 1720 #endif
1609 } 1721 }
1610 1722
(...skipping 10 matching lines...) Expand all
1621 } 1733 }
1622 // Otherwise, if the sliding state window computation has not been 1734 // Otherwise, if the sliding state window computation has not been
1623 // started we do it now. 1735 // started we do it now.
1624 if (sliding_state_window_ == NULL) { 1736 if (sliding_state_window_ == NULL) {
1625 sliding_state_window_ = new SlidingStateWindow(); 1737 sliding_state_window_ = new SlidingStateWindow();
1626 } 1738 }
1627 #endif 1739 #endif
1628 } 1740 }
1629 1741
1630 } } // namespace v8::internal 1742 } } // namespace v8::internal
OLDNEW
« ChangeLog ('K') | « src/log.h ('k') | src/log-utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698