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

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

Issue 1961373003: [heap] Do not invoke GC to make heap iterable. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 7 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/debug/debug.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 #include <map> 9 #include <map>
10 10
(...skipping 521 matching lines...) Expand 10 before | Expand all | Expand 10 after
532 static const double kMaxHeapGrowingFactor; 532 static const double kMaxHeapGrowingFactor;
533 static const double kMaxHeapGrowingFactorMemoryConstrained; 533 static const double kMaxHeapGrowingFactorMemoryConstrained;
534 static const double kMaxHeapGrowingFactorIdle; 534 static const double kMaxHeapGrowingFactorIdle;
535 static const double kTargetMutatorUtilization; 535 static const double kTargetMutatorUtilization;
536 536
537 static const int kNoGCFlags = 0; 537 static const int kNoGCFlags = 0;
538 static const int kReduceMemoryFootprintMask = 1; 538 static const int kReduceMemoryFootprintMask = 1;
539 static const int kAbortIncrementalMarkingMask = 2; 539 static const int kAbortIncrementalMarkingMask = 2;
540 static const int kFinalizeIncrementalMarkingMask = 4; 540 static const int kFinalizeIncrementalMarkingMask = 4;
541 541
542 // Making the heap iterable requires us to abort incremental marking.
543 static const int kMakeHeapIterableMask = kAbortIncrementalMarkingMask;
544
545 // The roots that have an index less than this are always in old space. 542 // The roots that have an index less than this are always in old space.
546 static const int kOldSpaceRoots = 0x20; 543 static const int kOldSpaceRoots = 0x20;
547 544
548 // The minimum size of a HeapObject on the heap. 545 // The minimum size of a HeapObject on the heap.
549 static const int kMinObjectSizeInWords = 2; 546 static const int kMinObjectSizeInWords = 2;
550 547
551 STATIC_ASSERT(kUndefinedValueRootIndex == 548 STATIC_ASSERT(kUndefinedValueRootIndex ==
552 Internals::kUndefinedValueRootIndex); 549 Internals::kUndefinedValueRootIndex);
553 STATIC_ASSERT(kTheHoleValueRootIndex == Internals::kTheHoleValueRootIndex); 550 STATIC_ASSERT(kTheHoleValueRootIndex == Internals::kTheHoleValueRootIndex);
554 STATIC_ASSERT(kNullValueRootIndex == Internals::kNullValueRootIndex); 551 STATIC_ASSERT(kNullValueRootIndex == Internals::kNullValueRootIndex);
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
655 // start and hence is only valid if there is only a single reference to it. 652 // start and hence is only valid if there is only a single reference to it.
656 FixedArrayBase* LeftTrimFixedArray(FixedArrayBase* obj, int elements_to_trim); 653 FixedArrayBase* LeftTrimFixedArray(FixedArrayBase* obj, int elements_to_trim);
657 654
658 // Trim the given array from the right. 655 // Trim the given array from the right.
659 template<Heap::InvocationMode mode> 656 template<Heap::InvocationMode mode>
660 void RightTrimFixedArray(FixedArrayBase* obj, int elements_to_trim); 657 void RightTrimFixedArray(FixedArrayBase* obj, int elements_to_trim);
661 658
662 // Converts the given boolean condition to JavaScript boolean value. 659 // Converts the given boolean condition to JavaScript boolean value.
663 inline Oddball* ToBoolean(bool condition); 660 inline Oddball* ToBoolean(bool condition);
664 661
665 // Check whether the heap is currently iterable.
666 bool IsHeapIterable();
667
668 // Notify the heap that a context has been disposed. 662 // Notify the heap that a context has been disposed.
669 int NotifyContextDisposed(bool dependant_context); 663 int NotifyContextDisposed(bool dependant_context);
670 664
671 void set_native_contexts_list(Object* object) { 665 void set_native_contexts_list(Object* object) {
672 native_contexts_list_ = object; 666 native_contexts_list_ = object;
673 } 667 }
674 Object* native_contexts_list() const { return native_contexts_list_; } 668 Object* native_contexts_list() const { return native_contexts_list_; }
675 669
676 void set_allocation_sites_list(Object* object) { 670 void set_allocation_sites_list(Object* object) {
677 allocation_sites_list_ = object; 671 allocation_sites_list_ = object;
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after
1023 // Methods triggering GCs. =================================================== 1017 // Methods triggering GCs. ===================================================
1024 // =========================================================================== 1018 // ===========================================================================
1025 1019
1026 // Performs garbage collection operation. 1020 // Performs garbage collection operation.
1027 // Returns whether there is a chance that another major GC could 1021 // Returns whether there is a chance that another major GC could
1028 // collect more garbage. 1022 // collect more garbage.
1029 inline bool CollectGarbage( 1023 inline bool CollectGarbage(
1030 AllocationSpace space, const char* gc_reason = NULL, 1024 AllocationSpace space, const char* gc_reason = NULL,
1031 const GCCallbackFlags gc_callback_flags = kNoGCCallbackFlags); 1025 const GCCallbackFlags gc_callback_flags = kNoGCCallbackFlags);
1032 1026
1033 // Performs a full garbage collection. If (flags & kMakeHeapIterableMask) is 1027 // Performs a full garbage collection.
1034 // non-zero, then the slower precise sweeper is used, which leaves the heap
1035 // in a state where we can iterate over the heap visiting all objects.
1036 void CollectAllGarbage( 1028 void CollectAllGarbage(
1037 int flags = kFinalizeIncrementalMarkingMask, const char* gc_reason = NULL, 1029 int flags = kFinalizeIncrementalMarkingMask, const char* gc_reason = NULL,
1038 const GCCallbackFlags gc_callback_flags = kNoGCCallbackFlags); 1030 const GCCallbackFlags gc_callback_flags = kNoGCCallbackFlags);
1039 1031
1040 // Last hope GC, should try to squeeze as much as possible. 1032 // Last hope GC, should try to squeeze as much as possible.
1041 void CollectAllAvailableGarbage(const char* gc_reason = NULL); 1033 void CollectAllAvailableGarbage(const char* gc_reason = NULL);
1042 1034
1043 // Reports and external memory pressure event, either performs a major GC or 1035 // Reports and external memory pressure event, either performs a major GC or
1044 // completes incremental marking in order to free external resources. 1036 // completes incremental marking in order to free external resources.
1045 void ReportExternalMemoryPressure(const char* gc_reason = NULL); 1037 void ReportExternalMemoryPressure(const char* gc_reason = NULL);
(...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after
1527 // Checks whether a global GC is necessary 1519 // Checks whether a global GC is necessary
1528 GarbageCollector SelectGarbageCollector(AllocationSpace space, 1520 GarbageCollector SelectGarbageCollector(AllocationSpace space,
1529 const char** reason); 1521 const char** reason);
1530 1522
1531 // Make sure there is a filler value behind the top of the new space 1523 // Make sure there is a filler value behind the top of the new space
1532 // so that the GC does not confuse some unintialized/stale memory 1524 // so that the GC does not confuse some unintialized/stale memory
1533 // with the allocation memento of the object at the top 1525 // with the allocation memento of the object at the top
1534 void EnsureFillerObjectAtTop(); 1526 void EnsureFillerObjectAtTop();
1535 1527
1536 // Ensure that we have swept all spaces in such a way that we can iterate 1528 // Ensure that we have swept all spaces in such a way that we can iterate
1537 // over all objects. May cause a GC. 1529 // over all objects.
1538 void MakeHeapIterable(); 1530 void MakeHeapIterable();
1539 1531
1540 // Performs garbage collection operation. 1532 // Performs garbage collection operation.
1541 // Returns whether there is a chance that another major GC could 1533 // Returns whether there is a chance that another major GC could
1542 // collect more garbage. 1534 // collect more garbage.
1543 bool CollectGarbage( 1535 bool CollectGarbage(
1544 GarbageCollector collector, const char* gc_reason, 1536 GarbageCollector collector, const char* gc_reason,
1545 const char* collector_reason, 1537 const char* collector_reason,
1546 const GCCallbackFlags gc_callback_flags = kNoGCCallbackFlags); 1538 const GCCallbackFlags gc_callback_flags = kNoGCCallbackFlags);
1547 1539
(...skipping 1096 matching lines...) Expand 10 before | Expand all | Expand 10 after
2644 friend class LargeObjectSpace; 2636 friend class LargeObjectSpace;
2645 friend class NewSpace; 2637 friend class NewSpace;
2646 friend class PagedSpace; 2638 friend class PagedSpace;
2647 DISALLOW_COPY_AND_ASSIGN(AllocationObserver); 2639 DISALLOW_COPY_AND_ASSIGN(AllocationObserver);
2648 }; 2640 };
2649 2641
2650 } // namespace internal 2642 } // namespace internal
2651 } // namespace v8 2643 } // namespace v8
2652 2644
2653 #endif // V8_HEAP_HEAP_H_ 2645 #endif // V8_HEAP_HEAP_H_
OLDNEW
« no previous file with comments | « src/debug/debug.cc ('k') | src/heap/heap.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698