Refactor VM service IDs:
- IDs are strings which can be concatenated together like paths. - Isolate ID is now "/isolates/XXX" - Function, field, class, library, and script IDs are now stable. - Introduce <type-ref> tags. R=turnidge@google.com Review URL: https://codereview.chromium.org//98253009 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31358 260f80e4-7a28-3924-810f-c04153c831b5
This commit is contained in:
@@ -29,7 +29,15 @@
|
||||
</template>
|
||||
</template>
|
||||
|
||||
</polymer-element><polymer-element name="error-view" extends="observatory-element">
|
||||
</polymer-element><polymer-element name="service-ref" extends="observatory-element">
|
||||
|
||||
</polymer-element><polymer-element name="class-ref" extends="service-ref">
|
||||
<template>
|
||||
<a href="{{ url }}">{{ name }}</a>
|
||||
</template>
|
||||
|
||||
</polymer-element>
|
||||
<polymer-element name="error-view" extends="observatory-element">
|
||||
<template>
|
||||
<div class="row">
|
||||
<div class="col-md-8 col-md-offset-2">
|
||||
@@ -48,34 +56,42 @@
|
||||
</div>
|
||||
</template>
|
||||
|
||||
</polymer-element><polymer-element name="field-ref" extends="observatory-element">
|
||||
</polymer-element><polymer-element name="field-ref" extends="service-ref">
|
||||
<template>
|
||||
<div>
|
||||
<template if="{{ field['final'] }}"> final </template>
|
||||
<template if="{{ field['const'] }}"> const </template>
|
||||
<template if="{{ (field['declared_type']['name'] == 'dynamic' && !field['final'] && !field['const']) }}">
|
||||
<template if="{{ ref['final'] }}"> final </template>
|
||||
<template if="{{ ref['const'] }}"> const </template>
|
||||
<template if="{{ (ref['declared_type']['name'] == 'dynamic' && !ref['final'] && !ref['const']) }}">
|
||||
var
|
||||
</template>
|
||||
<template if="{{ (field['declared_type']['name'] != 'dynamic') }}">
|
||||
<a href="{{ app.locationManager.currentIsolateClassLink(field['declared_type']['id']) }}">
|
||||
{{ field['declared_type']['user_name'] }} </a>
|
||||
<template if="{{ (ref['declared_type']['name'] != 'dynamic') }}">
|
||||
<class-ref app="{{ app }}" ref="{{ ref['declared_type'] }}"></class-ref>
|
||||
</template>
|
||||
<a href="{{ app.locationManager.currentIsolateObjectLink(field['id'])}}">
|
||||
{{ field['user_name'] }} </a>
|
||||
<a href="{{ url }}">{{ name }}</a>
|
||||
</div>
|
||||
</template> </polymer-element><polymer-element name="instance-ref" extends="observatory-element">
|
||||
</template> </polymer-element><polymer-element name="function-ref" extends="service-ref">
|
||||
<template>
|
||||
<a href="{{ url }}">{{ name }}</a>
|
||||
</template>
|
||||
|
||||
</polymer-element><polymer-element name="instance-ref" extends="service-ref">
|
||||
<template>
|
||||
<div>
|
||||
<template if="{{ (instance['type'] == 'null') }}">
|
||||
<template if="{{ (ref['type'] == 'null') }}">
|
||||
{{ "null" }}
|
||||
</template>
|
||||
<template if="{{ (instance['type'] != 'null') }}">
|
||||
<a href="{{ app.locationManager.currentIsolateObjectLink(instance['id'])}}">
|
||||
{{ instance['preview'] }}
|
||||
</a>
|
||||
<template if="{{ (ref['type'] != 'null') }}">
|
||||
<a href="{{ url }}">{{ name }} </a>
|
||||
</template>
|
||||
</div>
|
||||
</template> </polymer-element><polymer-element name="class-view" extends="observatory-element">
|
||||
</template>
|
||||
|
||||
</polymer-element><polymer-element name="library-ref" extends="service-ref">
|
||||
<template>
|
||||
<a href="{{ url }}">{{ name }}</a>
|
||||
</template>
|
||||
|
||||
</polymer-element><polymer-element name="class-view" extends="observatory-element">
|
||||
<template>
|
||||
<div class="row">
|
||||
<div class="col-md-8 col-md-offset-2">
|
||||
@@ -84,13 +100,9 @@
|
||||
class <strong>{{ cls['user_name'] }}</strong>
|
||||
<template if="{{ cls['super']['type'] != 'Null' }}">
|
||||
extends
|
||||
<a href="{{ app.locationManager.currentIsolateClassLink(cls['super']['id'])}}">
|
||||
{{ cls['super']['user_name'] }}
|
||||
</a>
|
||||
<class-ref app="{{ app }}" ref="{{ cls['super'] }}"></class-ref>
|
||||
</template>
|
||||
<a class="pull-right" href="{{ app.locationManager.currentIsolateObjectLink(cls['library']['id'])}}">
|
||||
{{ cls['library']['name'] }}
|
||||
</a>
|
||||
<library-ref app="{{ app }}" ref="{{ cls['library'] }}"></library-ref>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<table class="table table-hover">
|
||||
@@ -120,8 +132,8 @@
|
||||
<table class="table table-hover">
|
||||
<tbody>
|
||||
<tr template="" repeat="{{ field in cls['fields'] }}">
|
||||
<td><field-ref app="{{ app }}" field="{{ field }}"></field-ref></td>
|
||||
<td><instance-ref app="{{ app }}" instance="{{ field['value'] }}"></instance-ref></td>
|
||||
<td><field-ref app="{{ app }}" ref="{{ field }}"></field-ref></td>
|
||||
<td><instance-ref app="{{ app }}" ref="{{ field['value'] }}"></instance-ref></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -135,8 +147,8 @@
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr template="" repeat="{{ function in cls['functions'] }}">
|
||||
<td><a href="{{ app.locationManager.currentIsolateObjectLink(function['id'])}}">{{ function['user_name'] }}</a></td>
|
||||
<td><a href="{{ app.locationManager.currentIsolateObjectLink(function['id'])}}">{{ function['name'] }}</a></td>
|
||||
<td><function-ref app="{{ app }}" ref="{{ function }}"></function-ref></td>
|
||||
<td><function-ref app="{{ app }}" ref="{{ function }}" internal=""></function-ref></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -150,6 +162,12 @@
|
||||
</div>
|
||||
</template>
|
||||
|
||||
</polymer-element>
|
||||
<polymer-element name="code-ref" extends="service-ref">
|
||||
<template>
|
||||
<a href="{{ url }}">{{ name }}</a>
|
||||
</template>
|
||||
|
||||
</polymer-element><polymer-element name="disassembly-entry" extends="observatory-element">
|
||||
<template>
|
||||
<div class="row">
|
||||
@@ -174,9 +192,7 @@
|
||||
<div class="col-md-8 col-md-offset-2">
|
||||
<div class="{{ cssPanelClass }}">
|
||||
<div class="panel-heading">
|
||||
<a href="{{ app.locationManager.currentIsolateObjectLink(code['function']['id'])}}">
|
||||
{{ code['function']['user_name'] }} ({{ code['function']['name'] }})
|
||||
</a>
|
||||
<function-ref app="{{ app }}" ref="{{ code['function'] }}"></function-ref>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="row">
|
||||
@@ -215,10 +231,8 @@
|
||||
<template if="{{ field['static'] }}">static</template>
|
||||
<template if="{{ field['final'] }}">final</template>
|
||||
<template if="{{ field['const'] }}">const</template>
|
||||
{{ field['user_name'] }} ({{ field['name'] }})
|
||||
<a class="pull-right" href="{{ app.locationManager.currentIsolateClassLink(field['class']['id'])}}">
|
||||
{{ field['class']['user_name'] }}
|
||||
</a>
|
||||
{{ field['user_name'] }} ({{ field['name'] }})
|
||||
<class-ref app="{{ app }}" ref="{{ field['class'] }}"></class-ref>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<template if="{{ field['guard_class'] == 'dynamic'}}">
|
||||
@@ -227,9 +241,9 @@
|
||||
assigned a single type, performance may improve.
|
||||
</div>
|
||||
</template>
|
||||
<template if="{{ field['guard_class'] != 'dynamic'}}">
|
||||
<template if="{{ (field['guard_class'] != 'dynamic') && (field['guard_class'] != 'unknown') }}">
|
||||
<div class="alert alert-success">Field has monomorphic type</div>
|
||||
<template if="{{ (field['guard_class'] != 'dynamic') &&
|
||||
<template if="{{ (field['guard_class'] != 'dynamic') &&
|
||||
field['guard_nullable'] }}">
|
||||
<div class="alert alert-info">
|
||||
Field has been assigned null. If a field is never assigned null,
|
||||
@@ -237,9 +251,7 @@
|
||||
</div>
|
||||
</template>
|
||||
<blockquote>
|
||||
<a href="{{ app.locationManager.currentIsolateClassLink(field['guard_class']['id'])}}">
|
||||
{{ field['guard_class']['user_name'] }}
|
||||
</a>
|
||||
<class-ref app="{{ app }}" ref="{{ field['guard_class'] }}"></class-ref>
|
||||
</blockquote>
|
||||
</template>
|
||||
</div>
|
||||
@@ -254,15 +266,13 @@
|
||||
<div class="col-md-8 col-md-offset-2">
|
||||
<div class="panel panel-warning">
|
||||
<div class="panel-heading">
|
||||
{{ function['user_name'] }} ({{ function['name'] }})
|
||||
<a class="pull-right" href="{{ app.locationManager.currentIsolateClassLink(function['class']['id'])}}">
|
||||
{{ function['class']['name'] }}
|
||||
</a>
|
||||
{{ function['user_name'] }} ({{ function['name'] }})
|
||||
<class-ref app="{{ app }}" ref="{{ function['class'] }}"></class-ref>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div>
|
||||
<a class="btn btn-primary" href="{{ app.locationManager.currentIsolateObjectLink(function['code']['id'])}}">Current Code</a>
|
||||
<a class="btn btn-info" href="{{ app.locationManager.currentIsolateObjectLink(function['unoptimized_code']['id'])}}">Unoptimized Code</a>
|
||||
<code-ref app="{{ app }}" ref="{{ function['code'] }}"></code-ref>
|
||||
<code-ref app="{{ app }}" ref="{{ function['unoptimized_code'] }}"></code-ref>
|
||||
</div>
|
||||
<table class="table table-hover">
|
||||
<tbody>
|
||||
@@ -337,12 +347,10 @@
|
||||
<template>
|
||||
<div class="row">
|
||||
<div class="col-md-8 col-md-offset-2">
|
||||
<div class="panel panel-warning">
|
||||
<div class="panel panel-warning">
|
||||
<div class="panel-heading">
|
||||
Instance of
|
||||
<a href="{{ app.locationManager.currentIsolateClassLink(instance['class']['id'])}}">
|
||||
{{ instance['class']['user_name'] }}
|
||||
</a>
|
||||
<class-ref app="{{ app }}" ref="{{ instance['class'] }}"></class-ref>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<template if="{{ instance['error'] == null }}">
|
||||
@@ -357,8 +365,8 @@
|
||||
<table class="table table-hover">
|
||||
<tbody>
|
||||
<tr template="" repeat="{{ field in instance['fields'] }}">
|
||||
<td><field-ref app="{{ app }}" field="{{ field }}"></field-ref></td>
|
||||
<td><instance-ref app="{{ app }}" instance="{{ field['value'] }}"></instance-ref></td>
|
||||
<td><field-ref app="{{ app }}" ref="{{ field }}"></field-ref></td>
|
||||
<td><instance-ref app="{{ app }}" ref="{{ field['value'] }}"></instance-ref></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -372,7 +380,8 @@
|
||||
</div>
|
||||
</template>
|
||||
|
||||
</polymer-element><polymer-element name="json-view" extends="observatory-element">
|
||||
</polymer-element>
|
||||
<polymer-element name="json-view" extends="observatory-element">
|
||||
<template>
|
||||
<template bind="" if="{{ valueType == 'Primitive' }}">
|
||||
<span>{{primitiveString}}</span>
|
||||
@@ -401,6 +410,12 @@
|
||||
</template>
|
||||
</template>
|
||||
|
||||
</polymer-element>
|
||||
<polymer-element name="script-ref" extends="service-ref">
|
||||
<template>
|
||||
<a href="{{ url }}">{{ name }}</a>
|
||||
</template>
|
||||
|
||||
</polymer-element><polymer-element name="library-view" extends="observatory-element">
|
||||
<template>
|
||||
<div class="alert alert-success">Library {{ library['name'] }}</div>
|
||||
@@ -412,7 +427,7 @@
|
||||
{{ script['kind'] }}
|
||||
</td>
|
||||
<td>
|
||||
<a href="{{ app.locationManager.currentIsolateScriptLink(script['id'], script['name']) }}">{{ script['name'] }}</a>
|
||||
<script-ref app="{{ app }}" ref="{{ script }}"></script-ref>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
@@ -422,9 +437,7 @@
|
||||
<tbody>
|
||||
<tr template="" repeat="{{ lib in library['libraries'] }}">
|
||||
<td>
|
||||
<a href="{{ app.locationManager.currentIsolateObjectLink(lib['id'])}}">
|
||||
{{ lib['url'] }}
|
||||
</a>
|
||||
<library-ref app="{{ app }}" ref="{{ lib }}"></library-ref>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
@@ -433,8 +446,8 @@
|
||||
<table class="table table-hover">
|
||||
<tbody>
|
||||
<tr template="" repeat="{{ variable in library['variables'] }}">
|
||||
<td><field-ref app="{{ app }}" field="{{ variable }}"></field-ref></td>
|
||||
<td><instance-ref app="{{ app }}" instance="{{ variable['value'] }}"></instance-ref></td>
|
||||
<td><field-ref app="{{ app }}" ref="{{ variable }}"></field-ref></td>
|
||||
<td><instance-ref app="{{ app }}" ref="{{ variable['value'] }}"></instance-ref></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -443,9 +456,7 @@
|
||||
<tbody>
|
||||
<tr template="" repeat="{{ func in library['functions'] }}">
|
||||
<td>
|
||||
<a href="{{ app.locationManager.currentIsolateObjectLink(func['id'])}}">
|
||||
{{ func['user_name'] }}
|
||||
</a>
|
||||
<function-ref app="{{ app }}" ref="{{ func }}"></function-ref>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
@@ -461,14 +472,10 @@
|
||||
<tbody>
|
||||
<tr template="" repeat="{{ cls in library['classes'] }}">
|
||||
<td>
|
||||
<a href="{{ app.locationManager.currentIsolateClassLink(cls['id']) }}">
|
||||
{{ cls['user_name'] }}
|
||||
</a>
|
||||
<class-ref app="{{ app }}" ref="{{ cls }}"></class-ref>
|
||||
</td>
|
||||
<td>
|
||||
<a href="{{ app.locationManager.currentIsolateClassLink(cls['id']) }}">
|
||||
{{ cls['name'] }}
|
||||
</a>
|
||||
<class-ref app="{{ app }}" ref="{{ cls }}" internal=""></class-ref>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
@@ -506,15 +513,15 @@
|
||||
<tr>
|
||||
<th>Depth</th>
|
||||
<th>Function</th>
|
||||
<th>Url</th>
|
||||
<th>Script</th>
|
||||
<th>Line</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr template="" repeat="{{ frame in trace['members'] }}">
|
||||
<td>{{$index}}</td>
|
||||
<td><a href="{{app.locationManager.currentIsolateObjectLink(frame['function']['id'])}}">{{ frame['name'] }}</a></td>
|
||||
<td>{{ frame['url'] }}</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>
|
||||
@@ -588,7 +595,6 @@
|
||||
<a class="navbar-brand" href="">Observatory</a>
|
||||
</div>
|
||||
<div class="collapse navbar-collapse navbar-ex1-collapse">
|
||||
<input class="span2 pull-right navbar-form" placeholder="VM Address" type="text" value="{{ app.requestManager.prefix }}">
|
||||
</div>
|
||||
</nav>
|
||||
</template>
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -29,7 +29,15 @@
|
||||
</template>
|
||||
</template>
|
||||
|
||||
</polymer-element><polymer-element name="error-view" extends="observatory-element">
|
||||
</polymer-element><polymer-element name="service-ref" extends="observatory-element">
|
||||
|
||||
</polymer-element><polymer-element name="class-ref" extends="service-ref">
|
||||
<template>
|
||||
<a href="{{ url }}">{{ name }}</a>
|
||||
</template>
|
||||
|
||||
</polymer-element>
|
||||
<polymer-element name="error-view" extends="observatory-element">
|
||||
<template>
|
||||
<div class="row">
|
||||
<div class="col-md-8 col-md-offset-2">
|
||||
@@ -48,34 +56,42 @@
|
||||
</div>
|
||||
</template>
|
||||
|
||||
</polymer-element><polymer-element name="field-ref" extends="observatory-element">
|
||||
</polymer-element><polymer-element name="field-ref" extends="service-ref">
|
||||
<template>
|
||||
<div>
|
||||
<template if="{{ field['final'] }}"> final </template>
|
||||
<template if="{{ field['const'] }}"> const </template>
|
||||
<template if="{{ (field['declared_type']['name'] == 'dynamic' && !field['final'] && !field['const']) }}">
|
||||
<template if="{{ ref['final'] }}"> final </template>
|
||||
<template if="{{ ref['const'] }}"> const </template>
|
||||
<template if="{{ (ref['declared_type']['name'] == 'dynamic' && !ref['final'] && !ref['const']) }}">
|
||||
var
|
||||
</template>
|
||||
<template if="{{ (field['declared_type']['name'] != 'dynamic') }}">
|
||||
<a href="{{ app.locationManager.currentIsolateClassLink(field['declared_type']['id']) }}">
|
||||
{{ field['declared_type']['user_name'] }} </a>
|
||||
<template if="{{ (ref['declared_type']['name'] != 'dynamic') }}">
|
||||
<class-ref app="{{ app }}" ref="{{ ref['declared_type'] }}"></class-ref>
|
||||
</template>
|
||||
<a href="{{ app.locationManager.currentIsolateObjectLink(field['id'])}}">
|
||||
{{ field['user_name'] }} </a>
|
||||
<a href="{{ url }}">{{ name }}</a>
|
||||
</div>
|
||||
</template> </polymer-element><polymer-element name="instance-ref" extends="observatory-element">
|
||||
</template> </polymer-element><polymer-element name="function-ref" extends="service-ref">
|
||||
<template>
|
||||
<a href="{{ url }}">{{ name }}</a>
|
||||
</template>
|
||||
|
||||
</polymer-element><polymer-element name="instance-ref" extends="service-ref">
|
||||
<template>
|
||||
<div>
|
||||
<template if="{{ (instance['type'] == 'null') }}">
|
||||
<template if="{{ (ref['type'] == 'null') }}">
|
||||
{{ "null" }}
|
||||
</template>
|
||||
<template if="{{ (instance['type'] != 'null') }}">
|
||||
<a href="{{ app.locationManager.currentIsolateObjectLink(instance['id'])}}">
|
||||
{{ instance['preview'] }}
|
||||
</a>
|
||||
<template if="{{ (ref['type'] != 'null') }}">
|
||||
<a href="{{ url }}">{{ name }} </a>
|
||||
</template>
|
||||
</div>
|
||||
</template> </polymer-element><polymer-element name="class-view" extends="observatory-element">
|
||||
</template>
|
||||
|
||||
</polymer-element><polymer-element name="library-ref" extends="service-ref">
|
||||
<template>
|
||||
<a href="{{ url }}">{{ name }}</a>
|
||||
</template>
|
||||
|
||||
</polymer-element><polymer-element name="class-view" extends="observatory-element">
|
||||
<template>
|
||||
<div class="row">
|
||||
<div class="col-md-8 col-md-offset-2">
|
||||
@@ -84,13 +100,9 @@
|
||||
class <strong>{{ cls['user_name'] }}</strong>
|
||||
<template if="{{ cls['super']['type'] != 'Null' }}">
|
||||
extends
|
||||
<a href="{{ app.locationManager.currentIsolateClassLink(cls['super']['id'])}}">
|
||||
{{ cls['super']['user_name'] }}
|
||||
</a>
|
||||
<class-ref app="{{ app }}" ref="{{ cls['super'] }}"></class-ref>
|
||||
</template>
|
||||
<a class="pull-right" href="{{ app.locationManager.currentIsolateObjectLink(cls['library']['id'])}}">
|
||||
{{ cls['library']['name'] }}
|
||||
</a>
|
||||
<library-ref app="{{ app }}" ref="{{ cls['library'] }}"></library-ref>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<table class="table table-hover">
|
||||
@@ -120,8 +132,8 @@
|
||||
<table class="table table-hover">
|
||||
<tbody>
|
||||
<tr template="" repeat="{{ field in cls['fields'] }}">
|
||||
<td><field-ref app="{{ app }}" field="{{ field }}"></field-ref></td>
|
||||
<td><instance-ref app="{{ app }}" instance="{{ field['value'] }}"></instance-ref></td>
|
||||
<td><field-ref app="{{ app }}" ref="{{ field }}"></field-ref></td>
|
||||
<td><instance-ref app="{{ app }}" ref="{{ field['value'] }}"></instance-ref></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -135,8 +147,8 @@
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr template="" repeat="{{ function in cls['functions'] }}">
|
||||
<td><a href="{{ app.locationManager.currentIsolateObjectLink(function['id'])}}">{{ function['user_name'] }}</a></td>
|
||||
<td><a href="{{ app.locationManager.currentIsolateObjectLink(function['id'])}}">{{ function['name'] }}</a></td>
|
||||
<td><function-ref app="{{ app }}" ref="{{ function }}"></function-ref></td>
|
||||
<td><function-ref app="{{ app }}" ref="{{ function }}" internal=""></function-ref></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -150,6 +162,12 @@
|
||||
</div>
|
||||
</template>
|
||||
|
||||
</polymer-element>
|
||||
<polymer-element name="code-ref" extends="service-ref">
|
||||
<template>
|
||||
<a href="{{ url }}">{{ name }}</a>
|
||||
</template>
|
||||
|
||||
</polymer-element><polymer-element name="disassembly-entry" extends="observatory-element">
|
||||
<template>
|
||||
<div class="row">
|
||||
@@ -174,9 +192,7 @@
|
||||
<div class="col-md-8 col-md-offset-2">
|
||||
<div class="{{ cssPanelClass }}">
|
||||
<div class="panel-heading">
|
||||
<a href="{{ app.locationManager.currentIsolateObjectLink(code['function']['id'])}}">
|
||||
{{ code['function']['user_name'] }} ({{ code['function']['name'] }})
|
||||
</a>
|
||||
<function-ref app="{{ app }}" ref="{{ code['function'] }}"></function-ref>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="row">
|
||||
@@ -215,10 +231,8 @@
|
||||
<template if="{{ field['static'] }}">static</template>
|
||||
<template if="{{ field['final'] }}">final</template>
|
||||
<template if="{{ field['const'] }}">const</template>
|
||||
{{ field['user_name'] }} ({{ field['name'] }})
|
||||
<a class="pull-right" href="{{ app.locationManager.currentIsolateClassLink(field['class']['id'])}}">
|
||||
{{ field['class']['user_name'] }}
|
||||
</a>
|
||||
{{ field['user_name'] }} ({{ field['name'] }})
|
||||
<class-ref app="{{ app }}" ref="{{ field['class'] }}"></class-ref>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<template if="{{ field['guard_class'] == 'dynamic'}}">
|
||||
@@ -227,9 +241,9 @@
|
||||
assigned a single type, performance may improve.
|
||||
</div>
|
||||
</template>
|
||||
<template if="{{ field['guard_class'] != 'dynamic'}}">
|
||||
<template if="{{ (field['guard_class'] != 'dynamic') && (field['guard_class'] != 'unknown') }}">
|
||||
<div class="alert alert-success">Field has monomorphic type</div>
|
||||
<template if="{{ (field['guard_class'] != 'dynamic') &&
|
||||
<template if="{{ (field['guard_class'] != 'dynamic') &&
|
||||
field['guard_nullable'] }}">
|
||||
<div class="alert alert-info">
|
||||
Field has been assigned null. If a field is never assigned null,
|
||||
@@ -237,9 +251,7 @@
|
||||
</div>
|
||||
</template>
|
||||
<blockquote>
|
||||
<a href="{{ app.locationManager.currentIsolateClassLink(field['guard_class']['id'])}}">
|
||||
{{ field['guard_class']['user_name'] }}
|
||||
</a>
|
||||
<class-ref app="{{ app }}" ref="{{ field['guard_class'] }}"></class-ref>
|
||||
</blockquote>
|
||||
</template>
|
||||
</div>
|
||||
@@ -254,15 +266,13 @@
|
||||
<div class="col-md-8 col-md-offset-2">
|
||||
<div class="panel panel-warning">
|
||||
<div class="panel-heading">
|
||||
{{ function['user_name'] }} ({{ function['name'] }})
|
||||
<a class="pull-right" href="{{ app.locationManager.currentIsolateClassLink(function['class']['id'])}}">
|
||||
{{ function['class']['name'] }}
|
||||
</a>
|
||||
{{ function['user_name'] }} ({{ function['name'] }})
|
||||
<class-ref app="{{ app }}" ref="{{ function['class'] }}"></class-ref>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div>
|
||||
<a class="btn btn-primary" href="{{ app.locationManager.currentIsolateObjectLink(function['code']['id'])}}">Current Code</a>
|
||||
<a class="btn btn-info" href="{{ app.locationManager.currentIsolateObjectLink(function['unoptimized_code']['id'])}}">Unoptimized Code</a>
|
||||
<code-ref app="{{ app }}" ref="{{ function['code'] }}"></code-ref>
|
||||
<code-ref app="{{ app }}" ref="{{ function['unoptimized_code'] }}"></code-ref>
|
||||
</div>
|
||||
<table class="table table-hover">
|
||||
<tbody>
|
||||
@@ -337,12 +347,10 @@
|
||||
<template>
|
||||
<div class="row">
|
||||
<div class="col-md-8 col-md-offset-2">
|
||||
<div class="panel panel-warning">
|
||||
<div class="panel panel-warning">
|
||||
<div class="panel-heading">
|
||||
Instance of
|
||||
<a href="{{ app.locationManager.currentIsolateClassLink(instance['class']['id'])}}">
|
||||
{{ instance['class']['user_name'] }}
|
||||
</a>
|
||||
<class-ref app="{{ app }}" ref="{{ instance['class'] }}"></class-ref>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<template if="{{ instance['error'] == null }}">
|
||||
@@ -357,8 +365,8 @@
|
||||
<table class="table table-hover">
|
||||
<tbody>
|
||||
<tr template="" repeat="{{ field in instance['fields'] }}">
|
||||
<td><field-ref app="{{ app }}" field="{{ field }}"></field-ref></td>
|
||||
<td><instance-ref app="{{ app }}" instance="{{ field['value'] }}"></instance-ref></td>
|
||||
<td><field-ref app="{{ app }}" ref="{{ field }}"></field-ref></td>
|
||||
<td><instance-ref app="{{ app }}" ref="{{ field['value'] }}"></instance-ref></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -372,7 +380,8 @@
|
||||
</div>
|
||||
</template>
|
||||
|
||||
</polymer-element><polymer-element name="json-view" extends="observatory-element">
|
||||
</polymer-element>
|
||||
<polymer-element name="json-view" extends="observatory-element">
|
||||
<template>
|
||||
<template bind="" if="{{ valueType == 'Primitive' }}">
|
||||
<span>{{primitiveString}}</span>
|
||||
@@ -401,6 +410,12 @@
|
||||
</template>
|
||||
</template>
|
||||
|
||||
</polymer-element>
|
||||
<polymer-element name="script-ref" extends="service-ref">
|
||||
<template>
|
||||
<a href="{{ url }}">{{ name }}</a>
|
||||
</template>
|
||||
|
||||
</polymer-element><polymer-element name="library-view" extends="observatory-element">
|
||||
<template>
|
||||
<div class="alert alert-success">Library {{ library['name'] }}</div>
|
||||
@@ -412,7 +427,7 @@
|
||||
{{ script['kind'] }}
|
||||
</td>
|
||||
<td>
|
||||
<a href="{{ app.locationManager.currentIsolateScriptLink(script['id'], script['name']) }}">{{ script['name'] }}</a>
|
||||
<script-ref app="{{ app }}" ref="{{ script }}"></script-ref>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
@@ -422,9 +437,7 @@
|
||||
<tbody>
|
||||
<tr template="" repeat="{{ lib in library['libraries'] }}">
|
||||
<td>
|
||||
<a href="{{ app.locationManager.currentIsolateObjectLink(lib['id'])}}">
|
||||
{{ lib['url'] }}
|
||||
</a>
|
||||
<library-ref app="{{ app }}" ref="{{ lib }}"></library-ref>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
@@ -433,8 +446,8 @@
|
||||
<table class="table table-hover">
|
||||
<tbody>
|
||||
<tr template="" repeat="{{ variable in library['variables'] }}">
|
||||
<td><field-ref app="{{ app }}" field="{{ variable }}"></field-ref></td>
|
||||
<td><instance-ref app="{{ app }}" instance="{{ variable['value'] }}"></instance-ref></td>
|
||||
<td><field-ref app="{{ app }}" ref="{{ variable }}"></field-ref></td>
|
||||
<td><instance-ref app="{{ app }}" ref="{{ variable['value'] }}"></instance-ref></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -443,9 +456,7 @@
|
||||
<tbody>
|
||||
<tr template="" repeat="{{ func in library['functions'] }}">
|
||||
<td>
|
||||
<a href="{{ app.locationManager.currentIsolateObjectLink(func['id'])}}">
|
||||
{{ func['user_name'] }}
|
||||
</a>
|
||||
<function-ref app="{{ app }}" ref="{{ func }}"></function-ref>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
@@ -461,14 +472,10 @@
|
||||
<tbody>
|
||||
<tr template="" repeat="{{ cls in library['classes'] }}">
|
||||
<td>
|
||||
<a href="{{ app.locationManager.currentIsolateClassLink(cls['id']) }}">
|
||||
{{ cls['user_name'] }}
|
||||
</a>
|
||||
<class-ref app="{{ app }}" ref="{{ cls }}"></class-ref>
|
||||
</td>
|
||||
<td>
|
||||
<a href="{{ app.locationManager.currentIsolateClassLink(cls['id']) }}">
|
||||
{{ cls['name'] }}
|
||||
</a>
|
||||
<class-ref app="{{ app }}" ref="{{ cls }}" internal=""></class-ref>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
@@ -506,15 +513,15 @@
|
||||
<tr>
|
||||
<th>Depth</th>
|
||||
<th>Function</th>
|
||||
<th>Url</th>
|
||||
<th>Script</th>
|
||||
<th>Line</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr template="" repeat="{{ frame in trace['members'] }}">
|
||||
<td>{{$index}}</td>
|
||||
<td><a href="{{app.locationManager.currentIsolateObjectLink(frame['function']['id'])}}">{{ frame['name'] }}</a></td>
|
||||
<td>{{ frame['url'] }}</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>
|
||||
@@ -588,7 +595,6 @@
|
||||
<a class="navbar-brand" href="">Observatory</a>
|
||||
</div>
|
||||
<div class="collapse navbar-collapse navbar-ex1-collapse">
|
||||
<input class="span2 pull-right navbar-form" placeholder="VM Address" type="text" value="{{ app.requestManager.prefix }}">
|
||||
</div>
|
||||
</nav>
|
||||
</template>
|
||||
|
||||
+24953
-22181
File diff suppressed because one or more lines are too long
@@ -2,24 +2,30 @@ library observatory_elements;
|
||||
|
||||
// Export elements.
|
||||
export 'package:observatory/src/observatory_elements/breakpoint_list.dart';
|
||||
export 'package:observatory/src/observatory_elements/class_ref.dart';
|
||||
export 'package:observatory/src/observatory_elements/class_view.dart';
|
||||
export 'package:observatory/src/observatory_elements/code_ref.dart';
|
||||
export 'package:observatory/src/observatory_elements/code_view.dart';
|
||||
export 'package:observatory/src/observatory_elements/collapsible_content.dart';
|
||||
export 'package:observatory/src/observatory_elements/error_view.dart';
|
||||
export 'package:observatory/src/observatory_elements/field_ref.dart';
|
||||
export 'package:observatory/src/observatory_elements/field_view.dart';
|
||||
export 'package:observatory/src/observatory_elements/function_ref.dart';
|
||||
export 'package:observatory/src/observatory_elements/function_view.dart';
|
||||
export 'package:observatory/src/observatory_elements/instance_ref.dart';
|
||||
export 'package:observatory/src/observatory_elements/instance_view.dart';
|
||||
export 'package:observatory/src/observatory_elements/isolate_list.dart';
|
||||
export 'package:observatory/src/observatory_elements/isolate_summary.dart';
|
||||
export 'package:observatory/src/observatory_elements/json_view.dart';
|
||||
export 'package:observatory/src/observatory_elements/library_ref.dart';
|
||||
export 'package:observatory/src/observatory_elements/library_view.dart';
|
||||
export 'package:observatory/src/observatory_elements/message_viewer.dart';
|
||||
export 'package:observatory/src/observatory_elements/navigation_bar.dart';
|
||||
export
|
||||
'package:observatory/src/observatory_elements/observatory_application.dart';
|
||||
export 'package:observatory/src/observatory_elements/response_viewer.dart';
|
||||
export 'package:observatory/src/observatory_elements/script_ref.dart';
|
||||
export 'package:observatory/src/observatory_elements/script_view.dart';
|
||||
export 'package:observatory/src/observatory_elements/service_ref.dart';
|
||||
export 'package:observatory/src/observatory_elements/source_view.dart';
|
||||
export 'package:observatory/src/observatory_elements/stack_trace.dart';
|
||||
|
||||
|
||||
@@ -2,18 +2,23 @@
|
||||
<html>
|
||||
<head>
|
||||
<link rel="import" href="src/observatory_elements/breakpoint_list.html">
|
||||
<link rel="import" href="src/observatory_elements/class_ref.html">
|
||||
<link rel="import" href="src/observatory_elements/class_view.html">
|
||||
<link rel="import" href="src/observatory_elements/code_ref.html">
|
||||
<link rel="import" href="src/observatory_elements/code_view.html">
|
||||
<link rel="import" href="src/observatory_elements/collapsible_content.html">
|
||||
<link rel="import" href="src/observatory_elements/disassembly_entry.html">
|
||||
<link rel="import" href="src/observatory_elements/error_view.html">
|
||||
<link rel="import" href="src/observatory_elements/field_ref.html">
|
||||
<link rel="import" href="src/observatory_elements/field_view.html">
|
||||
<link rel="import" href="src/observatory_elements/function_ref.html">
|
||||
<link rel="import" href="src/observatory_elements/function_view.html">
|
||||
<link rel="import" href="src/observatory_elements/isolate_list.html">
|
||||
<link rel="import" href="src/observatory_elements/isolate_summary.html">
|
||||
<link rel="import" href="src/observatory_elements/instance_ref.html">
|
||||
<link rel="import" href="src/observatory_elements/instance_view.html">
|
||||
<link rel="import" href="src/observatory_elements/json_view.html">
|
||||
<link rel="import" href="src/observatory_elements/library_ref.html">
|
||||
<link rel="import" href="src/observatory_elements/library_view.html">
|
||||
<link rel="import" href="src/observatory_elements/message_viewer.html">
|
||||
<link rel="import" href="src/observatory_elements/navigation_bar.html">
|
||||
@@ -22,6 +27,8 @@
|
||||
<link rel="import"
|
||||
href="src/observatory_elements/observatory_element.html">
|
||||
<link rel="import" href="src/observatory_elements/response_viewer.html">
|
||||
<link rel="import" href="src/observatory_elements/service_ref.html">
|
||||
<link rel="import" href="src/observatory_elements/script_ref.html">
|
||||
<link rel="import" href="src/observatory_elements/script_view.html">
|
||||
<link rel="import" href="src/observatory_elements/source_view.html">
|
||||
<link rel="import" href="src/observatory_elements/stack_trace.html">
|
||||
|
||||
@@ -6,7 +6,7 @@ part of observatory;
|
||||
|
||||
/// State for a running isolate.
|
||||
class Isolate extends Observable {
|
||||
@observable int id;
|
||||
@observable String id;
|
||||
@observable String name;
|
||||
@observable final Map<String, ScriptSource> scripts =
|
||||
toObservable(new Map<String, ScriptSource>());
|
||||
|
||||
@@ -9,8 +9,8 @@ class IsolateManager extends Observable {
|
||||
ObservatoryApplication _application;
|
||||
ObservatoryApplication get application => _application;
|
||||
|
||||
@observable final Map<int, Isolate> isolates =
|
||||
toObservable(new Map<int, Isolate>());
|
||||
@observable final Map<String, Isolate> isolates =
|
||||
toObservable(new Map<String, Isolate>());
|
||||
|
||||
static bool _foundIsolateInMembers(int id, List<Map> members) {
|
||||
return members.any((E) => E['id'] == id);
|
||||
@@ -24,7 +24,7 @@ class IsolateManager extends Observable {
|
||||
});
|
||||
}
|
||||
|
||||
Isolate getIsolate(int id) {
|
||||
Isolate getIsolate(String id) {
|
||||
Isolate isolate = isolates[id];
|
||||
if (isolate == null) {
|
||||
isolate = new Isolate(id, '');
|
||||
|
||||
@@ -10,7 +10,7 @@ part of observatory;
|
||||
class LocationManager extends Observable {
|
||||
static const int InvalidIsolateId = 0;
|
||||
static const String defaultHash = '#/isolates/';
|
||||
static final RegExp currentIsolateMatcher = new RegExp(r"#/isolates/\d+/");
|
||||
static final RegExp currentIsolateMatcher = new RegExp(r"#/isolates/\d+");
|
||||
|
||||
ObservatoryApplication _application;
|
||||
ObservatoryApplication get application => _application;
|
||||
@@ -48,24 +48,15 @@ class LocationManager extends Observable {
|
||||
return currentIsolateAnchorPrefix() != null;
|
||||
}
|
||||
|
||||
bool get isScriptLink {
|
||||
String type = currentHashUri.queryParameters['type'];
|
||||
return type == 'Script';
|
||||
}
|
||||
|
||||
String get scriptName {
|
||||
return Uri.decodeQueryComponent(currentHashUri.queryParameters['name']);
|
||||
}
|
||||
|
||||
/// Extract the current isolate id as an integer. Returns [InvalidIsolateId]
|
||||
/// if none is present in window.location.
|
||||
int currentIsolateId() {
|
||||
String isolatePrefix = currentIsolateAnchorPrefix();
|
||||
if (isolatePrefix == null) {
|
||||
return InvalidIsolateId;
|
||||
String currentIsolateId() {
|
||||
var prefix = currentIsolateAnchorPrefix();
|
||||
if (prefix == null) {
|
||||
return '';
|
||||
}
|
||||
String id = isolatePrefix.split("/")[2];
|
||||
return int.parse(id);
|
||||
// Chop off the '/#'.
|
||||
return prefix.substring(2);
|
||||
}
|
||||
|
||||
/// If no anchor is set, set the default anchor and return true.
|
||||
@@ -99,59 +90,16 @@ class LocationManager extends Observable {
|
||||
return relativeLink(isolateId, l);
|
||||
}
|
||||
|
||||
/// Create a request for [objectId] on the current isolate.
|
||||
/// Create a request for [scriptURL] on the current isolate.
|
||||
@observable
|
||||
String currentIsolateObjectLink(int objectId) {
|
||||
var isolateId = currentIsolateId();
|
||||
if (isolateId == LocationManager.InvalidIsolateId) {
|
||||
return defaultHash;
|
||||
}
|
||||
return objectLink(isolateId, objectId);
|
||||
}
|
||||
|
||||
/// Create a request for [cid] on the current isolate.
|
||||
@observable
|
||||
String currentIsolateClassLink(int cid) {
|
||||
var isolateId = currentIsolateId();
|
||||
if (isolateId == LocationManager.InvalidIsolateId) {
|
||||
return defaultHash;
|
||||
}
|
||||
return classLink(isolateId, cid);
|
||||
}
|
||||
|
||||
/// Create a request for the script [objectId] with script [name].
|
||||
@observable
|
||||
String currentIsolateScriptLink(int objectId, String name) {
|
||||
var isolateId = currentIsolateId();
|
||||
if (isolateId == LocationManager.InvalidIsolateId) {
|
||||
return defaultHash;
|
||||
}
|
||||
return scriptLink(isolateId, objectId, name);
|
||||
String currentIsolateScriptLink(String scriptURL) {
|
||||
var encoded = Uri.encodeComponent(scriptURL);
|
||||
return currentIsolateRelativeLink('scripts/$encoded');
|
||||
}
|
||||
|
||||
/// Create a request for [l] on [isolateId].
|
||||
@observable
|
||||
String relativeLink(int isolateId, String l) {
|
||||
return '#/isolates/$isolateId/$l';
|
||||
}
|
||||
|
||||
/// Create a request for [objectId] on [isolateId].
|
||||
@observable
|
||||
String objectLink(int isolateId, int objectId) {
|
||||
return '#/isolates/$isolateId/objects/$objectId';
|
||||
}
|
||||
|
||||
/// Create a request for [cid] on [isolateId].
|
||||
@observable
|
||||
String classLink(int isolateId, int cid) {
|
||||
return '#/isolates/$isolateId/classes/$cid';
|
||||
}
|
||||
|
||||
@observable
|
||||
/// Create a request for the script [objectId] with script [url].
|
||||
String scriptLink(int isolateId, int objectId, String name) {
|
||||
String encodedName = Uri.encodeQueryComponent(name);
|
||||
return '#/isolates/$isolateId/objects/$objectId'
|
||||
'?type=Script&name=$encodedName';
|
||||
String relativeLink(String isolateId, String l) {
|
||||
return '#/$isolateId/$l';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,12 @@ abstract class RequestManager extends Observable {
|
||||
|
||||
/// Parse
|
||||
void parseResponses(String responseString) {
|
||||
var r = JSON.decode(responseString);
|
||||
var r;
|
||||
try {
|
||||
r = JSON.decode(responseString);
|
||||
} catch (e) {
|
||||
setResponseError(e.message);
|
||||
}
|
||||
if (r is Map) {
|
||||
setResponses([r]);
|
||||
} else {
|
||||
@@ -34,7 +39,7 @@ abstract class RequestManager extends Observable {
|
||||
}
|
||||
}
|
||||
|
||||
void setResponseError(HttpRequest request) {
|
||||
void setResponseRequestError(HttpRequest request) {
|
||||
String error = '${request.status} ${request.statusText}';
|
||||
if (request.status == 0) {
|
||||
error = 'No service found. Did you run with --enable-vm-service ?';
|
||||
@@ -45,52 +50,20 @@ abstract class RequestManager extends Observable {
|
||||
}]);
|
||||
}
|
||||
|
||||
void setResponseError(String message) {
|
||||
setResponses([{
|
||||
'type': 'Error',
|
||||
'text': message
|
||||
}]);
|
||||
}
|
||||
|
||||
/// Request [requestString] from the VM service. Updates [responses].
|
||||
/// Will trigger [interceptor] if one is set.
|
||||
void get(String requestString) {
|
||||
if (_application.locationManager.isScriptLink) {
|
||||
// We cache script sources.
|
||||
String scriptName = _application.locationManager.scriptName;
|
||||
getScriptSource(scriptName, requestString).then((source) {
|
||||
if (source != null) {
|
||||
setResponses([{
|
||||
'type': 'Script',
|
||||
'source': source
|
||||
}]);
|
||||
} else {
|
||||
setResponses([{
|
||||
'type': 'RequestError',
|
||||
'error': 'Source for $scriptName could not be loaded.'
|
||||
}]);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
request(requestString).then((responseString) {
|
||||
parseResponses(responseString);
|
||||
}).catchError((e) {
|
||||
if (e is FormatException) {
|
||||
setResponseError(e.message);
|
||||
} else {
|
||||
setResponseError(e.target);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Future<ScriptSource> getScriptSource(String name, String requestString) {
|
||||
int isolateId = _application.locationManager.currentIsolateId();
|
||||
Isolate isolate = _application.isolateManager.getIsolate(isolateId);
|
||||
ScriptSource source = isolate.scripts[name];
|
||||
if (source != null) {
|
||||
return new Future.value(source);
|
||||
}
|
||||
return request(requestString).then((responseString) {
|
||||
var r = JSON.decode(responseString);
|
||||
ScriptSource scriptSource = new ScriptSource(r);
|
||||
isolate.scripts[name] = scriptSource;
|
||||
return scriptSource;
|
||||
request(requestString).then((responseString) {
|
||||
parseResponses(responseString);
|
||||
}).catchError((e) {
|
||||
setResponseError(e.target);
|
||||
setResponseRequestError(e.target);
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
|
||||
// for details. All rights reserved. Use of this source code is governed by a
|
||||
// BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
library class_ref_element;
|
||||
|
||||
import 'package:polymer/polymer.dart';
|
||||
import 'service_ref.dart';
|
||||
|
||||
@CustomTag('class-ref')
|
||||
class ClassRefElement extends ServiceRefElement {
|
||||
ClassRefElement.created() : super.created();
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
<head>
|
||||
<link rel="import" href="service_ref.html">
|
||||
</head>
|
||||
<polymer-element name="class-ref" extends="service-ref">
|
||||
<template>
|
||||
<a href="{{ url }}">{{ name }}</a>
|
||||
</template>
|
||||
<script type="application/dart" src="class_ref.dart"></script>
|
||||
</polymer-element>
|
||||
@@ -2,7 +2,9 @@
|
||||
<link rel="import" href="observatory_element.html">
|
||||
<link rel="import" href="error_view.html">
|
||||
<link rel="import" href="field_ref.html">
|
||||
<link rel="import" href="function_ref.html">
|
||||
<link rel="import" href="instance_ref.html">
|
||||
<link rel="import" href="library_ref.html">
|
||||
</head>
|
||||
<polymer-element name="class-view" extends="observatory-element">
|
||||
<template>
|
||||
@@ -13,13 +15,9 @@
|
||||
class <strong>{{ cls['user_name'] }}</strong>
|
||||
<template if="{{ cls['super']['type'] != 'Null' }}">
|
||||
extends
|
||||
<a href="{{ app.locationManager.currentIsolateClassLink(cls['super']['id'])}}">
|
||||
{{ cls['super']['user_name'] }}
|
||||
</a>
|
||||
<class-ref app="{{ app }}" ref="{{ cls['super'] }}"></class-ref>
|
||||
</template>
|
||||
<a class="pull-right" href="{{ app.locationManager.currentIsolateObjectLink(cls['library']['id'])}}">
|
||||
{{ cls['library']['name'] }}
|
||||
</a>
|
||||
<library-ref app="{{ app }}" ref="{{ cls['library'] }}"></library-ref>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<table class="table table-hover">
|
||||
@@ -49,8 +47,8 @@
|
||||
<table class="table table-hover">
|
||||
<tbody>
|
||||
<tr template repeat="{{ field in cls['fields'] }}">
|
||||
<td><field-ref app="{{ app }}" field="{{ field }}"></field-ref></td>
|
||||
<td><instance-ref app="{{ app }}" instance="{{ field['value'] }}"></instance-ref></td>
|
||||
<td><field-ref app="{{ app }}" ref="{{ field }}"></field-ref></td>
|
||||
<td><instance-ref app="{{ app }}" ref="{{ field['value'] }}"></instance-ref></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -64,8 +62,8 @@
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr template repeat="{{ function in cls['functions'] }}">
|
||||
<td><a href="{{ app.locationManager.currentIsolateObjectLink(function['id'])}}">{{ function['user_name'] }}</a></td>
|
||||
<td><a href="{{ app.locationManager.currentIsolateObjectLink(function['id'])}}">{{ function['name'] }}</a></td>
|
||||
<td><function-ref app="{{ app }}" ref="{{ function }}"></function-ref></td>
|
||||
<td><function-ref app="{{ app }}" ref="{{ function }}" internal></function-ref></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
|
||||
// for details. All rights reserved. Use of this source code is governed by a
|
||||
// BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
library code_ref_element;
|
||||
|
||||
import 'package:polymer/polymer.dart';
|
||||
import 'service_ref.dart';
|
||||
|
||||
@CustomTag('code-ref')
|
||||
class CodeRefElement extends ServiceRefElement {
|
||||
CodeRefElement.created() : super.created();
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
<head>
|
||||
<link rel="import" href="service_ref.html">
|
||||
</head>
|
||||
<polymer-element name="code-ref" extends="service-ref">
|
||||
<template>
|
||||
<a href="{{ url }}">{{ name }}</a>
|
||||
</template>
|
||||
<script type="application/dart" src="code_ref.dart"></script>
|
||||
</polymer-element>
|
||||
@@ -1,5 +1,6 @@
|
||||
<head>
|
||||
<link rel="import" href="disassembly_entry.html">
|
||||
<link rel="import" href="function_ref.html">
|
||||
<link rel="import" href="observatory_element.html">
|
||||
</head>
|
||||
<polymer-element name="code-view" extends="observatory-element">
|
||||
@@ -8,9 +9,7 @@
|
||||
<div class="col-md-8 col-md-offset-2">
|
||||
<div class="{{ cssPanelClass }}">
|
||||
<div class="panel-heading">
|
||||
<a href="{{ app.locationManager.currentIsolateObjectLink(code['function']['id'])}}">
|
||||
{{ code['function']['user_name'] }} ({{ code['function']['name'] }})
|
||||
</a>
|
||||
<function-ref app="{{ app }}" ref="{{ code['function'] }}"></function-ref>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="row">
|
||||
|
||||
@@ -5,10 +5,9 @@
|
||||
library field_ref_element;
|
||||
|
||||
import 'package:polymer/polymer.dart';
|
||||
import 'observatory_element.dart';
|
||||
import 'service_ref.dart';
|
||||
|
||||
@CustomTag('field-ref')
|
||||
class FieldRefElement extends ObservatoryElement {
|
||||
@published Map field;
|
||||
class FieldRefElement extends ServiceRefElement {
|
||||
FieldRefElement.created() : super.created();
|
||||
}
|
||||
@@ -1,19 +1,19 @@
|
||||
<head>
|
||||
<link rel="import" href="class_ref.html">
|
||||
<link rel="import" href="observatory_element.html">
|
||||
<link rel="import" href="service_ref.html">
|
||||
</head>
|
||||
<polymer-element name="field-ref" extends="observatory-element">
|
||||
<polymer-element name="field-ref" extends="service-ref">
|
||||
<template>
|
||||
<div>
|
||||
<template if="{{ field['final'] }}"> final </template>
|
||||
<template if="{{ field['const'] }}"> const </template>
|
||||
<template if="{{ (field['declared_type']['name'] == 'dynamic' && !field['final'] && !field['const']) }}">
|
||||
<template if="{{ ref['final'] }}"> final </template>
|
||||
<template if="{{ ref['const'] }}"> const </template>
|
||||
<template if="{{ (ref['declared_type']['name'] == 'dynamic' && !ref['final'] && !ref['const']) }}">
|
||||
var
|
||||
</template>
|
||||
<template if="{{ (field['declared_type']['name'] != 'dynamic') }}">
|
||||
<a href="{{ app.locationManager.currentIsolateClassLink(field['declared_type']['id']) }}">
|
||||
{{ field['declared_type']['user_name'] }} </a>
|
||||
<template if="{{ (ref['declared_type']['name'] != 'dynamic') }}">
|
||||
<class-ref app="{{ app }}" ref="{{ ref['declared_type'] }}"></class-ref>
|
||||
</template>
|
||||
<a href="{{ app.locationManager.currentIsolateObjectLink(field['id'])}}">
|
||||
{{ field['user_name'] }} </a>
|
||||
<a href="{{ url }}">{{ name }}</a>
|
||||
</div>
|
||||
</template> <script type="application/dart" src="field_ref.dart"></script> </polymer-element>
|
||||
@@ -1,4 +1,5 @@
|
||||
<head>
|
||||
<link rel="import" href="class_ref.html">
|
||||
<link rel="import" href="observatory_element.html">
|
||||
</head>
|
||||
<polymer-element name="field-view" extends="observatory-element">
|
||||
@@ -10,10 +11,8 @@
|
||||
<template if="{{ field['static'] }}">static</template>
|
||||
<template if="{{ field['final'] }}">final</template>
|
||||
<template if="{{ field['const'] }}">const</template>
|
||||
{{ field['user_name'] }} ({{ field['name'] }})
|
||||
<a class="pull-right" href="{{ app.locationManager.currentIsolateClassLink(field['class']['id'])}}">
|
||||
{{ field['class']['user_name'] }}
|
||||
</a>
|
||||
{{ field['user_name'] }} ({{ field['name'] }})
|
||||
<class-ref app="{{ app }}" ref="{{ field['class'] }}"></class-ref>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<template if="{{ field['guard_class'] == 'dynamic'}}">
|
||||
@@ -22,9 +21,9 @@
|
||||
assigned a single type, performance may improve.
|
||||
</div>
|
||||
</template>
|
||||
<template if="{{ field['guard_class'] != 'dynamic'}}">
|
||||
<template if="{{ (field['guard_class'] != 'dynamic') && (field['guard_class'] != 'unknown') }}">
|
||||
<div class="alert alert-success">Field has monomorphic type</div>
|
||||
<template if="{{ (field['guard_class'] != 'dynamic') &&
|
||||
<template if="{{ (field['guard_class'] != 'dynamic') &&
|
||||
field['guard_nullable'] }}">
|
||||
<div class="alert alert-info">
|
||||
Field has been assigned null. If a field is never assigned null,
|
||||
@@ -32,9 +31,7 @@
|
||||
</div>
|
||||
</template>
|
||||
<blockquote>
|
||||
<a href="{{ app.locationManager.currentIsolateClassLink(field['guard_class']['id'])}}">
|
||||
{{ field['guard_class']['user_name'] }}
|
||||
</a>
|
||||
<class-ref app="{{ app }}" ref="{{ field['guard_class'] }}"></class-ref>
|
||||
</blockquote>
|
||||
</template>
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
|
||||
// for details. All rights reserved. Use of this source code is governed by a
|
||||
// BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
library function_ref_element;
|
||||
|
||||
import 'package:polymer/polymer.dart';
|
||||
import 'service_ref.dart';
|
||||
|
||||
@CustomTag('function-ref')
|
||||
class FunctionRefElement extends ServiceRefElement {
|
||||
FunctionRefElement.created() : super.created();
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
<head>
|
||||
<link rel="import" href="service_ref.html">
|
||||
</head>
|
||||
<polymer-element name="function-ref" extends="service-ref">
|
||||
<template>
|
||||
<a href="{{ url }}">{{ name }}</a>
|
||||
</template>
|
||||
<script type="application/dart" src="function_ref.dart"></script>
|
||||
</polymer-element>
|
||||
@@ -1,4 +1,6 @@
|
||||
<head>
|
||||
<link rel="import" href="class_ref.html">
|
||||
<link rel="import" href="code_ref.html">
|
||||
<link rel="import" href="observatory_element.html">
|
||||
</head>
|
||||
<polymer-element name="function-view" extends="observatory-element">
|
||||
@@ -7,15 +9,13 @@
|
||||
<div class="col-md-8 col-md-offset-2">
|
||||
<div class="panel panel-warning">
|
||||
<div class="panel-heading">
|
||||
{{ function['user_name'] }} ({{ function['name'] }})
|
||||
<a class="pull-right" href="{{ app.locationManager.currentIsolateClassLink(function['class']['id'])}}">
|
||||
{{ function['class']['name'] }}
|
||||
</a>
|
||||
{{ function['user_name'] }} ({{ function['name'] }})
|
||||
<class-ref app="{{ app }}" ref="{{ function['class'] }}"></class-ref>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div>
|
||||
<a class="btn btn-primary" href="{{ app.locationManager.currentIsolateObjectLink(function['code']['id'])}}">Current Code</a>
|
||||
<a class="btn btn-info" href="{{ app.locationManager.currentIsolateObjectLink(function['unoptimized_code']['id'])}}">Unoptimized Code</a>
|
||||
<code-ref app="{{ app }}" ref="{{ function['code'] }}"></code-ref>
|
||||
<code-ref app="{{ app }}" ref="{{ function['unoptimized_code'] }}"></code-ref>
|
||||
</div>
|
||||
<table class="table table-hover">
|
||||
<tbody>
|
||||
|
||||
@@ -5,10 +5,16 @@
|
||||
library instance_ref_element;
|
||||
|
||||
import 'package:polymer/polymer.dart';
|
||||
import 'observatory_element.dart';
|
||||
import 'service_ref.dart';
|
||||
|
||||
@CustomTag('instance-ref')
|
||||
class InstanceRefElement extends ObservatoryElement {
|
||||
@published Map instance;
|
||||
class InstanceRefElement extends ServiceRefElement {
|
||||
InstanceRefElement.created() : super.created();
|
||||
|
||||
String get name {
|
||||
if (ref == null) {
|
||||
return super.name;
|
||||
}
|
||||
return ref['preview'];
|
||||
}
|
||||
}
|
||||
@@ -1,16 +1,17 @@
|
||||
<head>
|
||||
<link rel="import" href="observatory_element.html">
|
||||
<link rel="import" href="service_ref.html">
|
||||
</head>
|
||||
<polymer-element name="instance-ref" extends="observatory-element">
|
||||
<polymer-element name="instance-ref" extends="service-ref">
|
||||
<template>
|
||||
<div>
|
||||
<template if="{{ (instance['type'] == 'null') }}">
|
||||
<template if="{{ (ref['type'] == 'null') }}">
|
||||
{{ "null" }}
|
||||
</template>
|
||||
<template if="{{ (instance['type'] != 'null') }}">
|
||||
<a href="{{ app.locationManager.currentIsolateObjectLink(instance['id'])}}">
|
||||
{{ instance['preview'] }}
|
||||
</a>
|
||||
<template if="{{ (ref['type'] != 'null') }}">
|
||||
<a href="{{ url }}">{{ name }} </a>
|
||||
</template>
|
||||
</div>
|
||||
</template> <script type="application/dart" src="instance_ref.dart"></script> </polymer-element>
|
||||
</template>
|
||||
<script type="application/dart" src="instance_ref.dart"></script>
|
||||
</polymer-element>
|
||||
@@ -1,4 +1,5 @@
|
||||
<head>
|
||||
<link rel="import" href="class_ref.html">
|
||||
<link rel="import" href="observatory_element.html">
|
||||
<link rel="import" href="error_view.html">
|
||||
<link rel="import" href="field_ref.html">
|
||||
@@ -8,12 +9,10 @@
|
||||
<template>
|
||||
<div class="row">
|
||||
<div class="col-md-8 col-md-offset-2">
|
||||
<div class="panel panel-warning">
|
||||
<div class="panel panel-warning">
|
||||
<div class="panel-heading">
|
||||
Instance of
|
||||
<a href="{{ app.locationManager.currentIsolateClassLink(instance['class']['id'])}}">
|
||||
{{ instance['class']['user_name'] }}
|
||||
</a>
|
||||
<class-ref app="{{ app }}" ref="{{ instance['class'] }}"></class-ref>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<template if="{{ instance['error'] == null }}">
|
||||
@@ -28,8 +27,8 @@
|
||||
<table class="table table-hover">
|
||||
<tbody>
|
||||
<tr template repeat="{{ field in instance['fields'] }}">
|
||||
<td><field-ref app="{{ app }}" field="{{ field }}"></field-ref></td>
|
||||
<td><instance-ref app="{{ app }}" instance="{{ field['value'] }}"></instance-ref></td>
|
||||
<td><field-ref app="{{ app }}" ref="{{ field }}"></field-ref></td>
|
||||
<td><instance-ref app="{{ app }}" ref="{{ field['value'] }}"></instance-ref></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -44,4 +43,3 @@
|
||||
</template>
|
||||
<script type="application/dart" src="instance_view.dart"></script>
|
||||
</polymer-element>
|
||||
t>
|
||||
@@ -9,7 +9,7 @@ import 'observatory_element.dart';
|
||||
|
||||
@CustomTag('isolate-summary')
|
||||
class IsolateSummaryElement extends ObservatoryElement {
|
||||
@published int isolate;
|
||||
@published String isolate;
|
||||
@published String name = '';
|
||||
|
||||
IsolateSummaryElement.created() : super.created();
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
|
||||
// for details. All rights reserved. Use of this source code is governed by a
|
||||
// BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
library library_ref_element;
|
||||
|
||||
import 'package:polymer/polymer.dart';
|
||||
import 'service_ref.dart';
|
||||
|
||||
@CustomTag('library-ref')
|
||||
class LibraryRefElement extends ServiceRefElement {
|
||||
LibraryRefElement.created() : super.created();
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
<head>
|
||||
<link rel="import" href="service_ref.html">
|
||||
</head>
|
||||
<polymer-element name="library-ref" extends="service-ref">
|
||||
<template>
|
||||
<a href="{{ url }}">{{ name }}</a>
|
||||
</template>
|
||||
<script type="application/dart" src="library_ref.dart"></script>
|
||||
</polymer-element>
|
||||
@@ -1,7 +1,11 @@
|
||||
<head>
|
||||
<link rel="import" href="observatory_element.html">
|
||||
<link rel="import" href="class_ref.html">
|
||||
<link rel="import" href="field_ref.html">
|
||||
<link rel="import" href="function_ref.html">
|
||||
<link rel="import" href="instance_ref.html">
|
||||
<link rel="import" href="library_ref.html">
|
||||
<link rel="import" href="observatory_element.html">
|
||||
<link rel="import" href="script_ref.html">
|
||||
</head>
|
||||
<polymer-element name="library-view" extends="observatory-element">
|
||||
<template>
|
||||
@@ -14,7 +18,7 @@
|
||||
{{ script['kind'] }}
|
||||
</td>
|
||||
<td>
|
||||
<a href="{{ app.locationManager.currentIsolateScriptLink(script['id'], script['name']) }}">{{ script['name'] }}</a>
|
||||
<script-ref app="{{ app }}" ref="{{ script }}"></script-ref>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
@@ -24,9 +28,7 @@
|
||||
<tbody>
|
||||
<tr template repeat="{{ lib in library['libraries'] }}">
|
||||
<td>
|
||||
<a href="{{ app.locationManager.currentIsolateObjectLink(lib['id'])}}">
|
||||
{{ lib['url'] }}
|
||||
</a>
|
||||
<library-ref app="{{ app }}" ref="{{ lib }}"></library-ref>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
@@ -35,8 +37,8 @@
|
||||
<table class="table table-hover">
|
||||
<tbody>
|
||||
<tr template repeat="{{ variable in library['variables'] }}">
|
||||
<td><field-ref app="{{ app }}" field="{{ variable }}"></field-ref></td>
|
||||
<td><instance-ref app="{{ app }}" instance="{{ variable['value'] }}"></instance-ref></td>
|
||||
<td><field-ref app="{{ app }}" ref="{{ variable }}"></field-ref></td>
|
||||
<td><instance-ref app="{{ app }}" ref="{{ variable['value'] }}"></instance-ref></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -45,9 +47,7 @@
|
||||
<tbody>
|
||||
<tr template repeat="{{ func in library['functions'] }}">
|
||||
<td>
|
||||
<a href="{{ app.locationManager.currentIsolateObjectLink(func['id'])}}">
|
||||
{{ func['user_name'] }}
|
||||
</a>
|
||||
<function-ref app="{{ app }}" ref="{{ func }}"></function-ref>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
@@ -63,14 +63,10 @@
|
||||
<tbody>
|
||||
<tr template repeat="{{ cls in library['classes'] }}">
|
||||
<td>
|
||||
<a href="{{ app.locationManager.currentIsolateClassLink(cls['id']) }}">
|
||||
{{ cls['user_name'] }}
|
||||
</a>
|
||||
<class-ref app="{{ app }}" ref="{{ cls }}"></class-ref>
|
||||
</td>
|
||||
<td>
|
||||
<a href="{{ app.locationManager.currentIsolateClassLink(cls['id']) }}">
|
||||
{{ cls['name'] }}
|
||||
</a>
|
||||
<class-ref app="{{ app }}" ref="{{ cls }}" internal></class-ref>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
@@ -8,10 +8,6 @@
|
||||
<a class="navbar-brand" href="">Observatory</a>
|
||||
</div>
|
||||
<div class="collapse navbar-collapse navbar-ex1-collapse">
|
||||
<input class="span2 pull-right navbar-form"
|
||||
placeholder="VM Address"
|
||||
type="text"
|
||||
value="{{ app.requestManager.prefix }}">
|
||||
</div>
|
||||
</nav>
|
||||
</template>
|
||||
|
||||
@@ -22,6 +22,10 @@ class ObservatoryElement extends PolymerElement {
|
||||
super.leftView();
|
||||
}
|
||||
|
||||
void attributeChanged(String name, String oldValue, String newValue) {
|
||||
super.attributeChanged(name, oldValue, newValue);
|
||||
}
|
||||
|
||||
@published ObservatoryApplication app;
|
||||
bool get applyAuthorStyles => true;
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
|
||||
// for details. All rights reserved. Use of this source code is governed by a
|
||||
// BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
library script_ref_element;
|
||||
|
||||
import 'package:polymer/polymer.dart';
|
||||
import 'service_ref.dart';
|
||||
|
||||
@CustomTag('script-ref')
|
||||
class ScriptRefElement extends ServiceRefElement {
|
||||
ScriptRefElement.created() : super.created();
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
<head>
|
||||
<link rel="import" href="observatory_element.html">
|
||||
<link rel="import" href="service_ref.html">
|
||||
</head>
|
||||
<polymer-element name="script-ref" extends="service-ref">
|
||||
<template>
|
||||
<a href="{{ url }}">{{ name }}</a>
|
||||
</template>
|
||||
<script type="application/dart" src="script_ref.dart"></script>
|
||||
</polymer-element>
|
||||
@@ -0,0 +1,38 @@
|
||||
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
|
||||
// for details. All rights reserved. Use of this source code is governed by a
|
||||
// BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
library service_ref_element;
|
||||
|
||||
import 'package:polymer/polymer.dart';
|
||||
import 'observatory_element.dart';
|
||||
|
||||
@CustomTag('service-ref')
|
||||
class ServiceRefElement extends ObservatoryElement {
|
||||
@published Map ref;
|
||||
@published bool internal = false;
|
||||
ServiceRefElement.created() : super.created();
|
||||
|
||||
void refChanged(oldValue) {
|
||||
notifyPropertyChange(#url, "", url);
|
||||
notifyPropertyChange(#name, [], name);
|
||||
}
|
||||
|
||||
String get url {
|
||||
if ((app != null) && (ref != null)) {
|
||||
return app.locationManager.currentIsolateRelativeLink(ref['id']);
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
String get name {
|
||||
if (ref == null) {
|
||||
return '';
|
||||
}
|
||||
String name_key = internal ? 'name' : 'user_name';
|
||||
if (ref[name_key] != null) {
|
||||
return ref[name_key];
|
||||
}
|
||||
return '';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
<head>
|
||||
<link rel="import" href="observatory_element.html">
|
||||
</head>
|
||||
<polymer-element name="service-ref" extends="observatory-element">
|
||||
<script type="application/dart" src="service_ref.dart"></script>
|
||||
</polymer-element>
|
||||
@@ -1,5 +1,7 @@
|
||||
<head>
|
||||
<link rel="import" href="function_ref.html">
|
||||
<link rel="import" href="observatory_element.html">
|
||||
<link rel="import" href="script_ref.html">
|
||||
</head>
|
||||
<polymer-element name="stack-trace" extends="observatory-element">
|
||||
<template>
|
||||
@@ -9,15 +11,15 @@
|
||||
<tr>
|
||||
<th>Depth</th>
|
||||
<th>Function</th>
|
||||
<th>Url</th>
|
||||
<th>Script</th>
|
||||
<th>Line</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr template repeat="{{ frame in trace['members'] }}">
|
||||
<td>{{$index}}</td>
|
||||
<td><a href="{{app.locationManager.currentIsolateObjectLink(frame['function']['id'])}}">{{ frame['name'] }}</a></td>
|
||||
<td>{{ frame['url'] }}</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>
|
||||
|
||||
@@ -29,8 +29,9 @@ class RunningIsolates implements MessageRouter {
|
||||
var result = {};
|
||||
isolates.forEach((portId, runningIsolate) {
|
||||
members.add({
|
||||
'id': portId,
|
||||
'name': runningIsolate.name
|
||||
'type': 'Isolate',
|
||||
'id': 'isolates/$portId',
|
||||
'name': runningIsolate.name,
|
||||
});
|
||||
});
|
||||
result['type'] = 'IsolateList';
|
||||
|
||||
Reference in New Issue
Block a user