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

Side by Side Diff: src/log.cc

Issue 6532091: Merge bleeding_edge revision (5922, 5934] to isolates branch.... (Closed) Base URL: http://v8.googlecode.com/svn/branches/experimental/isolates/
Patch Set: Created 9 years, 10 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 | Annotate | Revision Log
« no previous file with comments | « 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 287 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 } 298 }
299 299
300 // Start thread processing the profiler buffer. 300 // Start thread processing the profiler buffer.
301 running_ = true; 301 running_ = true;
302 Start(); 302 Start();
303 303
304 // Register to get ticks. 304 // Register to get ticks.
305 LOGGER->ticker_->SetProfiler(this); 305 LOGGER->ticker_->SetProfiler(this);
306 306
307 LOGGER->ProfilerBeginEvent(); 307 LOGGER->ProfilerBeginEvent();
308 LOGGER->LogAliases();
309 } 308 }
310 309
311 310
312 void Profiler::Disengage() { 311 void Profiler::Disengage() {
313 if (!engaged_) return; 312 if (!engaged_) return;
314 313
315 // Stop receiving ticks. 314 // Stop receiving ticks.
316 LOGGER->ticker_->ClearProfiler(); 315 LOGGER->ticker_->ClearProfiler();
317 316
318 // Terminate the worker thread by setting running_ to false, 317 // Terminate the worker thread by setting running_ to false,
(...skipping 22 matching lines...) Expand all
341 340
342 // 341 //
343 // Logger class implementation. 342 // Logger class implementation.
344 // 343 //
345 344
346 Logger::Logger() 345 Logger::Logger()
347 : ticker_(NULL), 346 : ticker_(NULL),
348 profiler_(NULL), 347 profiler_(NULL),
349 sliding_state_window_(NULL), 348 sliding_state_window_(NULL),
350 log_events_(NULL), 349 log_events_(NULL),
351 compression_helper_(NULL),
352 logging_nesting_(0), 350 logging_nesting_(0),
353 cpu_profiler_nesting_(0), 351 cpu_profiler_nesting_(0),
354 heap_profiler_nesting_(0), 352 heap_profiler_nesting_(0),
355 log_(new Log(this)), 353 log_(new Log(this)),
356 is_initialized_(false), 354 is_initialized_(false),
357 last_address_(NULL), 355 last_address_(NULL),
358 prev_sp_(NULL), 356 prev_sp_(NULL),
359 prev_function_(NULL), 357 prev_function_(NULL),
360 prev_to_(NULL), 358 prev_to_(NULL),
361 prev_code_(NULL) { 359 prev_code_(NULL) {
362 } 360 }
363 361
364 Logger::~Logger() { 362 Logger::~Logger() {
365 delete log_; 363 delete log_;
366 } 364 }
367 365
368 #define DECLARE_LONG_EVENT(ignore1, long_name, ignore2) long_name, 366 #define DECLARE_EVENT(ignore1, name) name,
369 static const char* const kLongLogEventsNames[Logger::NUMBER_OF_LOG_EVENTS] = { 367 const char* kLogEventsNames[Logger::NUMBER_OF_LOG_EVENTS] = {
Vitaly Repeshko 2011/02/22 15:23:05 Please restore "static" and yet another "const".
370 LOG_EVENTS_AND_TAGS_LIST(DECLARE_LONG_EVENT) 368 LOG_EVENTS_AND_TAGS_LIST(DECLARE_EVENT)
371 }; 369 };
372 #undef DECLARE_LONG_EVENT 370 #undef DECLARE_EVENT
373
374 #define DECLARE_SHORT_EVENT(ignore1, ignore2, short_name) short_name,
375 static const char* const
376 kCompressedLogEventsNames[Logger::NUMBER_OF_LOG_EVENTS] = {
377 LOG_EVENTS_AND_TAGS_LIST(DECLARE_SHORT_EVENT)
378 };
379 #undef DECLARE_SHORT_EVENT
380 371
381 372
382 void Logger::ProfilerBeginEvent() { 373 void Logger::ProfilerBeginEvent() {
383 if (!log_->IsEnabled()) return; 374 if (!log_->IsEnabled()) return;
384 LogMessageBuilder msg(this); 375 LogMessageBuilder msg(this);
385 msg.Append("profiler,\"begin\",%d\n", kSamplingIntervalMs); 376 msg.Append("profiler,\"begin\",%d\n", kSamplingIntervalMs);
386 if (FLAG_compress_log) {
387 msg.Append("profiler,\"compression\",%d\n", kCompressionWindowSize);
388 }
389 msg.WriteToLogFile();
390 }
391
392
393 void Logger::LogAliases() {
394 if (!log_->IsEnabled() || !FLAG_compress_log) return;
395 LogMessageBuilder msg(this);
396 for (int i = 0; i < NUMBER_OF_LOG_EVENTS; ++i) {
397 msg.Append("alias,%s,%s\n",
398 kCompressedLogEventsNames[i], kLongLogEventsNames[i]);
399 }
400 msg.WriteToLogFile(); 377 msg.WriteToLogFile();
401 } 378 }
402 379
403 #endif // ENABLE_LOGGING_AND_PROFILING 380 #endif // ENABLE_LOGGING_AND_PROFILING
404 381
405 382
406 void Logger::StringEvent(const char* name, const char* value) { 383 void Logger::StringEvent(const char* name, const char* value) {
407 #ifdef ENABLE_LOGGING_AND_PROFILING 384 #ifdef ENABLE_LOGGING_AND_PROFILING
408 if (FLAG_log) UncheckedStringEvent(name, value); 385 if (FLAG_log) UncheckedStringEvent(name, value);
409 #endif 386 #endif
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after
706 void Logger::NewEventStatic(const char* name, void* object, size_t size) { 683 void Logger::NewEventStatic(const char* name, void* object, size_t size) {
707 LOGGER->NewEvent(name, object, size); 684 LOGGER->NewEvent(name, object, size);
708 } 685 }
709 686
710 687
711 void Logger::DeleteEventStatic(const char* name, void* object) { 688 void Logger::DeleteEventStatic(const char* name, void* object) {
712 LOGGER->DeleteEvent(name, object); 689 LOGGER->DeleteEvent(name, object);
713 } 690 }
714 691
715 #ifdef ENABLE_LOGGING_AND_PROFILING 692 #ifdef ENABLE_LOGGING_AND_PROFILING
716
717 // A class that contains all common code dealing with record compression.
718 class CompressionHelper {
719 public:
720 explicit CompressionHelper(int window_size)
721 : compressor_(window_size), repeat_count_(0) { }
722
723 // Handles storing message in compressor, retrieving the previous one and
724 // prefixing it with repeat count, if needed.
725 // Returns true if message needs to be written to log.
726 bool HandleMessage(LogMessageBuilder* msg) {
727 if (!msg->StoreInCompressor(&compressor_)) {
728 // Current message repeats the previous one, don't write it.
729 ++repeat_count_;
730 return false;
731 }
732 if (repeat_count_ == 0) {
733 return msg->RetrieveCompressedPrevious(&compressor_);
734 }
735 OS::SNPrintF(prefix_, "%s,%d,",
736 LOGGER->log_events_[Logger::REPEAT_META_EVENT],
737 repeat_count_ + 1);
738 repeat_count_ = 0;
739 return msg->RetrieveCompressedPrevious(&compressor_, prefix_.start());
740 }
741
742 private:
743 LogRecordCompressor compressor_;
744 int repeat_count_;
745 EmbeddedVector<char, 20> prefix_;
746 };
747
748 #endif // ENABLE_LOGGING_AND_PROFILING
749
750
751 #ifdef ENABLE_LOGGING_AND_PROFILING
752 void Logger::CallbackEventInternal(const char* prefix, const char* name, 693 void Logger::CallbackEventInternal(const char* prefix, const char* name,
753 Address entry_point) { 694 Address entry_point) {
754 if (!log_->IsEnabled() || !FLAG_log_code) return; 695 if (!log_->IsEnabled() || !FLAG_log_code) return;
755 LogMessageBuilder msg(this); 696 LogMessageBuilder msg(this);
756 msg.Append("%s,%s,", 697 msg.Append("%s,%s,",
757 log_events_[CODE_CREATION_EVENT], log_events_[CALLBACK_TAG]); 698 kLogEventsNames[CODE_CREATION_EVENT],
699 kLogEventsNames[CALLBACK_TAG]);
758 msg.AppendAddress(entry_point); 700 msg.AppendAddress(entry_point);
759 msg.Append(",1,\"%s%s\"", prefix, name); 701 msg.Append(",1,\"%s%s\"", prefix, name);
760 if (FLAG_compress_log) {
761 ASSERT(compression_helper_ != NULL);
762 if (!compression_helper_->HandleMessage(&msg)) return;
763 }
764 msg.Append('\n'); 702 msg.Append('\n');
765 msg.WriteToLogFile(); 703 msg.WriteToLogFile();
766 } 704 }
767 #endif 705 #endif
768 706
769 707
770 void Logger::CallbackEvent(String* name, Address entry_point) { 708 void Logger::CallbackEvent(String* name, Address entry_point) {
771 #ifdef ENABLE_LOGGING_AND_PROFILING 709 #ifdef ENABLE_LOGGING_AND_PROFILING
772 if (!log_->IsEnabled() || !FLAG_log_code) return; 710 if (!log_->IsEnabled() || !FLAG_log_code) return;
773 SmartPointer<char> str = 711 SmartPointer<char> str =
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
805 } 743 }
806 } 744 }
807 745
808 746
809 void Logger::CodeCreateEvent(LogEventsAndTags tag, 747 void Logger::CodeCreateEvent(LogEventsAndTags tag,
810 Code* code, 748 Code* code,
811 const char* comment) { 749 const char* comment) {
812 #ifdef ENABLE_LOGGING_AND_PROFILING 750 #ifdef ENABLE_LOGGING_AND_PROFILING
813 if (!log_->IsEnabled() || !FLAG_log_code) return; 751 if (!log_->IsEnabled() || !FLAG_log_code) return;
814 LogMessageBuilder msg(this); 752 LogMessageBuilder msg(this);
815 msg.Append("%s,%s,", log_events_[CODE_CREATION_EVENT], log_events_[tag]); 753 msg.Append("%s,%s,",
754 kLogEventsNames[CODE_CREATION_EVENT],
755 kLogEventsNames[tag]);
816 msg.AppendAddress(code->address()); 756 msg.AppendAddress(code->address());
817 msg.Append(",%d,\"%s", code->ExecutableSize(), ComputeMarker(code)); 757 msg.Append(",%d,\"%s", code->ExecutableSize(), ComputeMarker(code));
818 for (const char* p = comment; *p != '\0'; p++) { 758 for (const char* p = comment; *p != '\0'; p++) {
819 if (*p == '"') { 759 if (*p == '"') {
820 msg.Append('\\'); 760 msg.Append('\\');
821 } 761 }
822 msg.Append(*p); 762 msg.Append(*p);
823 } 763 }
824 msg.Append('"'); 764 msg.Append('"');
825 LowLevelCodeCreateEvent(code, &msg); 765 LowLevelCodeCreateEvent(code, &msg);
826 if (FLAG_compress_log) {
827 ASSERT(compression_helper_ != NULL);
828 if (!compression_helper_->HandleMessage(&msg)) return;
829 }
830 msg.Append('\n'); 766 msg.Append('\n');
831 msg.WriteToLogFile(); 767 msg.WriteToLogFile();
832 #endif 768 #endif
833 } 769 }
834 770
835 771
836 void Logger::CodeCreateEvent(LogEventsAndTags tag, Code* code, String* name) { 772 void Logger::CodeCreateEvent(LogEventsAndTags tag, Code* code, String* name) {
837 #ifdef ENABLE_LOGGING_AND_PROFILING 773 #ifdef ENABLE_LOGGING_AND_PROFILING
838 if (!log_->IsEnabled() || !FLAG_log_code) return; 774 if (!log_->IsEnabled() || !FLAG_log_code) return;
839 LogMessageBuilder msg(this); 775 LogMessageBuilder msg(this);
840 SmartPointer<char> str = 776 SmartPointer<char> str =
841 name->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); 777 name->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
842 msg.Append("%s,%s,", log_events_[CODE_CREATION_EVENT], log_events_[tag]); 778 msg.Append("%s,%s,",
779 kLogEventsNames[CODE_CREATION_EVENT],
780 kLogEventsNames[tag]);
843 msg.AppendAddress(code->address()); 781 msg.AppendAddress(code->address());
844 msg.Append(",%d,\"%s%s\"", code->ExecutableSize(), ComputeMarker(code), *str); 782 msg.Append(",%d,\"%s%s\"", code->ExecutableSize(), ComputeMarker(code), *str);
845 LowLevelCodeCreateEvent(code, &msg); 783 LowLevelCodeCreateEvent(code, &msg);
846 if (FLAG_compress_log) {
847 ASSERT(compression_helper_ != NULL);
848 if (!compression_helper_->HandleMessage(&msg)) return;
849 }
850 msg.Append('\n'); 784 msg.Append('\n');
851 msg.WriteToLogFile(); 785 msg.WriteToLogFile();
852 #endif 786 #endif
853 } 787 }
854 788
855 789
856 void Logger::CodeCreateEvent(LogEventsAndTags tag, 790 void Logger::CodeCreateEvent(LogEventsAndTags tag,
857 Code* code, String* name, 791 Code* code, String* name,
858 String* source, int line) { 792 String* source, int line) {
859 #ifdef ENABLE_LOGGING_AND_PROFILING 793 #ifdef ENABLE_LOGGING_AND_PROFILING
860 if (!log_->IsEnabled() || !FLAG_log_code) return; 794 if (!log_->IsEnabled() || !FLAG_log_code) return;
861 LogMessageBuilder msg(this); 795 LogMessageBuilder msg(this);
862 SmartPointer<char> str = 796 SmartPointer<char> str =
863 name->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); 797 name->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
864 SmartPointer<char> sourcestr = 798 SmartPointer<char> sourcestr =
865 source->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); 799 source->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
866 msg.Append("%s,%s,", log_events_[CODE_CREATION_EVENT], log_events_[tag]); 800 msg.Append("%s,%s,",
801 kLogEventsNames[CODE_CREATION_EVENT],
802 kLogEventsNames[tag]);
867 msg.AppendAddress(code->address()); 803 msg.AppendAddress(code->address());
868 msg.Append(",%d,\"%s%s %s:%d\"", 804 msg.Append(",%d,\"%s%s %s:%d\"",
869 code->ExecutableSize(), 805 code->ExecutableSize(),
870 ComputeMarker(code), 806 ComputeMarker(code),
871 *str, 807 *str,
872 *sourcestr, 808 *sourcestr,
873 line); 809 line);
874 LowLevelCodeCreateEvent(code, &msg); 810 LowLevelCodeCreateEvent(code, &msg);
875 if (FLAG_compress_log) {
876 ASSERT(compression_helper_ != NULL);
877 if (!compression_helper_->HandleMessage(&msg)) return;
878 }
879 msg.Append('\n'); 811 msg.Append('\n');
880 msg.WriteToLogFile(); 812 msg.WriteToLogFile();
881 #endif 813 #endif
882 } 814 }
883 815
884 816
885 void Logger::CodeCreateEvent(LogEventsAndTags tag, Code* code, int args_count) { 817 void Logger::CodeCreateEvent(LogEventsAndTags tag, Code* code, int args_count) {
886 #ifdef ENABLE_LOGGING_AND_PROFILING 818 #ifdef ENABLE_LOGGING_AND_PROFILING
887 if (!log_->IsEnabled() || !FLAG_log_code) return; 819 if (!log_->IsEnabled() || !FLAG_log_code) return;
888 LogMessageBuilder msg(this); 820 LogMessageBuilder msg(this);
889 msg.Append("%s,%s,", log_events_[CODE_CREATION_EVENT], log_events_[tag]); 821 msg.Append("%s,%s,",
822 kLogEventsNames[CODE_CREATION_EVENT],
823 kLogEventsNames[tag]);
890 msg.AppendAddress(code->address()); 824 msg.AppendAddress(code->address());
891 msg.Append(",%d,\"args_count: %d\"", code->ExecutableSize(), args_count); 825 msg.Append(",%d,\"args_count: %d\"", code->ExecutableSize(), args_count);
892 LowLevelCodeCreateEvent(code, &msg); 826 LowLevelCodeCreateEvent(code, &msg);
893 if (FLAG_compress_log) {
894 ASSERT(compression_helper_ != NULL);
895 if (!compression_helper_->HandleMessage(&msg)) return;
896 }
897 msg.Append('\n'); 827 msg.Append('\n');
898 msg.WriteToLogFile(); 828 msg.WriteToLogFile();
899 #endif 829 #endif
900 } 830 }
901 831
902 832
903 void Logger::CodeMovingGCEvent() { 833 void Logger::CodeMovingGCEvent() {
904 #ifdef ENABLE_LOGGING_AND_PROFILING 834 #ifdef ENABLE_LOGGING_AND_PROFILING
905 if (!log_->IsEnabled() || !FLAG_log_code || !FLAG_ll_prof) return; 835 if (!log_->IsEnabled() || !FLAG_log_code || !FLAG_ll_prof) return;
906 LogMessageBuilder msg(this); 836 LogMessageBuilder msg(this);
907 msg.Append("%s\n", log_events_[CODE_MOVING_GC]); 837 msg.Append("%s\n", kLogEventsNames[CODE_MOVING_GC]);
908 msg.WriteToLogFile(); 838 msg.WriteToLogFile();
909 OS::SignalCodeMovingGC(); 839 OS::SignalCodeMovingGC();
910 #endif 840 #endif
911 } 841 }
912 842
913 843
914 void Logger::RegExpCodeCreateEvent(Code* code, String* source) { 844 void Logger::RegExpCodeCreateEvent(Code* code, String* source) {
915 #ifdef ENABLE_LOGGING_AND_PROFILING 845 #ifdef ENABLE_LOGGING_AND_PROFILING
916 if (!log_->IsEnabled() || !FLAG_log_code) return; 846 if (!log_->IsEnabled() || !FLAG_log_code) return;
917 LogMessageBuilder msg(this); 847 LogMessageBuilder msg(this);
918 msg.Append("%s,%s,", 848 msg.Append("%s,%s,",
919 log_events_[CODE_CREATION_EVENT], log_events_[REG_EXP_TAG]); 849 kLogEventsNames[CODE_CREATION_EVENT],
850 kLogEventsNames[REG_EXP_TAG]);
920 msg.AppendAddress(code->address()); 851 msg.AppendAddress(code->address());
921 msg.Append(",%d,\"", code->ExecutableSize()); 852 msg.Append(",%d,\"", code->ExecutableSize());
922 msg.AppendDetailed(source, false); 853 msg.AppendDetailed(source, false);
923 msg.Append('\"'); 854 msg.Append('\"');
924 LowLevelCodeCreateEvent(code, &msg); 855 LowLevelCodeCreateEvent(code, &msg);
925 if (FLAG_compress_log) {
926 ASSERT(compression_helper_ != NULL);
927 if (!compression_helper_->HandleMessage(&msg)) return;
928 }
929 msg.Append('\n'); 856 msg.Append('\n');
930 msg.WriteToLogFile(); 857 msg.WriteToLogFile();
931 #endif 858 #endif
932 } 859 }
933 860
934 861
935 void Logger::CodeMoveEvent(Address from, Address to) { 862 void Logger::CodeMoveEvent(Address from, Address to) {
936 #ifdef ENABLE_LOGGING_AND_PROFILING 863 #ifdef ENABLE_LOGGING_AND_PROFILING
937 MoveEventInternal(CODE_MOVE_EVENT, from, to); 864 MoveEventInternal(CODE_MOVE_EVENT, from, to);
938 #endif 865 #endif
939 } 866 }
940 867
941 868
942 void Logger::CodeDeleteEvent(Address from) { 869 void Logger::CodeDeleteEvent(Address from) {
943 #ifdef ENABLE_LOGGING_AND_PROFILING 870 #ifdef ENABLE_LOGGING_AND_PROFILING
944 DeleteEventInternal(CODE_DELETE_EVENT, from); 871 DeleteEventInternal(CODE_DELETE_EVENT, from);
945 #endif 872 #endif
946 } 873 }
947 874
948 875
949 void Logger::SnapshotPositionEvent(Address addr, int pos) { 876 void Logger::SnapshotPositionEvent(Address addr, int pos) {
950 #ifdef ENABLE_LOGGING_AND_PROFILING 877 #ifdef ENABLE_LOGGING_AND_PROFILING
951 if (!log_->IsEnabled() || !FLAG_log_snapshot_positions) return; 878 if (!log_->IsEnabled() || !FLAG_log_snapshot_positions) return;
952 LogMessageBuilder msg(this); 879 LogMessageBuilder msg(this);
953 msg.Append("%s,", log_events_[SNAPSHOT_POSITION_EVENT]); 880 msg.Append("%s,", kLogEventsNames[SNAPSHOT_POSITION_EVENT]);
954 msg.AppendAddress(addr); 881 msg.AppendAddress(addr);
955 msg.Append(",%d", pos); 882 msg.Append(",%d", pos);
956 if (FLAG_compress_log) {
957 ASSERT(compression_helper_ != NULL);
958 if (!compression_helper_->HandleMessage(&msg)) return;
959 }
960 msg.Append('\n'); 883 msg.Append('\n');
961 msg.WriteToLogFile(); 884 msg.WriteToLogFile();
962 #endif 885 #endif
963 } 886 }
964 887
965 888
966 void Logger::FunctionCreateEvent(JSFunction* function) { 889 void Logger::FunctionCreateEvent(JSFunction* function) {
967 #ifdef ENABLE_LOGGING_AND_PROFILING 890 #ifdef ENABLE_LOGGING_AND_PROFILING
968 // This function can be called from GC iterators (during Scavenge, 891 // This function can be called from GC iterators (during Scavenge,
969 // MC, and MS), so marking bits can be set on objects. That's 892 // MC, and MS), so marking bits can be set on objects. That's
970 // why unchecked accessors are used here. 893 // why unchecked accessors are used here.
971 if (!log_->IsEnabled() || !FLAG_log_code) return; 894 if (!log_->IsEnabled() || !FLAG_log_code) return;
972 LogMessageBuilder msg(this); 895 LogMessageBuilder msg(this);
973 msg.Append("%s,", log_events_[FUNCTION_CREATION_EVENT]); 896 msg.Append("%s,", kLogEventsNames[FUNCTION_CREATION_EVENT]);
974 msg.AppendAddress(function->address()); 897 msg.AppendAddress(function->address());
975 msg.Append(','); 898 msg.Append(',');
976 msg.AppendAddress(function->unchecked_code()->address(), prev_code_); 899 msg.AppendAddress(function->unchecked_code()->address());
977 prev_code_ = function->unchecked_code()->address();
978 if (FLAG_compress_log) {
979 ASSERT(compression_helper_ != NULL);
980 if (!compression_helper_->HandleMessage(&msg)) return;
981 }
982 msg.Append('\n'); 900 msg.Append('\n');
983 msg.WriteToLogFile(); 901 msg.WriteToLogFile();
984 #endif 902 #endif
985 } 903 }
986 904
987 905
988 void Logger::FunctionCreateEventFromMove(Heap* heap, JSFunction* function) { 906 void Logger::FunctionCreateEventFromMove(Heap* heap, JSFunction* function) {
989 #ifdef ENABLE_LOGGING_AND_PROFILING 907 #ifdef ENABLE_LOGGING_AND_PROFILING
990 if (function->unchecked_code() != 908 if (function->unchecked_code() !=
991 heap->isolate()->builtins()->builtin(Builtins::LazyCompile)) { 909 heap->isolate()->builtins()->builtin(Builtins::LazyCompile)) {
(...skipping 16 matching lines...) Expand all
1008 #endif 926 #endif
1009 } 927 }
1010 928
1011 929
1012 #ifdef ENABLE_LOGGING_AND_PROFILING 930 #ifdef ENABLE_LOGGING_AND_PROFILING
1013 void Logger::MoveEventInternal(LogEventsAndTags event, 931 void Logger::MoveEventInternal(LogEventsAndTags event,
1014 Address from, 932 Address from,
1015 Address to) { 933 Address to) {
1016 if (!log_->IsEnabled() || !FLAG_log_code) return; 934 if (!log_->IsEnabled() || !FLAG_log_code) return;
1017 LogMessageBuilder msg(this); 935 LogMessageBuilder msg(this);
1018 msg.Append("%s,", log_events_[event]); 936 msg.Append("%s,", kLogEventsNames[event]);
1019 msg.AppendAddress(from); 937 msg.AppendAddress(from);
1020 msg.Append(','); 938 msg.Append(',');
1021 msg.AppendAddress(to, prev_to_); 939 msg.AppendAddress(to);
1022 prev_to_ = to;
1023 if (FLAG_compress_log) {
1024 ASSERT(compression_helper_ != NULL);
1025 if (!compression_helper_->HandleMessage(&msg)) return;
1026 }
1027 msg.Append('\n'); 940 msg.Append('\n');
1028 msg.WriteToLogFile(); 941 msg.WriteToLogFile();
1029 } 942 }
1030 #endif 943 #endif
1031 944
1032 945
1033 #ifdef ENABLE_LOGGING_AND_PROFILING 946 #ifdef ENABLE_LOGGING_AND_PROFILING
1034 void Logger::DeleteEventInternal(LogEventsAndTags event, Address from) { 947 void Logger::DeleteEventInternal(LogEventsAndTags event, Address from) {
1035 if (!log_->IsEnabled() || !FLAG_log_code) return; 948 if (!log_->IsEnabled() || !FLAG_log_code) return;
1036 LogMessageBuilder msg(this); 949 LogMessageBuilder msg(this);
1037 msg.Append("%s,", log_events_[event]); 950 msg.Append("%s,", kLogEventsNames[event]);
1038 msg.AppendAddress(from); 951 msg.AppendAddress(from);
1039 if (FLAG_compress_log) {
1040 ASSERT(compression_helper_ != NULL);
1041 if (!compression_helper_->HandleMessage(&msg)) return;
1042 }
1043 msg.Append('\n'); 952 msg.Append('\n');
1044 msg.WriteToLogFile(); 953 msg.WriteToLogFile();
1045 } 954 }
1046 #endif 955 #endif
1047 956
1048 957
1049 void Logger::ResourceEvent(const char* name, const char* tag) { 958 void Logger::ResourceEvent(const char* name, const char* tag) {
1050 #ifdef ENABLE_LOGGING_AND_PROFILING 959 #ifdef ENABLE_LOGGING_AND_PROFILING
1051 if (!log_->IsEnabled() || !FLAG_log) return; 960 if (!log_->IsEnabled() || !FLAG_log) return;
1052 LogMessageBuilder msg(this); 961 LogMessageBuilder msg(this);
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
1221 DeleteArray(parameter_string); 1130 DeleteArray(parameter_string);
1222 msg.WriteToLogFile(); 1131 msg.WriteToLogFile();
1223 #endif 1132 #endif
1224 } 1133 }
1225 1134
1226 1135
1227 #ifdef ENABLE_LOGGING_AND_PROFILING 1136 #ifdef ENABLE_LOGGING_AND_PROFILING
1228 void Logger::TickEvent(TickSample* sample, bool overflow) { 1137 void Logger::TickEvent(TickSample* sample, bool overflow) {
1229 if (!log_->IsEnabled() || !FLAG_prof) return; 1138 if (!log_->IsEnabled() || !FLAG_prof) return;
1230 LogMessageBuilder msg(this); 1139 LogMessageBuilder msg(this);
1231 msg.Append("%s,", log_events_[TICK_EVENT]); 1140 msg.Append("%s,", kLogEventsNames[TICK_EVENT]);
1232 Address prev_addr = sample->pc; 1141 msg.AppendAddress(sample->pc);
1233 msg.AppendAddress(prev_addr);
1234 msg.Append(','); 1142 msg.Append(',');
1235 msg.AppendAddress(sample->sp, prev_sp_); 1143 msg.AppendAddress(sample->sp);
1236 prev_sp_ = sample->sp;
1237 msg.Append(','); 1144 msg.Append(',');
1238 msg.AppendAddress(sample->function, prev_function_); 1145 msg.AppendAddress(sample->function);
1239 prev_function_ = sample->function;
1240 msg.Append(",%d", static_cast<int>(sample->state)); 1146 msg.Append(",%d", static_cast<int>(sample->state));
1241 if (overflow) { 1147 if (overflow) {
1242 msg.Append(",overflow"); 1148 msg.Append(",overflow");
1243 } 1149 }
1244 for (int i = 0; i < sample->frames_count; ++i) { 1150 for (int i = 0; i < sample->frames_count; ++i) {
1245 msg.Append(','); 1151 msg.Append(',');
1246 msg.AppendAddress(sample->stack[i], prev_addr); 1152 msg.AppendAddress(sample->stack[i]);
1247 prev_addr = sample->stack[i];
1248 }
1249 if (FLAG_compress_log) {
1250 ASSERT(compression_helper_ != NULL);
1251 if (!compression_helper_->HandleMessage(&msg)) return;
1252 } 1153 }
1253 msg.Append('\n'); 1154 msg.Append('\n');
1254 msg.WriteToLogFile(); 1155 msg.WriteToLogFile();
1255 } 1156 }
1256 1157
1257 1158
1258 int Logger::GetActiveProfilerModules() { 1159 int Logger::GetActiveProfilerModules() {
1259 int result = PROFILER_MODULE_NONE; 1160 int result = PROFILER_MODULE_NONE;
1260 if (profiler_ != NULL && !profiler_->paused()) { 1161 if (profiler_ != NULL && !profiler_->paused()) {
1261 result |= PROFILER_MODULE_CPU; 1162 result |= PROFILER_MODULE_CPU;
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after
1612 log_->Initialize(); 1513 log_->Initialize();
1613 1514
1614 if (FLAG_ll_prof) LogCodeInfo(); 1515 if (FLAG_ll_prof) LogCodeInfo();
1615 1516
1616 ticker_ = new Ticker(Isolate::Current(), kSamplingIntervalMs); 1517 ticker_ = new Ticker(Isolate::Current(), kSamplingIntervalMs);
1617 1518
1618 if (FLAG_sliding_state_window && sliding_state_window_ == NULL) { 1519 if (FLAG_sliding_state_window && sliding_state_window_ == NULL) {
1619 sliding_state_window_ = new SlidingStateWindow(); 1520 sliding_state_window_ = new SlidingStateWindow();
1620 } 1521 }
1621 1522
1622 log_events_ = FLAG_compress_log ?
1623 kCompressedLogEventsNames : kLongLogEventsNames;
1624 if (FLAG_compress_log) {
1625 compression_helper_ = new CompressionHelper(kCompressionWindowSize);
1626 }
1627
1628 bool start_logging = FLAG_log || FLAG_log_runtime || FLAG_log_api 1523 bool start_logging = FLAG_log || FLAG_log_runtime || FLAG_log_api
1629 || FLAG_log_code || FLAG_log_gc || FLAG_log_handles || FLAG_log_suspect 1524 || FLAG_log_code || FLAG_log_gc || FLAG_log_handles || FLAG_log_suspect
1630 || FLAG_log_regexp || FLAG_log_state_changes; 1525 || FLAG_log_regexp || FLAG_log_state_changes;
1631 1526
1632 if (start_logging) { 1527 if (start_logging) {
1633 logging_nesting_ = 1; 1528 logging_nesting_ = 1;
1634 } 1529 }
1635 1530
1636 if (FLAG_prof) { 1531 if (FLAG_prof) {
1637 profiler_ = new Profiler(Isolate::Current()); 1532 profiler_ = new Profiler(Isolate::Current());
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1674 if (!is_initialized_) return; 1569 if (!is_initialized_) return;
1675 is_initialized_ = false; 1570 is_initialized_ = false;
1676 1571
1677 // Stop the profiler before closing the file. 1572 // Stop the profiler before closing the file.
1678 if (profiler_ != NULL) { 1573 if (profiler_ != NULL) {
1679 profiler_->Disengage(); 1574 profiler_->Disengage();
1680 delete profiler_; 1575 delete profiler_;
1681 profiler_ = NULL; 1576 profiler_ = NULL;
1682 } 1577 }
1683 1578
1684 delete compression_helper_;
1685 compression_helper_ = NULL;
1686
1687 delete sliding_state_window_; 1579 delete sliding_state_window_;
1688 sliding_state_window_ = NULL; 1580 sliding_state_window_ = NULL;
1689 1581
1690 delete ticker_; 1582 delete ticker_;
1691 ticker_ = NULL; 1583 ticker_ = NULL;
1692 1584
1693 log_->Close(); 1585 log_->Close();
1694 #endif 1586 #endif
1695 } 1587 }
1696 1588
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
1759 void SamplerRegistry::RemoveActiveSampler(Sampler* sampler) { 1651 void SamplerRegistry::RemoveActiveSampler(Sampler* sampler) {
1760 ASSERT(sampler->IsActive()); 1652 ASSERT(sampler->IsActive());
1761 ScopedLock lock(mutex_); 1653 ScopedLock lock(mutex_);
1762 ASSERT(active_samplers_ != NULL); 1654 ASSERT(active_samplers_ != NULL);
1763 bool removed = active_samplers_->RemoveElement(sampler); 1655 bool removed = active_samplers_->RemoveElement(sampler);
1764 ASSERT(removed); 1656 ASSERT(removed);
1765 USE(removed); 1657 USE(removed);
1766 } 1658 }
1767 1659
1768 } } // namespace v8::internal 1660 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/log.h ('k') | src/log-utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698