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

Unified Diff: src/parsing/parser.cc

Issue 2490643002: [counters] Implement off-isolate RuntimeCallStats for the Preparser (Closed)
Patch Set: fixing declaration Created 4 years, 1 month 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
« no previous file with comments | « src/parsing/parser.h ('k') | src/parsing/parser-base.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/parsing/parser.cc
diff --git a/src/parsing/parser.cc b/src/parsing/parser.cc
index 9e7f3ad38eac62ad77a9d6a398e94fc24452be11..83df2d9368642768509cf86ae63c47c6cc4ce528 100644
--- a/src/parsing/parser.cc
+++ b/src/parsing/parser.cc
@@ -581,7 +581,8 @@ Expression* Parser::NewV8Intrinsic(const AstRawString* name,
Parser::Parser(ParseInfo* info)
: ParserBase<Parser>(info->zone(), &scanner_, info->stack_limit(),
- info->extension(), info->ast_value_factory()),
+ info->extension(), info->ast_value_factory(),
+ info->isolate()->counters()->runtime_call_stats()),
scanner_(info->unicode_cache()),
reusable_preparser_(nullptr),
original_scope_(nullptr),
@@ -665,7 +666,9 @@ FunctionLiteral* Parser::ParseProgram(Isolate* isolate, ParseInfo* info) {
// called in the main thread.
DCHECK(parsing_on_main_thread_);
- RuntimeCallTimerScope runtime_timer(isolate, &RuntimeCallStats::ParseProgram);
+ RuntimeCallTimerScope runtime_timer(
+ runtime_call_stats_, info->is_eval() ? &RuntimeCallStats::ParseEval
+ : &RuntimeCallStats::ParseProgram);
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.ParseProgram");
Handle<String> source(String::cast(info->script()->source()));
isolate->counters()->total_parse_size()->Increment(source->length());
@@ -828,7 +831,7 @@ FunctionLiteral* Parser::ParseFunction(Isolate* isolate, ParseInfo* info) {
// It's OK to use the Isolate & counters here, since this function is only
// called in the main thread.
DCHECK(parsing_on_main_thread_);
- RuntimeCallTimerScope runtime_timer(isolate,
+ RuntimeCallTimerScope runtime_timer(runtime_call_stats_,
&RuntimeCallStats::ParseFunction);
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.ParseFunction");
Handle<String> source(String::cast(info->script()->source()));
@@ -2575,6 +2578,9 @@ FunctionLiteral* Parser::ParseFunctionLiteral(
bool is_lazy_top_level_function =
can_preparse && impl()->AllowsLazyParsingWithoutUnresolvedVariables();
+ RuntimeCallTimerScope runtime_timer(runtime_call_stats_,
+ &RuntimeCallStats::ParseFunctionLiteral);
+
// Determine whether we can still lazy parse the inner function.
// The preconditions are:
// - Lazy compilation has to be enabled.
@@ -2692,6 +2698,13 @@ FunctionLiteral* Parser::ParseFunctionLiteral(
: (use_temp_zone ? "Preparse resolution" : "Full parse"),
scope->start_position(), scope->end_position(),
function_name->byte_length(), function_name->raw_data());
+ if (is_lazy_top_level_function) {
+ CHANGE_CURRENT_RUNTIME_COUNTER(runtime_call_stats_,
+ PreParseNoVariableResolution);
+ } else if (use_temp_zone) {
+ CHANGE_CURRENT_RUNTIME_COUNTER(runtime_call_stats_,
+ PreParseWithVariableResolution);
+ }
}
// Validate function name. We can do this only after parsing the function,
@@ -3284,7 +3297,8 @@ PreParser::PreParseResult Parser::ParseFunctionWithPreParser(
if (reusable_preparser_ == NULL) {
reusable_preparser_ = new PreParser(zone(), &scanner_, ast_value_factory(),
- &pending_error_handler_, stack_limit_);
+ &pending_error_handler_,
+ runtime_call_stats_, stack_limit_);
reusable_preparser_->set_allow_lazy(true);
#define SET_ALLOW(name) reusable_preparser_->set_allow_##name(allow_##name());
SET_ALLOW(natives);
@@ -3758,6 +3772,15 @@ void Parser::Internalize(Isolate* isolate, Handle<Script> script, bool error) {
}
isolate->counters()->total_preparse_skipped()->Increment(
total_preparse_skipped_);
+ if (!parsing_on_main_thread_ &&
+ FLAG_runtime_stats ==
+ v8::tracing::TracingCategoryObserver::ENABLED_BY_NATIVE) {
+ // Copy over the counters from the background thread to the main counters on
+ // the isolate.
+ // TODO(cbruni,lpy): properly attach the runtime stats to the trace for
+ // background parsing.
+ isolate->counters()->runtime_call_stats()->Add(runtime_call_stats_);
+ }
}
@@ -3803,6 +3826,10 @@ void Parser::ParseOnBackground(ParseInfo* info) {
ParserLogger logger;
if (produce_cached_parse_data()) log_ = &logger;
+ if (FLAG_runtime_stats) {
+ // Create separate runtime stats for background parsing.
+ runtime_call_stats_ = new (zone()) RuntimeCallStats();
+ }
std::unique_ptr<Utf16CharacterStream> stream;
Utf16CharacterStream* stream_ptr;
@@ -3842,6 +3869,10 @@ void Parser::ParseOnBackground(ParseInfo* info) {
if (result != NULL) *info->cached_data() = logger.GetScriptData();
log_ = NULL;
}
+ if (FLAG_runtime_stats) {
+ // TODO(cbruni,lpy): properly attach the runtime stats to the trace for
+ // background parsing.
+ }
}
Parser::TemplateLiteralState Parser::OpenTemplateLiteral(int pos) {
« no previous file with comments | « src/parsing/parser.h ('k') | src/parsing/parser-base.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698