Index: runtime/bin/vmservice/client/deployed/web/index_devtools.html |
=================================================================== |
--- runtime/bin/vmservice/client/deployed/web/index_devtools.html (revision 32126) |
+++ runtime/bin/vmservice/client/deployed/web/index_devtools.html (working copy) |
@@ -73,15 +73,19 @@ |
<template> |
<div> |
<template if="{{ (ref['type'] == 'null') }}"> |
- {{ "null" }} |
+ unexpected null |
</template> |
- <template if="{{ (ref['type'] != 'null') }}"> |
- <a href="{{ url }}">{{ name }} </a> |
+ <template if="{{ (ref['type'] == '@Null') }}"> |
+ {{ name }} |
</template> |
+ <template if="{{ (ref['type'] != 'null') && ref['type'] != '@Null' }}"> |
+ <a href="{{ url }}">{{ name }} </a> |
+ </template> |
</div> |
</template> |
-</polymer-element><polymer-element name="library-ref" extends="service-ref"> |
+</polymer-element> |
+<polymer-element name="library-ref" extends="service-ref"> |
<template> |
<a href="{{ url }}">{{ name }}</a> |
</template> |
@@ -298,49 +302,115 @@ |
</polymer-element><polymer-element name="isolate-summary" extends="observatory-element"> |
<template> |
- <div class="row"> |
- <div class="col-md-1"> |
- <img src="img/isolate_icon.png" class="img-polaroid"> |
- </div> |
- <div class="col-md-1">{{ isolate }}</div> |
- <div class="col-md-10">{{ name }}</div> |
- </div> |
- <div class="row"> |
- <div class="col-md-2"></div> |
- <div class="col-md-1"> |
- <a href="{{ app.locationManager.relativeLink(isolate, 'stacktrace') }}">Stacktrace</a> |
- </div> |
+ <div class="row"> |
<div class="col-md-1"> |
- <a href="{{ app.locationManager.relativeLink(isolate, 'library') }}">Library</a> |
+ <img src="packages/observatory/src/observatory_elements/img/isolate_icon.png" class="img-polaroid"> |
</div> |
- <div class="col-md-1"> |
- <a href="{{ app.locationManager.relativeLink(isolate, 'debug/breakpoints') }}">Breakpoints</a> |
+ |
+ <div class="col-md-1">{{ isolate.name }}</div> |
+ |
+ <!-- TODO(turnidge): Use function-ref when it can take isolate param --> |
+ <div class="col-md-4"> |
+ |
+ <div class="row"> |
+ <template if="{{ isolate.entry['id'] != null }}"> |
+ <a href="{{ app.locationManager.relativeLink(isolate.id, isolate.entry['id']) }}"> |
+ {{ isolate.entry['name'] }} |
+ </a> |
+ </template> |
+ <template if="{{ isolate.entry['id'] == null }}"> |
+ <!-- fred --> |
+ root isolate |
+ </template> |
+ </div> |
+ |
+ <div class="row"> |
+ <small> |
+ (<a href="{{ app.locationManager.relativeLink(isolate.id, isolate.rootLib) }}">library</a>) |
+ (<a href="{{ app.locationManager.relativeLink(isolate.id, 'debug/breakpoints') }}">breakpoints</a>) |
+ (<a href="{{ app.locationManager.relativeLink(isolate.id, 'profile') }}">profile</a>) |
+ </small> |
+ </div> |
</div> |
- <div class="col-md-1"> |
- <a href="{{ app.locationManager.relativeLink(isolate, 'profile') }}">Profile</a> |
+ |
+ <div class="col-md-2"> |
+ <div class="row"> |
+ <div class="col-md-3">{{ isolate.timers['total'] | formatTime }}</div> |
+ <div class="col-md-1"></div> |
+ <div class="col-md-3"><p class="text-muted">total</p></div> |
+ </div> |
+ <div class="row"> |
+ <div class="col-md-3">{{ isolate.timers['dart'] | formatTime }}</div> |
+ <div class="col-md-1"></div> |
+ <div class="col-md-3"><p class="text-muted">dart</p></div> |
+ </div> |
+ <div class="row"> |
+ <div class="col-md-3">{{ isolate.timers['compile'] | formatTime }}</div> |
+ <div class="col-md-1"></div> |
+ <div class="col-md-3"><p class="text-muted">compile</p></div> |
+ </div> |
+ <div class="row"> |
+ <div class="col-md-3">{{ isolate.timers['gc'] | formatTime }}</div> |
+ <div class="col-md-1"></div> |
+ <div class="col-md-3"><p class="text-muted">gc</p></div> |
+ </div> |
+ <div class="row"> |
+ <div class="col-md-3">{{ isolate.timers['init'] | formatTime }}</div> |
+ <div class="col-md-1"></div> |
+ <div class="col-md-3"><p class="text-muted">init</p></div> |
+ </div> |
</div> |
- <div class="col-md-1"> |
- <a href="{{ app.locationManager.relativeLink(isolate, 'allocationprofile') }}">Allocation Profile</a> |
+ <div class="col-md-2"> |
+ <a href="{{ app.locationManager.relativeLink(isolate.id, 'allocationprofile') }}"> |
+ {{ isolate.newHeapUsed | formatSize }}/{{ isolate.oldHeapUsed | formatSize }} |
+ </a> |
</div> |
- <div class="col-md-8"></div> |
+ <div class="col-md-2"> |
+ <template if="{{ isolate.topFrame == null }}"> |
+ idle |
+ </template> |
+ <template if="{{ isolate.topFrame != null }}"> |
+ run |
+ </template> |
+ ( <a href="{{ app.locationManager.relativeLink(isolate.id, 'stacktrace') }}">stack trace</a> ) |
+ </div> |
</div> |
+ <div class="row"> |
+ <div class="col-md-3"> |
+ </div> |
+ <div class="col-md-6"> |
+ <template if="{{ isolate.topFrame != null }}"> |
+ <a href="{{ app.locationManager.relativeLink(isolate.id, isolate.topFrame['function']['id']) }}"> |
+ {{ isolate.topFrame['function']['user_name'] }} |
+ </a> |
+ (<a href="{{ app.locationManager.relativeLink(isolate.id, isolate.topFrame['script']['id']) }}"> |
+ {{ isolate.topFrame | fileAndLine }} |
+ </a>) |
+ <br> |
+ <pre>{{ isolate.topFrame['line'] }} {{ isolate.topFrame['lineString'] }}</pre> |
+ </template> |
+ </div> |
+ <div class="col-md-3"> |
+ </div> |
+ </div> |
</template> |
</polymer-element> |
<polymer-element name="isolate-list" extends="observatory-element"> |
<template> |
+ <button type="button" on-click="{{refresh}}">Refresh</button> |
<ul class="list-group"> |
<template repeat="{{ isolate in app.isolateManager.isolates.values }}"> |
<li class="list-group-item"> |
- <isolate-summary app="{{ app }}" isolate="{{ isolate.id }}" name="{{ isolate.name }}"></isolate-summary> |
+ <isolate-summary app="{{ app }}" isolate="{{ isolate }}"></isolate-summary> |
</li> |
</template> |
</ul> |
(<a href="{{ app.locationManager.absoluteLink('cpu') }}">cpu</a>) |
- |
</template> |
-</polymer-element><polymer-element name="instance-view" extends="observatory-element"> |
+</polymer-element> |
+<polymer-element name="instance-view" extends="observatory-element"> |
<template> |
<div class="row"> |
<div class="col-md-8 col-md-offset-2"> |
@@ -480,7 +550,8 @@ |
</template> |
-</polymer-element><polymer-element name="heap-profile" extends="observatory-element"> |
+</polymer-element> |
+<polymer-element name="heap-profile" extends="observatory-element"> |
<template> |
<div> |
<button type="button" on-click="{{refreshData}}">Refresh</button> |
@@ -547,30 +618,57 @@ |
</div> |
</template> |
-</polymer-element><polymer-element name="stack-trace" extends="observatory-element"> |
+</polymer-element><polymer-element name="stack-frame" extends="observatory-element"> |
<template> |
- <div class="alert alert-info">Stack Trace</div> |
- <table class="table table-hover"> |
- <thead> |
- <tr> |
- <th>Depth</th> |
- <th>Function</th> |
- <th>Script</th> |
- <th>Line</th> |
- </tr> |
- </thead> |
- <tbody> |
- <tr template="" repeat="{{ frame in trace['members'] }}"> |
- <td></td> |
- <td><function-ref app="{{ app }}" ref="{{ frame['function'] }}"></function-ref></td> |
- <td><script-ref app="{{ app }}" ref="{{ frame['script'] }}"></script-ref></td> |
- <td>{{ frame['line'] }}</td> |
- </tr> |
- </tbody> |
- </table> |
+ <div class="row"> |
+ <div class="col-md-1"></div> |
+ <div class="col-md-1"> |
+ #{{ frame['depth'] }} |
+ </div> |
+ <div class="col-md-9"> |
+ <function-ref app="{{ app }}" ref="{{ frame['function'] }}"></function-ref> |
+ ( <script-ref app="{{ app }}" ref="{{ frame['script'] }}"></script-ref>:{{ frame['line'] }} ) |
+ </div> |
+ <div class="col-md-1"></div> |
+ </div> |
+ |
+ <template repeat="{{ v in frame['vars'] }}"> |
+ <div class="row"> |
+ <div class="col-md-3"></div> |
+ <div class="col-md-1"> |
+ {{ v['name'] }} |
+ </div> |
+ <div class="col-md-6"> |
+ <instance-ref app="{{ app }}" ref="{{ v['value'] }}"></instance-ref> |
+ </div> |
+ <div class="col-md-2"></div> |
+ </div> |
+ </template> |
+ |
</template> |
-</polymer-element><polymer-element name="message-viewer" extends="observatory-element"> |
+</polymer-element> |
+<polymer-element name="stack-trace" extends="observatory-element"> |
+ <template> |
+ <template if="{{ trace['members'].isEmpty }}"> |
+ <div class="col-md-1"></div> |
+ <div class="col-md-11"> |
+ <em>No stack</em> |
+ </div> |
+ </template> |
+ <template if="{{ trace['members'].isNotEmpty }}"> |
+ <ul class="list-group"> |
+ <template repeat="{{ frame in trace['members'] }}"> |
+ <li class="list-group-item"> |
+ <stack-frame app="{{ app }}" frame="{{ frame }}"></stack-frame> |
+ </li> |
+ </template> |
+ </ul> |
+ </template> |
+ </template> |
+ |
+</polymer-element> |
+<polymer-element name="message-viewer" extends="observatory-element"> |
<!-- |
This is a big switch statement which instantiates the custom element |
designated to display the message type. |
@@ -713,4 +811,4 @@ |
</polymer-element> |
<observatory-application devtools="true"></observatory-application> |
-</body></html> |
+</body></html> |