[Parser] Move background parsing runtime-call-stack logging.

This moves the logging of the RCS event for background parsing tasks out
of the parser and performs it at the end of the background parsing task.
This is necessary in order to log background compile RCS events which happen
after parsing.

BUG=v8:5203

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_chromium_rel_ng
Change-Id: Ie216eeade0279d8243818a8eb59309969775823c
Reviewed-on: https://chromium-review.googlesource.com/776669
Reviewed-by: Marja Hölttä <marja@chromium.org>
Commit-Queue: Ross McIlroy <rmcilroy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#49483}
This commit is contained in:
Ross McIlroy 2017-11-17 16:59:11 +00:00 committed by Commit Bot
parent a76fe16828
commit 6ef1551e16
6 changed files with 21 additions and 13 deletions

View File

@ -2609,7 +2609,7 @@ MaybeLocal<Script> ScriptCompiler::Compile(Local<Context> context,
source->info->set_script(script);
source->parser->UpdateStatistics(isolate, script);
source->info->UpdateStatisticsAfterBackgroundParse(isolate);
source->info->UpdateBackgroundParseStatisticsOnMainThread(isolate);
source->parser->HandleSourceURLComments(isolate, script);
i::Handle<i::SharedFunctionInfo> result;

View File

@ -283,7 +283,7 @@ void UnoptimizedCompileJob::FinalizeOnMainThread(Isolate* isolate) {
Handle<Script> script(Script::cast(shared_->script()), isolate);
parse_info_->set_script(script);
parser_->UpdateStatistics(isolate, script);
parse_info_->UpdateStatisticsAfterBackgroundParse(isolate);
parse_info_->UpdateBackgroundParseStatisticsOnMainThread(isolate);
parser_->HandleSourceURLComments(isolate, script);
{

View File

@ -96,6 +96,8 @@ void BackgroundParsingTask::Run() {
script_data_ = nullptr;
}
source_->info->EmitBackgroundParseStatisticsOnBackgroundThread();
source_->info->set_on_background_thread(false);
source_->info->set_stack_limit(old_stack_limit);
}

View File

@ -163,7 +163,21 @@ void ParseInfo::InitFromIsolate(Isolate* isolate) {
if (isolate->is_collecting_type_profile()) set_collect_type_profile();
}
void ParseInfo::UpdateStatisticsAfterBackgroundParse(Isolate* isolate) {
void ParseInfo::EmitBackgroundParseStatisticsOnBackgroundThread() {
// If runtime call stats was enabled by tracing, emit a trace event at the
// end of background parsing on the background thread.
if (runtime_call_stats_ &&
(FLAG_runtime_stats &
v8::tracing::TracingCategoryObserver::ENABLED_BY_TRACING)) {
auto value = v8::tracing::TracedValue::Create();
runtime_call_stats_->Dump(value.get());
TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("v8.runtime_stats"),
"V8.RuntimeStats", TRACE_EVENT_SCOPE_THREAD,
"runtime-call-stats", std::move(value));
}
}
void ParseInfo::UpdateBackgroundParseStatisticsOnMainThread(Isolate* isolate) {
// Copy over the counters from the background thread to the main counters on
// the isolate.
RuntimeCallStats* main_call_stats = isolate->counters()->runtime_call_stats();

View File

@ -241,7 +241,8 @@ class V8_EXPORT_PRIVATE ParseInfo {
}
}
void UpdateStatisticsAfterBackgroundParse(Isolate* isolate);
void EmitBackgroundParseStatisticsOnBackgroundThread();
void UpdateBackgroundParseStatisticsOnMainThread(Isolate* isolate);
private:
// Various configuration flags for parsing.

View File

@ -3531,15 +3531,6 @@ void Parser::ParseOnBackground(ParseInfo* info) {
if (result != nullptr) *info->cached_data() = logger.GetScriptData();
log_ = nullptr;
}
if (runtime_call_stats_ &&
(FLAG_runtime_stats &
v8::tracing::TracingCategoryObserver::ENABLED_BY_TRACING)) {
auto value = v8::tracing::TracedValue::Create();
runtime_call_stats_->Dump(value.get());
TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("v8.runtime_stats"),
"V8.RuntimeStats", TRACE_EVENT_SCOPE_THREAD,
"runtime-call-stats", std::move(value));
}
}
Parser::TemplateLiteralState Parser::OpenTemplateLiteral(int pos) {