summaryrefslogtreecommitdiff
path: root/deps/v8/src/debug/debug-coverage.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/debug/debug-coverage.cc')
-rw-r--r--deps/v8/src/debug/debug-coverage.cc50
1 files changed, 20 insertions, 30 deletions
diff --git a/deps/v8/src/debug/debug-coverage.cc b/deps/v8/src/debug/debug-coverage.cc
index 8b87286d29..d53a6fdc4e 100644
--- a/deps/v8/src/debug/debug-coverage.cc
+++ b/deps/v8/src/debug/debug-coverage.cc
@@ -382,11 +382,12 @@ std::unique_ptr<Coverage> Coverage::CollectPrecise(Isolate* isolate) {
DCHECK(!isolate->is_best_effort_code_coverage());
std::unique_ptr<Coverage> result =
Collect(isolate, isolate->code_coverage_mode());
- if (isolate->is_precise_binary_code_coverage() ||
- isolate->is_block_binary_code_coverage()) {
+ if (!isolate->is_collecting_type_profile() &&
+ (isolate->is_precise_binary_code_coverage() ||
+ isolate->is_block_binary_code_coverage())) {
// We do not have to hold onto feedback vectors for invocations we already
// reported. So we can reset the list.
- isolate->SetCodeCoverageList(*ArrayList::New(isolate, 0));
+ isolate->SetFeedbackVectorsForProfilingTools(*ArrayList::New(isolate, 0));
}
return result;
}
@@ -407,9 +408,11 @@ std::unique_ptr<Coverage> Coverage::Collect(
case v8::debug::Coverage::kPreciseBinary:
case v8::debug::Coverage::kPreciseCount: {
// Feedback vectors are already listed to prevent losing them to GC.
- DCHECK(isolate->factory()->code_coverage_list()->IsArrayList());
- Handle<ArrayList> list =
- Handle<ArrayList>::cast(isolate->factory()->code_coverage_list());
+ DCHECK(isolate->factory()
+ ->feedback_vectors_for_profiling_tools()
+ ->IsArrayList());
+ Handle<ArrayList> list = Handle<ArrayList>::cast(
+ isolate->factory()->feedback_vectors_for_profiling_tools());
for (int i = 0; i < list->Length(); i++) {
FeedbackVector* vector = FeedbackVector::cast(list->Get(i));
SharedFunctionInfo* shared = vector->shared_function_info();
@@ -421,7 +424,9 @@ std::unique_ptr<Coverage> Coverage::Collect(
break;
}
case v8::debug::Coverage::kBestEffort: {
- DCHECK(!isolate->factory()->code_coverage_list()->IsArrayList());
+ DCHECK(!isolate->factory()
+ ->feedback_vectors_for_profiling_tools()
+ ->IsArrayList());
DCHECK_EQ(v8::debug::Coverage::kBestEffort, collectionMode);
HeapIterator heap_iterator(isolate->heap());
while (HeapObject* current_obj = heap_iterator.next()) {
@@ -520,7 +525,10 @@ void Coverage::SelectMode(Isolate* isolate, debug::Coverage::Mode mode) {
// following coverage recording (without reloads) will be at function
// granularity.
isolate->debug()->RemoveAllCoverageInfos();
- isolate->SetCodeCoverageList(isolate->heap()->undefined_value());
+ if (!isolate->is_collecting_type_profile()) {
+ isolate->SetFeedbackVectorsForProfilingTools(
+ isolate->heap()->undefined_value());
+ }
break;
case debug::Coverage::kBlockBinary:
case debug::Coverage::kBlockCount:
@@ -530,29 +538,11 @@ void Coverage::SelectMode(Isolate* isolate, debug::Coverage::Mode mode) {
// Remove all optimized function. Optimized and inlined functions do not
// increment invocation count.
Deoptimizer::DeoptimizeAll(isolate);
- // Collect existing feedback vectors.
- std::vector<Handle<FeedbackVector>> vectors;
- {
- HeapIterator heap_iterator(isolate->heap());
- while (HeapObject* current_obj = heap_iterator.next()) {
- if (current_obj->IsSharedFunctionInfo()) {
- SharedFunctionInfo* shared = SharedFunctionInfo::cast(current_obj);
- shared->set_has_reported_binary_coverage(false);
- } else if (current_obj->IsFeedbackVector()) {
- FeedbackVector* vector = FeedbackVector::cast(current_obj);
- SharedFunctionInfo* shared = vector->shared_function_info();
- if (!shared->IsSubjectToDebugging()) continue;
- vector->clear_invocation_count();
- vectors.emplace_back(vector, isolate);
- }
- }
+ if (isolate->factory()
+ ->feedback_vectors_for_profiling_tools()
+ ->IsUndefined(isolate)) {
+ isolate->InitializeVectorListFromHeap();
}
- // Add collected feedback vectors to the root list lest we lose them to
- // GC.
- Handle<ArrayList> list =
- ArrayList::New(isolate, static_cast<int>(vectors.size()));
- for (const auto& vector : vectors) list = ArrayList::Add(list, vector);
- isolate->SetCodeCoverageList(*list);
break;
}
}