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

Side by Side Diff: runtime/vm/object_service.cc

Issue 2670843006: Encode inlining information in CodeSourceMap and remove inlining interval arrays. (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 unified diff | Download patch
« no previous file with comments | « runtime/vm/object.cc ('k') | runtime/vm/precompiler.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 (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/debugger.h" 5 #include "vm/debugger.h"
6 #include "vm/disassembler.h" 6 #include "vm/disassembler.h"
7 #include "vm/object.h" 7 #include "vm/object.h"
8 #include "vm/object_store.h" 8 #include "vm/object_store.h"
9 #include "vm/stub_code.h" 9 #include "vm/stub_code.h"
10 #include "vm/symbols.h" 10 #include "vm/symbols.h"
(...skipping 846 matching lines...) Expand 10 before | Expand all | Expand 10 after
857 // Only disassemble alive code objects. 857 // Only disassemble alive code objects.
858 DisassembleToJSONStream formatter(jsarr); 858 DisassembleToJSONStream formatter(jsarr);
859 Disassemble(&formatter); 859 Disassemble(&formatter);
860 } 860 }
861 } 861 }
862 const PcDescriptors& descriptors = PcDescriptors::Handle(pc_descriptors()); 862 const PcDescriptors& descriptors = PcDescriptors::Handle(pc_descriptors());
863 if (!descriptors.IsNull()) { 863 if (!descriptors.IsNull()) {
864 JSONObject desc(&jsobj, "_descriptors"); 864 JSONObject desc(&jsobj, "_descriptors");
865 descriptors.PrintToJSONObject(&desc, false); 865 descriptors.PrintToJSONObject(&desc, false);
866 } 866 }
867 const Array& inlined_function_table = Array::Handle(GetInlinedIdToFunction());
868 if (!inlined_function_table.IsNull() &&
869 (inlined_function_table.Length() > 0)) {
870 JSONArray inlined_functions(&jsobj, "_inlinedFunctions");
871 Function& function = Function::Handle();
872 for (intptr_t i = 0; i < inlined_function_table.Length(); i++) {
873 function ^= inlined_function_table.At(i);
874 ASSERT(!function.IsNull());
875 inlined_functions.AddValue(function);
876 }
877 }
878 const Array& intervals = Array::Handle(GetInlinedIntervals());
879 if (!intervals.IsNull() && (intervals.Length() > 0)) {
880 Smi& start = Smi::Handle();
881 Smi& end = Smi::Handle();
882 Smi& temp_smi = Smi::Handle();
883 JSONArray inline_intervals(&jsobj, "_inlinedIntervals");
884 for (intptr_t i = 0; i < intervals.Length() - Code::kInlIntNumEntries;
885 i += Code::kInlIntNumEntries) {
886 start ^= intervals.At(i + Code::kInlIntStart);
887 if (start.IsNull()) {
888 continue;
889 }
890 end ^= intervals.At(i + Code::kInlIntNumEntries + Code::kInlIntStart);
891 867
892 // Format: [start, end, inline functions...] 868 PrintJSONInlineIntervals(&jsobj);
893 JSONArray inline_interval(&inline_intervals);
894 inline_interval.AddValue(start.Value());
895 inline_interval.AddValue(end.Value());
896
897 temp_smi ^= intervals.At(i + Code::kInlIntInliningId);
898 intptr_t inlining_id = temp_smi.Value();
899 ASSERT(inlining_id >= 0);
900 intptr_t caller_id = GetCallerId(inlining_id);
901 while (inlining_id >= 0) {
902 inline_interval.AddValue(inlining_id);
903 inlining_id = caller_id;
904 caller_id = GetCallerId(inlining_id);
905 }
906 }
907 }
908 } 869 }
909 870
910 871
911 void Context::PrintJSONImpl(JSONStream* stream, bool ref) const { 872 void Context::PrintJSONImpl(JSONStream* stream, bool ref) const {
912 JSONObject jsobj(stream); 873 JSONObject jsobj(stream);
913 // TODO(turnidge): Should the user level type for Context be Context 874 // TODO(turnidge): Should the user level type for Context be Context
914 // or Object? 875 // or Object?
915 AddCommonObjectProperties(&jsobj, "Context", ref); 876 AddCommonObjectProperties(&jsobj, "Context", ref);
916 jsobj.AddServiceId(*this); 877 jsobj.AddServiceId(*this);
917 878
(...skipping 671 matching lines...) Expand 10 before | Expand all | Expand 10 after
1589 jsobj.AddProperty("mirrorReferent", referent_handle); 1550 jsobj.AddProperty("mirrorReferent", referent_handle);
1590 } 1551 }
1591 1552
1592 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { 1553 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const {
1593 Instance::PrintJSONImpl(stream, ref); 1554 Instance::PrintJSONImpl(stream, ref);
1594 } 1555 }
1595 1556
1596 #endif 1557 #endif
1597 1558
1598 } // namespace dart 1559 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/object.cc ('k') | runtime/vm/precompiler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698