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

Unified Diff: src/mark-compact.h

Issue 11035053: Rollback trunk to bleeding_edge revision 12525 (Closed) Base URL: https://v8.googlecode.com/svn/trunk
Patch Set: Created 8 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/lithium.h ('k') | src/mark-compact.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/mark-compact.h
diff --git a/src/mark-compact.h b/src/mark-compact.h
index ac26ce8230bb6f57d0d11ca2812ab8df2967b458..0f19d2c86298d414aa157d67eeaa97789a49b8ba 100644
--- a/src/mark-compact.h
+++ b/src/mark-compact.h
@@ -240,35 +240,6 @@ class MarkingDeque {
int mask() { return mask_; }
void set_top(int top) { top_ = top; }
- int space_left() {
- // If we already overflowed we may as well just say there is lots of
- // space left.
- if (overflowed_) return mask_ + 1;
- if (IsEmpty()) return mask_ + 1;
- if (IsFull()) return 0;
- return (bottom_ - top_) & mask_;
- }
-
-#ifdef DEBUG
- const char* Status() {
- if (overflowed_) return "Overflowed";
- if (IsEmpty()) return "Empty";
- if (IsFull()) return "Full";
- int oct = (((top_ - bottom_) & mask_) * 8) / (mask_ + 1);
- switch (oct) {
- case 0: return "Almost empty";
- case 1: return "1/8 full";
- case 2: return "2/8 full";
- case 3: return "3/8 full";
- case 4: return "4/8 full";
- case 5: return "5/8 full";
- case 6: return "6/8 full";
- case 7: return "7/8 full";
- }
- return "??";
- }
-#endif
-
private:
HeapObject** array_;
// array_[(top - 1) & mask_] is the top element in the deque. The Deque is
@@ -432,6 +403,33 @@ class SlotsBuffer {
};
+// -------------------------------------------------------------------------
+// Marker shared between incremental and non-incremental marking
+template<class BaseMarker> class Marker {
+ public:
+ Marker(BaseMarker* base_marker, MarkCompactCollector* mark_compact_collector)
+ : base_marker_(base_marker),
+ mark_compact_collector_(mark_compact_collector) {}
+
+ // Mark pointers in a Map and its DescriptorArray together, possibly
+ // treating transitions or back pointers weak.
+ void MarkMapContents(Map* map);
+ void MarkTransitionArray(TransitionArray* transitions);
+
+ private:
+ BaseMarker* base_marker() {
+ return base_marker_;
+ }
+
+ MarkCompactCollector* mark_compact_collector() {
+ return mark_compact_collector_;
+ }
+
+ BaseMarker* base_marker_;
+ MarkCompactCollector* mark_compact_collector_;
+};
+
+
// Defined in isolate.h.
class ThreadLocalTop;
@@ -595,10 +593,6 @@ class MarkCompactCollector {
bool is_compacting() const { return compacting_; }
- // Find the large objects that are not completely scanned, but have been
- // postponed to later.
- static void ProcessLargePostponedArrays(Heap* heap, MarkingDeque* deque);
-
private:
MarkCompactCollector();
~MarkCompactCollector();
@@ -662,6 +656,8 @@ class MarkCompactCollector {
friend class MarkCompactMarkingVisitor;
friend class CodeMarkingVisitor;
friend class SharedFunctionInfoMarkingVisitor;
+ friend class Marker<IncrementalMarking>;
+ friend class Marker<MarkCompactCollector>;
// Mark non-optimize code for functions inlined into the given optimized
// code. This will prevent it from being flushed.
@@ -679,13 +675,25 @@ class MarkCompactCollector {
void AfterMarking();
// Marks the object black and pushes it on the marking stack.
+ // Returns true if object needed marking and false otherwise.
+ // This is for non-incremental marking only.
+ INLINE(bool MarkObjectAndPush(HeapObject* obj));
+
+ // Marks the object black and pushes it on the marking stack.
// This is for non-incremental marking only.
INLINE(void MarkObject(HeapObject* obj, MarkBit mark_bit));
+ // Marks the object black without pushing it on the marking stack.
+ // Returns true if object needed marking and false otherwise.
+ // This is for non-incremental marking only.
+ INLINE(bool MarkObjectWithoutPush(HeapObject* obj));
+
// Marks the object black assuming that it is not yet marked.
// This is for non-incremental marking only.
INLINE(void SetMark(HeapObject* obj, MarkBit mark_bit));
+ void ProcessNewlyMarkedObject(HeapObject* obj);
+
// Mark the heap roots and all objects reachable from them.
void MarkRoots(RootMarkingVisitor* visitor);
@@ -788,6 +796,7 @@ class MarkCompactCollector {
MarkingDeque marking_deque_;
CodeFlusher* code_flusher_;
Object* encountered_weak_maps_;
+ Marker<MarkCompactCollector> marker_;
List<Page*> evacuation_candidates_;
List<Code*> invalidated_code_;
« no previous file with comments | « src/lithium.h ('k') | src/mark-compact.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698