[v8] Add finer grain trace events to EVACUATE_COPY step.
This is in an attempt to diagnose why it's seen as a highly idle step in some traces, e.g. https://docs.google.com/document/d/1bdlWAWeP3j2yo2DYfeok6URqFCrt57yx-nucGMybGGQ/edit#heading=h.1baa99zf8jc0 https://drive.google.com/file/d/1kLfH1dM5TOJbiD2v_KJsxWXakpd2k-7q/view R=mlippautz@chromium.org Bug: chromium:813824 Change-Id: I743d9b7430a3970751398b4c5a4d569fbcae2cbe Reviewed-on: https://chromium-review.googlesource.com/926844 Reviewed-by: Michael Lippautz <mlippautz@chromium.org> Commit-Queue: Gabriel Charette <gab@chromium.org> Cr-Commit-Position: refs/heads/master@{#51400}
This commit is contained in:
parent
4a2d9b1b20
commit
f64a87c45a
@ -3036,6 +3036,7 @@ class Evacuator : public Malloced {
|
||||
};
|
||||
|
||||
void Evacuator::EvacuatePage(Page* page) {
|
||||
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.gc"), "Evacuator::EvacuatePage");
|
||||
DCHECK(page->SweepingDone());
|
||||
intptr_t saved_live_bytes = 0;
|
||||
double evacuation_time = 0.0;
|
||||
@ -3093,11 +3094,15 @@ class FullEvacuator : public Evacuator {
|
||||
};
|
||||
|
||||
void FullEvacuator::RawEvacuatePage(Page* page, intptr_t* live_bytes) {
|
||||
const EvacuationMode evacuation_mode = ComputeEvacuationMode(page);
|
||||
TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("v8.gc"),
|
||||
"FullEvacuator::RawEvacuatePage", "evacuation_mode",
|
||||
evacuation_mode);
|
||||
MarkCompactCollector::NonAtomicMarkingState* marking_state =
|
||||
collector_->non_atomic_marking_state();
|
||||
*live_bytes = marking_state->live_bytes(page);
|
||||
HeapObject* failed_object = nullptr;
|
||||
switch (ComputeEvacuationMode(page)) {
|
||||
switch (evacuation_mode) {
|
||||
case kObjectsNewToOld:
|
||||
LiveObjectVisitor::VisitBlackObjectsNoFail(
|
||||
page, marking_state, &new_space_visitor_,
|
||||
@ -3154,6 +3159,8 @@ class YoungGenerationEvacuator : public Evacuator {
|
||||
|
||||
void YoungGenerationEvacuator::RawEvacuatePage(Page* page,
|
||||
intptr_t* live_bytes) {
|
||||
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.gc"),
|
||||
"YoungGenerationEvacuator::RawEvacuatePage");
|
||||
MinorMarkCompactCollector::NonAtomicMarkingState* marking_state =
|
||||
collector_->non_atomic_marking_state();
|
||||
*live_bytes = marking_state->live_bytes(page);
|
||||
@ -3394,8 +3401,12 @@ bool LiveObjectVisitor::VisitBlackObjects(MemoryChunk* chunk,
|
||||
Visitor* visitor,
|
||||
IterationMode iteration_mode,
|
||||
HeapObject** failed_object) {
|
||||
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.gc"),
|
||||
"LiveObjectVisitor::VisitBlackObjects");
|
||||
for (auto object_and_size :
|
||||
LiveObjectRange<kBlackObjects>(chunk, marking_state->bitmap(chunk))) {
|
||||
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.gc"),
|
||||
"LiveObjectVisitor::VisitBlackObjects Visit");
|
||||
HeapObject* const object = object_and_size.first;
|
||||
if (!visitor->Visit(object, object_and_size.second)) {
|
||||
if (iteration_mode == kClearMarkbits) {
|
||||
@ -3408,6 +3419,8 @@ bool LiveObjectVisitor::VisitBlackObjects(MemoryChunk* chunk,
|
||||
}
|
||||
}
|
||||
if (iteration_mode == kClearMarkbits) {
|
||||
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.gc"),
|
||||
"LiveObjectVisitor::VisitBlackObjects ClearLiveness");
|
||||
marking_state->ClearLiveness(chunk);
|
||||
}
|
||||
return true;
|
||||
@ -3418,8 +3431,12 @@ void LiveObjectVisitor::VisitBlackObjectsNoFail(MemoryChunk* chunk,
|
||||
MarkingState* marking_state,
|
||||
Visitor* visitor,
|
||||
IterationMode iteration_mode) {
|
||||
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.gc"),
|
||||
"LiveObjectVisitor::VisitBlackObjectsNoFail");
|
||||
for (auto object_and_size :
|
||||
LiveObjectRange<kBlackObjects>(chunk, marking_state->bitmap(chunk))) {
|
||||
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.gc"),
|
||||
"LiveObjectVisitor::VisitBlackObjectsNoFail Visit");
|
||||
HeapObject* const object = object_and_size.first;
|
||||
DCHECK(marking_state->IsBlack(object));
|
||||
const bool success = visitor->Visit(object, object_and_size.second);
|
||||
@ -3427,6 +3444,8 @@ void LiveObjectVisitor::VisitBlackObjectsNoFail(MemoryChunk* chunk,
|
||||
DCHECK(success);
|
||||
}
|
||||
if (iteration_mode == kClearMarkbits) {
|
||||
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.gc"),
|
||||
"LiveObjectVisitor::VisitBlackObjectsNoFail ClearLiveness");
|
||||
marking_state->ClearLiveness(chunk);
|
||||
}
|
||||
}
|
||||
@ -3436,8 +3455,12 @@ void LiveObjectVisitor::VisitGreyObjectsNoFail(MemoryChunk* chunk,
|
||||
MarkingState* marking_state,
|
||||
Visitor* visitor,
|
||||
IterationMode iteration_mode) {
|
||||
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.gc"),
|
||||
"LiveObjectVisitor::VisitGreyObjectsNoFail");
|
||||
for (auto object_and_size :
|
||||
LiveObjectRange<kGreyObjects>(chunk, marking_state->bitmap(chunk))) {
|
||||
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.gc"),
|
||||
"LiveObjectVisitor::VisitGreyObjectsNoFail Visit");
|
||||
HeapObject* const object = object_and_size.first;
|
||||
DCHECK(marking_state->IsGrey(object));
|
||||
const bool success = visitor->Visit(object, object_and_size.second);
|
||||
@ -3445,6 +3468,8 @@ void LiveObjectVisitor::VisitGreyObjectsNoFail(MemoryChunk* chunk,
|
||||
DCHECK(success);
|
||||
}
|
||||
if (iteration_mode == kClearMarkbits) {
|
||||
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.gc"),
|
||||
"LiveObjectVisitor::VisitGreyObjectsNoFail ClearLiveness");
|
||||
marking_state->ClearLiveness(chunk);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user