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

Side by Side Diff: src/compiler.cc

Issue 1847543002: Expose a lower bound of malloc'd memory via heap statistics (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: updates Created 4 years, 8 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
« no previous file with comments | « src/code-stubs-hydrogen.cc ('k') | src/compiler/graph-replay.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 8
9 #include "src/ast/ast-numbering.h" 9 #include "src/ast/ast-numbering.h"
10 #include "src/ast/prettyprinter.h" 10 #include "src/ast/prettyprinter.h"
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 private: 78 private:
79 DeferredHandleScope deferred_; 79 DeferredHandleScope deferred_;
80 CompilationInfo* info_; 80 CompilationInfo* info_;
81 }; 81 };
82 82
83 // Exactly like a CompilationInfo, except being allocated via {new} and it also 83 // Exactly like a CompilationInfo, except being allocated via {new} and it also
84 // creates and enters a Zone on construction and deallocates it on destruction. 84 // creates and enters a Zone on construction and deallocates it on destruction.
85 class CompilationInfoWithZone : public CompilationInfo { 85 class CompilationInfoWithZone : public CompilationInfo {
86 public: 86 public:
87 explicit CompilationInfoWithZone(Handle<JSFunction> function) 87 explicit CompilationInfoWithZone(Handle<JSFunction> function)
88 : CompilationInfo(new ParseInfo(&zone_, function)) {} 88 : CompilationInfo(new ParseInfo(&zone_, function)),
89 zone_(function->GetIsolate()->allocator()) {}
89 90
90 // Virtual destructor because a CompilationInfoWithZone has to exit the 91 // Virtual destructor because a CompilationInfoWithZone has to exit the
91 // zone scope and get rid of dependent maps even when the destructor is 92 // zone scope and get rid of dependent maps even when the destructor is
92 // called when cast as a CompilationInfo. 93 // called when cast as a CompilationInfo.
93 virtual ~CompilationInfoWithZone() { 94 virtual ~CompilationInfoWithZone() {
94 DisableFutureOptimization(); 95 DisableFutureOptimization();
95 dependencies()->Rollback(); 96 dependencies()->Rollback();
96 delete parse_info_; 97 delete parse_info_;
97 parse_info_ = nullptr; 98 parse_info_ = nullptr;
98 } 99 }
(...skipping 1069 matching lines...) Expand 10 before | Expand all | Expand 10 after
1168 1169
1169 return result; 1170 return result;
1170 } 1171 }
1171 1172
1172 1173
1173 bool CompileEvalForDebugging(Handle<JSFunction> function, 1174 bool CompileEvalForDebugging(Handle<JSFunction> function,
1174 Handle<SharedFunctionInfo> shared) { 1175 Handle<SharedFunctionInfo> shared) {
1175 Handle<Script> script(Script::cast(shared->script())); 1176 Handle<Script> script(Script::cast(shared->script()));
1176 Handle<Context> context(function->context()); 1177 Handle<Context> context(function->context());
1177 1178
1178 Zone zone; 1179 Zone zone(function->GetIsolate()->allocator());
1179 ParseInfo parse_info(&zone, script); 1180 ParseInfo parse_info(&zone, script);
1180 CompilationInfo info(&parse_info); 1181 CompilationInfo info(&parse_info);
1181 Isolate* isolate = info.isolate(); 1182 Isolate* isolate = info.isolate();
1182 1183
1183 parse_info.set_eval(); 1184 parse_info.set_eval();
1184 parse_info.set_context(context); 1185 parse_info.set_context(context);
1185 if (context->IsNativeContext()) parse_info.set_global(); 1186 if (context->IsNativeContext()) parse_info.set_global();
1186 parse_info.set_toplevel(); 1187 parse_info.set_toplevel();
1187 parse_info.set_allow_lazy_parsing(false); 1188 parse_info.set_allow_lazy_parsing(false);
1188 parse_info.set_language_mode(shared->language_mode()); 1189 parse_info.set_language_mode(shared->language_mode());
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
1423 return CompileEvalForDebugging(function, shared); 1424 return CompileEvalForDebugging(function, shared);
1424 } else { 1425 } else {
1425 CompilationInfoWithZone info(function); 1426 CompilationInfoWithZone info(function);
1426 return CompileForDebugging(&info); 1427 return CompileForDebugging(&info);
1427 } 1428 }
1428 } 1429 }
1429 1430
1430 bool Compiler::CompileDebugCode(Handle<SharedFunctionInfo> shared) { 1431 bool Compiler::CompileDebugCode(Handle<SharedFunctionInfo> shared) {
1431 DCHECK(shared->allows_lazy_compilation_without_context()); 1432 DCHECK(shared->allows_lazy_compilation_without_context());
1432 DCHECK(!IsEvalToplevel(shared)); 1433 DCHECK(!IsEvalToplevel(shared));
1433 Zone zone; 1434 Zone zone(shared->GetIsolate()->allocator());
1434 ParseInfo parse_info(&zone, shared); 1435 ParseInfo parse_info(&zone, shared);
1435 CompilationInfo info(&parse_info); 1436 CompilationInfo info(&parse_info);
1436 return CompileForDebugging(&info); 1437 return CompileForDebugging(&info);
1437 } 1438 }
1438 1439
1439 // TODO(turbofan): In the future, unoptimized code with deopt support could 1440 // TODO(turbofan): In the future, unoptimized code with deopt support could
1440 // be generated lazily once deopt is triggered. 1441 // be generated lazily once deopt is triggered.
1441 bool Compiler::EnsureDeoptimizationSupport(CompilationInfo* info) { 1442 bool Compiler::EnsureDeoptimizationSupport(CompilationInfo* info) {
1442 DCHECK_NOT_NULL(info->literal()); 1443 DCHECK_NOT_NULL(info->literal());
1443 DCHECK(info->has_scope()); 1444 DCHECK(info->has_scope());
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1476 } 1477 }
1477 1478
1478 // The existing unoptimized code was replaced with the new one. 1479 // The existing unoptimized code was replaced with the new one.
1479 RecordFunctionCompilation(Logger::LAZY_COMPILE_TAG, &unoptimized, shared); 1480 RecordFunctionCompilation(Logger::LAZY_COMPILE_TAG, &unoptimized, shared);
1480 } 1481 }
1481 return true; 1482 return true;
1482 } 1483 }
1483 1484
1484 void Compiler::CompileForLiveEdit(Handle<Script> script) { 1485 void Compiler::CompileForLiveEdit(Handle<Script> script) {
1485 // TODO(635): support extensions. 1486 // TODO(635): support extensions.
1486 Zone zone; 1487 Zone zone(script->GetIsolate()->allocator());
1487 ParseInfo parse_info(&zone, script); 1488 ParseInfo parse_info(&zone, script);
1488 CompilationInfo info(&parse_info); 1489 CompilationInfo info(&parse_info);
1489 PostponeInterruptsScope postpone(info.isolate()); 1490 PostponeInterruptsScope postpone(info.isolate());
1490 VMState<COMPILER> state(info.isolate()); 1491 VMState<COMPILER> state(info.isolate());
1491 1492
1492 // Get rid of old list of shared function infos. 1493 // Get rid of old list of shared function infos.
1493 info.MarkAsFirstCompile(); 1494 info.MarkAsFirstCompile();
1494 info.MarkAsDebug(); 1495 info.MarkAsDebug();
1495 info.parse_info()->set_global(); 1496 info.parse_info()->set_global();
1496 if (!Parser::ParseStatic(info.parse_info())) return; 1497 if (!Parser::ParseStatic(info.parse_info())) return;
(...skipping 26 matching lines...) Expand all
1523 1524
1524 Handle<Script> script; 1525 Handle<Script> script;
1525 if (!maybe_shared_info.ToHandle(&shared_info)) { 1526 if (!maybe_shared_info.ToHandle(&shared_info)) {
1526 script = isolate->factory()->NewScript(source); 1527 script = isolate->factory()->NewScript(source);
1527 if (!script_name.is_null()) { 1528 if (!script_name.is_null()) {
1528 script->set_name(*script_name); 1529 script->set_name(*script_name);
1529 script->set_line_offset(line_offset); 1530 script->set_line_offset(line_offset);
1530 script->set_column_offset(column_offset); 1531 script->set_column_offset(column_offset);
1531 } 1532 }
1532 script->set_origin_options(options); 1533 script->set_origin_options(options);
1533 Zone zone; 1534 Zone zone(isolate->allocator());
1534 ParseInfo parse_info(&zone, script); 1535 ParseInfo parse_info(&zone, script);
1535 CompilationInfo info(&parse_info); 1536 CompilationInfo info(&parse_info);
1536 parse_info.set_eval(); 1537 parse_info.set_eval();
1537 if (context->IsNativeContext()) parse_info.set_global(); 1538 if (context->IsNativeContext()) parse_info.set_global();
1538 parse_info.set_language_mode(language_mode); 1539 parse_info.set_language_mode(language_mode);
1539 parse_info.set_parse_restriction(restriction); 1540 parse_info.set_parse_restriction(restriction);
1540 parse_info.set_context(context); 1541 parse_info.set_context(context);
1541 1542
1542 Debug::RecordEvalCaller(script); 1543 Debug::RecordEvalCaller(script);
1543 1544
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
1647 script->set_name(*script_name); 1648 script->set_name(*script_name);
1648 script->set_line_offset(line_offset); 1649 script->set_line_offset(line_offset);
1649 script->set_column_offset(column_offset); 1650 script->set_column_offset(column_offset);
1650 } 1651 }
1651 script->set_origin_options(resource_options); 1652 script->set_origin_options(resource_options);
1652 if (!source_map_url.is_null()) { 1653 if (!source_map_url.is_null()) {
1653 script->set_source_mapping_url(*source_map_url); 1654 script->set_source_mapping_url(*source_map_url);
1654 } 1655 }
1655 1656
1656 // Compile the function and add it to the cache. 1657 // Compile the function and add it to the cache.
1657 Zone zone; 1658 Zone zone(isolate->allocator());
1658 ParseInfo parse_info(&zone, script); 1659 ParseInfo parse_info(&zone, script);
1659 CompilationInfo info(&parse_info); 1660 CompilationInfo info(&parse_info);
1660 if (is_module) { 1661 if (is_module) {
1661 parse_info.set_module(); 1662 parse_info.set_module();
1662 } else { 1663 } else {
1663 parse_info.set_global(); 1664 parse_info.set_global();
1664 } 1665 }
1665 if (compile_options != ScriptCompiler::kNoCompileOptions) { 1666 if (compile_options != ScriptCompiler::kNoCompileOptions) {
1666 parse_info.set_cached_data(cached_data); 1667 parse_info.set_cached_data(cached_data);
1667 } 1668 }
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
1751 } 1752 }
1752 } 1753 }
1753 1754
1754 // Allocate a shared function info object. 1755 // Allocate a shared function info object.
1755 Handle<SharedFunctionInfo> result; 1756 Handle<SharedFunctionInfo> result;
1756 if (!maybe_existing.ToHandle(&result)) { 1757 if (!maybe_existing.ToHandle(&result)) {
1757 result = NewSharedFunctionInfoForLiteral(isolate, literal, script); 1758 result = NewSharedFunctionInfoForLiteral(isolate, literal, script);
1758 result->set_is_toplevel(false); 1759 result->set_is_toplevel(false);
1759 } 1760 }
1760 1761
1761 Zone zone; 1762 Zone zone(isolate->allocator());
1762 ParseInfo parse_info(&zone, script); 1763 ParseInfo parse_info(&zone, script);
1763 CompilationInfo info(&parse_info); 1764 CompilationInfo info(&parse_info);
1764 parse_info.set_literal(literal); 1765 parse_info.set_literal(literal);
1765 parse_info.set_scope(literal->scope()); 1766 parse_info.set_scope(literal->scope());
1766 parse_info.set_language_mode(literal->scope()->language_mode()); 1767 parse_info.set_language_mode(literal->scope()->language_mode());
1767 if (outer_info->will_serialize()) info.PrepareForSerializing(); 1768 if (outer_info->will_serialize()) info.PrepareForSerializing();
1768 if (outer_info->is_first_compile()) info.MarkAsFirstCompile(); 1769 if (outer_info->is_first_compile()) info.MarkAsFirstCompile();
1769 if (outer_info->is_debug()) info.MarkAsDebug(); 1770 if (outer_info->is_debug()) info.MarkAsDebug();
1770 1771
1771 LiveEditFunctionTracker live_edit_tracker(isolate, literal); 1772 LiveEditFunctionTracker live_edit_tracker(isolate, literal);
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
1956 MaybeHandle<Code> code; 1957 MaybeHandle<Code> code;
1957 if (cached.code != nullptr) code = handle(cached.code); 1958 if (cached.code != nullptr) code = handle(cached.code);
1958 Handle<Context> native_context(function->context()->native_context()); 1959 Handle<Context> native_context(function->context()->native_context());
1959 SharedFunctionInfo::AddToOptimizedCodeMap(shared, native_context, code, 1960 SharedFunctionInfo::AddToOptimizedCodeMap(shared, native_context, code,
1960 literals, BailoutId::None()); 1961 literals, BailoutId::None());
1961 } 1962 }
1962 } 1963 }
1963 1964
1964 } // namespace internal 1965 } // namespace internal
1965 } // namespace v8 1966 } // namespace v8
OLDNEW
« no previous file with comments | « src/code-stubs-hydrogen.cc ('k') | src/compiler/graph-replay.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698