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

Side by Side Diff: src/compiler.cc

Issue 2187693002: [Tracing] Embed V8 runtime call stats into tracing. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 4 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 645 matching lines...) Expand 10 before | Expand all | Expand 10 after
656 if (!info->is_optimizing_from_bytecode()) { 656 if (!info->is_optimizing_from_bytecode()) {
657 if (!Compiler::ParseAndAnalyze(info->parse_info())) return false; 657 if (!Compiler::ParseAndAnalyze(info->parse_info())) return false;
658 EnsureFeedbackMetadata(info); 658 EnsureFeedbackMetadata(info);
659 } 659 }
660 660
661 JSFunction::EnsureLiterals(info->closure()); 661 JSFunction::EnsureLiterals(info->closure());
662 662
663 TimerEventScope<TimerEventRecompileSynchronous> timer(isolate); 663 TimerEventScope<TimerEventRecompileSynchronous> timer(isolate);
664 RuntimeCallTimerScope runtimeTimer(isolate, 664 RuntimeCallTimerScope runtimeTimer(isolate,
665 &RuntimeCallStats::RecompileSynchronous); 665 &RuntimeCallStats::RecompileSynchronous);
666 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), 666 TRACE_EVENT_RUNTIME_CALL_STATS_TRACING_SCOPED(
667 "V8.RecompileSynchronous"); 667 isolate, &tracing::TraceEventStatsTable::RecompileSynchronous);
668 668
669 if (job->CreateGraph() != CompilationJob::SUCCEEDED || 669 if (job->CreateGraph() != CompilationJob::SUCCEEDED ||
670 job->OptimizeGraph() != CompilationJob::SUCCEEDED || 670 job->OptimizeGraph() != CompilationJob::SUCCEEDED ||
671 job->GenerateCode() != CompilationJob::SUCCEEDED) { 671 job->GenerateCode() != CompilationJob::SUCCEEDED) {
672 if (FLAG_trace_opt) { 672 if (FLAG_trace_opt) {
673 PrintF("[aborted optimizing "); 673 PrintF("[aborted optimizing ");
674 info->closure()->ShortPrint(); 674 info->closure()->ShortPrint();
675 PrintF(" because: %s]\n", GetBailoutReason(info->bailout_reason())); 675 PrintF(" because: %s]\n", GetBailoutReason(info->bailout_reason()));
676 } 676 }
677 return false; 677 return false;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
719 719
720 JSFunction::EnsureLiterals(info->closure()); 720 JSFunction::EnsureLiterals(info->closure());
721 721
722 // Reopen handles in the new CompilationHandleScope. 722 // Reopen handles in the new CompilationHandleScope.
723 info->ReopenHandlesInNewHandleScope(); 723 info->ReopenHandlesInNewHandleScope();
724 info->parse_info()->ReopenHandlesInNewHandleScope(); 724 info->parse_info()->ReopenHandlesInNewHandleScope();
725 725
726 TimerEventScope<TimerEventRecompileSynchronous> timer(info->isolate()); 726 TimerEventScope<TimerEventRecompileSynchronous> timer(info->isolate());
727 RuntimeCallTimerScope runtimeTimer(info->isolate(), 727 RuntimeCallTimerScope runtimeTimer(info->isolate(),
728 &RuntimeCallStats::RecompileSynchronous); 728 &RuntimeCallStats::RecompileSynchronous);
729 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), 729 TRACE_EVENT_RUNTIME_CALL_STATS_TRACING_SCOPED(
730 "V8.RecompileSynchronous"); 730 isolate, &tracing::TraceEventStatsTable::RecompileSynchronous);
731 731
732 if (job->CreateGraph() != CompilationJob::SUCCEEDED) return false; 732 if (job->CreateGraph() != CompilationJob::SUCCEEDED) return false;
733 isolate->optimizing_compile_dispatcher()->QueueForOptimization(job); 733 isolate->optimizing_compile_dispatcher()->QueueForOptimization(job);
734 734
735 if (FLAG_trace_concurrent_recompilation) { 735 if (FLAG_trace_concurrent_recompilation) {
736 PrintF(" ** Queued "); 736 PrintF(" ** Queued ");
737 info->closure()->ShortPrint(); 737 info->closure()->ShortPrint();
738 PrintF(" for concurrent optimization.\n"); 738 PrintF(" for concurrent optimization.\n");
739 } 739 }
740 return true; 740 return true;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
793 const int kMaxOptCount = 793 const int kMaxOptCount =
794 FLAG_deopt_every_n_times == 0 ? FLAG_max_opt_count : 1000; 794 FLAG_deopt_every_n_times == 0 ? FLAG_max_opt_count : 1000;
795 if (info->shared_info()->opt_count() > kMaxOptCount) { 795 if (info->shared_info()->opt_count() > kMaxOptCount) {
796 info->AbortOptimization(kOptimizedTooManyTimes); 796 info->AbortOptimization(kOptimizedTooManyTimes);
797 return MaybeHandle<Code>(); 797 return MaybeHandle<Code>();
798 } 798 }
799 799
800 CanonicalHandleScope canonical(isolate); 800 CanonicalHandleScope canonical(isolate);
801 TimerEventScope<TimerEventOptimizeCode> optimize_code_timer(isolate); 801 TimerEventScope<TimerEventOptimizeCode> optimize_code_timer(isolate);
802 RuntimeCallTimerScope runtimeTimer(isolate, &RuntimeCallStats::OptimizeCode); 802 RuntimeCallTimerScope runtimeTimer(isolate, &RuntimeCallStats::OptimizeCode);
803 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.OptimizeCode"); 803 TRACE_EVENT_RUNTIME_CALL_STATS_TRACING_SCOPED(
804 isolate, &tracing::TraceEventStatsTable::OptimizeCode);
804 805
805 // TurboFan can optimize directly from existing bytecode. 806 // TurboFan can optimize directly from existing bytecode.
806 if (FLAG_turbo_from_bytecode && use_turbofan && ShouldUseIgnition(info)) { 807 if (FLAG_turbo_from_bytecode && use_turbofan && ShouldUseIgnition(info)) {
807 if (!Compiler::EnsureBytecode(info)) { 808 if (!Compiler::EnsureBytecode(info)) {
808 if (isolate->has_pending_exception()) isolate->clear_pending_exception(); 809 if (isolate->has_pending_exception()) isolate->clear_pending_exception();
809 return MaybeHandle<Code>(); 810 return MaybeHandle<Code>();
810 } 811 }
811 info->MarkAsOptimizeFromBytecode(); 812 info->MarkAsOptimizeFromBytecode();
812 } 813 }
813 814
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
986 return info.code(); 987 return info.code();
987 } 988 }
988 989
989 MaybeHandle<Code> GetLazyCode(Handle<JSFunction> function) { 990 MaybeHandle<Code> GetLazyCode(Handle<JSFunction> function) {
990 Isolate* isolate = function->GetIsolate(); 991 Isolate* isolate = function->GetIsolate();
991 DCHECK(!isolate->has_pending_exception()); 992 DCHECK(!isolate->has_pending_exception());
992 DCHECK(!function->is_compiled()); 993 DCHECK(!function->is_compiled());
993 TimerEventScope<TimerEventCompileCode> compile_timer(isolate); 994 TimerEventScope<TimerEventCompileCode> compile_timer(isolate);
994 RuntimeCallTimerScope runtimeTimer(isolate, 995 RuntimeCallTimerScope runtimeTimer(isolate,
995 &RuntimeCallStats::CompileCodeLazy); 996 &RuntimeCallStats::CompileCodeLazy);
996 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.CompileCode"); 997 TRACE_EVENT_RUNTIME_CALL_STATS_TRACING_SCOPED(
998 isolate, &tracing::TraceEventStatsTable::CompileCodeLazy);
997 AggregatedHistogramTimerScope timer(isolate->counters()->compile_lazy()); 999 AggregatedHistogramTimerScope timer(isolate->counters()->compile_lazy());
998 1000
999 if (FLAG_turbo_cache_shared_code) { 1001 if (FLAG_turbo_cache_shared_code) {
1000 Handle<Code> cached_code; 1002 Handle<Code> cached_code;
1001 if (GetCodeFromOptimizedCodeMap(function, BailoutId::None()) 1003 if (GetCodeFromOptimizedCodeMap(function, BailoutId::None())
1002 .ToHandle(&cached_code)) { 1004 .ToHandle(&cached_code)) {
1003 if (FLAG_trace_opt) { 1005 if (FLAG_trace_opt) {
1004 PrintF("[found optimized code for "); 1006 PrintF("[found optimized code for ");
1005 function->ShortPrint(); 1007 function->ShortPrint();
1006 PrintF(" during unoptimized compile]\n"); 1008 PrintF(" during unoptimized compile]\n");
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1041 code, scope_info); 1043 code, scope_info);
1042 SharedFunctionInfo::InitFromFunctionLiteral(result, literal); 1044 SharedFunctionInfo::InitFromFunctionLiteral(result, literal);
1043 SharedFunctionInfo::SetScript(result, script); 1045 SharedFunctionInfo::SetScript(result, script);
1044 return result; 1046 return result;
1045 } 1047 }
1046 1048
1047 Handle<SharedFunctionInfo> CompileToplevel(CompilationInfo* info) { 1049 Handle<SharedFunctionInfo> CompileToplevel(CompilationInfo* info) {
1048 Isolate* isolate = info->isolate(); 1050 Isolate* isolate = info->isolate();
1049 TimerEventScope<TimerEventCompileCode> timer(isolate); 1051 TimerEventScope<TimerEventCompileCode> timer(isolate);
1050 RuntimeCallTimerScope runtimeTimer(isolate, &RuntimeCallStats::CompileCode); 1052 RuntimeCallTimerScope runtimeTimer(isolate, &RuntimeCallStats::CompileCode);
1051 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.CompileCode"); 1053 TRACE_EVENT_RUNTIME_CALL_STATS_TRACING_SCOPED(
1054 isolate, &tracing::TraceEventStatsTable::CompileCode);
1052 PostponeInterruptsScope postpone(isolate); 1055 PostponeInterruptsScope postpone(isolate);
1053 DCHECK(!isolate->native_context().is_null()); 1056 DCHECK(!isolate->native_context().is_null());
1054 ParseInfo* parse_info = info->parse_info(); 1057 ParseInfo* parse_info = info->parse_info();
1055 Handle<Script> script = parse_info->script(); 1058 Handle<Script> script = parse_info->script();
1056 1059
1057 // TODO(svenpanne) Obscure place for this, perhaps move to OnBeforeCompile? 1060 // TODO(svenpanne) Obscure place for this, perhaps move to OnBeforeCompile?
1058 FixedArray* array = isolate->native_context()->embedder_data(); 1061 FixedArray* array = isolate->native_context()->embedder_data();
1059 script->set_context_data(array->get(v8::Context::kDebugIdIndex)); 1062 script->set_context_data(array->get(v8::Context::kDebugIdIndex));
1060 1063
1061 isolate->debug()->OnBeforeCompile(script); 1064 isolate->debug()->OnBeforeCompile(script);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1108 // Measure how long it takes to do the compilation; only take the 1111 // Measure how long it takes to do the compilation; only take the
1109 // rest of the function into account to avoid overlap with the 1112 // rest of the function into account to avoid overlap with the
1110 // parsing statistics. 1113 // parsing statistics.
1111 RuntimeCallTimerScope runtimeTimer( 1114 RuntimeCallTimerScope runtimeTimer(
1112 isolate, parse_info->is_eval() ? &RuntimeCallStats::CompileEval 1115 isolate, parse_info->is_eval() ? &RuntimeCallStats::CompileEval
1113 : &RuntimeCallStats::Compile); 1116 : &RuntimeCallStats::Compile);
1114 HistogramTimer* rate = parse_info->is_eval() 1117 HistogramTimer* rate = parse_info->is_eval()
1115 ? info->isolate()->counters()->compile_eval() 1118 ? info->isolate()->counters()->compile_eval()
1116 : info->isolate()->counters()->compile(); 1119 : info->isolate()->counters()->compile();
1117 HistogramTimerScope timer(rate); 1120 HistogramTimerScope timer(rate);
1118 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), 1121 TRACE_EVENT_RUNTIME_CALL_STATS_TRACING_SCOPED(
1119 parse_info->is_eval() ? "V8.CompileEval" : "V8.Compile"); 1122 isolate,
1123 (parse_info->is_eval() ? &tracing::TraceEventStatsTable::CompileEval
1124 : &tracing::TraceEventStatsTable::Compile));
1120 1125
1121 // Allocate a shared function info object. 1126 // Allocate a shared function info object.
1122 DCHECK_EQ(kNoSourcePosition, lit->function_token_position()); 1127 DCHECK_EQ(kNoSourcePosition, lit->function_token_position());
1123 result = NewSharedFunctionInfoForLiteral(isolate, lit, script); 1128 result = NewSharedFunctionInfoForLiteral(isolate, lit, script);
1124 result->set_is_toplevel(true); 1129 result->set_is_toplevel(true);
1125 if (parse_info->is_eval()) { 1130 if (parse_info->is_eval()) {
1126 // Eval scripts cannot be (re-)compiled without context. 1131 // Eval scripts cannot be (re-)compiled without context.
1127 result->set_allows_lazy_compilation_without_context(false); 1132 result->set_allows_lazy_compilation_without_context(false);
1128 } 1133 }
1129 parse_info->set_shared_info(result); 1134 parse_info->set_shared_info(result);
(...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after
1579 maybe_result = compilation_cache->LookupScript( 1584 maybe_result = compilation_cache->LookupScript(
1580 source, script_name, line_offset, column_offset, resource_options, 1585 source, script_name, line_offset, column_offset, resource_options,
1581 context, language_mode); 1586 context, language_mode);
1582 if (maybe_result.is_null() && FLAG_serialize_toplevel && 1587 if (maybe_result.is_null() && FLAG_serialize_toplevel &&
1583 compile_options == ScriptCompiler::kConsumeCodeCache && 1588 compile_options == ScriptCompiler::kConsumeCodeCache &&
1584 !isolate->debug()->is_loaded()) { 1589 !isolate->debug()->is_loaded()) {
1585 // Then check cached code provided by embedder. 1590 // Then check cached code provided by embedder.
1586 HistogramTimerScope timer(isolate->counters()->compile_deserialize()); 1591 HistogramTimerScope timer(isolate->counters()->compile_deserialize());
1587 RuntimeCallTimerScope runtimeTimer(isolate, 1592 RuntimeCallTimerScope runtimeTimer(isolate,
1588 &RuntimeCallStats::CompileDeserialize); 1593 &RuntimeCallStats::CompileDeserialize);
1589 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), 1594 TRACE_EVENT_RUNTIME_CALL_STATS_TRACING_SCOPED(
1590 "V8.CompileDeserialize"); 1595 isolate, &tracing::TraceEventStatsTable::CompileDeserialize);
1591 Handle<SharedFunctionInfo> result; 1596 Handle<SharedFunctionInfo> result;
1592 if (CodeSerializer::Deserialize(isolate, *cached_data, source) 1597 if (CodeSerializer::Deserialize(isolate, *cached_data, source)
1593 .ToHandle(&result)) { 1598 .ToHandle(&result)) {
1594 // Promote to per-isolate compilation cache. 1599 // Promote to per-isolate compilation cache.
1595 compilation_cache->PutScript(source, context, language_mode, result); 1600 compilation_cache->PutScript(source, context, language_mode, result);
1596 return result; 1601 return result;
1597 } 1602 }
1598 // Deserializer failed. Fall through to compile. 1603 // Deserializer failed. Fall through to compile.
1599 } 1604 }
1600 } 1605 }
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
1653 static_cast<LanguageMode>(parse_info.language_mode() | language_mode)); 1658 static_cast<LanguageMode>(parse_info.language_mode() | language_mode));
1654 result = CompileToplevel(&info); 1659 result = CompileToplevel(&info);
1655 if (extension == NULL && !result.is_null()) { 1660 if (extension == NULL && !result.is_null()) {
1656 compilation_cache->PutScript(source, context, language_mode, result); 1661 compilation_cache->PutScript(source, context, language_mode, result);
1657 if (FLAG_serialize_toplevel && 1662 if (FLAG_serialize_toplevel &&
1658 compile_options == ScriptCompiler::kProduceCodeCache) { 1663 compile_options == ScriptCompiler::kProduceCodeCache) {
1659 HistogramTimerScope histogram_timer( 1664 HistogramTimerScope histogram_timer(
1660 isolate->counters()->compile_serialize()); 1665 isolate->counters()->compile_serialize());
1661 RuntimeCallTimerScope runtimeTimer(isolate, 1666 RuntimeCallTimerScope runtimeTimer(isolate,
1662 &RuntimeCallStats::CompileSerialize); 1667 &RuntimeCallStats::CompileSerialize);
1663 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), 1668 TRACE_EVENT_RUNTIME_CALL_STATS_TRACING_SCOPED(
1664 "V8.CompileSerialize"); 1669 isolate, &tracing::TraceEventStatsTable::CompileSerialize);
1665 *cached_data = CodeSerializer::Serialize(isolate, result, source); 1670 *cached_data = CodeSerializer::Serialize(isolate, result, source);
1666 if (FLAG_profile_deserialization) { 1671 if (FLAG_profile_deserialization) {
1667 PrintF("[Compiling and serializing took %0.3f ms]\n", 1672 PrintF("[Compiling and serializing took %0.3f ms]\n",
1668 timer.Elapsed().InMillisecondsF()); 1673 timer.Elapsed().InMillisecondsF());
1669 } 1674 }
1670 } 1675 }
1671 } 1676 }
1672 1677
1673 if (result.is_null()) { 1678 if (result.is_null()) {
1674 isolate->ReportPendingMessages(); 1679 isolate->ReportPendingMessages();
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
1771 // Consider compiling eagerly when targeting the code cache. 1776 // Consider compiling eagerly when targeting the code cache.
1772 lazy &= !(FLAG_serialize_eager && info.will_serialize()); 1777 lazy &= !(FLAG_serialize_eager && info.will_serialize());
1773 1778
1774 // Consider compiling eagerly when compiling bytecode for Ignition. 1779 // Consider compiling eagerly when compiling bytecode for Ignition.
1775 lazy &= 1780 lazy &=
1776 !(FLAG_ignition && FLAG_ignition_eager && !isolate->serializer_enabled()); 1781 !(FLAG_ignition && FLAG_ignition_eager && !isolate->serializer_enabled());
1777 1782
1778 // Generate code 1783 // Generate code
1779 TimerEventScope<TimerEventCompileCode> timer(isolate); 1784 TimerEventScope<TimerEventCompileCode> timer(isolate);
1780 RuntimeCallTimerScope runtimeTimer(isolate, &RuntimeCallStats::CompileCode); 1785 RuntimeCallTimerScope runtimeTimer(isolate, &RuntimeCallStats::CompileCode);
1781 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.CompileCode"); 1786 TRACE_EVENT_RUNTIME_CALL_STATS_TRACING_SCOPED(
1787 isolate, &tracing::TraceEventStatsTable::CompileCode);
1782 if (lazy) { 1788 if (lazy) {
1783 info.SetCode(isolate->builtins()->CompileLazy()); 1789 info.SetCode(isolate->builtins()->CompileLazy());
1784 } else if (Renumber(info.parse_info()) && GenerateUnoptimizedCode(&info)) { 1790 } else if (Renumber(info.parse_info()) && GenerateUnoptimizedCode(&info)) {
1785 // Code generation will ensure that the feedback vector is present and 1791 // Code generation will ensure that the feedback vector is present and
1786 // appropriately sized. 1792 // appropriately sized.
1787 DCHECK(!info.code().is_null()); 1793 DCHECK(!info.code().is_null());
1788 if (literal->should_eager_compile() && 1794 if (literal->should_eager_compile() &&
1789 literal->should_be_used_once_hint()) { 1795 literal->should_be_used_once_hint()) {
1790 info.code()->MarkToBeExecutedOnce(isolate); 1796 info.code()->MarkToBeExecutedOnce(isolate);
1791 } 1797 }
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1846 void Compiler::FinalizeCompilationJob(CompilationJob* raw_job) { 1852 void Compiler::FinalizeCompilationJob(CompilationJob* raw_job) {
1847 // Take ownership of compilation job. Deleting job also tears down the zone. 1853 // Take ownership of compilation job. Deleting job also tears down the zone.
1848 std::unique_ptr<CompilationJob> job(raw_job); 1854 std::unique_ptr<CompilationJob> job(raw_job);
1849 CompilationInfo* info = job->info(); 1855 CompilationInfo* info = job->info();
1850 Isolate* isolate = info->isolate(); 1856 Isolate* isolate = info->isolate();
1851 1857
1852 VMState<COMPILER> state(isolate); 1858 VMState<COMPILER> state(isolate);
1853 TimerEventScope<TimerEventRecompileSynchronous> timer(info->isolate()); 1859 TimerEventScope<TimerEventRecompileSynchronous> timer(info->isolate());
1854 RuntimeCallTimerScope runtimeTimer(isolate, 1860 RuntimeCallTimerScope runtimeTimer(isolate,
1855 &RuntimeCallStats::RecompileSynchronous); 1861 &RuntimeCallStats::RecompileSynchronous);
1856 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), 1862 TRACE_EVENT_RUNTIME_CALL_STATS_TRACING_SCOPED(
1857 "V8.RecompileSynchronous"); 1863 isolate, &tracing::TraceEventStatsTable::RecompileSynchronous);
1858 1864
1859 Handle<SharedFunctionInfo> shared = info->shared_info(); 1865 Handle<SharedFunctionInfo> shared = info->shared_info();
1860 shared->code()->set_profiler_ticks(0); 1866 shared->code()->set_profiler_ticks(0);
1861 1867
1862 DCHECK(!shared->HasDebugInfo()); 1868 DCHECK(!shared->HasDebugInfo());
1863 1869
1864 // 1) Optimization on the concurrent thread may have failed. 1870 // 1) Optimization on the concurrent thread may have failed.
1865 // 2) The function may have already been optimized by OSR. Simply continue. 1871 // 2) The function may have already been optimized by OSR. Simply continue.
1866 // Except when OSR already disabled optimization for some reason. 1872 // Except when OSR already disabled optimization for some reason.
1867 // 3) The code may have already been invalidated due to dependency change. 1873 // 3) The code may have already been invalidated due to dependency change.
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1918 DCHECK(shared->is_compiled()); 1924 DCHECK(shared->is_compiled());
1919 function->set_literals(cached.literals); 1925 function->set_literals(cached.literals);
1920 } else if (shared->is_compiled()) { 1926 } else if (shared->is_compiled()) {
1921 // TODO(mvstanton): pass pretenure flag to EnsureLiterals. 1927 // TODO(mvstanton): pass pretenure flag to EnsureLiterals.
1922 JSFunction::EnsureLiterals(function); 1928 JSFunction::EnsureLiterals(function);
1923 } 1929 }
1924 } 1930 }
1925 1931
1926 } // namespace internal 1932 } // namespace internal
1927 } // namespace v8 1933 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698