OLD | NEW |
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 4938 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4949 if (FLAG_trace_idle_notification_verbose) { | 4949 if (FLAG_trace_idle_notification_verbose) { |
4950 PrintF("["); | 4950 PrintF("["); |
4951 heap_state.Print(); | 4951 heap_state.Print(); |
4952 PrintF("]"); | 4952 PrintF("]"); |
4953 } | 4953 } |
4954 PrintF("\n"); | 4954 PrintF("\n"); |
4955 } | 4955 } |
4956 } | 4956 } |
4957 | 4957 |
4958 | 4958 |
| 4959 void Heap::CheckAndNotifyBackgroundIdleNotification(double idle_time_in_ms, |
| 4960 double now_ms) { |
| 4961 if (idle_time_in_ms >= GCIdleTimeHandler::kMinBackgroundIdleTime) { |
| 4962 MemoryReducer::Event event; |
| 4963 event.type = MemoryReducer::kBackgroundIdleNotification; |
| 4964 event.time_ms = now_ms; |
| 4965 event.can_start_incremental_gc = incremental_marking()->IsStopped() && |
| 4966 incremental_marking()->CanBeActivated(); |
| 4967 memory_reducer_.NotifyBackgroundIdleNotification(event); |
| 4968 } |
| 4969 } |
| 4970 |
| 4971 |
4959 double Heap::MonotonicallyIncreasingTimeInMs() { | 4972 double Heap::MonotonicallyIncreasingTimeInMs() { |
4960 return V8::GetCurrentPlatform()->MonotonicallyIncreasingTime() * | 4973 return V8::GetCurrentPlatform()->MonotonicallyIncreasingTime() * |
4961 static_cast<double>(base::Time::kMillisecondsPerSecond); | 4974 static_cast<double>(base::Time::kMillisecondsPerSecond); |
4962 } | 4975 } |
4963 | 4976 |
4964 | 4977 |
4965 bool Heap::IdleNotification(int idle_time_in_ms) { | 4978 bool Heap::IdleNotification(int idle_time_in_ms) { |
4966 return IdleNotification( | 4979 return IdleNotification( |
4967 V8::GetCurrentPlatform()->MonotonicallyIncreasingTime() + | 4980 V8::GetCurrentPlatform()->MonotonicallyIncreasingTime() + |
4968 (static_cast<double>(idle_time_in_ms) / | 4981 (static_cast<double>(idle_time_in_ms) / |
4969 static_cast<double>(base::Time::kMillisecondsPerSecond))); | 4982 static_cast<double>(base::Time::kMillisecondsPerSecond))); |
4970 } | 4983 } |
4971 | 4984 |
4972 | 4985 |
4973 bool Heap::IdleNotification(double deadline_in_seconds) { | 4986 bool Heap::IdleNotification(double deadline_in_seconds) { |
4974 CHECK(HasBeenSetUp()); | 4987 CHECK(HasBeenSetUp()); |
4975 double deadline_in_ms = | 4988 double deadline_in_ms = |
4976 deadline_in_seconds * | 4989 deadline_in_seconds * |
4977 static_cast<double>(base::Time::kMillisecondsPerSecond); | 4990 static_cast<double>(base::Time::kMillisecondsPerSecond); |
4978 HistogramTimerScope idle_notification_scope( | 4991 HistogramTimerScope idle_notification_scope( |
4979 isolate_->counters()->gc_idle_notification()); | 4992 isolate_->counters()->gc_idle_notification()); |
4980 double start_ms = MonotonicallyIncreasingTimeInMs(); | 4993 double start_ms = MonotonicallyIncreasingTimeInMs(); |
4981 double idle_time_in_ms = deadline_in_ms - start_ms; | 4994 double idle_time_in_ms = deadline_in_ms - start_ms; |
4982 | 4995 |
| 4996 CheckAndNotifyBackgroundIdleNotification(idle_time_in_ms, start_ms); |
| 4997 |
4983 tracer()->SampleAllocation(start_ms, NewSpaceAllocationCounter(), | 4998 tracer()->SampleAllocation(start_ms, NewSpaceAllocationCounter(), |
4984 OldGenerationAllocationCounter()); | 4999 OldGenerationAllocationCounter()); |
4985 | 5000 |
4986 GCIdleTimeHandler::HeapState heap_state = ComputeHeapState(); | 5001 GCIdleTimeHandler::HeapState heap_state = ComputeHeapState(); |
4987 | 5002 |
4988 GCIdleTimeAction action = | 5003 GCIdleTimeAction action = |
4989 gc_idle_time_handler_.Compute(idle_time_in_ms, heap_state); | 5004 gc_idle_time_handler_.Compute(idle_time_in_ms, heap_state); |
4990 | 5005 |
4991 bool result = PerformIdleTimeAction(action, heap_state, deadline_in_ms); | 5006 bool result = PerformIdleTimeAction(action, heap_state, deadline_in_ms); |
4992 | 5007 |
(...skipping 1884 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6877 *object_type = "CODE_TYPE"; \ | 6892 *object_type = "CODE_TYPE"; \ |
6878 *object_sub_type = "CODE_AGE/" #name; \ | 6893 *object_sub_type = "CODE_AGE/" #name; \ |
6879 return true; | 6894 return true; |
6880 CODE_AGE_LIST_COMPLETE(COMPARE_AND_RETURN_NAME) | 6895 CODE_AGE_LIST_COMPLETE(COMPARE_AND_RETURN_NAME) |
6881 #undef COMPARE_AND_RETURN_NAME | 6896 #undef COMPARE_AND_RETURN_NAME |
6882 } | 6897 } |
6883 return false; | 6898 return false; |
6884 } | 6899 } |
6885 } // namespace internal | 6900 } // namespace internal |
6886 } // namespace v8 | 6901 } // namespace v8 |
OLD | NEW |