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

Side by Side Diff: src/incremental-marking.cc

Issue 11595006: Precisely measure duration of mark and sweep phases. Changed print_cumulative_gc_stat flag to only … (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 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/heap.cc ('k') | src/mark-compact.cc » ('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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 736 matching lines...) Expand 10 before | Expand all | Expand 10 after
747 if (map == filler_map) continue; 747 if (map == filler_map) continue;
748 748
749 VisitObject(map, obj, obj->SizeFromMap(map)); 749 VisitObject(map, obj, obj->SizeFromMap(map));
750 } 750 }
751 } 751 }
752 752
753 753
754 void IncrementalMarking::Hurry() { 754 void IncrementalMarking::Hurry() {
755 if (state() == MARKING) { 755 if (state() == MARKING) {
756 double start = 0.0; 756 double start = 0.0;
757 if (FLAG_trace_incremental_marking) { 757 if (FLAG_trace_incremental_marking || FLAG_print_cumulative_gc_stat) {
758 PrintF("[IncrementalMarking] Hurry\n");
759 start = OS::TimeCurrentMillis(); 758 start = OS::TimeCurrentMillis();
759 if (FLAG_trace_incremental_marking) {
760 PrintF("[IncrementalMarking] Hurry\n");
761 }
760 } 762 }
761 // TODO(gc) hurry can mark objects it encounters black as mutator 763 // TODO(gc) hurry can mark objects it encounters black as mutator
762 // was stopped. 764 // was stopped.
763 ProcessMarkingDeque(); 765 ProcessMarkingDeque();
764 state_ = COMPLETE; 766 state_ = COMPLETE;
765 if (FLAG_trace_incremental_marking) { 767 if (FLAG_trace_incremental_marking || FLAG_print_cumulative_gc_stat) {
766 double end = OS::TimeCurrentMillis(); 768 double end = OS::TimeCurrentMillis();
767 PrintF("[IncrementalMarking] Complete (hurry), spent %d ms.\n", 769 double delta = end - start;
768 static_cast<int>(end - start)); 770 heap_->AddMarkingTime(delta);
771 if (FLAG_trace_incremental_marking) {
772 PrintF("[IncrementalMarking] Complete (hurry), spent %d ms.\n",
773 static_cast<int>(delta));
774 }
769 } 775 }
770 } 776 }
771 777
772 if (FLAG_cleanup_code_caches_at_gc) { 778 if (FLAG_cleanup_code_caches_at_gc) {
773 PolymorphicCodeCache* poly_cache = heap_->polymorphic_code_cache(); 779 PolymorphicCodeCache* poly_cache = heap_->polymorphic_code_cache();
774 Marking::GreyToBlack(Marking::MarkBitFrom(poly_cache)); 780 Marking::GreyToBlack(Marking::MarkBitFrom(poly_cache));
775 MemoryChunk::IncrementLiveBytesFromGC(poly_cache->address(), 781 MemoryChunk::IncrementLiveBytesFromGC(poly_cache->address(),
776 PolymorphicCodeCache::kSize); 782 PolymorphicCodeCache::kSize);
777 } 783 }
778 784
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
882 // invoked since last step directly to determine the amount of work to do. 888 // invoked since last step directly to determine the amount of work to do.
883 intptr_t bytes_to_process = 889 intptr_t bytes_to_process =
884 marking_speed_ * Max(allocated_, write_barriers_invoked_since_last_step_); 890 marking_speed_ * Max(allocated_, write_barriers_invoked_since_last_step_);
885 allocated_ = 0; 891 allocated_ = 0;
886 write_barriers_invoked_since_last_step_ = 0; 892 write_barriers_invoked_since_last_step_ = 0;
887 893
888 bytes_scanned_ += bytes_to_process; 894 bytes_scanned_ += bytes_to_process;
889 895
890 double start = 0; 896 double start = 0;
891 897
892 if (FLAG_trace_incremental_marking || FLAG_trace_gc) { 898 if (FLAG_trace_incremental_marking || FLAG_trace_gc ||
899 FLAG_print_cumulative_gc_stat) {
893 start = OS::TimeCurrentMillis(); 900 start = OS::TimeCurrentMillis();
894 } 901 }
895 902
896 if (state_ == SWEEPING) { 903 if (state_ == SWEEPING) {
897 if (heap_->AdvanceSweepers(static_cast<int>(bytes_to_process))) { 904 if (heap_->AdvanceSweepers(static_cast<int>(bytes_to_process))) {
898 bytes_scanned_ = 0; 905 bytes_scanned_ = 0;
899 StartMarking(PREVENT_COMPACTION); 906 StartMarking(PREVENT_COMPACTION);
900 } 907 }
901 } else if (state_ == MARKING) { 908 } else if (state_ == MARKING) {
902 ProcessMarkingDeque(bytes_to_process); 909 ProcessMarkingDeque(bytes_to_process);
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
962 marking_speed_ += kMarkingSpeedAccellerationInterval; 969 marking_speed_ += kMarkingSpeedAccellerationInterval;
963 marking_speed_ = static_cast<int>( 970 marking_speed_ = static_cast<int>(
964 Min(kMaxMarkingSpeed, 971 Min(kMaxMarkingSpeed,
965 static_cast<intptr_t>(marking_speed_ * 1.3))); 972 static_cast<intptr_t>(marking_speed_ * 1.3)));
966 if (FLAG_trace_gc) { 973 if (FLAG_trace_gc) {
967 PrintPID("Marking speed increased to %d\n", marking_speed_); 974 PrintPID("Marking speed increased to %d\n", marking_speed_);
968 } 975 }
969 } 976 }
970 } 977 }
971 978
972 if (FLAG_trace_incremental_marking || FLAG_trace_gc) { 979 if (FLAG_trace_incremental_marking || FLAG_trace_gc ||
980 FLAG_print_cumulative_gc_stat) {
973 double end = OS::TimeCurrentMillis(); 981 double end = OS::TimeCurrentMillis();
974 double delta = (end - start); 982 double delta = (end - start);
975 longest_step_ = Max(longest_step_, delta); 983 longest_step_ = Max(longest_step_, delta);
976 steps_took_ += delta; 984 steps_took_ += delta;
977 steps_took_since_last_gc_ += delta; 985 steps_took_since_last_gc_ += delta;
986 heap_->AddMarkingTime(delta);
978 } 987 }
979 } 988 }
980 989
981 990
982 void IncrementalMarking::ResetStepCounters() { 991 void IncrementalMarking::ResetStepCounters() {
983 steps_count_ = 0; 992 steps_count_ = 0;
984 steps_took_ = 0; 993 steps_took_ = 0;
985 longest_step_ = 0.0; 994 longest_step_ = 0.0;
986 old_generation_space_available_at_start_of_incremental_ = 995 old_generation_space_available_at_start_of_incremental_ =
987 SpaceLeftInOldSpace(); 996 SpaceLeftInOldSpace();
988 old_generation_space_used_at_start_of_incremental_ = 997 old_generation_space_used_at_start_of_incremental_ =
989 heap_->PromotedTotalSize(); 998 heap_->PromotedTotalSize();
990 steps_count_since_last_gc_ = 0; 999 steps_count_since_last_gc_ = 0;
991 steps_took_since_last_gc_ = 0; 1000 steps_took_since_last_gc_ = 0;
992 bytes_rescanned_ = 0; 1001 bytes_rescanned_ = 0;
993 marking_speed_ = kInitialMarkingSpeed; 1002 marking_speed_ = kInitialMarkingSpeed;
994 bytes_scanned_ = 0; 1003 bytes_scanned_ = 0;
995 write_barriers_invoked_since_last_step_ = 0; 1004 write_barriers_invoked_since_last_step_ = 0;
996 } 1005 }
997 1006
998 1007
999 int64_t IncrementalMarking::SpaceLeftInOldSpace() { 1008 int64_t IncrementalMarking::SpaceLeftInOldSpace() {
1000 return heap_->MaxOldGenerationSize() - heap_->PromotedSpaceSizeOfObjects(); 1009 return heap_->MaxOldGenerationSize() - heap_->PromotedSpaceSizeOfObjects();
1001 } 1010 }
1002 1011
1003 } } // namespace v8::internal 1012 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/heap.cc ('k') | src/mark-compact.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698