Update V8 to version 4.1.0.21
This is a cherry-pick of all commits up to and including the
4.1.0.21 cherry-pick in Chromium.
Original commit message:
Version 4.1.0.21 (cherry-pick)
Merged 206e9136bde0f2b5ae8cb77afbb1e7833e5bd412
Unlink pages from the space page list after evacuation.
BUG=430201
LOG=N
R=jkummerow@chromium.org
Review URL: https://codereview.chromium.org/953813002
Cr-Commit-Position: refs/branch-heads/4.1@{#22}
Cr-Branched-From: 2e08d2a7aa9d65d269d8c57aba82eb38a8cb0a18-refs/heads/candidates@{#25353}
---
FPIIM-449
Change-Id: I8c23c7bbb70772b4858fe8a47b64fa97ee0d1f8c
diff --git a/src/heap/mark-compact.h b/src/heap/mark-compact.h
index c5087b4..e26e06c 100644
--- a/src/heap/mark-compact.h
+++ b/src/heap/mark-compact.h
@@ -547,7 +547,6 @@
void EnableCodeFlushing(bool enable);
enum SweeperType {
- PARALLEL_SWEEPING,
CONCURRENT_SWEEPING,
SEQUENTIAL_SWEEPING
};
@@ -641,16 +640,12 @@
void RefillFreeList(PagedSpace* space);
- bool AreSweeperThreadsActivated();
-
// Checks if sweeping is in progress right now on any space.
bool sweeping_in_progress() { return sweeping_in_progress_; }
- void set_sequential_sweeping(bool sequential_sweeping) {
- sequential_sweeping_ = sequential_sweeping;
- }
+ void set_evacuation(bool evacuation) { evacuation_ = evacuation; }
- bool sequential_sweeping() const { return sequential_sweeping_; }
+ bool evacuation() const { return evacuation_; }
// Mark the global table which maps weak objects to dependent code without
// marking its contents.
@@ -660,6 +655,14 @@
// to artificially keep AllocationSites alive for a time.
void MarkAllocationSite(AllocationSite* site);
+ MarkingDeque* marking_deque() { return &marking_deque_; }
+
+ void EnsureMarkingDequeIsCommittedAndInitialize();
+
+ void InitializeMarkingDeque();
+
+ void UncommitMarkingDeque();
+
private:
class SweeperTask;
@@ -705,7 +708,7 @@
base::Semaphore pending_sweeper_jobs_semaphore_;
- bool sequential_sweeping_;
+ bool evacuation_;
SlotsBufferAllocator slots_buffer_allocator_;
@@ -769,7 +772,8 @@
// - Processing of objects reachable through Harmony WeakMaps.
// - Objects reachable due to host application logic like object groups
// or implicit references' groups.
- void ProcessEphemeralMarking(ObjectVisitor* visitor);
+ void ProcessEphemeralMarking(ObjectVisitor* visitor,
+ bool only_process_harmony_weak_collections);
// If the call-site of the top optimized code was not prepared for
// deoptimization, then treat the maps in the code as strong pointers,
@@ -787,10 +791,6 @@
// flag on the marking stack.
void RefillMarkingDeque();
- // After reachable maps have been marked process per context object
- // literal map caches removing unmarked entries.
- void ProcessMapCaches();
-
// Callback function for telling whether the object *p is an unmarked
// heap object.
static bool IsUnmarkedHeapObject(Object** p);
@@ -808,7 +808,6 @@
void TrimEnumCache(Map* map, DescriptorArray* descriptors);
void ClearDependentCode(DependentCode* dependent_code);
- void ClearDependentICList(Object* head);
void ClearNonLiveDependentCode(DependentCode* dependent_code);
int ClearNonLiveDependentCodeInGroup(DependentCode* dependent_code, int group,
int start, int end, int new_start);
@@ -827,6 +826,10 @@
// collections when incremental marking is aborted.
void AbortWeakCollections();
+
+ void ProcessAndClearWeakCells();
+ void AbortWeakCells();
+
// -----------------------------------------------------------------------
// Phase 2: Sweeping to clear mark bits and free non-live objects for
// a non-compacting collection.
@@ -880,6 +883,8 @@
#endif
Heap* heap_;
+ base::VirtualMemory* marking_deque_memory_;
+ bool marking_deque_memory_committed_;
MarkingDeque marking_deque_;
CodeFlusher* code_flusher_;
bool have_code_to_deoptimize_;
@@ -935,14 +940,14 @@
};
-class SequentialSweepingScope BASE_EMBEDDED {
+class EvacuationScope BASE_EMBEDDED {
public:
- explicit SequentialSweepingScope(MarkCompactCollector* collector)
+ explicit EvacuationScope(MarkCompactCollector* collector)
: collector_(collector) {
- collector_->set_sequential_sweeping(true);
+ collector_->set_evacuation(true);
}
- ~SequentialSweepingScope() { collector_->set_sequential_sweeping(false); }
+ ~EvacuationScope() { collector_->set_evacuation(false); }
private:
MarkCompactCollector* collector_;