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

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

Issue 492763002: Move idle notification handling to GCIdleTimeHandler. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Casts Created 6 years, 4 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/gc-tracer.cc ('k') | src/heap/heap.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 // 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 #ifndef V8_HEAP_HEAP_H_ 5 #ifndef V8_HEAP_HEAP_H_
6 #define V8_HEAP_HEAP_H_ 6 #define V8_HEAP_HEAP_H_
7 7
8 #include <cmath> 8 #include <cmath>
9 9
10 #include "src/allocation.h" 10 #include "src/allocation.h"
11 #include "src/assert-scope.h" 11 #include "src/assert-scope.h"
12 #include "src/counters.h" 12 #include "src/counters.h"
13 #include "src/globals.h" 13 #include "src/globals.h"
14 #include "src/heap/gc-idle-time-handler.h"
14 #include "src/heap/gc-tracer.h" 15 #include "src/heap/gc-tracer.h"
15 #include "src/heap/incremental-marking.h" 16 #include "src/heap/incremental-marking.h"
16 #include "src/heap/mark-compact.h" 17 #include "src/heap/mark-compact.h"
17 #include "src/heap/objects-visiting.h" 18 #include "src/heap/objects-visiting.h"
18 #include "src/heap/spaces.h" 19 #include "src/heap/spaces.h"
19 #include "src/heap/store-buffer.h" 20 #include "src/heap/store-buffer.h"
20 #include "src/list.h" 21 #include "src/list.h"
21 #include "src/splay-tree-inl.h" 22 #include "src/splay-tree-inl.h"
22 23
23 namespace v8 { 24 namespace v8 {
(...skipping 1897 matching lines...) Expand 10 before | Expand all | Expand 10 after
1921 // the code that belongs to the allocation site and derive the lifetime 1922 // the code that belongs to the allocation site and derive the lifetime
1922 // of the allocation site. 1923 // of the allocation site.
1923 unsigned int maximum_size_scavenges_; 1924 unsigned int maximum_size_scavenges_;
1924 1925
1925 // TODO(hpayer): Allocation site pretenuring may make this method obsolete. 1926 // TODO(hpayer): Allocation site pretenuring may make this method obsolete.
1926 // Re-visit incremental marking heuristics. 1927 // Re-visit incremental marking heuristics.
1927 bool IsHighSurvivalRate() { return high_survival_rate_period_length_ > 0; } 1928 bool IsHighSurvivalRate() { return high_survival_rate_period_length_ > 0; }
1928 1929
1929 void SelectScavengingVisitorsTable(); 1930 void SelectScavengingVisitorsTable();
1930 1931
1931 void StartIdleRound() { mark_sweeps_since_idle_round_started_ = 0; } 1932 void AdvanceIdleIncrementalMarking(intptr_t step_size);
1932
1933 void FinishIdleRound() {
1934 mark_sweeps_since_idle_round_started_ = kMaxMarkSweepsInIdleRound;
1935 scavenges_since_last_idle_round_ = 0;
1936 }
1937
1938 bool EnoughGarbageSinceLastIdleRound() {
1939 return (scavenges_since_last_idle_round_ >= kIdleScavengeThreshold);
1940 }
1941
1942 // Estimates how many milliseconds a Mark-Sweep would take to complete.
1943 // In idle notification handler we assume that this function will return:
1944 // - a number less than 10 for small heaps, which are less than 8Mb.
1945 // - a number greater than 10 for large heaps, which are greater than 32Mb.
1946 int TimeMarkSweepWouldTakeInMs() {
1947 // Rough estimate of how many megabytes of heap can be processed in 1 ms.
1948 static const int kMbPerMs = 2;
1949
1950 int heap_size_mb = static_cast<int>(SizeOfObjects() / MB);
1951 return heap_size_mb / kMbPerMs;
1952 }
1953
1954 void AdvanceIdleIncrementalMarking(int idle_time_in_ms);
1955 1933
1956 void ClearObjectStats(bool clear_last_time_stats = false); 1934 void ClearObjectStats(bool clear_last_time_stats = false);
1957 1935
1958 void set_weak_object_to_code_table(Object* value) { 1936 void set_weak_object_to_code_table(Object* value) {
1959 DCHECK(!InNewSpace(value)); 1937 DCHECK(!InNewSpace(value));
1960 weak_object_to_code_table_ = value; 1938 weak_object_to_code_table_ = value;
1961 } 1939 }
1962 1940
1963 Object** weak_object_to_code_table_address() { 1941 Object** weak_object_to_code_table_address() {
1964 return &weak_object_to_code_table_; 1942 return &weak_object_to_code_table_;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1997 double sweeping_time_; 1975 double sweeping_time_;
1998 1976
1999 MarkCompactCollector mark_compact_collector_; 1977 MarkCompactCollector mark_compact_collector_;
2000 1978
2001 StoreBuffer store_buffer_; 1979 StoreBuffer store_buffer_;
2002 1980
2003 Marking marking_; 1981 Marking marking_;
2004 1982
2005 IncrementalMarking incremental_marking_; 1983 IncrementalMarking incremental_marking_;
2006 1984
2007 int number_idle_notifications_; 1985 GCIdleTimeHandler gc_idle_time_handler_;
2008 unsigned int last_idle_notification_gc_count_;
2009 bool last_idle_notification_gc_count_init_;
2010
2011 int mark_sweeps_since_idle_round_started_;
2012 unsigned int gc_count_at_last_idle_gc_; 1986 unsigned int gc_count_at_last_idle_gc_;
2013 int scavenges_since_last_idle_round_;
2014 1987
2015 // These two counters are monotomically increasing and never reset. 1988 // These two counters are monotomically increasing and never reset.
2016 size_t full_codegen_bytes_generated_; 1989 size_t full_codegen_bytes_generated_;
2017 size_t crankshaft_codegen_bytes_generated_; 1990 size_t crankshaft_codegen_bytes_generated_;
2018 1991
2019 // If the --deopt_every_n_garbage_collections flag is set to a positive value, 1992 // If the --deopt_every_n_garbage_collections flag is set to a positive value,
2020 // this variable holds the number of garbage collections since the last 1993 // this variable holds the number of garbage collections since the last
2021 // deoptimization triggered by garbage collection. 1994 // deoptimization triggered by garbage collection.
2022 int gcs_since_last_deopt_; 1995 int gcs_since_last_deopt_;
2023 1996
2024 #ifdef VERIFY_HEAP 1997 #ifdef VERIFY_HEAP
2025 int no_weak_object_verification_scope_depth_; 1998 int no_weak_object_verification_scope_depth_;
2026 #endif 1999 #endif
2027 2000
2028 static const int kAllocationSiteScratchpadSize = 256; 2001 static const int kAllocationSiteScratchpadSize = 256;
2029 int allocation_sites_scratchpad_length_; 2002 int allocation_sites_scratchpad_length_;
2030 2003
2031 static const int kMaxMarkSweepsInIdleRound = 7; 2004 static const int kMaxMarkCompactsInIdleRound = 7;
2032 static const int kIdleScavengeThreshold = 5; 2005 static const int kIdleScavengeThreshold = 5;
2033 2006
2034 // Shared state read by the scavenge collector and set by ScavengeObject. 2007 // Shared state read by the scavenge collector and set by ScavengeObject.
2035 PromotionQueue promotion_queue_; 2008 PromotionQueue promotion_queue_;
2036 2009
2037 // Flag is set when the heap has been configured. The heap can be repeatedly 2010 // Flag is set when the heap has been configured. The heap can be repeatedly
2038 // configured through the API until it is set up. 2011 // configured through the API until it is set up.
2039 bool configured_; 2012 bool configured_;
2040 2013
2041 ExternalStringTable external_string_table_; 2014 ExternalStringTable external_string_table_;
(...skipping 478 matching lines...) Expand 10 before | Expand all | Expand 10 after
2520 DisallowHeapAllocation no_allocation; // i.e. no gc allowed. 2493 DisallowHeapAllocation no_allocation; // i.e. no gc allowed.
2521 2494
2522 private: 2495 private:
2523 DISALLOW_IMPLICIT_CONSTRUCTORS(PathTracer); 2496 DISALLOW_IMPLICIT_CONSTRUCTORS(PathTracer);
2524 }; 2497 };
2525 #endif // DEBUG 2498 #endif // DEBUG
2526 } 2499 }
2527 } // namespace v8::internal 2500 } // namespace v8::internal
2528 2501
2529 #endif // V8_HEAP_HEAP_H_ 2502 #endif // V8_HEAP_HEAP_H_
OLDNEW
« no previous file with comments | « src/heap/gc-tracer.cc ('k') | src/heap/heap.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698