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

Unified Diff: runtime/vm/precompiler.cc

Issue 2687143005: Include metadata in AOT to expand inline frames in stack traces and provide line numbers. (Closed)
Patch Set: . Created 3 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/precompiler.h ('k') | runtime/vm/raw_object.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/precompiler.cc
diff --git a/runtime/vm/precompiler.cc b/runtime/vm/precompiler.cc
index 5bcfb1e830bc8fbc7b6761a86a8fcd2b3f26c9f4..a053603d4dbec6a7e7fa61da145c8fe3d921ddfa 100644
--- a/runtime/vm/precompiler.cc
+++ b/runtime/vm/precompiler.cc
@@ -495,6 +495,7 @@ void Precompiler::DoCompileAll(
ShareMegamorphicBuckets();
DedupStackMaps();
+ DedupCodeSourceMaps();
DedupLists();
if (FLAG_dedup_instructions) {
@@ -984,6 +985,13 @@ void Precompiler::AddCalleesOf(const Function& function) {
}
}
}
+
+ const Array& inlined_functions =
+ Array::Handle(Z, code.inlined_id_to_function());
+ for (intptr_t i = 0; i < inlined_functions.Length(); i++) {
+ target ^= inlined_functions.At(i);
+ AddTypesOf(target);
+ }
}
@@ -2341,6 +2349,50 @@ void Precompiler::DedupStackMaps() {
}
+void Precompiler::DedupCodeSourceMaps() {
+ class DedupCodeSourceMapsVisitor : public FunctionVisitor {
+ public:
+ explicit DedupCodeSourceMapsVisitor(Zone* zone)
+ : zone_(zone),
+ canonical_code_source_maps_(),
+ code_(Code::Handle(zone)),
+ code_source_map_(CodeSourceMap::Handle(zone)) {}
+
+ void Visit(const Function& function) {
+ if (!function.HasCode()) {
+ return;
+ }
+ code_ = function.CurrentCode();
+ code_source_map_ = code_.code_source_map();
+ ASSERT(!code_source_map_.IsNull());
+ code_source_map_ = DedupCodeSourceMap(code_source_map_);
+ code_.set_code_source_map(code_source_map_);
+ }
+
+ RawCodeSourceMap* DedupCodeSourceMap(const CodeSourceMap& code_source_map) {
+ const CodeSourceMap* canonical_code_source_map =
+ canonical_code_source_maps_.LookupValue(&code_source_map);
+ if (canonical_code_source_map == NULL) {
+ canonical_code_source_maps_.Insert(
+ &CodeSourceMap::ZoneHandle(zone_, code_source_map.raw()));
+ return code_source_map.raw();
+ } else {
+ return canonical_code_source_map->raw();
+ }
+ }
+
+ private:
+ Zone* zone_;
+ CodeSourceMapSet canonical_code_source_maps_;
+ Code& code_;
+ CodeSourceMap& code_source_map_;
+ };
+
+ DedupCodeSourceMapsVisitor visitor(Z);
+ ProgramVisitor::VisitFunctions(&visitor);
+}
+
+
void Precompiler::DedupLists() {
class DedupListsVisitor : public FunctionVisitor {
public:
@@ -2358,6 +2410,11 @@ void Precompiler::DedupLists() {
list_ = DedupList(list_);
code_.set_stackmaps(list_);
}
+ list_ = code_.inlined_id_to_function();
+ if (!list_.IsNull()) {
+ list_ = DedupList(list_);
+ code_.set_inlined_id_to_function(list_);
+ }
}
list_ = function.parameter_types();
« no previous file with comments | « runtime/vm/precompiler.h ('k') | runtime/vm/raw_object.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698