Index: runtime/bin/vmservice/client/deployed/web/index_devtools.html |
diff --git a/runtime/bin/vmservice/client/deployed/web/index_devtools.html b/runtime/bin/vmservice/client/deployed/web/index_devtools.html |
index f51ef56a4ef62d935b0038501391a6b9a575942e..2632d5b34283dba1c59cafebc64b1d84522057d0 100644 |
--- a/runtime/bin/vmservice/client/deployed/web/index_devtools.html |
+++ b/runtime/bin/vmservice/client/deployed/web/index_devtools.html |
@@ -288,7 +288,7 @@ |
font: 400 14px 'Montserrat', sans-serif; |
} |
</style> |
- <div> |
+ <span> |
<template if="{{ isUnexpected(ref.serviceType) }}"> |
unexpected reference type <{{ ref.serviceType }}> |
</template> |
@@ -308,6 +308,10 @@ |
<a href="{{ url }}">{{ ref['preview'] }}</a> |
</template> |
+ <template if="{{ (isType(ref.serviceType)) }}"> |
+ <a href="{{ url }}">{{ ref['user_name'] }}</a> |
+ </template> |
+ |
<template if="{{ isClosure(ref.serviceType) }}"> |
<a href="{{ url }}"> |
<!-- TODO(turnidge): Switch this to fully-qualified function --> |
@@ -348,8 +352,7 @@ |
</div> |
</curly-block> |
</template> |
- |
- </div> |
+ </span> |
</template> |
</polymer-element> |
@@ -442,11 +445,12 @@ |
var |
</template> |
<template if="{{ (ref['declared_type']['name'] != 'dynamic') }}"> |
- <class-ref ref="{{ ref['declared_type'] }}"></class-ref> |
+ <instance-ref ref="{{ ref['declared_type'] }}"></instance-ref> |
</template> |
<a title="{{ hoverText }}" href="{{ url }}">{{ name }}</a> |
</div> |
-</template> </polymer-element><polymer-element name="function-ref" extends="service-ref"> |
+</template> </polymer-element> |
+<polymer-element name="function-ref" extends="service-ref"> |
<template><!-- These comments are here to allow newlines. |
--><template if="{{ qualified && !hasParent && hasClass }}"><!-- |
--><class-ref ref="{{ ref['class'] }}"></class-ref>.</template><!-- |
@@ -800,6 +804,28 @@ |
</polymer-element> |
<polymer-element name="function-view" extends="observatory-element"> |
<template> |
+ <style> |
+ .content { |
+ padding-left: 10%; |
+ font: 400 14px 'Montserrat', sans-serif; |
+ } |
+ h1 { |
+ font: 400 18px 'Montserrat', sans-serif; |
+ } |
+ .memberList { |
+ display: table; |
+ } |
+ .memberItem { |
+ display: table-row; |
+ } |
+ .memberName, .memberValue { |
+ display: table-cell; |
+ vertical-align: top; |
+ padding: 3px 0 3px 1em; |
+ font: 400 14px 'Montserrat', sans-serif; |
+ } |
+ </style> |
+ |
<nav-bar> |
<top-nav-menu></top-nav-menu> |
<isolate-nav-menu isolate="{{ function.isolate }}"></isolate-nav-menu> |
@@ -814,50 +840,86 @@ |
<nav-refresh callback="{{ refresh }}"></nav-refresh> |
</nav-bar> |
- <div class="row"> |
- <div class="col-md-8 col-md-offset-2"> |
- <div class="panel panel-warning"> |
- <div class="panel-heading"> |
- {{ function['user_name'] }} ({{ function['name'] }}) |
- <class-ref ref="{{ function['class'] }}"></class-ref> |
+ <div class="content"> |
+ <h1>function {{ qualifiedName }}</h1> |
+ |
+ <div class="memberList"> |
+ <div class="memberItem"> |
+ <div class="memberName">kind</div> |
+ <div class="memberValue"> |
+ <template if="{{ function['is_static'] }}">static</template> |
+ <template if="{{ function['is_const'] }}">const</template> |
+ {{ kind }} |
+ </div> |
</div> |
- <div class="panel-body"> |
- <div> |
- <code-ref ref="{{ function['code'] }}"></code-ref> |
- <code-ref ref="{{ function['unoptimized_code'] }}"></code-ref> |
+ <template if="{{ function['parent'] != null }}"> |
+ <div class="memberItem"> |
+ <div class="memberName">parent function</div> |
+ <div class="memberValue"> |
+ <function-ref ref="{{ function['parent'] }}"></function-ref> |
+ </div> |
+ </div> |
+ </template> |
+ <template if="{{ function['parent'] == null && |
+ function['class'] != null }}"> |
+ <div class="memberItem"> |
+ <div class="memberName">parent class</div> |
+ <div class="memberValue"> |
+ <class-ref ref="{{ function['class'] }}"></class-ref> |
+ </div> |
+ </div> |
+ </template> |
+ <div class="memberItem"> |
+ <div class="memberName">script</div> |
+ <div class="memberValue"> |
+ <script-ref ref="{{ function['script'] }}"> |
+ </script-ref> |
</div> |
- <table class="table table-hover"> |
- <tbody> |
- <tr> |
- <td>static</td><td>{{ function['is_static'] }}</td> |
- </tr> |
- <tr> |
- <td>Const</td><td>{{ function['is_const'] }}</td> |
- </tr> |
- <tr> |
- <td>Optimizable</td><td>{{ function['is_optimizable'] }}</td> |
- </tr> |
- <tr> |
- <td>Inlinable</td><td>{{ function['is_inlinable'] }}</td> |
- </tr> |
- <tr> |
- <td>Kind</td><td>{{ function['kind'] }}</td> |
- </tr> |
- <tr> |
- <td>Usage Count</td><td>{{ function['usage_counter'] }}</td> |
- </tr> |
- <tr> |
- <td>Optimized Call Site Count</td><td>{{ function['optimized_call_site_count'] }}</td> |
- </tr> |
- <tr> |
- <td>Deoptimizations</td><td>{{ function['deoptimizations'] }}</td> |
- </tr> |
- </tbody> |
- </table> |
</div> |
- </div> |
+ |
+ <div class="memberItem"> </div> |
+ |
+ <template if="{{ function['code'] != null }}"> |
+ <div class="memberItem"> |
+ <div class="memberName">optimized code</div> |
+ <div class="memberValue"> |
+ <code-ref ref="{{ function['code'] }}"></code-ref> |
+ </div> |
+ </div> |
+ </template> |
+ <template if="{{ function['unoptimized_code'] != null }}"> |
+ <div class="memberItem"> |
+ <div class="memberName">unoptimized code</div> |
+ <div class="memberValue"> |
+ <code-ref ref="{{ function['unoptimized_code'] }}"></code-ref> |
+ </div> |
+ <div class="memberValue"> |
+ <span title="This count is used to determine when a function will be optimized. It is a combination of call counts and other factors."> |
+ (usage count: {{ function['usage_counter'] }}) |
+ </span> |
+ </div> |
+ </div> |
+ </template> |
+ <div class="memberItem"> |
+ <div class="memberName">deoptimizations</div> |
+ <div class="memberValue">{{ function['deoptimizations'] }}</div> |
+ </div> |
+ <div class="memberItem"> |
+ <div class="memberName">optimizable</div> |
+ <div class="memberValue">{{ function['is_optimizable'] }}</div> |
+ </div> |
+ <div class="memberItem"> |
+ <div class="memberName">inlinable</div> |
+ <div class="memberValue">{{ function['is_inlinable'] }}</div> |
+ </div> |
+ <template if="{{ function.name != function.vmName }}"> |
+ <div class="memberItem"> |
+ <div class="memberName">vm name</div> |
+ <div class="memberValue">{{ function.vmName }}</div> |
+ </div> |
+ </template> |
+ </div> |
</div> |
- </div> |
</template> |
</polymer-element> |
@@ -1214,7 +1276,12 @@ |
<template if="{{ instance['error'] == null }}"> |
<div class="content"> |
<!-- TODO(turnidge): Handle null instances. --> |
- <h1>instance of {{ instance['class']['user_name'] }}</h1> |
+ <template if="{{ isType(instance.serviceType) }}"> |
+ <h1>type {{ instance['user_name'] }}</h1> |
+ </template> |
+ <template if="{{ !isType(instance.serviceType) }}"> |
+ <h1>instance of {{ instance['class']['user_name'] }}</h1> |
+ </template> |
<div class="memberList"> |
<div class="memberItem"> |
<div class="memberName">class</div> |
@@ -1233,6 +1300,15 @@ |
<div class="memberName">size</div> |
<div class="memberValue">{{ instance['size'] | formatSize }}</div> |
</div> |
+ <template if="{{ instance['type_class'] != null }}"> |
+ <div class="memberItem"> |
+ <div class="memberName">type class</div> |
+ <div class="memberValue"> |
+ <class-ref ref="{{ instance['type_class'] }}"> |
+ </class-ref> |
+ </div> |
+ </div> |
+ </template> |
</div> |
</div> |