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

Side by Side Diff: src/compiler.cc

Issue 2579243003: [counters] Add counter scopes for the Compiler::Analyze phases (Closed)
Patch Set: [counters] rebase Created 3 years, 11 months 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/compiler.h" 5 #include "src/compiler.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <memory> 8 #include <memory>
9 9
10 #include "src/asmjs/asm-js.h" 10 #include "src/asmjs/asm-js.h"
(...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after
546 // Cache optimized context-specific code. 546 // Cache optimized context-specific code.
547 Handle<JSFunction> function = info->closure(); 547 Handle<JSFunction> function = info->closure();
548 Handle<SharedFunctionInfo> shared(function->shared()); 548 Handle<SharedFunctionInfo> shared(function->shared());
549 Handle<LiteralsArray> literals(function->literals()); 549 Handle<LiteralsArray> literals(function->literals());
550 Handle<Context> native_context(function->context()->native_context()); 550 Handle<Context> native_context(function->context()->native_context());
551 SharedFunctionInfo::AddToOptimizedCodeMap(shared, native_context, code, 551 SharedFunctionInfo::AddToOptimizedCodeMap(shared, native_context, code,
552 literals, info->osr_ast_id()); 552 literals, info->osr_ast_id());
553 } 553 }
554 554
555 bool Renumber(ParseInfo* parse_info) { 555 bool Renumber(ParseInfo* parse_info) {
556 RuntimeCallTimerScope runtimeTimer(parse_info->isolate(),
557 &RuntimeCallStats::CompileRenumber);
556 if (!AstNumbering::Renumber(parse_info->isolate(), parse_info->zone(), 558 if (!AstNumbering::Renumber(parse_info->isolate(), parse_info->zone(),
557 parse_info->literal())) { 559 parse_info->literal())) {
558 return false; 560 return false;
559 } 561 }
560 Handle<SharedFunctionInfo> shared_info = parse_info->shared_info(); 562 Handle<SharedFunctionInfo> shared_info = parse_info->shared_info();
561 if (!shared_info.is_null()) { 563 if (!shared_info.is_null()) {
562 FunctionLiteral* lit = parse_info->literal(); 564 FunctionLiteral* lit = parse_info->literal();
563 shared_info->set_ast_node_count(lit->ast_node_count()); 565 shared_info->set_ast_node_count(lit->ast_node_count());
564 if (lit->dont_optimize_reason() != kNoReason) { 566 if (lit->dont_optimize_reason() != kNoReason) {
565 shared_info->DisableOptimization(lit->dont_optimize_reason()); 567 shared_info->DisableOptimization(lit->dont_optimize_reason());
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after
893 RecordFunctionCompilation(CodeEventListener::LAZY_COMPILE_TAG, &info); 895 RecordFunctionCompilation(CodeEventListener::LAZY_COMPILE_TAG, &info);
894 896
895 return info.code(); 897 return info.code();
896 } 898 }
897 899
898 MaybeHandle<Code> GetLazyCode(Handle<JSFunction> function) { 900 MaybeHandle<Code> GetLazyCode(Handle<JSFunction> function) {
899 Isolate* isolate = function->GetIsolate(); 901 Isolate* isolate = function->GetIsolate();
900 DCHECK(!isolate->has_pending_exception()); 902 DCHECK(!isolate->has_pending_exception());
901 DCHECK(!function->is_compiled()); 903 DCHECK(!function->is_compiled());
902 TimerEventScope<TimerEventCompileCode> compile_timer(isolate); 904 TimerEventScope<TimerEventCompileCode> compile_timer(isolate);
905 RuntimeCallTimerScope runtimeTimer(isolate,
906 &RuntimeCallStats::CompileFunction);
903 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.CompileCode"); 907 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.CompileCode");
904 AggregatedHistogramTimerScope timer(isolate->counters()->compile_lazy()); 908 AggregatedHistogramTimerScope timer(isolate->counters()->compile_lazy());
905 909
906 Handle<Code> cached_code; 910 Handle<Code> cached_code;
907 if (GetCodeFromOptimizedCodeMap(function, BailoutId::None()) 911 if (GetCodeFromOptimizedCodeMap(function, BailoutId::None())
908 .ToHandle(&cached_code)) { 912 .ToHandle(&cached_code)) {
909 if (FLAG_trace_opt) { 913 if (FLAG_trace_opt) {
910 PrintF("[found optimized code for "); 914 PrintF("[found optimized code for ");
911 function->ShortPrint(); 915 function->ShortPrint();
912 PrintF(" during unoptimized compile]\n"); 916 PrintF(" during unoptimized compile]\n");
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
980 } 984 }
981 } 985 }
982 986
983 return result; 987 return result;
984 } 988 }
985 989
986 990
987 Handle<SharedFunctionInfo> CompileToplevel(CompilationInfo* info) { 991 Handle<SharedFunctionInfo> CompileToplevel(CompilationInfo* info) {
988 Isolate* isolate = info->isolate(); 992 Isolate* isolate = info->isolate();
989 TimerEventScope<TimerEventCompileCode> timer(isolate); 993 TimerEventScope<TimerEventCompileCode> timer(isolate);
990 RuntimeCallTimerScope runtimeTimer(isolate, &RuntimeCallStats::CompileCode);
991 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.CompileCode"); 994 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.CompileCode");
992 PostponeInterruptsScope postpone(isolate); 995 PostponeInterruptsScope postpone(isolate);
993 DCHECK(!isolate->native_context().is_null()); 996 DCHECK(!isolate->native_context().is_null());
994 ParseInfo* parse_info = info->parse_info(); 997 ParseInfo* parse_info = info->parse_info();
998
999 RuntimeCallTimerScope runtimeTimer(
1000 isolate, parse_info->is_eval() ? &RuntimeCallStats::CompileEval
1001 : &RuntimeCallStats::CompileScript);
1002
995 Handle<Script> script = parse_info->script(); 1003 Handle<Script> script = parse_info->script();
996 1004
997 // TODO(svenpanne) Obscure place for this, perhaps move to OnBeforeCompile? 1005 // TODO(svenpanne) Obscure place for this, perhaps move to OnBeforeCompile?
998 FixedArray* array = isolate->native_context()->embedder_data(); 1006 FixedArray* array = isolate->native_context()->embedder_data();
999 script->set_context_data(array->get(v8::Context::kDebugIdIndex)); 1007 script->set_context_data(array->get(v8::Context::kDebugIdIndex));
1000 1008
1001 Handle<SharedFunctionInfo> result; 1009 Handle<SharedFunctionInfo> result;
1002 1010
1003 { VMState<COMPILER> state(info->isolate()); 1011 { VMState<COMPILER> state(info->isolate());
1004 if (parse_info->literal() == nullptr && 1012 if (parse_info->literal() == nullptr &&
1005 !parsing::ParseProgram(parse_info)) { 1013 !parsing::ParseProgram(parse_info)) {
1006 return Handle<SharedFunctionInfo>::null(); 1014 return Handle<SharedFunctionInfo>::null();
1007 } 1015 }
1008 1016
1009 EnsureSharedFunctionInfosArrayOnScript(parse_info); 1017 EnsureSharedFunctionInfosArrayOnScript(parse_info);
1010 1018
1011 FunctionLiteral* lit = parse_info->literal(); 1019 FunctionLiteral* lit = parse_info->literal();
1012 1020
1013 // Measure how long it takes to do the compilation; only take the 1021 // Measure how long it takes to do the compilation; only take the
1014 // rest of the function into account to avoid overlap with the 1022 // rest of the function into account to avoid overlap with the
1015 // parsing statistics. 1023 // parsing statistics.
1016 RuntimeCallTimerScope runtimeTimer(
1017 isolate, parse_info->is_eval() ? &RuntimeCallStats::CompileEval
1018 : &RuntimeCallStats::Compile);
1019 HistogramTimer* rate = parse_info->is_eval() 1024 HistogramTimer* rate = parse_info->is_eval()
1020 ? info->isolate()->counters()->compile_eval() 1025 ? info->isolate()->counters()->compile_eval()
1021 : info->isolate()->counters()->compile(); 1026 : info->isolate()->counters()->compile();
1022 HistogramTimerScope timer(rate); 1027 HistogramTimerScope timer(rate);
1023 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), 1028 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"),
1024 parse_info->is_eval() ? "V8.CompileEval" : "V8.Compile"); 1029 parse_info->is_eval() ? "V8.CompileEval" : "V8.Compile");
1025 1030
1026 // Allocate a shared function info object. 1031 // Allocate a shared function info object.
1027 DCHECK_EQ(kNoSourcePosition, lit->function_token_position()); 1032 DCHECK_EQ(kNoSourcePosition, lit->function_token_position());
1028 result = isolate->factory()->NewSharedFunctionInfoForLiteral(lit, script); 1033 result = isolate->factory()->NewSharedFunctionInfoForLiteral(lit, script);
(...skipping 613 matching lines...) Expand 10 before | Expand all | Expand 10 after
1642 if (mode == LazyCompilationMode::kAlways || 1647 if (mode == LazyCompilationMode::kAlways ||
1643 !literal->ShouldEagerCompile()) { 1648 !literal->ShouldEagerCompile()) {
1644 info.SetCode(isolate->builtins()->CompileLazy()); 1649 info.SetCode(isolate->builtins()->CompileLazy());
1645 Scope* outer_scope = literal->scope()->GetOuterScopeWithContext(); 1650 Scope* outer_scope = literal->scope()->GetOuterScopeWithContext();
1646 if (outer_scope) { 1651 if (outer_scope) {
1647 result->set_outer_scope_info(*outer_scope->scope_info()); 1652 result->set_outer_scope_info(*outer_scope->scope_info());
1648 } 1653 }
1649 } else { 1654 } else {
1650 // Generate code 1655 // Generate code
1651 TimerEventScope<TimerEventCompileCode> timer(isolate); 1656 TimerEventScope<TimerEventCompileCode> timer(isolate);
1652 RuntimeCallTimerScope runtimeTimer(isolate, 1657 RuntimeCallTimerScope runtimeTimer(
1653 &RuntimeCallStats::CompileCode); 1658 isolate, &RuntimeCallStats::CompileInnerFunction);
1654 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.CompileCode"); 1659 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.CompileCode");
1655 if (Renumber(info.parse_info()) && GenerateUnoptimizedCode(&info)) { 1660 if (Renumber(info.parse_info()) && GenerateUnoptimizedCode(&info)) {
1656 // Code generation will ensure that the feedback vector is present and 1661 // Code generation will ensure that the feedback vector is present and
1657 // appropriately sized. 1662 // appropriately sized.
1658 DCHECK(!info.code().is_null()); 1663 DCHECK(!info.code().is_null());
1659 if (literal->should_be_used_once_hint()) { 1664 if (literal->should_be_used_once_hint()) {
1660 info.code()->MarkToBeExecutedOnce(isolate); 1665 info.code()->MarkToBeExecutedOnce(isolate);
1661 } 1666 }
1662 } else { 1667 } else {
1663 return Handle<SharedFunctionInfo>::null(); 1668 return Handle<SharedFunctionInfo>::null();
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
1764 DCHECK(shared->is_compiled()); 1769 DCHECK(shared->is_compiled());
1765 function->set_literals(cached.literals); 1770 function->set_literals(cached.literals);
1766 } else if (shared->is_compiled()) { 1771 } else if (shared->is_compiled()) {
1767 // TODO(mvstanton): pass pretenure flag to EnsureLiterals. 1772 // TODO(mvstanton): pass pretenure flag to EnsureLiterals.
1768 JSFunction::EnsureLiterals(function); 1773 JSFunction::EnsureLiterals(function);
1769 } 1774 }
1770 } 1775 }
1771 1776
1772 } // namespace internal 1777 } // namespace internal
1773 } // namespace v8 1778 } // namespace v8
OLDNEW
« no previous file with comments | « src/ast/scopes.cc ('k') | src/counters.h » ('j') | src/parsing/rewriter.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698