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

Unified Diff: src/heap.cc

Issue 27133: - Pass the knowledge whether the old GC is compacting to the GC prologue and ... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 11 years, 10 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
Index: src/heap.cc
===================================================================
--- src/heap.cc (revision 1355)
+++ src/heap.cc (working copy)
@@ -419,12 +419,16 @@
tracer->set_full_gc_count(mc_count_);
LOG(ResourceEvent("markcompact", "begin"));
- MarkCompactPrologue();
+ MarkCompactCollector::Prepare(tracer);
- MarkCompactCollector::CollectGarbage(tracer);
+ bool is_compacting = MarkCompactCollector::IsCompacting();
- MarkCompactEpilogue();
+ MarkCompactPrologue(is_compacting);
+ MarkCompactCollector::CollectGarbage();
+
+ MarkCompactEpilogue(is_compacting);
+
LOG(ResourceEvent("markcompact", "end"));
gc_state_ = NOT_IN_GC;
@@ -435,18 +439,22 @@
}
-void Heap::MarkCompactPrologue() {
+void Heap::MarkCompactPrologue(bool is_compacting) {
+ // At any old GC clear the keyed lookup cache to enable collection of unused
+ // maps.
ClearKeyedLookupCache();
+
CompilationCache::MarkCompactPrologue();
RegExpImpl::OldSpaceCollectionPrologue();
- Top::MarkCompactPrologue();
- ThreadManager::MarkCompactPrologue();
+
+ Top::MarkCompactPrologue(is_compacting);
+ ThreadManager::MarkCompactPrologue(is_compacting);
}
-void Heap::MarkCompactEpilogue() {
- Top::MarkCompactEpilogue();
- ThreadManager::MarkCompactEpilogue();
+void Heap::MarkCompactEpilogue(bool is_compacting) {
+ Top::MarkCompactEpilogue(is_compacting);
+ ThreadManager::MarkCompactEpilogue(is_compacting);
}
@@ -1601,7 +1609,7 @@
Object* Heap::CreateCode(const CodeDesc& desc,
ScopeInfo<>* sinfo,
Code::Flags flags,
- Code** self_reference) {
+ Handle<Object> self_reference) {
// Compute size
int body_size = RoundUp(desc.instr_size + desc.reloc_size, kObjectAlignment);
int sinfo_size = 0;
@@ -1624,9 +1632,10 @@
code->set_sinfo_size(sinfo_size);
code->set_flags(flags);
code->set_ic_flag(Code::IC_TARGET_IS_ADDRESS);
- // Allow self references to created code object.
- if (self_reference != NULL) {
- *self_reference = code;
+ // Allow self references to created code object by patching the handle to
+ // point to the newly allocated Code object.
+ if (!self_reference.is_null()) {
+ *(self_reference.location()) = code;
}
// Migrate generated code.
// The generated code can contain Object** values (typically from handles)

Powered by Google App Engine
This is Rietveld 408576698