| OLD | NEW |
| 1 <!DOCTYPE html><html><head><script src="packages/shadow_dom/shadow_dom.debug.js"
></script> | 1 <!DOCTYPE html><html><head><script src="packages/shadow_dom/shadow_dom.debug.js"
></script> |
| 2 <script src="packages/custom_element/custom-elements.debug.js"></script> | 2 <script src="packages/custom_element/custom-elements.debug.js"></script> |
| 3 | 3 |
| 4 <meta charset="utf-8"> | 4 <meta charset="utf-8"> |
| 5 <link type="text/css" rel="stylesheet" href="bootstrap_css/css/bootstrap.min.c
ss"> | 5 <link type="text/css" rel="stylesheet" href="bootstrap_css/css/bootstrap.min.c
ss"> |
| 6 | 6 |
| 7 <title>Dart VM Observatory</title> | 7 <title>Dart VM Observatory</title> |
| 8 <script type="text/javascript" src="https://www.google.com/jsapi"></script> | 8 <script type="text/javascript" src="https://www.google.com/jsapi"></script> |
| 9 <script src="packages/browser/interop.js"></script> | 9 <script src="packages/browser/interop.js"></script> |
| 10 | 10 |
| (...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 306 isBool(ref.serviceType) || | 306 isBool(ref.serviceType) || |
| 307 isInt(ref.serviceType)) || | 307 isInt(ref.serviceType)) || |
| 308 isDouble(ref.serviceType)) }}"> | 308 isDouble(ref.serviceType)) }}"> |
| 309 <a href="{{ url }}">{{ ref['preview'] }}</a> | 309 <a href="{{ url }}">{{ ref['preview'] }}</a> |
| 310 </template> | 310 </template> |
| 311 | 311 |
| 312 <template if="{{ (isType(ref.serviceType)) }}"> | 312 <template if="{{ (isType(ref.serviceType)) }}"> |
| 313 <a href="{{ url }}">{{ ref['user_name'] }}</a> | 313 <a href="{{ url }}">{{ ref['user_name'] }}</a> |
| 314 </template> | 314 </template> |
| 315 | 315 |
| 316 <template if="{{ isClosure(ref.serviceType) }}"> | 316 <template if="{{ isInstance(ref.serviceType) && |
| 317 ref['closureFunc'] != null}}"> |
| 317 <a href="{{ url }}"> | 318 <a href="{{ url }}"> |
| 318 <!-- TODO(turnidge): Switch this to fully-qualified function --> | 319 <!-- TODO(turnidge): Switch this to fully-qualified function --> |
| 319 {{ ref['closureFunc']['user_name'] }} | 320 {{ ref['closureFunc']['user_name'] }} |
| 320 </a> | 321 </a> |
| 321 </template> | 322 </template> |
| 322 | 323 |
| 323 <template if="{{ isInstance(ref.serviceType) }}"> | 324 <template if="{{ isInstance(ref.serviceType) && |
| 325 ref['closureFunc'] == null}}"> |
| 324 <a href="{{ url }}"><em>{{ ref['class']['user_name'] }}</em></a> | 326 <a href="{{ url }}"><em>{{ ref['class']['user_name'] }}</em></a> |
| 325 <curly-block callback="{{ expander() }}"> | 327 <curly-block callback="{{ expander() }}"> |
| 326 <div class="memberList"> | 328 <div class="memberList"> |
| 327 <template repeat="{{ field in ref['fields'] }}"> | 329 <template repeat="{{ field in ref['fields'] }}"> |
| 328 <div class="memberItem"> | 330 <div class="memberItem"> |
| 329 <div class="memberName"> | 331 <div class="memberName"> |
| 330 {{ field['decl']['user_name'] }} | 332 {{ field['decl']['user_name'] }} |
| 331 </div> | 333 </div> |
| 332 <div class="memberValue"> | 334 <div class="memberValue"> |
| 333 <instance-ref ref="{{ field['value'] }}"></instance-ref> | 335 <instance-ref ref="{{ field['value'] }}"></instance-ref> |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 431 </template> | 433 </template> |
| 432 </td> | 434 </td> |
| 433 </tr> | 435 </tr> |
| 434 </tbody></table> | 436 </tbody></table> |
| 435 </template> | 437 </template> |
| 436 </template> | 438 </template> |
| 437 </polymer-element> | 439 </polymer-element> |
| 438 | 440 |
| 439 | 441 |
| 440 <polymer-element name="field-ref" extends="service-ref"> | 442 <polymer-element name="field-ref" extends="service-ref"> |
| 441 <template> | 443 <template> |
| 442 <div> | 444 <div> |
| 443 <template if="{{ ref['final'] }}"> final </template> | 445 <template if="{{ ref['static'] }}">static</template> |
| 444 <template if="{{ ref['const'] }}"> const </template> | 446 <template if="{{ ref['final'] }}">final</template> |
| 445 <template if="{{ (ref['declared_type']['name'] == 'dynamic' && !ref['f
inal'] && !ref['const']) }}"> | 447 <template if="{{ ref['const'] }}">const</template> |
| 446 var | 448 <template if="{{ (ref['declared_type']['name'] == 'dynamic' && |
| 449 !ref['final'] && !ref['const']) }}"> |
| 450 var |
| 451 </template> |
| 452 <template if="{{ (ref['declared_type']['name'] != 'dynamic') }}"> |
| 453 <instance-ref ref="{{ ref['declared_type'] }}"></instance-ref> |
| 454 </template> |
| 455 <a title="{{ hoverText }}" href="{{ url }}">{{ name }}</a> |
| 456 </div> |
| 447 </template> | 457 </template> |
| 448 <template if="{{ (ref['declared_type']['name'] != 'dynamic') }}"> | 458 |
| 449 <instance-ref ref="{{ ref['declared_type'] }}"></instance-ref> | 459 </polymer-element> |
| 450 </template> | |
| 451 <a title="{{ hoverText }}" href="{{ url }}">{{ name }}</a> | |
| 452 </div> | |
| 453 </template> </polymer-element> | |
| 454 <polymer-element name="function-ref" extends="service-ref"> | 460 <polymer-element name="function-ref" extends="service-ref"> |
| 455 <template><!-- These comments are here to allow newlines. | 461 <template><!-- These comments are here to allow newlines. |
| 456 --><template if="{{ qualified && !hasParent && hasClass }}"
><!-- | 462 --><template if="{{ qualified && !hasParent && hasClass }}"
><!-- |
| 457 --><class-ref ref="{{ ref['class'] }}"></class-ref>.</template><!-- | 463 --><class-ref ref="{{ ref['owner'] }}"></class-ref>.</template><!-- |
| 458 --><template if="{{ qualified && hasParent }}"><!-- | 464 --><template if="{{ qualified && hasParent }}"><!-- |
| 459 --><function-ref ref="{{ ref['parent'] }}" qualified="{{ true }}"> | 465 --><function-ref ref="{{ ref['parent'] }}" qualified="{{ true }}"> |
| 460 </function-ref>.<!-- | 466 </function-ref>.<!-- |
| 461 --></template><a href="{{ url }}">{{ name }}</a><!-- | 467 --></template><a href="{{ url }}">{{ name }}</a><!-- |
| 462 --></template> | 468 --></template> |
| 463 | 469 |
| 464 </polymer-element> | 470 </polymer-element> |
| 465 <polymer-element name="library-ref" extends="service-ref"> | 471 <polymer-element name="library-ref" extends="service-ref"> |
| 466 <template> | 472 <template> |
| 467 <a href="{{ url }}">{{ name }}</a> | 473 <a href="{{ url }}">{{ name }}</a> |
| (...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 745 <p>{{ error.message }}</p> | 751 <p>{{ error.message }}</p> |
| 746 </div> | 752 </div> |
| 747 </div> | 753 </div> |
| 748 </div> | 754 </div> |
| 749 </div> | 755 </div> |
| 750 </template> | 756 </template> |
| 751 | 757 |
| 752 </polymer-element> | 758 </polymer-element> |
| 753 <polymer-element name="field-view" extends="observatory-element"> | 759 <polymer-element name="field-view" extends="observatory-element"> |
| 754 <template> | 760 <template> |
| 761 <style> |
| 762 .content { |
| 763 padding-left: 10%; |
| 764 font: 400 14px 'Montserrat', sans-serif; |
| 765 } |
| 766 h1 { |
| 767 font: 400 18px 'Montserrat', sans-serif; |
| 768 } |
| 769 .memberList { |
| 770 display: table; |
| 771 } |
| 772 .memberItem { |
| 773 display: table-row; |
| 774 } |
| 775 .memberName, .memberValue { |
| 776 display: table-cell; |
| 777 vertical-align: top; |
| 778 padding: 3px 0 3px 1em; |
| 779 font: 400 14px 'Montserrat', sans-serif; |
| 780 } |
| 781 </style> |
| 782 |
| 755 <nav-bar> | 783 <nav-bar> |
| 756 <top-nav-menu></top-nav-menu> | 784 <top-nav-menu></top-nav-menu> |
| 757 <isolate-nav-menu isolate="{{ field.isolate }}"></isolate-nav-menu> | 785 <isolate-nav-menu isolate="{{ field.isolate }}"></isolate-nav-menu> |
| 758 <template if="{{ field['owner'].serviceType == 'Class' }}"> | 786 <template if="{{ field['owner'].serviceType == 'Class' }}"> |
| 759 <!-- TODO(turnidge): Add library nav menu here. --> | 787 <!-- TODO(turnidge): Add library nav menu here. --> |
| 760 <class-nav-menu cls="{{ field['owner'] }}"></class-nav-menu> | 788 <class-nav-menu cls="{{ field['owner'] }}"></class-nav-menu> |
| 761 </template> | 789 </template> |
| 762 <template if="{{ field['owner'].serviceType == 'Library' }}"> | 790 <template if="{{ field['owner'].serviceType == 'Library' }}"> |
| 763 <library-nav-menu library="{{ field['owner'] }}"></library-nav-menu> | 791 <library-nav-menu library="{{ field['owner'] }}"></library-nav-menu> |
| 764 </template> | 792 </template> |
| 765 <nav-menu link="." anchor="{{ field['user_name'] }}" last="{{ true }}"></n
av-menu> | 793 <nav-menu link="." anchor="{{ field['user_name'] }}" last="{{ true }}"></n
av-menu> |
| 766 <nav-refresh callback="{{ refresh }}"></nav-refresh> | 794 <nav-refresh callback="{{ refresh }}"></nav-refresh> |
| 767 </nav-bar> | 795 </nav-bar> |
| 768 | 796 |
| 769 <div class="row"> | 797 <div class="content"> |
| 770 <div class="col-md-8 col-md-offset-2"> | 798 <h1> |
| 771 <div class="panel panel-warning"> | 799 <template if="{{ field['static'] }}">static</template> |
| 772 <div class="panel-heading"> | 800 <template if="{{ field['final'] }}">final</template> |
| 773 <template if="{{ field['static'] }}">static</template> | 801 <template if="{{ field['const'] }}">const</template> |
| 774 <template if="{{ field['final'] }}">final</template> | 802 <template if="{{ (field['declared_type']['name'] == 'dynamic' && |
| 775 <template if="{{ field['const'] }}">const</template> | 803 !field['final'] && !field['const']) }}"> |
| 776 {{ field['user_name'] }} ({{ field['name'] }}) | 804 var |
| 777 <class-ref ref="{{ field['owner'] }}"></class-ref> | 805 </template> |
| 806 <template if="{{ (field['declared_type']['user_name'] != 'dynamic') }}"> |
| 807 {{ field['declared_type']['user_name'] }} |
| 808 </template> |
| 809 {{ field['user_name'] }} |
| 810 </h1> |
| 811 <div class="memberList"> |
| 812 <div class="memberItem"> |
| 813 <div class="memberName">owner</div> |
| 814 <div class="memberValue"> |
| 815 <template if="{{ field['owner'].serviceType == 'Class' }}"> |
| 816 <class-ref ref="{{ field['owner'] }}"></class-ref> |
| 817 </template> |
| 818 <template if="{{ field['owner'].serviceType != 'Class' }}"> |
| 819 <library-ref ref="{{ field['owner'] }}"></library-ref> |
| 820 </template> |
| 821 </div> |
| 778 </div> | 822 </div> |
| 779 <div class="panel-body"> | 823 <div class="memberItem"> |
| 780 <template if="{{ field['guard_class'] == 'dynamic'}}"> | 824 <div class="memberName">script</div> |
| 781 <div class="alert alert-danger"> | 825 <div class="memberValue"> |
| 782 Field has been assigned multiple types. If a field is only ever | 826 <script-ref ref="{{ field['script'] }}"></script-ref> |
| 783 assigned a single type, performance may improve. | 827 </div> |
| 828 </div> |
| 829 <template if="{{ !field['static'] }}"> |
| 830 <div class="memberItem" title="The types observed for this field at ru
ntime. Fields that are observed to have a single type at runtime or to never be
null may allow for additional optimization."> |
| 831 <div class="memberName">observed types</div> |
| 832 <div class="memberValue"> |
| 833 <template if="{{ field['guard_class'] == 'dynamic' }}"> |
| 834 various |
| 835 </template> |
| 836 <template if="{{ field['guard_class'] == 'unknown' }}"> |
| 837 none |
| 838 </template> |
| 839 <template if="{{ field['guard_class'] != 'unknown' && |
| 840 field['guard_class'] != 'dynamic' }}"> |
| 841 <class-ref ref="{{ field['guard_class'] }}"></class-ref> |
| 842 <template if="{{ field['guard_nullable'] }}"> |
| 843 — null observed |
| 844 </template> |
| 845 <template if="{{ !field['guard_nullable'] }}"> |
| 846 — null not observed |
| 847 </template> |
| 848 </template> |
| 849 </div> |
| 784 </div> | 850 </div> |
| 785 </template> | 851 </template> |
| 786 <template if="{{ (field['guard_class'] != 'dynamic') && (field['
guard_class'] != 'unknown') }}"> | 852 <template if="{{ field['value'] != null }}"> |
| 787 <div class="alert alert-success">Field has monomorphic type</div> | 853 <div class="memberItem"> |
| 788 <template if="{{ (field['guard_class'] != 'dynamic') && | 854 <div class="memberName">static value</div> |
| 789 field['guard_nullable'] }}"> | 855 <div class="memberValue"> |
| 790 <div class="alert alert-info"> | 856 <instance-ref ref="{{ field['value'] }}"></instance-ref> |
| 791 Field has been assigned null. If a field is never assigned null, | |
| 792 performance may improve. | |
| 793 </div> | 857 </div> |
| 794 </template> | 858 </div> |
| 795 <blockquote> | |
| 796 <class-ref ref="{{ field['guard_class'] }}"></class-ref> | |
| 797 </blockquote> | |
| 798 </template> | 859 </template> |
| 799 </div> | |
| 800 </div> | 860 </div> |
| 801 </div> | 861 </div> |
| 802 </div> | |
| 803 </template> | 862 </template> |
| 804 | 863 |
| 805 </polymer-element> | 864 </polymer-element> |
| 806 <polymer-element name="function-view" extends="observatory-element"> | 865 <polymer-element name="function-view" extends="observatory-element"> |
| 807 <template> | 866 <template> |
| 808 <style> | 867 <style> |
| 809 .content { | 868 .content { |
| 810 padding-left: 10%; | 869 padding-left: 10%; |
| 811 font: 400 14px 'Montserrat', sans-serif; | 870 font: 400 14px 'Montserrat', sans-serif; |
| 812 } | 871 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 823 display: table-cell; | 882 display: table-cell; |
| 824 vertical-align: top; | 883 vertical-align: top; |
| 825 padding: 3px 0 3px 1em; | 884 padding: 3px 0 3px 1em; |
| 826 font: 400 14px 'Montserrat', sans-serif; | 885 font: 400 14px 'Montserrat', sans-serif; |
| 827 } | 886 } |
| 828 </style> | 887 </style> |
| 829 | 888 |
| 830 <nav-bar> | 889 <nav-bar> |
| 831 <top-nav-menu></top-nav-menu> | 890 <top-nav-menu></top-nav-menu> |
| 832 <isolate-nav-menu isolate="{{ function.isolate }}"></isolate-nav-menu> | 891 <isolate-nav-menu isolate="{{ function.isolate }}"></isolate-nav-menu> |
| 833 <template if="{{ function['owner']['type'] == '@Class' }}"> | 892 <template if="{{ function['owner'].serviceType == 'Class' }}"> |
| 834 <!-- TODO(turnidge): Add library nav menu here. --> | 893 <!-- TODO(turnidge): Add library nav menu here. --> |
| 835 <class-nav-menu cls="{{ function['owner'] }}"></class-nav-menu> | 894 <class-nav-menu cls="{{ function['owner'] }}"></class-nav-menu> |
| 836 </template> | 895 </template> |
| 837 <template if="{{ function['owner']['type'] == '@Library' }}"> | 896 <template if="{{ function['owner'].serviceType == 'Library' }}"> |
| 838 <library-nav-menu library="{{ function['owner'] }}"></library-nav-menu> | 897 <library-nav-menu library="{{ function['owner'] }}"></library-nav-menu> |
| 839 </template> | 898 </template> |
| 840 <nav-menu link="." anchor="{{ function.name }}" last="{{ true }}"></nav-me
nu> | 899 <nav-menu link="." anchor="{{ function.name }}" last="{{ true }}"></nav-me
nu> |
| 841 <nav-refresh callback="{{ refresh }}"></nav-refresh> | 900 <nav-refresh callback="{{ refresh }}"></nav-refresh> |
| 842 </nav-bar> | 901 </nav-bar> |
| 843 | 902 |
| 844 <div class="content"> | 903 <div class="content"> |
| 845 <h1>function {{ qualifiedName }}</h1> | 904 <h1>function {{ qualifiedName }}</h1> |
| 846 | 905 |
| 847 <div class="memberList"> | 906 <div class="memberList"> |
| 848 <div class="memberItem"> | 907 <div class="memberItem"> |
| 849 <div class="memberName">kind</div> | 908 <div class="memberName">kind</div> |
| 850 <div class="memberValue"> | 909 <div class="memberValue"> |
| 851 <template if="{{ function['is_static'] }}">static</template> | 910 <template if="{{ function['is_static'] }}">static</template> |
| 852 <template if="{{ function['is_const'] }}">const</template> | 911 <template if="{{ function['is_const'] }}">const</template> |
| 853 {{ kind }} | 912 {{ kind }} |
| 854 </div> | 913 </div> |
| 855 </div> | 914 </div> |
| 856 <template if="{{ function['parent'] != null }}"> | 915 <template if="{{ function['parent'] != null }}"> |
| 857 <div class="memberItem"> | 916 <div class="memberItem"> |
| 858 <div class="memberName">parent function</div> | 917 <div class="memberName">parent function</div> |
| 859 <div class="memberValue"> | 918 <div class="memberValue"> |
| 860 <function-ref ref="{{ function['parent'] }}"></function-ref> | 919 <function-ref ref="{{ function['parent'] }}"></function-ref> |
| 861 </div> | 920 </div> |
| 862 </div> | 921 </div> |
| 863 </template> | 922 </template> |
| 864 <template if="{{ function['parent'] == null && | |
| 865 function['class'] != null }}"> | |
| 866 <div class="memberItem"> | |
| 867 <div class="memberName">parent class</div> | |
| 868 <div class="memberValue"> | |
| 869 <class-ref ref="{{ function['class'] }}"></class-ref> | |
| 870 </div> | |
| 871 </div> | |
| 872 </template> | |
| 873 <div class="memberItem"> | 923 <div class="memberItem"> |
| 924 <div class="memberName">owner</div> |
| 925 <div class="memberValue"> |
| 926 <template if="{{ function['owner'].serviceType == 'Class' }}"> |
| 927 <class-ref ref="{{ function['owner'] }}"></class-ref> |
| 928 </template> |
| 929 <template if="{{ function['owner'].serviceType != 'Class' }}"> |
| 930 <library-ref ref="{{ function['owner'] }}"></library-ref> |
| 931 </template> |
| 932 </div> |
| 933 </div> |
| 934 <div class="memberItem"> |
| 874 <div class="memberName">script</div> | 935 <div class="memberName">script</div> |
| 875 <div class="memberValue"> | 936 <div class="memberValue"> |
| 876 <script-ref ref="{{ function['script'] }}"> | 937 <script-ref ref="{{ function['script'] }}"></script-ref> |
| 877 </script-ref> | |
| 878 </div> | 938 </div> |
| 879 </div> | 939 </div> |
| 880 | 940 |
| 881 <div class="memberItem"> </div> | 941 <div class="memberItem"> </div> |
| 882 | 942 |
| 883 <template if="{{ function['code'] != null }}"> | 943 <template if="{{ function['code'] != null }}"> |
| 884 <div class="memberItem"> | 944 <div class="memberItem"> |
| 885 <div class="memberName">optimized code</div> | 945 <div class="memberName">optimized code</div> |
| 886 <div class="memberValue"> | 946 <div class="memberValue"> |
| 887 <code-ref ref="{{ function['code'] }}"></code-ref> | 947 <code-ref ref="{{ function['code'] }}"></code-ref> |
| (...skipping 415 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1303 </div> | 1363 </div> |
| 1304 <template if="{{ instance['type_class'] != null }}"> | 1364 <template if="{{ instance['type_class'] != null }}"> |
| 1305 <div class="memberItem"> | 1365 <div class="memberItem"> |
| 1306 <div class="memberName">type class</div> | 1366 <div class="memberName">type class</div> |
| 1307 <div class="memberValue"> | 1367 <div class="memberValue"> |
| 1308 <class-ref ref="{{ instance['type_class'] }}"> | 1368 <class-ref ref="{{ instance['type_class'] }}"> |
| 1309 </class-ref> | 1369 </class-ref> |
| 1310 </div> | 1370 </div> |
| 1311 </div> | 1371 </div> |
| 1312 </template> | 1372 </template> |
| 1373 <template if="{{ instance['closureFunc'] != null }}"> |
| 1374 <div class="memberItem"> |
| 1375 <div class="memberName">closure function</div> |
| 1376 <div class="memberValue"> |
| 1377 <function-ref ref="{{ instance['closureFunc'] }}"> |
| 1378 </function-ref> |
| 1379 </div> |
| 1380 </div> |
| 1381 </template> |
| 1313 </div> | 1382 </div> |
| 1314 </div> | 1383 </div> |
| 1315 | 1384 |
| 1316 <hr> | 1385 <hr> |
| 1317 | 1386 |
| 1318 <div class="content"> | 1387 <div class="content"> |
| 1319 <template if="{{ instance['fields'].isNotEmpty }}"> | 1388 <template if="{{ instance['fields'].isNotEmpty }}"> |
| 1320 fields ({{ instance['fields'].length }}) | 1389 fields ({{ instance['fields'].length }}) |
| 1321 <curly-block> | 1390 <curly-block> |
| 1322 <div class="memberList"> | 1391 <div class="memberList"> |
| (...skipping 691 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2014 <template> | 2083 <template> |
| 2015 <a href="{{ url }}">{{ ref.name }}</a> | 2084 <a href="{{ url }}">{{ ref.name }}</a> |
| 2016 </template> | 2085 </template> |
| 2017 | 2086 |
| 2018 </polymer-element> | 2087 </polymer-element> |
| 2019 | 2088 |
| 2020 | 2089 |
| 2021 <observatory-application></observatory-application> | 2090 <observatory-application></observatory-application> |
| 2022 | 2091 |
| 2023 </body></html> | 2092 </body></html> |
| OLD | NEW |