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

Side by Side Diff: src/heap/heap.cc

Issue 1159153003: Sample allocation throughput in all idle notifications. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 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
« no previous file with comments | « src/heap/gc-tracer.cc ('k') | no next file » | 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 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/api.h" 8 #include "src/api.h"
9 #include "src/base/bits.h" 9 #include "src/base/bits.h"
10 #include "src/base/once.h" 10 #include "src/base/once.h"
(...skipping 4738 matching lines...) Expand 10 before | Expand all | Expand 10 after
4749 case DO_NOTHING: 4749 case DO_NOTHING:
4750 break; 4750 break;
4751 } 4751 }
4752 4752
4753 return result; 4753 return result;
4754 } 4754 }
4755 4755
4756 4756
4757 void Heap::IdleNotificationEpilogue(GCIdleTimeAction action, 4757 void Heap::IdleNotificationEpilogue(GCIdleTimeAction action,
4758 GCIdleTimeHandler::HeapState heap_state, 4758 GCIdleTimeHandler::HeapState heap_state,
4759 double start_ms, double deadline_in_ms, 4759 double start_ms, double deadline_in_ms) {
4760 bool is_long_idle_notification) {
4761 double idle_time_in_ms = deadline_in_ms - start_ms; 4760 double idle_time_in_ms = deadline_in_ms - start_ms;
4762 double current_time = MonotonicallyIncreasingTimeInMs(); 4761 double current_time = MonotonicallyIncreasingTimeInMs();
4763 last_idle_notification_time_ = current_time; 4762 last_idle_notification_time_ = current_time;
4764 double deadline_difference = deadline_in_ms - current_time; 4763 double deadline_difference = deadline_in_ms - current_time;
4765 4764
4766 contexts_disposed_ = 0; 4765 contexts_disposed_ = 0;
4767 4766
4768 isolate()->counters()->gc_idle_time_allotted_in_ms()->AddSample( 4767 isolate()->counters()->gc_idle_time_allotted_in_ms()->AddSample(
4769 static_cast<int>(idle_time_in_ms)); 4768 static_cast<int>(idle_time_in_ms));
4770 4769
4771 if (is_long_idle_notification) {
4772 int committed_memory = static_cast<int>(CommittedMemory() / KB);
4773 int used_memory = static_cast<int>(heap_state.size_of_objects / KB);
4774 isolate()->counters()->aggregated_memory_heap_committed()->AddSample(
4775 start_ms, committed_memory);
4776 isolate()->counters()->aggregated_memory_heap_used()->AddSample(
4777 start_ms, used_memory);
ulan 2015/06/03 10:53:25 We already sample this after each scavenge. That s
4778 }
4779
4780 if (deadline_difference >= 0) { 4770 if (deadline_difference >= 0) {
4781 if (action.type != DONE && action.type != DO_NOTHING) { 4771 if (action.type != DONE && action.type != DO_NOTHING) {
4782 isolate()->counters()->gc_idle_time_limit_undershot()->AddSample( 4772 isolate()->counters()->gc_idle_time_limit_undershot()->AddSample(
4783 static_cast<int>(deadline_difference)); 4773 static_cast<int>(deadline_difference));
4784 } 4774 }
4785 } else { 4775 } else {
4786 isolate()->counters()->gc_idle_time_limit_overshot()->AddSample( 4776 isolate()->counters()->gc_idle_time_limit_overshot()->AddSample(
4787 static_cast<int>(-deadline_difference)); 4777 static_cast<int>(-deadline_difference));
4788 } 4778 }
4789 4779
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
4823 4813
4824 bool Heap::IdleNotification(double deadline_in_seconds) { 4814 bool Heap::IdleNotification(double deadline_in_seconds) {
4825 CHECK(HasBeenSetUp()); 4815 CHECK(HasBeenSetUp());
4826 double deadline_in_ms = 4816 double deadline_in_ms =
4827 deadline_in_seconds * 4817 deadline_in_seconds *
4828 static_cast<double>(base::Time::kMillisecondsPerSecond); 4818 static_cast<double>(base::Time::kMillisecondsPerSecond);
4829 HistogramTimerScope idle_notification_scope( 4819 HistogramTimerScope idle_notification_scope(
4830 isolate_->counters()->gc_idle_notification()); 4820 isolate_->counters()->gc_idle_notification());
4831 double start_ms = MonotonicallyIncreasingTimeInMs(); 4821 double start_ms = MonotonicallyIncreasingTimeInMs();
4832 double idle_time_in_ms = deadline_in_ms - start_ms; 4822 double idle_time_in_ms = deadline_in_ms - start_ms;
4833 bool is_long_idle_notification =
4834 static_cast<size_t>(idle_time_in_ms) >
4835 GCIdleTimeHandler::kMaxFrameRenderingIdleTime;
4836 4823
4837 if (is_long_idle_notification) { 4824 tracer()->SampleAllocation(start_ms, NewSpaceAllocationCounter(),
ulan 2015/06/03 10:53:25 Added a guard in SampleAllocation to not sample to
4838 tracer()->SampleAllocation(start_ms, NewSpaceAllocationCounter(), 4825 OldGenerationAllocationCounter());
4839 OldGenerationAllocationCounter());
4840 }
4841 4826
4842 GCIdleTimeHandler::HeapState heap_state = ComputeHeapState(); 4827 GCIdleTimeHandler::HeapState heap_state = ComputeHeapState();
4843 4828
4844 GCIdleTimeAction action = 4829 GCIdleTimeAction action =
4845 gc_idle_time_handler_.Compute(idle_time_in_ms, heap_state); 4830 gc_idle_time_handler_.Compute(idle_time_in_ms, heap_state);
4846 4831
4847 bool result = PerformIdleTimeAction(action, heap_state, deadline_in_ms, 4832 bool result = PerformIdleTimeAction(action, heap_state, deadline_in_ms,
4848 is_long_idle_notification); 4833 is_long_idle_notification);
4849 4834
4850 IdleNotificationEpilogue(action, heap_state, start_ms, deadline_in_ms, 4835 IdleNotificationEpilogue(action, heap_state, start_ms, deadline_in_ms);
4851 is_long_idle_notification);
4852 return result; 4836 return result;
4853 } 4837 }
4854 4838
4855 4839
4856 bool Heap::RecentIdleNotificationHappened() { 4840 bool Heap::RecentIdleNotificationHappened() {
4857 return (last_idle_notification_time_ + 4841 return (last_idle_notification_time_ +
4858 GCIdleTimeHandler::kMaxScheduledIdleTime) > 4842 GCIdleTimeHandler::kMaxScheduledIdleTime) >
4859 MonotonicallyIncreasingTimeInMs(); 4843 MonotonicallyIncreasingTimeInMs();
4860 } 4844 }
4861 4845
(...skipping 1809 matching lines...) Expand 10 before | Expand all | Expand 10 after
6671 *object_type = "CODE_TYPE"; \ 6655 *object_type = "CODE_TYPE"; \
6672 *object_sub_type = "CODE_AGE/" #name; \ 6656 *object_sub_type = "CODE_AGE/" #name; \
6673 return true; 6657 return true;
6674 CODE_AGE_LIST_COMPLETE(COMPARE_AND_RETURN_NAME) 6658 CODE_AGE_LIST_COMPLETE(COMPARE_AND_RETURN_NAME)
6675 #undef COMPARE_AND_RETURN_NAME 6659 #undef COMPARE_AND_RETURN_NAME
6676 } 6660 }
6677 return false; 6661 return false;
6678 } 6662 }
6679 } // namespace internal 6663 } // namespace internal
6680 } // namespace v8 6664 } // namespace v8
OLDNEW
« no previous file with comments | « src/heap/gc-tracer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698