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

Side by Side Diff: src/heap/mark-compact.cc

Issue 1493653002: [heap] Clean up stale store buffer entries for aborted pages. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years 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
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 #include "src/heap/mark-compact.h" 5 #include "src/heap/mark-compact.h"
6 6
7 #include "src/base/atomicops.h" 7 #include "src/base/atomicops.h"
8 #include "src/base/bits.h" 8 #include "src/base/bits.h"
9 #include "src/base/sys-info.h" 9 #include "src/base/sys-info.h"
10 #include "src/code-stubs.h" 10 #include "src/code-stubs.h"
(...skipping 3244 matching lines...) Expand 10 before | Expand all | Expand 10 after
3255 // moved, others are still in place. 3255 // moved, others are still in place.
3256 // We need to: 3256 // We need to:
3257 // - Leave the evacuation candidate flag for later processing of 3257 // - Leave the evacuation candidate flag for later processing of
3258 // slots buffer entries. 3258 // slots buffer entries.
3259 // - Leave the slots buffer there for processing of entries added by 3259 // - Leave the slots buffer there for processing of entries added by
3260 // the write barrier. 3260 // the write barrier.
3261 // - Rescan the page as slot recording in the migration buffer only 3261 // - Rescan the page as slot recording in the migration buffer only
3262 // happens upon moving (which we potentially didn't do). 3262 // happens upon moving (which we potentially didn't do).
3263 // - Leave the page in the list of pages of a space since we could not 3263 // - Leave the page in the list of pages of a space since we could not
3264 // fully evacuate it. 3264 // fully evacuate it.
3265 // - Mark them for rescanning for store buffer entries as we otherwise
3266 // might have stale store buffer entries that become "valid" again
3267 // after reusing the memory. Note that clearing store buffer entries
3268 // for aborted pages happens below this block.
3265 DCHECK(p->IsEvacuationCandidate()); 3269 DCHECK(p->IsEvacuationCandidate());
3266 p->SetFlag(Page::COMPACTION_WAS_ABORTED); 3270 p->SetFlag(Page::COMPACTION_WAS_ABORTED);
3271 p->set_scan_on_scavenge(true);
3267 abandoned_pages++; 3272 abandoned_pages++;
3268 break; 3273 break;
3269 case MemoryChunk::kCompactingFinalize: 3274 case MemoryChunk::kCompactingFinalize:
3270 DCHECK(p->IsEvacuationCandidate()); 3275 DCHECK(p->IsEvacuationCandidate());
3271 p->SetWasSwept(); 3276 p->SetWasSwept();
3272 p->Unlink(); 3277 p->Unlink();
3273 break; 3278 break;
3274 case MemoryChunk::kCompactingDone: 3279 case MemoryChunk::kCompactingDone:
3275 DCHECK(p->IsFlagSet(Page::POPULAR_PAGE)); 3280 DCHECK(p->IsFlagSet(Page::POPULAR_PAGE));
3276 DCHECK(p->IsFlagSet(Page::RESCAN_ON_EVACUATION)); 3281 DCHECK(p->IsFlagSet(Page::RESCAN_ON_EVACUATION));
3277 break; 3282 break;
3278 default: 3283 default:
3279 // We should not observe kCompactingInProgress, or kCompactingDone. 3284 // We should not observe kCompactingInProgress, or kCompactingDone.
3280 UNREACHABLE(); 3285 UNREACHABLE();
3281 } 3286 }
3282 p->parallel_compaction_state().SetValue(MemoryChunk::kCompactingDone); 3287 p->parallel_compaction_state().SetValue(MemoryChunk::kCompactingDone);
3283 } 3288 }
3289 if (abandoned_pages > 0) {
3290 heap()->FilterStoreBufferEntriesForAbortedPages();
3291 }
3284 if (FLAG_trace_fragmentation) { 3292 if (FLAG_trace_fragmentation) {
3285 PrintIsolate(isolate(), 3293 PrintIsolate(isolate(),
3286 "%8.0f ms: compaction: parallel=%d pages=%d aborted=%d " 3294 "%8.0f ms: compaction: parallel=%d pages=%d aborted=%d "
3287 "tasks=%d cores=%d live_bytes=%" V8_PTR_PREFIX 3295 "tasks=%d cores=%d live_bytes=%" V8_PTR_PREFIX
3288 "d compaction_speed=%" V8_PTR_PREFIX "d\n", 3296 "d compaction_speed=%" V8_PTR_PREFIX "d\n",
3289 isolate()->time_millis_since_init(), FLAG_parallel_compaction, 3297 isolate()->time_millis_since_init(), FLAG_parallel_compaction,
3290 num_pages, abandoned_pages, num_tasks, 3298 num_pages, abandoned_pages, num_tasks,
3291 base::SysInfo::NumberOfProcessors(), live_bytes, 3299 base::SysInfo::NumberOfProcessors(), live_bytes,
3292 compaction_speed); 3300 compaction_speed);
3293 } 3301 }
(...skipping 814 matching lines...) Expand 10 before | Expand all | Expand 10 after
4108 MarkBit mark_bit = Marking::MarkBitFrom(host); 4116 MarkBit mark_bit = Marking::MarkBitFrom(host);
4109 if (Marking::IsBlack(mark_bit)) { 4117 if (Marking::IsBlack(mark_bit)) {
4110 RelocInfo rinfo(isolate(), pc, RelocInfo::CODE_TARGET, 0, host); 4118 RelocInfo rinfo(isolate(), pc, RelocInfo::CODE_TARGET, 0, host);
4111 RecordRelocSlot(&rinfo, target); 4119 RecordRelocSlot(&rinfo, target);
4112 } 4120 }
4113 } 4121 }
4114 } 4122 }
4115 4123
4116 } // namespace internal 4124 } // namespace internal
4117 } // namespace v8 4125 } // namespace v8
OLDNEW
« no previous file with comments | « src/heap/heap.cc ('k') | src/heap/spaces.h » ('j') | src/heap/spaces.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698