| <!DOCTYPE html><html><head> |
| |
| |
| <title>Dart VM Observatory</title> |
| <meta charset="utf-8"> |
| <link type="text/css" rel="stylesheet" href="bootstrap_css/css/bootstrap.min.css"> |
| <script type="text/javascript" src="https://www.google.com/jsapi"></script> |
| |
| |
| <script src="index_devtools.html_bootstrap.dart.js"></script> |
| |
| </head> |
| <body><polymer-element name="observatory-element"> |
| |
| </polymer-element><polymer-element name="breakpoint-list" extends="observatory-element"> |
| <template> |
| <template if="{{ msg['breakpoints'].isEmpty }}"> |
| <div class="panel panel-warning"> |
| <div class="panel-body">No breakpoints</div> |
| </div> |
| </template> |
| <template if="{{ msg['breakpoints'].isNotEmpty }}"> |
| <ul class="list-group"> |
| <template repeat="{{ bpt in msg['breakpoints'] }}"> |
| <li class="list-group-item"> |
| {{ bpt }} |
| </li> |
| </template> |
| </ul> |
| </template> |
| </template> |
| |
| </polymer-element><polymer-element name="service-ref" extends="observatory-element"> |
| |
| </polymer-element><polymer-element name="class-ref" extends="service-ref"> |
| <template> |
| <a title="{{ hoverText }}" 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"> |
| <div class="panel panel-danger"> |
| <div class="panel-heading">{{ error['errorType'] }}</div> |
| <div class="panel-body"> |
| <p>{{ error['text'] }}</p> |
| </div> |
| </div> |
| </div> |
| </div> |
| </template> |
| |
| </polymer-element><polymer-element name="field-ref" extends="service-ref"> |
| <template> |
| <div> |
| <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="{{ (ref['declared_type']['name'] != 'dynamic') }}"> |
| <class-ref app="{{ app }}" ref="{{ ref['declared_type'] }}"></class-ref> |
| </template> |
| <a title="{{ hoverText }}" href="{{ url }}">{{ name }}</a> |
| </div> |
| </template> </polymer-element><polymer-element name="function-ref" extends="service-ref"> |
| <template> |
| <a title="{{ hoverText }}" href="{{ url }}">{{ name }}</a> |
| </template> |
| |
| </polymer-element><polymer-element name="instance-ref" extends="service-ref"> |
| <template> |
| <div> |
| <template if="{{ (ref['type'] == 'null') }}"> |
| unexpected null |
| </template> |
| <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"> |
| <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"> |
| <div class="panel panel-warning"> |
| <div class="panel-heading"> |
| class <strong>{{ cls['user_name'] }}</strong> |
| <template if="{{ cls['super']['type'] != 'Null' }}"> |
| extends |
| <class-ref app="{{ app }}" ref="{{ cls['super'] }}"></class-ref> |
| </template> |
| <library-ref app="{{ app }}" ref="{{ cls['library'] }}"></library-ref> |
| </div> |
| <div class="panel-body"> |
| <table class="table table-hover"> |
| <tbody> |
| <tr> |
| <td>Abstract</td><td>{{ cls['abstract'] }}</td> |
| </tr> |
| <tr> |
| <td>Const</td><td>{{ cls['const'] }}</td> |
| </tr> |
| <tr> |
| <td>Finalized</td><td>{{ cls['const'] }}</td> |
| </tr> |
| <tr> |
| <td>Implemented</td><td>{{ cls['implemented'] }}</td> |
| </tr> |
| <tr> |
| <td>Patch</td><td>{{ cls['patch'] }}</td> |
| </tr> |
| <tr> |
| <td>VM Name</td><td>{{ cls['name'] }}</td> |
| </tr> |
| </tbody> |
| </table> |
| <template if="{{ cls['error'] == null }}"> |
| <blockquote><strong>Fields</strong></blockquote> |
| <table class="table table-hover"> |
| <tbody> |
| <tr template="" repeat="{{ field in cls['fields'] }}"> |
| <td><field-ref app="{{ app }}" ref="{{ field }}"></field-ref></td> |
| <td><instance-ref app="{{ app }}" ref="{{ field['value'] }}"></instance-ref></td> |
| </tr> |
| </tbody> |
| </table> |
| <blockquote><strong>Functions</strong></blockquote> |
| <table class="table table-hover"> |
| <thead> |
| <tr> |
| <th>User Name</th> |
| <th>VM Name</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr template="" repeat="{{ function in cls['functions'] }}"> |
| <td><function-ref app="{{ app }}" ref="{{ function }}"></function-ref></td> |
| <td><function-ref app="{{ app }}" ref="{{ function }}" internal=""></function-ref></td> |
| </tr> |
| </tbody> |
| </table> |
| </template> |
| <template if="{{ cls['error'] != null }}"> |
| <error-view error_obj="{{ cls['error'] }}"></error-view> |
| </template> |
| </div> |
| </div> |
| </div> |
| </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"> |
| <div class="col-md-2">{{ instruction.formattedTicks() }}</div> |
| <div class="col-md-2">{{ instruction.formattedAddress() }}</div> |
| <div class="col-md-4"> |
| <code>{{ instruction.machine }} {{ instruction.human }}</code> |
| </div> |
| </div> |
| </template> |
| |
| </polymer-element><polymer-element name="code-view" extends="observatory-element"> |
| <template> |
| <div class="row"> |
| <div class="col-md-8 col-md-offset-2"> |
| <div class="{{ cssPanelClass }}"> |
| <div class="panel-heading"> |
| <function-ref app="{{ app }}" ref="{{ code.functionRef }}"></function-ref> |
| </div> |
| <div class="panel-body"> |
| <div class="row"> |
| <div class="col-md-2"><strong>Samples</strong></div> |
| <div class="col-md-2"><strong>Address</strong></div> |
| <div><strong>Instruction</strong></div> |
| </div> |
| <template repeat="{{ instruction in code.instructions }}"> |
| <disassembly-entry instruction="{{ instruction }}"> |
| </disassembly-entry> |
| </template> |
| </div> |
| </div> |
| </div> |
| </div> |
| </template> |
| |
| </polymer-element><polymer-element name="collapsible-content" extends="observatory-element"> |
| <template> |
| <div class="well row"> |
| <a on-click="toggleDisplay" class="btn muted unselectable"> |
| Raw message... <i class="{{ iconClass }}"></i> |
| </a> |
| <div style="display: {{ displayValue }}" class="well"> |
| <content></content> |
| </div> |
| </div> |
| </template> |
| |
| </polymer-element><polymer-element name="field-view" extends="observatory-element"> |
| <template> |
| <div class="row"> |
| <div class="col-md-8 col-md-offset-2"> |
| <div class="panel panel-warning"> |
| <div class="panel-heading"> |
| <template if="{{ field['static'] }}">static</template> |
| <template if="{{ field['final'] }}">final</template> |
| <template if="{{ field['const'] }}">const</template> |
| {{ 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'}}"> |
| <div class="alert alert-danger"> |
| Field has been assigned multiple types. If a field is only ever |
| assigned a single type, performance may improve. |
| </div> |
| </template> |
| <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') && |
| field['guard_nullable'] }}"> |
| <div class="alert alert-info"> |
| Field has been assigned null. If a field is never assigned null, |
| performance may improve. |
| </div> |
| </template> |
| <blockquote> |
| <class-ref app="{{ app }}" ref="{{ field['guard_class'] }}"></class-ref> |
| </blockquote> |
| </template> |
| </div> |
| </div> |
| </div> |
| </div> |
| </template> |
| |
| </polymer-element><polymer-element name="function-view" extends="observatory-element"> |
| <template> |
| <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 app="{{ app }}" ref="{{ function['class'] }}"></class-ref> |
| </div> |
| <div class="panel-body"> |
| <div> |
| <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> |
| <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> |
| </div> |
| </template> |
| |
| </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.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-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-2"> |
| <a href="{{ app.locationManager.relativeLink(isolate.id, 'allocationprofile') }}"> |
| {{ isolate.newHeapUsed | formatSize }}/{{ isolate.oldHeapUsed | formatSize }} |
| </a> |
| </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 }}"></isolate-summary> |
| </li> |
| </template> |
| </ul> |
| (<a href="{{ app.locationManager.absoluteLink('cpu') }}">cpu</a>) |
| </template> |
| |
| </polymer-element> |
| <polymer-element name="instance-view" extends="observatory-element"> |
| <template> |
| <div class="row"> |
| <div class="col-md-8 col-md-offset-2"> |
| <div class="panel panel-warning"> |
| <div class="panel-heading"> |
| Instance of |
| <class-ref app="{{ app }}" ref="{{ instance['class'] }}"></class-ref> |
| </div> |
| <div class="panel-body"> |
| <template if="{{ instance['error'] == null }}"> |
| <table class="table table-hover"> |
| <tbody> |
| <tr> |
| <td>Preview</td><td>{{ instance['preview'] }}</td> |
| </tr> |
| </tbody> |
| </table> |
| <blockquote><strong>Fields</strong></blockquote> |
| <table class="table table-hover"> |
| <tbody> |
| <tr template="" repeat="{{ field in instance['fields'] }}"> |
| <td><field-ref app="{{ app }}" ref="{{ field }}"></field-ref></td> |
| <td><instance-ref app="{{ app }}" ref="{{ field['value'] }}"></instance-ref></td> |
| </tr> |
| </tbody> |
| </table> |
| </template> |
| <template if="{{ instance['error'] != null }}"> |
| <error-view error_obj="{{ instance['error'] }}"></error-view> |
| </template> |
| </div> |
| </div> |
| </div> |
| </div> |
| </template> |
| |
| </polymer-element> |
| <polymer-element name="json-view" extends="observatory-element"> |
| <template> |
| <template bind="" if="{{ valueType == 'Primitive' }}"> |
| <span>{{primitiveString}}</span> |
| </template> |
| <template bind="" if="{{ valueType == 'List' }}"> |
| <table class="table table-condensed table-bordered"> |
| <caption class="text-left">List, {{list.length}}</caption> |
| <tbody> |
| <tr template="" repeat="{{item in list)}}"> |
| <th>{{counter}}</th> |
| <td><json-view json="{{item}}"></json-view></td> |
| </tr> |
| </tbody> |
| </table> |
| </template> |
| <template if="{{ valueType == 'Map' }}"> |
| <table class="table table-condensed table-bordered"> |
| <caption class="text-left">Map, {{keys.length}}</caption> |
| <tbody> |
| <tr template="" repeat="{{key in keys}}"> |
| <th>{{key}}</th> |
| <td><json-view json="{{value(key)}}"></json-view></td> |
| </tr> |
| </tbody> |
| </table> |
| </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> |
| <div class="alert alert-info">Scripts</div> |
| <table class="table table-hover"> |
| <tbody> |
| <tr template="" repeat="{{ script in library['scripts']}}"> |
| <td> |
| {{ script['kind'] }} |
| </td> |
| <td> |
| <script-ref app="{{ app }}" ref="{{ script }}"></script-ref> |
| </td> |
| </tr> |
| </tbody> |
| </table> |
| <div class="alert alert-info">Imported Libraries</div> |
| <table class="table table-hover"> |
| <tbody> |
| <tr template="" repeat="{{ lib in library['libraries'] }}"> |
| <td> |
| <library-ref app="{{ app }}" ref="{{ lib }}"></library-ref> |
| </td> |
| </tr> |
| </tbody> |
| </table> |
| <div class="alert alert-info">Variables</div> |
| <table class="table table-hover"> |
| <tbody> |
| <tr template="" repeat="{{ variable in library['variables'] }}"> |
| <td><field-ref app="{{ app }}" ref="{{ variable }}"></field-ref></td> |
| <td><instance-ref app="{{ app }}" ref="{{ variable['value'] }}"></instance-ref></td> |
| </tr> |
| </tbody> |
| </table> |
| <div class="alert alert-info">Functions</div> |
| <table class="table table-hover"> |
| <tbody> |
| <tr template="" repeat="{{ func in library['functions'] }}"> |
| <td> |
| <function-ref app="{{ app }}" ref="{{ func }}"></function-ref> |
| </td> |
| </tr> |
| </tbody> |
| </table> |
| <div class="alert alert-info">Classes</div> |
| <table class="table table-hover"> |
| <thead> |
| <tr> |
| <th>Name</th> |
| <th>Internal Name</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr template="" repeat="{{ cls in library['classes'] }}"> |
| <td> |
| <class-ref app="{{ app }}" ref="{{ cls }}"></class-ref> |
| </td> |
| <td> |
| <class-ref app="{{ app }}" ref="{{ cls }}" internal=""></class-ref> |
| </td> |
| </tr> |
| </tbody> |
| </table> |
| |
| </template> |
| |
| </polymer-element> |
| <polymer-element name="heap-profile" extends="observatory-element"> |
| <template> |
| <div> |
| <button type="button" on-click="{{refreshData}}">Refresh</button> |
| </div> |
| <div class="row"> |
| <div id="newPieChart" class="col-md-4" style="height: 400px"> |
| </div> |
| <div id="newStatus" class="col-md-2"> |
| <table class="table"> |
| <tbody> |
| <tr> |
| <td>Collections</td> |
| <td>{{ formattedCollections(true) }}</td> |
| </tr> |
| <tr> |
| <td>Average Collection Time</td> |
| <td>{{ formattedAverage(true) }}</td> |
| </tr> |
| <tr> |
| <td>Cumulative Collection Time</td> |
| <td>{{ formattedTotalCollectionTime(true) }}</td> |
| </tr> |
| </tbody> |
| </table> |
| </div> |
| <div id="oldPieChart" class="col-md-4" style="height: 400px"> |
| </div> |
| <div id="oldStatus" class="col-md-2"> |
| <table class="table"> |
| <tbody> |
| <tr> |
| <td>Collections</td> |
| <td>{{ formattedCollections(true) }}</td> |
| </tr> |
| <tr> |
| <td>Average Collection Time</td> |
| <td>{{ formattedAverage(true) }}</td> |
| </tr> |
| <tr> |
| <td>Cumulative Collection Time</td> |
| <td>{{ formattedTotalCollectionTime(true) }}</td> |
| </tr> |
| </tbody> |
| </table> |
| </div> |
| </div> |
| <div class="row"> |
| <div id="table" class="col-md-12" style="height: 800px"></div> |
| </div> |
| </template> |
| |
| </polymer-element> |
| <polymer-element name="script-view" extends="observatory-element"> |
| <template> |
| <div class="row"> |
| <div class="col-md-8 col-md-offset-2"> |
| <div class="panel-heading"> |
| <button on-click="{{refreshCoverage}}">Refresh Coverage</button> |
| {{ script.scriptRef['user_name'] }} |
| {{ script.coveredPercentageFormatted() }} |
| </div> |
| <div class="panel-body"> |
| <table style="width:100%"> |
| <tbody> |
| <tr template="" repeat="{{ line in script.linesForDisplay }}"> |
| <td style="{{ hitsStyle(line) }}"> </td> |
| <td style="font-family: consolas, courier, monospace;font-size: 1em;line-height: 1.2em;white-space: nowrap;">{{line.line}}</td> |
| <td width="99%" style="font-family: consolas, courier, monospace;font-size: 1em;line-height: 1.2em;">{{line.text}}</td> |
| </tr> |
| </tbody> |
| </table> |
| </div> |
| </div> |
| </div> |
| </template> |
| |
| </polymer-element><polymer-element name="stack-frame" extends="observatory-element"> |
| <template> |
| <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="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. |
| --> |
| <template> |
| <!-- If the message type is an IsolateList --> |
| <template if="{{ messageType == 'IsolateList' }}"> |
| <isolate-list app="{{ app }}"></isolate-list> |
| </template> |
| <!-- If the message type is a StackTrace --> |
| <template if="{{ messageType == 'StackTrace' }}"> |
| <stack-trace app="{{ app }}" trace="{{ message }}"></stack-trace> |
| </template> |
| <template if="{{ messageType == 'BreakpointList' }}"> |
| <breakpoint-list app="{{ app }}" msg="{{ message }}"></breakpoint-list> |
| </template> |
| <template if="{{ messageType == 'Error' }}"> |
| <error-view app="{{ app }}" error="{{ message }}"></error-view> |
| </template> |
| <template if="{{ messageType == 'Library' }}"> |
| <library-view app="{{ app }}" library="{{ message }}"></library-view> |
| </template> |
| <template if="{{ messageType == 'Class' }}"> |
| <class-view app="{{ app }}" cls="{{ message }}"></class-view> |
| </template> |
| <template if="{{ messageType == 'Field' }}"> |
| <field-view app="{{ app }}" field="{{ message }}"></field-view> |
| </template> |
| <template if="{{ messageType == 'Instance' }}"> |
| <instance-view app="{{ app }}" instance="{{ message }}"></instance-view> |
| </template> |
| <template if="{{ messageType == 'Array' }}"> |
| <instance-view app="{{ app }}" instance="{{ message }}"></instance-view> |
| </template> |
| <template if="{{ messageType == 'GrowableObjectArray' }}"> |
| <instance-view app="{{ app }}" instance="{{ message }}"></instance-view> |
| </template> |
| <template if="{{ messageType == 'String' }}"> |
| <instance-view app="{{ app }}" instance="{{ message }}"></instance-view> |
| </template> |
| <template if="{{ messageType == 'Bool' }}"> |
| <instance-view app="{{ app }}" instance="{{ message }}"></instance-view> |
| </template> |
| <template if="{{ messageType == 'Smi' }}"> |
| <instance-view app="{{ app }}" instance="{{ message }}"></instance-view> |
| </template> |
| <template if="{{ messageType == 'Function' }}"> |
| <function-view app="{{ app }}" function="{{ message }}"></function-view> |
| </template> |
| <template if="{{ messageType == 'Code' }}"> |
| <code-view app="{{ app }}" code="{{ message['code'] }}"></code-view> |
| </template> |
| <template if="{{ messageType == 'Script' }}"> |
| <script-view app="{{ app }}" script="{{ message['script'] }}"></script-view> |
| </template> |
| <template if="{{ messageType == 'AllocationProfile' }}"> |
| <heap-profile app="{{ app }}" profile="{{ message }}"></heap-profile> |
| </template> |
| <template if="{{ messageType == 'CPU' }}"> |
| <json-view json="{{ message }}"></json-view> |
| </template> |
| <!-- Add new views and message types in the future here. --> |
| </template> |
| |
| </polymer-element><polymer-element name="navigation-bar-isolate" extends="observatory-element"> |
| <template> |
| <ul class="nav navbar-nav"> |
| <li><a href="{{ currentIsolateLink('') }}"> {{currentIsolateName()}}</a></li> |
| <template repeat="{{link in links}}"> |
| <li><a href="{{ currentIsolateLink(link) }}">{{ link }}</a></li> |
| </template> |
| </ul> |
| </template> |
| |
| </polymer-element><polymer-element name="navigation-bar" extends="observatory-element"> |
| <template> |
| <nav class="navbar navbar-default" role="navigation"> |
| <div class="navbar-header"> |
| <a class="navbar-brand" href="#/isolates">Observatory</a> |
| </div> |
| <template if="{{ app.locationManager.hasCurrentIsolate }}"> |
| <div class="collapse navbar-collapse navbar-ex1-collapse"> |
| <navigation-bar-isolate app="{{ app }}"></navigation-bar-isolate> |
| </div> |
| </template> |
| </nav> |
| </template> |
| |
| </polymer-element><polymer-element name="isolate-profile" extends="observatory-element"> |
| <template> |
| <p> P R O F I L E </p> |
| <div> |
| <button type="button" on-click="{{refreshData}}">Refresh profile data</button> |
| <span>Top</span> |
| <select selectedindex="{{methodCountSelected}}" value="{{methodCounts[methodCountSelected]}}"> |
| <option template="" repeat="{{count in methodCounts}}">{{count}}</option> |
| </select> |
| <span>methods</span> |
| </div> |
| <blockquote><strong>Top Exclusive</strong></blockquote> |
| <table class="table table-hover"> |
| <thead> |
| <tr> |
| <th>Ticks</th> |
| <th>Percent</th> |
| <th>Method</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr template="" repeat="{{ code in topExclusiveCodes }}"> |
| <td>{{ codeTicks(code, false) }}</td> |
| <td>{{ codePercent(code, false) }}</td> |
| <td> |
| <span>{{ codeName(code) }}</span> |
| <code-ref app="{{ app }}" ref="{{ code.codeRef }}"></code-ref> |
| </td> |
| </tr> |
| </tbody></table> |
| </template> |
| |
| </polymer-element> |
| <polymer-element name="response-viewer" extends="observatory-element"> |
| <template> |
| <template repeat="{{ message in app.requestManager.responses }}"> |
| <message-viewer app="{{ app }}" message="{{ message }}"></message-viewer> |
| </template> |
| </template> |
| |
| </polymer-element><polymer-element name="observatory-application" extends="observatory-element"> |
| <template> |
| <navigation-bar app="{{ app }}"></navigation-bar> |
| <template if="{{ app.locationManager.profile }}"> |
| <isolate-profile app="{{ app }}"></isolate-profile> |
| </template> |
| <template if="{{ app.locationManager.profile == false }}"> |
| <response-viewer app="{{ app }}"></response-viewer> |
| </template> |
| </template> |
| |
| </polymer-element> |
| <observatory-application devtools="true"></observatory-application> |
| |
| </body></html> |