mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 04:27:17 +00:00
Give instances their own model class; move DartErrors out of instance-ref into their own error-ref.
BUG= R=johnmccutchan@google.com Review URL: https://codereview.chromium.org//509563004 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@39682 260f80e4-7a28-3924-810f-c04153c831b5
This commit is contained in:
parent
40dd4b7607
commit
b418a04289
|
@ -921,50 +921,36 @@ hr {
|
|||
}
|
||||
</style>
|
||||
<span>
|
||||
<template if="{{ isError(ref) }}">
|
||||
<pre class="errorBox">{{ ref.message }}</pre>
|
||||
<template if="{{ ref.isSentinel }}">
|
||||
<div title="{{ hoverText }}">{{ ref.valueAsString }}</div>
|
||||
</template>
|
||||
|
||||
<template if="{{ isUnexpected(ref) }}">
|
||||
unexpected reference type <{{ ref.serviceType }}>
|
||||
<template if="{{ ref.isString || ref.isBool || ref.isInt || ref.isDouble || ref.isNull }}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}">{{ ref.valueAsString }}</a>
|
||||
</template>
|
||||
|
||||
<template if="{{ isSentinel(ref) }}">
|
||||
<div title="{{ hoverText }}">{{ ref['valueAsString'] }}</div>
|
||||
<template if="{{ ref.isType }}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}">{{ ref.name }}</a>
|
||||
</template>
|
||||
|
||||
<template if="{{ (isString(ref) ||
|
||||
isBool(ref) ||
|
||||
isNull(ref) ||
|
||||
isInt(ref)) ||
|
||||
isDouble(ref)) }}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}">{{ ref['valueAsString'] }}</a>
|
||||
</template>
|
||||
|
||||
<template if="{{ (isType(ref)) }}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}">{{ ref['user_name'] }}</a>
|
||||
</template>
|
||||
|
||||
<template if="{{ isInstance(ref) &&
|
||||
ref['closureFunc'] != null}}">
|
||||
<template if="{{ ref.isClosure }}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}">
|
||||
<!-- TODO(turnidge): Switch this to fully-qualified function -->
|
||||
{{ ref['closureFunc'].name }}
|
||||
{{ ref.closureFunc.name }}
|
||||
</a>
|
||||
</template>
|
||||
|
||||
<template if="{{ isInstance(ref) &&
|
||||
ref['closureFunc'] == null}}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}"><em>{{ ref['class'].name }}</em></a>
|
||||
<template if="{{ ref.isInstance && !ref.isClosure }}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}"><em>{{ ref.clazz.name }}</em></a>
|
||||
<curly-block callback="{{ expander() }}">
|
||||
<div class="memberList">
|
||||
<template repeat="{{ field in ref['fields'] }}">
|
||||
<template repeat="{{ field in ref.fields }}">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">
|
||||
{{ field['decl']['user_name'] }}
|
||||
</div>
|
||||
<div class="memberValue">
|
||||
<instance-ref ref="{{ field['value'] }}"></instance-ref>
|
||||
<any-service-ref ref="{{ field['value'] }}"></any-service-ref>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -972,16 +958,16 @@ hr {
|
|||
</curly-block>
|
||||
</template>
|
||||
|
||||
<template if="{{ isList(ref) }}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}"><em>{{ ref['class'].name }}</em> ({{ ref['length']}})</a>
|
||||
<template if="{{ ref.isList }}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}"><em>{{ ref.clazz.name }}</em> ({{ ref.length }})</a>
|
||||
<curly-block callback="{{ expander() }}">
|
||||
<div class="memberList">
|
||||
<template repeat="{{ element in ref['elements'] }}">
|
||||
<template repeat="{{ element in ref.elements }}">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">[{{ element['index']}}]</div>
|
||||
<div class="memberValue">
|
||||
<instance-ref ref="{{ element['value'] }}"></instance-ref>
|
||||
</div>
|
||||
<any-service-ref ref="{{ element['value'] }}">
|
||||
</any-service-ref></div>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
|
@ -2556,6 +2542,286 @@ hr {
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<polymer-element name="error-ref" extends="service-ref">
|
||||
<template>
|
||||
<style>
|
||||
/* Global styles */
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font: 400 14px 'Montserrat', sans-serif;
|
||||
color: #333;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.content {
|
||||
padding-left: 10%;
|
||||
font: 400 14px 'Montserrat', sans-serif;
|
||||
}
|
||||
|
||||
.content-centered {
|
||||
padding-left: 10%;
|
||||
padding-right: 10%;
|
||||
font: 400 14px 'Montserrat', sans-serif;
|
||||
}
|
||||
|
||||
.content-centered-big {
|
||||
padding-left: 5%;
|
||||
padding-right: 5%;
|
||||
font: 400 14px 'Montserrat', sans-serif;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font: 400 18px 'Montserrat', sans-serif;
|
||||
}
|
||||
|
||||
.memberList {
|
||||
display: table;
|
||||
}
|
||||
|
||||
.memberItem {
|
||||
display: table-row;
|
||||
}
|
||||
|
||||
.memberName, .memberValue {
|
||||
display: table-cell;
|
||||
vertical-align: top;
|
||||
padding: 3px 0 3px 1em;
|
||||
font: 400 14px 'Montserrat', sans-serif;
|
||||
}
|
||||
|
||||
.memberSmall {
|
||||
display: table-cell;
|
||||
vertical-align: top;
|
||||
padding: 3px 0 3px 1em;
|
||||
font: 400 12px 'Montserrat', sans-serif;
|
||||
}
|
||||
|
||||
.monospace {
|
||||
font-family: consolas, courier, monospace;
|
||||
font-size: 1em;
|
||||
line-height: 1.2em;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #0489c3;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
em {
|
||||
color: inherit;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
b {
|
||||
color: inherit;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
hr {
|
||||
margin-top: 20px;
|
||||
margin-bottom: 20px;
|
||||
border: 0;
|
||||
border-top: 1px solid #eee;
|
||||
height: 0;
|
||||
box-sizing: content-box;
|
||||
}
|
||||
|
||||
.list-group {
|
||||
padding-left: 0;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.list-group-item {
|
||||
position: relative;
|
||||
display: block;
|
||||
padding: 10px 15px;
|
||||
margin-bottom: -1px;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.list-group-item:first-child {
|
||||
/* rounded top corners */
|
||||
border-top-right-radius:4px;
|
||||
border-top-left-radius:4px;
|
||||
}
|
||||
|
||||
.list-group-item:last-child {
|
||||
margin-bottom: 0;
|
||||
/* rounded bottom corners */
|
||||
border-bottom-right-radius: 4px;
|
||||
border-bottom-left-radius:4px;
|
||||
}
|
||||
|
||||
/* Flex row container */
|
||||
.flex-row {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
/* Flex column container */
|
||||
.flex-column {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.flex-item-fit {
|
||||
flex-grow: 1;
|
||||
flex-shrink: 1;
|
||||
flex-basis: auto;
|
||||
}
|
||||
|
||||
.flex-item-no-shrink {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
flex-basis: auto;
|
||||
}
|
||||
|
||||
.flex-item-fill {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 1; /* shrink when pressured */
|
||||
flex-basis: 100%; /* try and take 100% */
|
||||
}
|
||||
|
||||
.flex-item-fixed-1-12 {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
flex-basis: 8.3%;
|
||||
}
|
||||
|
||||
.flex-item-fixed-2-12 {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
flex-basis: 16.6%;
|
||||
}
|
||||
|
||||
.flex-item-fixed-4-12 {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
flex-basis: 33.3333%;
|
||||
}
|
||||
|
||||
.flex-item-fixed-6-12, .flex-item-50-percent {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
flex-basis: 50%;
|
||||
}
|
||||
|
||||
.flex-item-fixed-8-12 {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
flex-basis: 66.6666%;
|
||||
}
|
||||
|
||||
.flex-item-fixed-9-12 {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
flex-basis: 75%;
|
||||
}
|
||||
|
||||
|
||||
.flex-item-fixed-12-12 {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
flex-basis: 100%;
|
||||
}
|
||||
|
||||
.flex-item-10-percent {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
flex-basis: 10%;
|
||||
}
|
||||
|
||||
.flex-item-15-percent {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
flex-basis: 15%;
|
||||
}
|
||||
|
||||
.flex-item-20-percent {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
flex-basis: 20%;
|
||||
}
|
||||
|
||||
.flex-item-30-percent {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
flex-basis: 30%;
|
||||
}
|
||||
|
||||
.flex-item-40-percent {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
flex-basis: 40%;
|
||||
}
|
||||
|
||||
.flex-item-50-percent {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
flex-basis: 50%;
|
||||
}
|
||||
|
||||
.flex-item-60-percent {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
flex-basis: 60%;
|
||||
}
|
||||
|
||||
.flex-item-70-percent {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
flex-basis: 70%;
|
||||
}
|
||||
|
||||
.flex-item-80-percent {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
flex-basis: 80%;
|
||||
}
|
||||
|
||||
.well {
|
||||
min-height: 20px;
|
||||
padding: 19px;
|
||||
margin-bottom: 20px;
|
||||
background-color: #f5f5f5;
|
||||
border: 1px solid #e3e3e3;
|
||||
border-radius: 4px;
|
||||
box-shadow: inset 0 1px 1px rgba(0,0,0,0.05);
|
||||
}
|
||||
|
||||
.break-wrap {
|
||||
word-wrap: break-word;
|
||||
}
|
||||
</style>
|
||||
<style>
|
||||
.errorBox {
|
||||
background-color: #f5f5f5;
|
||||
border: 1px solid #ccc;
|
||||
padding: 10px;
|
||||
font-family: consolas, courier, monospace;
|
||||
font-size: 1em;
|
||||
line-height: 1.2em;
|
||||
white-space: pre;
|
||||
}
|
||||
</style>
|
||||
<span>
|
||||
<pre class="errorBox">{{ ref.kind }}: {{ ref.message }}</pre>
|
||||
</span>
|
||||
</template>
|
||||
</polymer-element>
|
||||
|
||||
<polymer-element name="eval-box" extends="observatory-element">
|
||||
<template>
|
||||
<style>
|
||||
|
@ -2626,7 +2892,7 @@ hr {
|
|||
<div style="color:#aaa;cursor:wait;"><pending></div>
|
||||
</template>
|
||||
<template if="{{ result['value'] != null }}">
|
||||
<instance-ref ref="{{ result['value'] }}"></instance-ref>
|
||||
<any-service-ref ref="{{ result['value'] }}"></any-service-ref>
|
||||
</template>
|
||||
</td>
|
||||
</tr>
|
||||
|
@ -2639,6 +2905,7 @@ hr {
|
|||
|
||||
|
||||
|
||||
|
||||
<polymer-element name="eval-link">
|
||||
<template>
|
||||
<style>
|
||||
|
@ -2659,7 +2926,7 @@ hr {
|
|||
<span class="idle"><a on-click="{{ evalNow }}">{{ label }}</a></span>
|
||||
</template>
|
||||
<template if="{{ result != null }}">
|
||||
= <instance-ref ref="{{ result }}"></instance-ref>
|
||||
= <any-service-ref ref="{{ result }}"></any-service-ref>
|
||||
</template>
|
||||
</template>
|
||||
</polymer-element>
|
||||
|
@ -4235,9 +4502,8 @@ hr {
|
|||
</div>
|
||||
|
||||
<template if="{{ cls.error != null }}">
|
||||
<!-- TODO(turnidge): Don't use instance-ref for error display here -->
|
||||
<instance-ref ref="{{ cls.error }}"></instance-ref>
|
||||
</template>
|
||||
<error-ref ref="{{ cls.error }}">
|
||||
</error-ref></template>
|
||||
|
||||
<hr>
|
||||
|
||||
|
@ -4253,7 +4519,7 @@ hr {
|
|||
</div>
|
||||
<div class="memberValue">
|
||||
<template if="{{ field['value'] != null }}">
|
||||
<instance-ref ref="{{ field['value'] }}"></instance-ref>
|
||||
<any-service-ref ref="{{ field['value'] }}"></any-service-ref>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -4296,7 +4562,7 @@ hr {
|
|||
</template>
|
||||
<template if="{{ instances != null }}">
|
||||
sample
|
||||
<instance-ref ref="{{ instances['sample'] }}"></instance-ref>
|
||||
<any-service-ref ref="{{ instances['sample'] }}"></any-service-ref>
|
||||
<template if="{{ instances['totalCount'] > instances['sampleCount'] }}">
|
||||
<eval-link callback="{{ reachable }}" label="[more]" expr="{{ instances['sampleCount'] * 2 }}">
|
||||
</eval-link>
|
||||
|
@ -4963,7 +5229,7 @@ hr {
|
|||
<div class="memberItem">
|
||||
<div class="memberName">Constant object pool</div>
|
||||
<div class="memberValue">
|
||||
<instance-ref ref="{{ code.objectPool }}"></instance-ref>
|
||||
<any-service-ref ref="{{ code.objectPool }}"></any-service-ref>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -5647,7 +5913,7 @@ hr {
|
|||
<div class="memberItem">
|
||||
<div class="memberName">static value</div>
|
||||
<div class="memberValue">
|
||||
<instance-ref ref="{{ field['value'] }}"></instance-ref>
|
||||
<any-service-ref ref="{{ field['value'] }}"></any-service-ref>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -5943,7 +6209,7 @@ hr {
|
|||
<div class="memberItem">
|
||||
<div class="memberName">{{ v['name']}}</div>
|
||||
<div class="memberValue">
|
||||
<instance-ref ref="{{ v['value'] }}"></instance-ref>
|
||||
<any-service-ref ref="{{ v['value'] }}"></any-service-ref>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -14527,44 +14793,43 @@ hr {
|
|||
<top-nav-menu></top-nav-menu>
|
||||
<isolate-nav-menu isolate="{{ instance.isolate }}"></isolate-nav-menu>
|
||||
<!-- TODO(turnidge): Add library nav menu here. -->
|
||||
<class-nav-menu cls="{{ instance['class'] }}"></class-nav-menu>
|
||||
<class-nav-menu cls="{{ instance.clazz }}"></class-nav-menu>
|
||||
<nav-menu link="." anchor="instance" last="{{ true }}"></nav-menu>
|
||||
<nav-refresh callback="{{ refresh }}"></nav-refresh>
|
||||
<nav-control></nav-control>
|
||||
</nav-bar>
|
||||
|
||||
<template if="{{ instance['error'] != null }}">
|
||||
<template if="{{ instance.isError }}">
|
||||
<error-view error_obj="{{ instance['error'] }}"></error-view>
|
||||
</template>
|
||||
|
||||
<template if="{{ instance['error'] == null }}">
|
||||
<template if="{{ !instance.isError }}">
|
||||
<div class="content">
|
||||
<!-- TODO(turnidge): Handle null instances. -->
|
||||
<template if="{{ isType(instance) }}">
|
||||
<template if="{{ instance.isType }}">
|
||||
<h1>type {{ instance.name }}</h1>
|
||||
</template>
|
||||
<template if="{{ !isType(instance) }}">
|
||||
<h1>instance of {{ instance['class'].name }}</h1>
|
||||
<template if="{{ !instance.isType }}">
|
||||
<h1>instance of {{ instance.clazz.name }}</h1>
|
||||
</template>
|
||||
<div class="memberList">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">class</div>
|
||||
<div class="memberValue">
|
||||
<class-ref ref="{{ instance['class'] }}">
|
||||
<class-ref ref="{{ instance.clazz }}">
|
||||
</class-ref>
|
||||
</div>
|
||||
</div>
|
||||
<template if="{{ instance['valueAsString'] != null }}">
|
||||
<template if="{{ instance.valueAsString != null }}">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">value</div>
|
||||
<div class="memberValue">{{ instance['valueAsString'] }}</div>
|
||||
<div class="memberValue">{{ instance.valueAsString }}</div>
|
||||
</div>
|
||||
</template>
|
||||
<div class="memberItem">
|
||||
<div class="memberItem" title="Space for this object in memory">
|
||||
<div class="memberName">size</div>
|
||||
<div class="memberValue">{{ instance['size'] | formatSize }}</div>
|
||||
<div class="memberValue">{{ instance.size | formatSize }}</div>
|
||||
</div>
|
||||
<div class="memberItem">
|
||||
<div class="memberItem" title="Space that would be reclaimed if references to this object were replaced with null">
|
||||
<div class="memberName">retained size</div>
|
||||
<div class="memberValue">
|
||||
<template if="{{ retainedBytes == null }}">
|
||||
|
@ -14606,7 +14871,7 @@ hr {
|
|||
</template>
|
||||
</div>
|
||||
</div>
|
||||
<div class="memberItem">
|
||||
<div class="memberItem" title="Objects which directly reference this object">
|
||||
<div class="memberName">inbound references</div>
|
||||
<div class="memberValue">
|
||||
<template if="{{ inboundReferences == null }}">
|
||||
|
@ -14620,20 +14885,20 @@ hr {
|
|||
</template>
|
||||
</div>
|
||||
</div>
|
||||
<template if="{{ instance['type_class'] != null }}">
|
||||
<template if="{{ instance.typeClass != null }}">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">type class</div>
|
||||
<div class="memberValue">
|
||||
<class-ref ref="{{ instance['type_class'] }}">
|
||||
<class-ref ref="{{ instance.typeClass }}">
|
||||
</class-ref>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<template if="{{ instance['closureFunc'] != null }}">
|
||||
<template if="{{ instance.isClosure }}">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">closure function</div>
|
||||
<div class="memberValue">
|
||||
<function-ref ref="{{ instance['closureFunc'] }}">
|
||||
<function-ref ref="{{ instance.closureFunc }}">
|
||||
</function-ref>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -14653,17 +14918,17 @@ hr {
|
|||
<hr>
|
||||
|
||||
<div class="content">
|
||||
<template if="{{ instance['fields'].isNotEmpty }}">
|
||||
fields ({{ instance['fields'].length }})
|
||||
<curly-block expand="{{ instance['fields'].length <= 8 }}">
|
||||
<template if="{{ instance.fields.isNotEmpty }}">
|
||||
fields ({{ instance.fields.length }})
|
||||
<curly-block expand="{{ instance.fields.length <= 8 }}">
|
||||
<div class="memberList">
|
||||
<template repeat="{{ field in instance['fields'] }}">
|
||||
<template repeat="{{ field in instance.fields }}">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">
|
||||
<field-ref ref="{{ field['decl'] }}"></field-ref>
|
||||
</div>
|
||||
<div class="memberValue">
|
||||
<instance-ref ref="{{ field['value'] }}"></instance-ref>
|
||||
<any-service-ref ref="{{ field['value'] }}"></any-service-ref>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -14671,11 +14936,11 @@ hr {
|
|||
</curly-block><br><br>
|
||||
</template>
|
||||
|
||||
<template if="{{ instance['nativeFields'].isNotEmpty }}">
|
||||
native fields ({{ instance['nativeFields'].length }})
|
||||
<curly-block expand="{{ instance['nativeFields'].length <= 8 }}">
|
||||
<template if="{{ instance.nativeFields.isNotEmpty }}">
|
||||
native fields ({{ instance.nativeFields.length }})
|
||||
<curly-block expand="{{ instance.nativeFields.length <= 8 }}">
|
||||
<div class="memberList">
|
||||
<template repeat="{{ field in instance['nativeFields'] }}">
|
||||
<template repeat="{{ field in instance.nativeFields }}">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">[{{ field['index']}}]</div>
|
||||
<div class="memberValue">[{{ field['value']}}]</div>
|
||||
|
@ -14685,17 +14950,17 @@ hr {
|
|||
</curly-block><br><br>
|
||||
</template>
|
||||
|
||||
<template if="{{ instance['elements'].isNotEmpty }}">
|
||||
elements ({{ instance['elements'].length }})
|
||||
<curly-block expand="{{ instance['elements'].length <= 8 }}">
|
||||
<template if="{{ instance.elements.isNotEmpty }}">
|
||||
elements ({{ instance.elements.length }})
|
||||
<curly-block expand="{{ instance.elements.length <= 8 }}">
|
||||
<div class="memberList">
|
||||
<template repeat="{{ element in instance['elements'] }}">
|
||||
<template repeat="{{ element in instance.elements }}">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">[{{ element['index']}}]</div>
|
||||
<div class="memberValue">
|
||||
<instance-ref ref="{{ element['value'] }}">
|
||||
</instance-ref>
|
||||
</div>
|
||||
<any-service-ref ref="{{ element['value'] }}">
|
||||
|
||||
</any-service-ref></div>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
|
@ -15089,7 +15354,7 @@ hr {
|
|||
</div>
|
||||
<div class="memberValue">
|
||||
<template if="{{ field['value'] != null }}">
|
||||
<instance-ref ref="{{ field['value'] }}"></instance-ref>
|
||||
<any-service-ref ref="{{ field['value'] }}"></any-service-ref>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1 +1 @@
|
|||
{"experimental_bootstrap":false,"script_ids":[["observatory","lib/src/elements/curly_block.dart"],["observatory","lib/src/elements/observatory_element.dart"],["observatory","lib/src/elements/service_ref.dart"],["observatory","lib/src/elements/instance_ref.dart"],["observatory","lib/src/elements/action_link.dart"],["observatory","lib/src/elements/nav_bar.dart"],["observatory","lib/src/elements/breakpoint_list.dart"],["observatory","lib/src/elements/class_ref.dart"],["observatory","lib/src/elements/class_tree.dart"],["observatory","lib/src/elements/eval_box.dart"],["observatory","lib/src/elements/eval_link.dart"],["observatory","lib/src/elements/field_ref.dart"],["observatory","lib/src/elements/function_ref.dart"],["observatory","lib/src/elements/library_ref.dart"],["observatory","lib/src/elements/script_inset.dart"],["observatory","lib/src/elements/script_ref.dart"],["observatory","lib/src/elements/class_view.dart"],["observatory","lib/src/elements/code_ref.dart"],["observatory","lib/src/elements/code_view.dart"],["observatory","lib/src/elements/error_view.dart"],["observatory","lib/src/elements/field_view.dart"],["observatory","lib/src/elements/stack_frame.dart"],["observatory","lib/src/elements/flag_list.dart"],["observatory","lib/src/elements/function_view.dart"],["observatory","lib/src/elements/heap_map.dart"],["observatory","lib/src/elements/io_view.dart"],["observatory","lib/src/elements/isolate_ref.dart"],["observatory","lib/src/elements/isolate_summary.dart"],["observatory","lib/src/elements/isolate_view.dart"],["observatory","lib/src/elements/inbound_reference.dart"],["observatory","lib/src/elements/instance_view.dart"],["observatory","lib/src/elements/json_view.dart"],["observatory","lib/src/elements/library_view.dart"],["observatory","lib/src/elements/metrics.dart"],["observatory","lib/src/elements/heap_profile.dart"],["observatory","lib/src/elements/sliding_checkbox.dart"],["observatory","lib/src/elements/isolate_profile.dart"],["observatory","lib/src/elements/script_view.dart"],["observatory","lib/src/elements/stack_trace.dart"],["observatory","lib/src/elements/vm_view.dart"],["observatory","lib/src/elements/service_view.dart"],["observatory","lib/src/elements/observatory_application.dart"],["observatory","lib/src/elements/service_exception_view.dart"],["observatory","lib/src/elements/service_error_view.dart"],["observatory","lib/src/elements/vm_connect.dart"],["observatory","lib/src/elements/vm_ref.dart"],["observatory","web/main.dart"]]}
|
||||
{"experimental_bootstrap":false,"script_ids":[["observatory","lib/src/elements/curly_block.dart"],["observatory","lib/src/elements/observatory_element.dart"],["observatory","lib/src/elements/service_ref.dart"],["observatory","lib/src/elements/instance_ref.dart"],["observatory","lib/src/elements/action_link.dart"],["observatory","lib/src/elements/nav_bar.dart"],["observatory","lib/src/elements/breakpoint_list.dart"],["observatory","lib/src/elements/class_ref.dart"],["observatory","lib/src/elements/class_tree.dart"],["observatory","lib/src/elements/error_ref.dart"],["observatory","lib/src/elements/eval_box.dart"],["observatory","lib/src/elements/eval_link.dart"],["observatory","lib/src/elements/field_ref.dart"],["observatory","lib/src/elements/function_ref.dart"],["observatory","lib/src/elements/library_ref.dart"],["observatory","lib/src/elements/script_inset.dart"],["observatory","lib/src/elements/script_ref.dart"],["observatory","lib/src/elements/class_view.dart"],["observatory","lib/src/elements/code_ref.dart"],["observatory","lib/src/elements/code_view.dart"],["observatory","lib/src/elements/error_view.dart"],["observatory","lib/src/elements/field_view.dart"],["observatory","lib/src/elements/stack_frame.dart"],["observatory","lib/src/elements/flag_list.dart"],["observatory","lib/src/elements/function_view.dart"],["observatory","lib/src/elements/heap_map.dart"],["observatory","lib/src/elements/io_view.dart"],["observatory","lib/src/elements/isolate_ref.dart"],["observatory","lib/src/elements/isolate_summary.dart"],["observatory","lib/src/elements/isolate_view.dart"],["observatory","lib/src/elements/inbound_reference.dart"],["observatory","lib/src/elements/instance_view.dart"],["observatory","lib/src/elements/json_view.dart"],["observatory","lib/src/elements/library_view.dart"],["observatory","lib/src/elements/metrics.dart"],["observatory","lib/src/elements/heap_profile.dart"],["observatory","lib/src/elements/sliding_checkbox.dart"],["observatory","lib/src/elements/isolate_profile.dart"],["observatory","lib/src/elements/script_view.dart"],["observatory","lib/src/elements/stack_trace.dart"],["observatory","lib/src/elements/vm_view.dart"],["observatory","lib/src/elements/service_view.dart"],["observatory","lib/src/elements/observatory_application.dart"],["observatory","lib/src/elements/service_exception_view.dart"],["observatory","lib/src/elements/service_error_view.dart"],["observatory","lib/src/elements/vm_connect.dart"],["observatory","lib/src/elements/vm_ref.dart"],["observatory","web/main.dart"]]}
|
File diff suppressed because one or more lines are too long
|
@ -921,50 +921,36 @@ hr {
|
|||
}
|
||||
</style>
|
||||
<span>
|
||||
<template if="{{ isError(ref) }}">
|
||||
<pre class="errorBox">{{ ref.message }}</pre>
|
||||
<template if="{{ ref.isSentinel }}">
|
||||
<div title="{{ hoverText }}">{{ ref.valueAsString }}</div>
|
||||
</template>
|
||||
|
||||
<template if="{{ isUnexpected(ref) }}">
|
||||
unexpected reference type <{{ ref.serviceType }}>
|
||||
<template if="{{ ref.isString || ref.isBool || ref.isInt || ref.isDouble || ref.isNull }}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}">{{ ref.valueAsString }}</a>
|
||||
</template>
|
||||
|
||||
<template if="{{ isSentinel(ref) }}">
|
||||
<div title="{{ hoverText }}">{{ ref['valueAsString'] }}</div>
|
||||
<template if="{{ ref.isType }}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}">{{ ref.name }}</a>
|
||||
</template>
|
||||
|
||||
<template if="{{ (isString(ref) ||
|
||||
isBool(ref) ||
|
||||
isNull(ref) ||
|
||||
isInt(ref)) ||
|
||||
isDouble(ref)) }}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}">{{ ref['valueAsString'] }}</a>
|
||||
</template>
|
||||
|
||||
<template if="{{ (isType(ref)) }}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}">{{ ref['user_name'] }}</a>
|
||||
</template>
|
||||
|
||||
<template if="{{ isInstance(ref) &&
|
||||
ref['closureFunc'] != null}}">
|
||||
<template if="{{ ref.isClosure }}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}">
|
||||
<!-- TODO(turnidge): Switch this to fully-qualified function -->
|
||||
{{ ref['closureFunc'].name }}
|
||||
{{ ref.closureFunc.name }}
|
||||
</a>
|
||||
</template>
|
||||
|
||||
<template if="{{ isInstance(ref) &&
|
||||
ref['closureFunc'] == null}}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}"><em>{{ ref['class'].name }}</em></a>
|
||||
<template if="{{ ref.isInstance && !ref.isClosure }}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}"><em>{{ ref.clazz.name }}</em></a>
|
||||
<curly-block callback="{{ expander() }}">
|
||||
<div class="memberList">
|
||||
<template repeat="{{ field in ref['fields'] }}">
|
||||
<template repeat="{{ field in ref.fields }}">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">
|
||||
{{ field['decl']['user_name'] }}
|
||||
</div>
|
||||
<div class="memberValue">
|
||||
<instance-ref ref="{{ field['value'] }}"></instance-ref>
|
||||
<any-service-ref ref="{{ field['value'] }}"></any-service-ref>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -972,16 +958,16 @@ hr {
|
|||
</curly-block>
|
||||
</template>
|
||||
|
||||
<template if="{{ isList(ref) }}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}"><em>{{ ref['class'].name }}</em> ({{ ref['length']}})</a>
|
||||
<template if="{{ ref.isList }}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}"><em>{{ ref.clazz.name }}</em> ({{ ref.length }})</a>
|
||||
<curly-block callback="{{ expander() }}">
|
||||
<div class="memberList">
|
||||
<template repeat="{{ element in ref['elements'] }}">
|
||||
<template repeat="{{ element in ref.elements }}">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">[{{ element['index']}}]</div>
|
||||
<div class="memberValue">
|
||||
<instance-ref ref="{{ element['value'] }}"></instance-ref>
|
||||
</div>
|
||||
<any-service-ref ref="{{ element['value'] }}">
|
||||
</any-service-ref></div>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
|
@ -2556,6 +2542,286 @@ hr {
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<polymer-element name="error-ref" extends="service-ref">
|
||||
<template>
|
||||
<style>
|
||||
/* Global styles */
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font: 400 14px 'Montserrat', sans-serif;
|
||||
color: #333;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.content {
|
||||
padding-left: 10%;
|
||||
font: 400 14px 'Montserrat', sans-serif;
|
||||
}
|
||||
|
||||
.content-centered {
|
||||
padding-left: 10%;
|
||||
padding-right: 10%;
|
||||
font: 400 14px 'Montserrat', sans-serif;
|
||||
}
|
||||
|
||||
.content-centered-big {
|
||||
padding-left: 5%;
|
||||
padding-right: 5%;
|
||||
font: 400 14px 'Montserrat', sans-serif;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font: 400 18px 'Montserrat', sans-serif;
|
||||
}
|
||||
|
||||
.memberList {
|
||||
display: table;
|
||||
}
|
||||
|
||||
.memberItem {
|
||||
display: table-row;
|
||||
}
|
||||
|
||||
.memberName, .memberValue {
|
||||
display: table-cell;
|
||||
vertical-align: top;
|
||||
padding: 3px 0 3px 1em;
|
||||
font: 400 14px 'Montserrat', sans-serif;
|
||||
}
|
||||
|
||||
.memberSmall {
|
||||
display: table-cell;
|
||||
vertical-align: top;
|
||||
padding: 3px 0 3px 1em;
|
||||
font: 400 12px 'Montserrat', sans-serif;
|
||||
}
|
||||
|
||||
.monospace {
|
||||
font-family: consolas, courier, monospace;
|
||||
font-size: 1em;
|
||||
line-height: 1.2em;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #0489c3;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
em {
|
||||
color: inherit;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
b {
|
||||
color: inherit;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
hr {
|
||||
margin-top: 20px;
|
||||
margin-bottom: 20px;
|
||||
border: 0;
|
||||
border-top: 1px solid #eee;
|
||||
height: 0;
|
||||
box-sizing: content-box;
|
||||
}
|
||||
|
||||
.list-group {
|
||||
padding-left: 0;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.list-group-item {
|
||||
position: relative;
|
||||
display: block;
|
||||
padding: 10px 15px;
|
||||
margin-bottom: -1px;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.list-group-item:first-child {
|
||||
/* rounded top corners */
|
||||
border-top-right-radius:4px;
|
||||
border-top-left-radius:4px;
|
||||
}
|
||||
|
||||
.list-group-item:last-child {
|
||||
margin-bottom: 0;
|
||||
/* rounded bottom corners */
|
||||
border-bottom-right-radius: 4px;
|
||||
border-bottom-left-radius:4px;
|
||||
}
|
||||
|
||||
/* Flex row container */
|
||||
.flex-row {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
/* Flex column container */
|
||||
.flex-column {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.flex-item-fit {
|
||||
flex-grow: 1;
|
||||
flex-shrink: 1;
|
||||
flex-basis: auto;
|
||||
}
|
||||
|
||||
.flex-item-no-shrink {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
flex-basis: auto;
|
||||
}
|
||||
|
||||
.flex-item-fill {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 1; /* shrink when pressured */
|
||||
flex-basis: 100%; /* try and take 100% */
|
||||
}
|
||||
|
||||
.flex-item-fixed-1-12 {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
flex-basis: 8.3%;
|
||||
}
|
||||
|
||||
.flex-item-fixed-2-12 {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
flex-basis: 16.6%;
|
||||
}
|
||||
|
||||
.flex-item-fixed-4-12 {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
flex-basis: 33.3333%;
|
||||
}
|
||||
|
||||
.flex-item-fixed-6-12, .flex-item-50-percent {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
flex-basis: 50%;
|
||||
}
|
||||
|
||||
.flex-item-fixed-8-12 {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
flex-basis: 66.6666%;
|
||||
}
|
||||
|
||||
.flex-item-fixed-9-12 {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
flex-basis: 75%;
|
||||
}
|
||||
|
||||
|
||||
.flex-item-fixed-12-12 {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
flex-basis: 100%;
|
||||
}
|
||||
|
||||
.flex-item-10-percent {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
flex-basis: 10%;
|
||||
}
|
||||
|
||||
.flex-item-15-percent {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
flex-basis: 15%;
|
||||
}
|
||||
|
||||
.flex-item-20-percent {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
flex-basis: 20%;
|
||||
}
|
||||
|
||||
.flex-item-30-percent {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
flex-basis: 30%;
|
||||
}
|
||||
|
||||
.flex-item-40-percent {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
flex-basis: 40%;
|
||||
}
|
||||
|
||||
.flex-item-50-percent {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
flex-basis: 50%;
|
||||
}
|
||||
|
||||
.flex-item-60-percent {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
flex-basis: 60%;
|
||||
}
|
||||
|
||||
.flex-item-70-percent {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
flex-basis: 70%;
|
||||
}
|
||||
|
||||
.flex-item-80-percent {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
flex-basis: 80%;
|
||||
}
|
||||
|
||||
.well {
|
||||
min-height: 20px;
|
||||
padding: 19px;
|
||||
margin-bottom: 20px;
|
||||
background-color: #f5f5f5;
|
||||
border: 1px solid #e3e3e3;
|
||||
border-radius: 4px;
|
||||
box-shadow: inset 0 1px 1px rgba(0,0,0,0.05);
|
||||
}
|
||||
|
||||
.break-wrap {
|
||||
word-wrap: break-word;
|
||||
}
|
||||
</style>
|
||||
<style>
|
||||
.errorBox {
|
||||
background-color: #f5f5f5;
|
||||
border: 1px solid #ccc;
|
||||
padding: 10px;
|
||||
font-family: consolas, courier, monospace;
|
||||
font-size: 1em;
|
||||
line-height: 1.2em;
|
||||
white-space: pre;
|
||||
}
|
||||
</style>
|
||||
<span>
|
||||
<pre class="errorBox">{{ ref.kind }}: {{ ref.message }}</pre>
|
||||
</span>
|
||||
</template>
|
||||
</polymer-element>
|
||||
|
||||
<polymer-element name="eval-box" extends="observatory-element">
|
||||
<template>
|
||||
<style>
|
||||
|
@ -2626,7 +2892,7 @@ hr {
|
|||
<div style="color:#aaa;cursor:wait;"><pending></div>
|
||||
</template>
|
||||
<template if="{{ result['value'] != null }}">
|
||||
<instance-ref ref="{{ result['value'] }}"></instance-ref>
|
||||
<any-service-ref ref="{{ result['value'] }}"></any-service-ref>
|
||||
</template>
|
||||
</td>
|
||||
</tr>
|
||||
|
@ -2639,6 +2905,7 @@ hr {
|
|||
|
||||
|
||||
|
||||
|
||||
<polymer-element name="eval-link">
|
||||
<template>
|
||||
<style>
|
||||
|
@ -2659,7 +2926,7 @@ hr {
|
|||
<span class="idle"><a on-click="{{ evalNow }}">{{ label }}</a></span>
|
||||
</template>
|
||||
<template if="{{ result != null }}">
|
||||
= <instance-ref ref="{{ result }}"></instance-ref>
|
||||
= <any-service-ref ref="{{ result }}"></any-service-ref>
|
||||
</template>
|
||||
</template>
|
||||
</polymer-element>
|
||||
|
@ -4235,9 +4502,8 @@ hr {
|
|||
</div>
|
||||
|
||||
<template if="{{ cls.error != null }}">
|
||||
<!-- TODO(turnidge): Don't use instance-ref for error display here -->
|
||||
<instance-ref ref="{{ cls.error }}"></instance-ref>
|
||||
</template>
|
||||
<error-ref ref="{{ cls.error }}">
|
||||
</error-ref></template>
|
||||
|
||||
<hr>
|
||||
|
||||
|
@ -4253,7 +4519,7 @@ hr {
|
|||
</div>
|
||||
<div class="memberValue">
|
||||
<template if="{{ field['value'] != null }}">
|
||||
<instance-ref ref="{{ field['value'] }}"></instance-ref>
|
||||
<any-service-ref ref="{{ field['value'] }}"></any-service-ref>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -4296,7 +4562,7 @@ hr {
|
|||
</template>
|
||||
<template if="{{ instances != null }}">
|
||||
sample
|
||||
<instance-ref ref="{{ instances['sample'] }}"></instance-ref>
|
||||
<any-service-ref ref="{{ instances['sample'] }}"></any-service-ref>
|
||||
<template if="{{ instances['totalCount'] > instances['sampleCount'] }}">
|
||||
<eval-link callback="{{ reachable }}" label="[more]" expr="{{ instances['sampleCount'] * 2 }}">
|
||||
</eval-link>
|
||||
|
@ -4963,7 +5229,7 @@ hr {
|
|||
<div class="memberItem">
|
||||
<div class="memberName">Constant object pool</div>
|
||||
<div class="memberValue">
|
||||
<instance-ref ref="{{ code.objectPool }}"></instance-ref>
|
||||
<any-service-ref ref="{{ code.objectPool }}"></any-service-ref>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -5647,7 +5913,7 @@ hr {
|
|||
<div class="memberItem">
|
||||
<div class="memberName">static value</div>
|
||||
<div class="memberValue">
|
||||
<instance-ref ref="{{ field['value'] }}"></instance-ref>
|
||||
<any-service-ref ref="{{ field['value'] }}"></any-service-ref>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -5943,7 +6209,7 @@ hr {
|
|||
<div class="memberItem">
|
||||
<div class="memberName">{{ v['name']}}</div>
|
||||
<div class="memberValue">
|
||||
<instance-ref ref="{{ v['value'] }}"></instance-ref>
|
||||
<any-service-ref ref="{{ v['value'] }}"></any-service-ref>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -14527,44 +14793,43 @@ hr {
|
|||
<top-nav-menu></top-nav-menu>
|
||||
<isolate-nav-menu isolate="{{ instance.isolate }}"></isolate-nav-menu>
|
||||
<!-- TODO(turnidge): Add library nav menu here. -->
|
||||
<class-nav-menu cls="{{ instance['class'] }}"></class-nav-menu>
|
||||
<class-nav-menu cls="{{ instance.clazz }}"></class-nav-menu>
|
||||
<nav-menu link="." anchor="instance" last="{{ true }}"></nav-menu>
|
||||
<nav-refresh callback="{{ refresh }}"></nav-refresh>
|
||||
<nav-control></nav-control>
|
||||
</nav-bar>
|
||||
|
||||
<template if="{{ instance['error'] != null }}">
|
||||
<template if="{{ instance.isError }}">
|
||||
<error-view error_obj="{{ instance['error'] }}"></error-view>
|
||||
</template>
|
||||
|
||||
<template if="{{ instance['error'] == null }}">
|
||||
<template if="{{ !instance.isError }}">
|
||||
<div class="content">
|
||||
<!-- TODO(turnidge): Handle null instances. -->
|
||||
<template if="{{ isType(instance) }}">
|
||||
<template if="{{ instance.isType }}">
|
||||
<h1>type {{ instance.name }}</h1>
|
||||
</template>
|
||||
<template if="{{ !isType(instance) }}">
|
||||
<h1>instance of {{ instance['class'].name }}</h1>
|
||||
<template if="{{ !instance.isType }}">
|
||||
<h1>instance of {{ instance.clazz.name }}</h1>
|
||||
</template>
|
||||
<div class="memberList">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">class</div>
|
||||
<div class="memberValue">
|
||||
<class-ref ref="{{ instance['class'] }}">
|
||||
<class-ref ref="{{ instance.clazz }}">
|
||||
</class-ref>
|
||||
</div>
|
||||
</div>
|
||||
<template if="{{ instance['valueAsString'] != null }}">
|
||||
<template if="{{ instance.valueAsString != null }}">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">value</div>
|
||||
<div class="memberValue">{{ instance['valueAsString'] }}</div>
|
||||
<div class="memberValue">{{ instance.valueAsString }}</div>
|
||||
</div>
|
||||
</template>
|
||||
<div class="memberItem">
|
||||
<div class="memberItem" title="Space for this object in memory">
|
||||
<div class="memberName">size</div>
|
||||
<div class="memberValue">{{ instance['size'] | formatSize }}</div>
|
||||
<div class="memberValue">{{ instance.size | formatSize }}</div>
|
||||
</div>
|
||||
<div class="memberItem">
|
||||
<div class="memberItem" title="Space that would be reclaimed if references to this object were replaced with null">
|
||||
<div class="memberName">retained size</div>
|
||||
<div class="memberValue">
|
||||
<template if="{{ retainedBytes == null }}">
|
||||
|
@ -14606,7 +14871,7 @@ hr {
|
|||
</template>
|
||||
</div>
|
||||
</div>
|
||||
<div class="memberItem">
|
||||
<div class="memberItem" title="Objects which directly reference this object">
|
||||
<div class="memberName">inbound references</div>
|
||||
<div class="memberValue">
|
||||
<template if="{{ inboundReferences == null }}">
|
||||
|
@ -14620,20 +14885,20 @@ hr {
|
|||
</template>
|
||||
</div>
|
||||
</div>
|
||||
<template if="{{ instance['type_class'] != null }}">
|
||||
<template if="{{ instance.typeClass != null }}">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">type class</div>
|
||||
<div class="memberValue">
|
||||
<class-ref ref="{{ instance['type_class'] }}">
|
||||
<class-ref ref="{{ instance.typeClass }}">
|
||||
</class-ref>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<template if="{{ instance['closureFunc'] != null }}">
|
||||
<template if="{{ instance.isClosure }}">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">closure function</div>
|
||||
<div class="memberValue">
|
||||
<function-ref ref="{{ instance['closureFunc'] }}">
|
||||
<function-ref ref="{{ instance.closureFunc }}">
|
||||
</function-ref>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -14653,17 +14918,17 @@ hr {
|
|||
<hr>
|
||||
|
||||
<div class="content">
|
||||
<template if="{{ instance['fields'].isNotEmpty }}">
|
||||
fields ({{ instance['fields'].length }})
|
||||
<curly-block expand="{{ instance['fields'].length <= 8 }}">
|
||||
<template if="{{ instance.fields.isNotEmpty }}">
|
||||
fields ({{ instance.fields.length }})
|
||||
<curly-block expand="{{ instance.fields.length <= 8 }}">
|
||||
<div class="memberList">
|
||||
<template repeat="{{ field in instance['fields'] }}">
|
||||
<template repeat="{{ field in instance.fields }}">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">
|
||||
<field-ref ref="{{ field['decl'] }}"></field-ref>
|
||||
</div>
|
||||
<div class="memberValue">
|
||||
<instance-ref ref="{{ field['value'] }}"></instance-ref>
|
||||
<any-service-ref ref="{{ field['value'] }}"></any-service-ref>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -14671,11 +14936,11 @@ hr {
|
|||
</curly-block><br><br>
|
||||
</template>
|
||||
|
||||
<template if="{{ instance['nativeFields'].isNotEmpty }}">
|
||||
native fields ({{ instance['nativeFields'].length }})
|
||||
<curly-block expand="{{ instance['nativeFields'].length <= 8 }}">
|
||||
<template if="{{ instance.nativeFields.isNotEmpty }}">
|
||||
native fields ({{ instance.nativeFields.length }})
|
||||
<curly-block expand="{{ instance.nativeFields.length <= 8 }}">
|
||||
<div class="memberList">
|
||||
<template repeat="{{ field in instance['nativeFields'] }}">
|
||||
<template repeat="{{ field in instance.nativeFields }}">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">[{{ field['index']}}]</div>
|
||||
<div class="memberValue">[{{ field['value']}}]</div>
|
||||
|
@ -14685,17 +14950,17 @@ hr {
|
|||
</curly-block><br><br>
|
||||
</template>
|
||||
|
||||
<template if="{{ instance['elements'].isNotEmpty }}">
|
||||
elements ({{ instance['elements'].length }})
|
||||
<curly-block expand="{{ instance['elements'].length <= 8 }}">
|
||||
<template if="{{ instance.elements.isNotEmpty }}">
|
||||
elements ({{ instance.elements.length }})
|
||||
<curly-block expand="{{ instance.elements.length <= 8 }}">
|
||||
<div class="memberList">
|
||||
<template repeat="{{ element in instance['elements'] }}">
|
||||
<template repeat="{{ element in instance.elements }}">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">[{{ element['index']}}]</div>
|
||||
<div class="memberValue">
|
||||
<instance-ref ref="{{ element['value'] }}">
|
||||
</instance-ref>
|
||||
</div>
|
||||
<any-service-ref ref="{{ element['value'] }}">
|
||||
|
||||
</any-service-ref></div>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
|
@ -15089,7 +15354,7 @@ hr {
|
|||
</div>
|
||||
<div class="memberValue">
|
||||
<template if="{{ field['value'] != null }}">
|
||||
<instance-ref ref="{{ field['value'] }}"></instance-ref>
|
||||
<any-service-ref ref="{{ field['value'] }}"></any-service-ref>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1 +1 @@
|
|||
{"experimental_bootstrap":false,"script_ids":[["observatory","lib/src/elements/curly_block.dart"],["observatory","lib/src/elements/observatory_element.dart"],["observatory","lib/src/elements/service_ref.dart"],["observatory","lib/src/elements/instance_ref.dart"],["observatory","lib/src/elements/action_link.dart"],["observatory","lib/src/elements/nav_bar.dart"],["observatory","lib/src/elements/breakpoint_list.dart"],["observatory","lib/src/elements/class_ref.dart"],["observatory","lib/src/elements/class_tree.dart"],["observatory","lib/src/elements/eval_box.dart"],["observatory","lib/src/elements/eval_link.dart"],["observatory","lib/src/elements/field_ref.dart"],["observatory","lib/src/elements/function_ref.dart"],["observatory","lib/src/elements/library_ref.dart"],["observatory","lib/src/elements/script_inset.dart"],["observatory","lib/src/elements/script_ref.dart"],["observatory","lib/src/elements/class_view.dart"],["observatory","lib/src/elements/code_ref.dart"],["observatory","lib/src/elements/code_view.dart"],["observatory","lib/src/elements/error_view.dart"],["observatory","lib/src/elements/field_view.dart"],["observatory","lib/src/elements/stack_frame.dart"],["observatory","lib/src/elements/flag_list.dart"],["observatory","lib/src/elements/function_view.dart"],["observatory","lib/src/elements/heap_map.dart"],["observatory","lib/src/elements/io_view.dart"],["observatory","lib/src/elements/isolate_ref.dart"],["observatory","lib/src/elements/isolate_summary.dart"],["observatory","lib/src/elements/isolate_view.dart"],["observatory","lib/src/elements/inbound_reference.dart"],["observatory","lib/src/elements/instance_view.dart"],["observatory","lib/src/elements/json_view.dart"],["observatory","lib/src/elements/library_view.dart"],["observatory","lib/src/elements/metrics.dart"],["observatory","lib/src/elements/heap_profile.dart"],["observatory","lib/src/elements/sliding_checkbox.dart"],["observatory","lib/src/elements/isolate_profile.dart"],["observatory","lib/src/elements/script_view.dart"],["observatory","lib/src/elements/stack_trace.dart"],["observatory","lib/src/elements/vm_view.dart"],["observatory","lib/src/elements/service_view.dart"],["observatory","lib/src/elements/observatory_application.dart"],["observatory","lib/src/elements/service_exception_view.dart"],["observatory","lib/src/elements/service_error_view.dart"],["observatory","lib/src/elements/vm_connect.dart"],["observatory","lib/src/elements/vm_ref.dart"],["observatory","web/main.dart"]]}
|
||||
{"experimental_bootstrap":false,"script_ids":[["observatory","lib/src/elements/curly_block.dart"],["observatory","lib/src/elements/observatory_element.dart"],["observatory","lib/src/elements/service_ref.dart"],["observatory","lib/src/elements/instance_ref.dart"],["observatory","lib/src/elements/action_link.dart"],["observatory","lib/src/elements/nav_bar.dart"],["observatory","lib/src/elements/breakpoint_list.dart"],["observatory","lib/src/elements/class_ref.dart"],["observatory","lib/src/elements/class_tree.dart"],["observatory","lib/src/elements/error_ref.dart"],["observatory","lib/src/elements/eval_box.dart"],["observatory","lib/src/elements/eval_link.dart"],["observatory","lib/src/elements/field_ref.dart"],["observatory","lib/src/elements/function_ref.dart"],["observatory","lib/src/elements/library_ref.dart"],["observatory","lib/src/elements/script_inset.dart"],["observatory","lib/src/elements/script_ref.dart"],["observatory","lib/src/elements/class_view.dart"],["observatory","lib/src/elements/code_ref.dart"],["observatory","lib/src/elements/code_view.dart"],["observatory","lib/src/elements/error_view.dart"],["observatory","lib/src/elements/field_view.dart"],["observatory","lib/src/elements/stack_frame.dart"],["observatory","lib/src/elements/flag_list.dart"],["observatory","lib/src/elements/function_view.dart"],["observatory","lib/src/elements/heap_map.dart"],["observatory","lib/src/elements/io_view.dart"],["observatory","lib/src/elements/isolate_ref.dart"],["observatory","lib/src/elements/isolate_summary.dart"],["observatory","lib/src/elements/isolate_view.dart"],["observatory","lib/src/elements/inbound_reference.dart"],["observatory","lib/src/elements/instance_view.dart"],["observatory","lib/src/elements/json_view.dart"],["observatory","lib/src/elements/library_view.dart"],["observatory","lib/src/elements/metrics.dart"],["observatory","lib/src/elements/heap_profile.dart"],["observatory","lib/src/elements/sliding_checkbox.dart"],["observatory","lib/src/elements/isolate_profile.dart"],["observatory","lib/src/elements/script_view.dart"],["observatory","lib/src/elements/stack_trace.dart"],["observatory","lib/src/elements/vm_view.dart"],["observatory","lib/src/elements/service_view.dart"],["observatory","lib/src/elements/observatory_application.dart"],["observatory","lib/src/elements/service_exception_view.dart"],["observatory","lib/src/elements/service_error_view.dart"],["observatory","lib/src/elements/vm_connect.dart"],["observatory","lib/src/elements/vm_ref.dart"],["observatory","web/main.dart"]]}
|
File diff suppressed because one or more lines are too long
|
@ -92,8 +92,7 @@
|
|||
</div>
|
||||
|
||||
<template if="{{ cls.error != null }}">
|
||||
<!-- TODO(turnidge): Don't use instance-ref for error display here -->
|
||||
<instance-ref ref="{{ cls.error }}"></instance-ref>
|
||||
<error-ref ref="{{ cls.error }}"></error>
|
||||
</template>
|
||||
|
||||
<hr>
|
||||
|
@ -110,7 +109,7 @@
|
|||
</div>
|
||||
<div class="memberValue">
|
||||
<template if="{{ field['value'] != null }}">
|
||||
<instance-ref ref="{{ field['value'] }}"></instance-ref>
|
||||
<any-service-ref ref="{{ field['value'] }}"></any-service-ref>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -155,7 +154,7 @@
|
|||
</template>
|
||||
<template if="{{ instances != null }}">
|
||||
sample
|
||||
<instance-ref ref="{{ instances['sample'] }}"></instance-ref>
|
||||
<any-service-ref ref="{{ instances['sample'] }}"></any-service-ref>
|
||||
<template if="{{ instances['totalCount'] > instances['sampleCount'] }}">
|
||||
<eval-link callback="{{ reachable }}"
|
||||
label="[more]"
|
||||
|
|
|
@ -97,7 +97,7 @@
|
|||
<div class="memberItem">
|
||||
<div class="memberName">Constant object pool</div>
|
||||
<div class="memberValue">
|
||||
<instance-ref ref="{{ code.objectPool }}"></instance-ref>
|
||||
<any-service-ref ref="{{ code.objectPool }}"></any-service-ref>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
<link rel="import" href="../../../../packages/polymer/polymer.html">
|
||||
<link rel="import" href="curly_block.html">
|
||||
<link rel="import" href="observatory_element.html">
|
||||
<link rel="import" href="service_ref.html">
|
||||
|
||||
<polymer-element name="error-ref" extends="service-ref">
|
||||
<template>
|
||||
<link rel="stylesheet" href="css/shared.css">
|
||||
<style>
|
||||
.errorBox {
|
||||
background-color: #f5f5f5;
|
||||
border: 1px solid #ccc;
|
||||
padding: 10px;
|
||||
font-family: consolas, courier, monospace;
|
||||
font-size: 1em;
|
||||
line-height: 1.2em;
|
||||
white-space: pre;
|
||||
}
|
||||
</style>
|
||||
<span>
|
||||
<pre class="errorBox">{{ ref.kind }}: {{ ref.message }}</pre>
|
||||
</span>
|
||||
</template>
|
||||
</polymer-element>
|
||||
|
||||
<script type="application/dart" src="error_ref.dart"></script>
|
|
@ -1,5 +1,6 @@
|
|||
<link rel="import" href="../../../../packages/polymer/polymer.html">
|
||||
<link rel="import" href="instance_ref.html">
|
||||
<link rel="import" href="error_ref.html">
|
||||
<link rel="import" href="observatory_element.html">
|
||||
|
||||
<polymer-element name="eval-box" extends="observatory-element">
|
||||
|
@ -74,7 +75,7 @@
|
|||
<div style="color:#aaa;cursor:wait;"><pending></div>
|
||||
</template>
|
||||
<template if="{{ result['value'] != null }}">
|
||||
<instance-ref ref="{{ result['value'] }}"></instance-ref>
|
||||
<any-service-ref ref="{{ result['value'] }}"></any-service-ref>
|
||||
</template>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
<link rel="import" href="../../../../packages/polymer/polymer.html">
|
||||
<link rel="import" href="instance_ref.html">
|
||||
<link rel="import" href="error_ref.html">
|
||||
|
||||
<polymer-element name="eval-link">
|
||||
<template>
|
||||
|
@ -21,7 +22,7 @@
|
|||
<span class="idle"><a on-click="{{ evalNow }}">{{ label }}</a></span>
|
||||
</template>
|
||||
<template if="{{ result != null }}">
|
||||
= <instance-ref ref="{{ result }}"></instance-ref>
|
||||
= <any-service-ref ref="{{ result }}"></any-service-ref>
|
||||
</template>
|
||||
</template>
|
||||
</polymer-element>
|
||||
|
|
|
@ -84,7 +84,7 @@
|
|||
<div class="memberItem">
|
||||
<div class="memberName">static value</div>
|
||||
<div class="memberValue">
|
||||
<instance-ref ref="{{ field['value'] }}"></instance-ref>
|
||||
<any-service-ref ref="{{ field['value'] }}"></any-service-ref>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
|
|
@ -18,50 +18,36 @@
|
|||
}
|
||||
</style>
|
||||
<span>
|
||||
<template if="{{ isError(ref) }}">
|
||||
<pre class="errorBox">{{ ref.message }}</pre>
|
||||
<template if="{{ ref.isSentinel }}">
|
||||
<div title="{{ hoverText }}">{{ ref.valueAsString }}</div>
|
||||
</template>
|
||||
|
||||
<template if="{{ isUnexpected(ref) }}">
|
||||
unexpected reference type <{{ ref.serviceType }}>
|
||||
<template if="{{ ref.isString || ref.isBool || ref.isInt || ref.isDouble || ref.isNull }}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}">{{ ref.valueAsString }}</a>
|
||||
</template>
|
||||
|
||||
<template if="{{ isSentinel(ref) }}">
|
||||
<div title="{{ hoverText }}">{{ ref['valueAsString'] }}</div>
|
||||
<template if="{{ ref.isType }}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}">{{ ref.name }}</a>
|
||||
</template>
|
||||
|
||||
<template if="{{ (isString(ref) ||
|
||||
isBool(ref) ||
|
||||
isNull(ref) ||
|
||||
isInt(ref)) ||
|
||||
isDouble(ref)) }}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}">{{ ref['valueAsString'] }}</a>
|
||||
</template>
|
||||
|
||||
<template if="{{ (isType(ref)) }}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}">{{ ref['user_name'] }}</a>
|
||||
</template>
|
||||
|
||||
<template if="{{ isInstance(ref) &&
|
||||
ref['closureFunc'] != null}}">
|
||||
<template if="{{ ref.isClosure }}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}">
|
||||
<!-- TODO(turnidge): Switch this to fully-qualified function -->
|
||||
{{ ref['closureFunc'].name }}
|
||||
{{ ref.closureFunc.name }}
|
||||
</a>
|
||||
</template>
|
||||
|
||||
<template if="{{ isInstance(ref) &&
|
||||
ref['closureFunc'] == null}}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}"><em>{{ ref['class'].name }}</em></a>
|
||||
<template if="{{ ref.isInstance && !ref.isClosure }}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}"><em>{{ ref.clazz.name }}</em></a>
|
||||
<curly-block callback="{{ expander() }}">
|
||||
<div class="memberList">
|
||||
<template repeat="{{ field in ref['fields'] }}">
|
||||
<template repeat="{{ field in ref.fields }}">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">
|
||||
{{ field['decl']['user_name'] }}
|
||||
</div>
|
||||
<div class="memberValue">
|
||||
<instance-ref ref="{{ field['value'] }}"></instance-ref>
|
||||
<any-service-ref ref="{{ field['value'] }}"></any-service-ref>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -69,15 +55,15 @@
|
|||
</curly-block>
|
||||
</template>
|
||||
|
||||
<template if="{{ isList(ref) }}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}"><em>{{ ref['class'].name }}</em> ({{ ref['length']}})</a>
|
||||
<template if="{{ ref.isList }}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}"><em>{{ ref.clazz.name }}</em> ({{ ref.length }})</a>
|
||||
<curly-block callback="{{ expander() }}">
|
||||
<div class="memberList">
|
||||
<template repeat="{{ element in ref['elements'] }}">
|
||||
<template repeat="{{ element in ref.elements }}">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">[{{ element['index']}}]</div>
|
||||
<div class="memberValue">
|
||||
<instance-ref ref="{{ element['value'] }}"></instance-ref>
|
||||
<any-service-ref ref="{{ element['value'] }}"></instance-ref>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
|
|
@ -17,44 +17,43 @@
|
|||
<top-nav-menu></top-nav-menu>
|
||||
<isolate-nav-menu isolate="{{ instance.isolate }}"></isolate-nav-menu>
|
||||
<!-- TODO(turnidge): Add library nav menu here. -->
|
||||
<class-nav-menu cls="{{ instance['class'] }}"></class-nav-menu>
|
||||
<class-nav-menu cls="{{ instance.clazz }}"></class-nav-menu>
|
||||
<nav-menu link="." anchor="instance" last="{{ true }}"></nav-menu>
|
||||
<nav-refresh callback="{{ refresh }}"></nav-refresh>
|
||||
<nav-control></nav-control>
|
||||
</nav-bar>
|
||||
|
||||
<template if="{{ instance['error'] != null }}">
|
||||
<template if="{{ instance.isError }}">
|
||||
<error-view error_obj="{{ instance['error'] }}"></error-view>
|
||||
</template>
|
||||
|
||||
<template if="{{ instance['error'] == null }}">
|
||||
<template if="{{ !instance.isError }}">
|
||||
<div class="content">
|
||||
<!-- TODO(turnidge): Handle null instances. -->
|
||||
<template if="{{ isType(instance) }}">
|
||||
<template if="{{ instance.isType }}">
|
||||
<h1>type {{ instance.name }}</h1>
|
||||
</template>
|
||||
<template if="{{ !isType(instance) }}">
|
||||
<h1>instance of {{ instance['class'].name }}</h1>
|
||||
<template if="{{ !instance.isType }}">
|
||||
<h1>instance of {{ instance.clazz.name }}</h1>
|
||||
</template>
|
||||
<div class="memberList">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">class</div>
|
||||
<div class="memberValue">
|
||||
<class-ref ref="{{ instance['class'] }}">
|
||||
<class-ref ref="{{ instance.clazz }}">
|
||||
</class-ref>
|
||||
</div>
|
||||
</div>
|
||||
<template if="{{ instance['valueAsString'] != null }}">
|
||||
<template if="{{ instance.valueAsString != null }}">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">value</div>
|
||||
<div class="memberValue">{{ instance['valueAsString'] }}</div>
|
||||
<div class="memberValue">{{ instance.valueAsString }}</div>
|
||||
</div>
|
||||
</template>
|
||||
<div class="memberItem">
|
||||
<div class="memberItem" title="Space for this object in memory">
|
||||
<div class="memberName">size</div>
|
||||
<div class="memberValue">{{ instance['size'] | formatSize }}</div>
|
||||
<div class="memberValue">{{ instance.size | formatSize }}</div>
|
||||
</div>
|
||||
<div class="memberItem">
|
||||
<div class="memberItem" title="Space that would be reclaimed if references to this object were replaced with null">
|
||||
<div class="memberName">retained size</div>
|
||||
<div class="memberValue">
|
||||
<template if="{{ retainedBytes == null }}">
|
||||
|
@ -102,7 +101,7 @@
|
|||
</template>
|
||||
</div>
|
||||
</div>
|
||||
<div class="memberItem">
|
||||
<div class="memberItem" title="Objects which directly reference this object">
|
||||
<div class="memberName">inbound references</div>
|
||||
<div class="memberValue">
|
||||
<template if="{{ inboundReferences == null }}">
|
||||
|
@ -118,20 +117,20 @@
|
|||
</template>
|
||||
</div>
|
||||
</div>
|
||||
<template if="{{ instance['type_class'] != null }}">
|
||||
<template if="{{ instance.typeClass != null }}">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">type class</div>
|
||||
<div class="memberValue">
|
||||
<class-ref ref="{{ instance['type_class'] }}">
|
||||
<class-ref ref="{{ instance.typeClass }}">
|
||||
</class-ref>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<template if="{{ instance['closureFunc'] != null }}">
|
||||
<template if="{{ instance.isClosure }}">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">closure function</div>
|
||||
<div class="memberValue">
|
||||
<function-ref ref="{{ instance['closureFunc'] }}">
|
||||
<function-ref ref="{{ instance.closureFunc }}">
|
||||
</function-ref>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -151,17 +150,17 @@
|
|||
<hr>
|
||||
|
||||
<div class="content">
|
||||
<template if="{{ instance['fields'].isNotEmpty }}">
|
||||
fields ({{ instance['fields'].length }})
|
||||
<curly-block expand="{{ instance['fields'].length <= 8 }}">
|
||||
<template if="{{ instance.fields.isNotEmpty }}">
|
||||
fields ({{ instance.fields.length }})
|
||||
<curly-block expand="{{ instance.fields.length <= 8 }}">
|
||||
<div class="memberList">
|
||||
<template repeat="{{ field in instance['fields'] }}">
|
||||
<template repeat="{{ field in instance.fields }}">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">
|
||||
<field-ref ref="{{ field['decl'] }}"></field-ref>
|
||||
</div>
|
||||
<div class="memberValue">
|
||||
<instance-ref ref="{{ field['value'] }}"></instance-ref>
|
||||
<any-service-ref ref="{{ field['value'] }}"></any-service-ref>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -169,11 +168,11 @@
|
|||
</curly-block><br><br>
|
||||
</template>
|
||||
|
||||
<template if="{{ instance['nativeFields'].isNotEmpty }}">
|
||||
native fields ({{ instance['nativeFields'].length }})
|
||||
<curly-block expand="{{ instance['nativeFields'].length <= 8 }}">
|
||||
<template if="{{ instance.nativeFields.isNotEmpty }}">
|
||||
native fields ({{ instance.nativeFields.length }})
|
||||
<curly-block expand="{{ instance.nativeFields.length <= 8 }}">
|
||||
<div class="memberList">
|
||||
<template repeat="{{ field in instance['nativeFields'] }}">
|
||||
<template repeat="{{ field in instance.nativeFields }}">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">[{{ field['index']}}]</div>
|
||||
<div class="memberValue">[{{ field['value']}}]</div>
|
||||
|
@ -183,15 +182,15 @@
|
|||
</curly-block><br><br>
|
||||
</template>
|
||||
|
||||
<template if="{{ instance['elements'].isNotEmpty }}">
|
||||
elements ({{ instance['elements'].length }})
|
||||
<curly-block expand="{{ instance['elements'].length <= 8 }}">
|
||||
<template if="{{ instance.elements.isNotEmpty }}">
|
||||
elements ({{ instance.elements.length }})
|
||||
<curly-block expand="{{ instance.elements.length <= 8 }}">
|
||||
<div class="memberList">
|
||||
<template repeat="{{ element in instance['elements'] }}">
|
||||
<template repeat="{{ element in instance.elements }}">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">[{{ element['index']}}]</div>
|
||||
<div class="memberValue">
|
||||
<instance-ref ref="{{ element['value'] }}">
|
||||
<any-service-ref ref="{{ element['value'] }}">
|
||||
</instance-ref>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -104,7 +104,7 @@
|
|||
</div>
|
||||
<div class="memberValue">
|
||||
<template if="{{ field['value'] != null }}">
|
||||
<instance-ref ref="{{ field['value'] }}"></instance-ref>
|
||||
<any-service-ref ref="{{ field['value'] }}"></any-service-ref>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
<div class="memberItem">
|
||||
<div class="memberName">{{ v['name']}}</div>
|
||||
<div class="memberValue">
|
||||
<instance-ref ref="{{ v['value'] }}"></instance-ref>
|
||||
<any-service-ref ref="{{ v['value'] }}"></any-service-ref>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
|
|
@ -33,12 +33,7 @@
|
|||
/// discovered in the HTML document.
|
||||
(function() {
|
||||
// Only run in Dartium.
|
||||
if (!navigator.dartEnabled &&
|
||||
// TODO(sigmund): remove userAgent check once 1.6 rolls as stable.
|
||||
// See: dartbug.com/18463
|
||||
(navigator.userAgent.indexOf('(Dart)') === -1)) {
|
||||
return;
|
||||
}
|
||||
if (navigator.userAgent.indexOf('(Dart)') === -1) return;
|
||||
|
||||
// Extract a Dart import URL from a script tag, which is the 'src' attribute
|
||||
// of the script tag, or a data-url with the script contents for inlined code.
|
||||
|
|
|
@ -1,34 +1,37 @@
|
|||
BUILD LOG
|
||||
---------
|
||||
Build Time: 2014-08-12T15:26:59
|
||||
Build Time: 2014-07-24T17:50:13
|
||||
|
||||
NODEJS INFORMATION
|
||||
==================
|
||||
nodejs: v0.10.29
|
||||
nodejs: v0.10.21
|
||||
chai: 1.9.1
|
||||
grunt: 0.4.5
|
||||
grunt-audit: 0.0.3
|
||||
grunt: 0.4.5
|
||||
grunt-concat-sourcemap: 0.4.3
|
||||
grunt-contrib-concat: 0.5.0
|
||||
grunt-contrib-uglify: 0.4.1
|
||||
grunt-contrib-yuidoc: 0.5.2
|
||||
grunt-contrib-concat: 0.4.0
|
||||
grunt-contrib-uglify: 0.4.0
|
||||
grunt-karma: 0.8.3
|
||||
grunt-contrib-yuidoc: 0.5.2
|
||||
grunt-string-replace: 0.2.7
|
||||
karma: 0.12.21
|
||||
karma: 0.12.17
|
||||
karma-crbot-reporter: 0.0.4
|
||||
karma-firefox-launcher: 0.1.3
|
||||
karma-ie-launcher: 0.1.5
|
||||
karma-mocha: 0.1.7
|
||||
karma-mocha: 0.1.6
|
||||
karma-safari-launcher: 0.1.1
|
||||
karma-script-launcher: 0.1.0
|
||||
mocha: 1.21.4
|
||||
mocha: 1.20.1
|
||||
|
||||
REPO REVISIONS
|
||||
==============
|
||||
polymer-expressions: 92f860ef9ff871e4b51fc5da38b2b76ba13ebdbe
|
||||
polymer-gestures: a21142376f0c8a9541a2919d3f77ca557d13afe9
|
||||
polymer-dev: 5d00e4b0252e443e2ed6d5c4a04a568e72ef3b25
|
||||
polymer-expressions: 20247f68f0bc401cbca852fb3cfbdf12ec95a135
|
||||
polymer-gestures: 1353a3aadee345e3e4cd35f9788d02595a27cb30
|
||||
polymer-dev:
|
||||
(0.3.4) 6a3e1b0e2a0bbe546f6896b3f4f064950d7aee8f
|
||||
(with patch for CSP issue) 370b65fa23d6bb283923b10a0b9078863f5e9676
|
||||
|
||||
BUILD HASHES
|
||||
============
|
||||
build/polymer.js: 23408455239101d17426ef7448361730103cb2cf
|
||||
build/polymer.js: ebbc1241930fb9a1bd7d216b0e3510dc1d5963da
|
||||
(without patch, it would be 3e0477c0b09f5800e359044f3358fd1edc6f8449)
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,31 @@
|
|||
// Copyright (c) 2011, 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.
|
||||
|
||||
/**
|
||||
* Coverage controller logic - used by coverage test harness to embed tests in
|
||||
* content shell and extract coverage information.
|
||||
*/
|
||||
|
||||
var LONG_LINE = 60000;
|
||||
|
||||
function onReceive(e) {
|
||||
if (e.data == 'unittest-suite-done') {
|
||||
var s = JSON.stringify(top._$jscoverage);
|
||||
var res = '';
|
||||
// conent shell has a bug on lines longer than 2^16, so we split them
|
||||
while (s.length > LONG_LINE) {
|
||||
res += s.substr(0, LONG_LINE) + '<br>\n';
|
||||
s = s.substr(LONG_LINE);
|
||||
}
|
||||
res += s;
|
||||
window.document.body.innerHTML = res;
|
||||
window.layoutTestController.notifyDone();
|
||||
}
|
||||
}
|
||||
|
||||
if (window.layoutTestController) {
|
||||
window.layoutTestController.dumpAsText();
|
||||
window.layoutTestController.waitUntilDone();
|
||||
window.addEventListener("message", onReceive, false);
|
||||
}
|
|
@ -0,0 +1,233 @@
|
|||
// Copyright (c) 2011, 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.
|
||||
|
||||
/**
|
||||
* Test controller logic - used by unit test harness to embed tests in
|
||||
* conent shell.
|
||||
*/
|
||||
|
||||
// Clear the console before every test run - this is Firebug specific code.
|
||||
if (typeof console == "object" && typeof console.clear == "function") {
|
||||
console.clear();
|
||||
}
|
||||
|
||||
// Some tests may expect and have no way to suppress global errors.
|
||||
var testExpectsGlobalError = false;
|
||||
var testSuppressedGlobalErrors = [];
|
||||
|
||||
// Set window onerror to make sure that we catch test harness errors across all
|
||||
// browsers.
|
||||
window.onerror = function (message, url, lineNumber) {
|
||||
if (testExpectsGlobalError) {
|
||||
testSuppressedGlobalErrors.push({
|
||||
message: message
|
||||
});
|
||||
return;
|
||||
}
|
||||
if (url) {
|
||||
showErrorAndExit(
|
||||
"\n\n" + url + ":" + lineNumber + ":\n" + message + "\n\n");
|
||||
} else {
|
||||
showErrorAndExit(message);
|
||||
}
|
||||
window.postMessage('unittest-suite-external-error', '*');
|
||||
};
|
||||
|
||||
// Start Dartium/content_shell, unless we are waiting for HTML Imports to load.
|
||||
// HTML Imports allows a document to link to other HTMLs documents via
|
||||
// <link rel=import>. It also allows for those other documents to contain
|
||||
// <script> tags, which must be run before scripts on the main page.
|
||||
// We have package:web_components to polyfill this feature, and it will handle
|
||||
// starting Dartium/content_shell in that case. HTML Imports is used by Polymer,
|
||||
// but it could be used by itself too. See the specification:
|
||||
// https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/imports/index.html
|
||||
if (navigator.webkitStartDart && !window.HTMLImports) {
|
||||
navigator.webkitStartDart();
|
||||
}
|
||||
|
||||
// testRunner is provided by content shell.
|
||||
// It is not available in browser tests.
|
||||
var testRunner = window.testRunner || window.layoutTestController;
|
||||
|
||||
var waitForDone = false;
|
||||
|
||||
// Returns the driving window object if available
|
||||
function getDriverWindow() {
|
||||
if (window != window.parent) {
|
||||
// We're running in an iframe.
|
||||
return window.parent;
|
||||
} else if (window.opener) {
|
||||
// We were opened by another window.
|
||||
return window.opener;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
function notifyStart() {
|
||||
var driver = getDriverWindow();
|
||||
if (driver) {
|
||||
driver.postMessage("STARTING", "*");
|
||||
}
|
||||
}
|
||||
// We call notifyStart here to notify the encapsulating browser.
|
||||
notifyStart();
|
||||
|
||||
function notifyDone() {
|
||||
if (testRunner) testRunner.notifyDone();
|
||||
|
||||
// TODO(ricow): REMOVE, debug info, see issue 13292
|
||||
if (!testRunner) {
|
||||
printMessage('Calling notifyDone()');
|
||||
}
|
||||
// To support in browser launching of tests we post back start and result
|
||||
// messages to the window.opener.
|
||||
var driver = getDriverWindow();
|
||||
if (driver) {
|
||||
driver.postMessage(window.document.body.innerHTML, "*");
|
||||
}
|
||||
}
|
||||
|
||||
function processMessage(msg) {
|
||||
if (typeof msg != 'string') return;
|
||||
// TODO(ricow): REMOVE, debug info, see issue 13292
|
||||
if (!testRunner) {
|
||||
// Filter out ShadowDOM polyfill messages which are random floats.
|
||||
if (msg != parseFloat(msg)) {
|
||||
printMessage('processMessage(): ' + msg);
|
||||
}
|
||||
}
|
||||
if (msg == 'unittest-suite-done') {
|
||||
notifyDone();
|
||||
} else if (msg == 'unittest-suite-wait-for-done') {
|
||||
waitForDone = true;
|
||||
if (testRunner) {
|
||||
testRunner.startedDartTest = true;
|
||||
}
|
||||
} else if (msg == 'dart-calling-main') {
|
||||
if (testRunner) {
|
||||
testRunner.startedDartTest = true;
|
||||
}
|
||||
} else if (msg == 'dart-main-done') {
|
||||
if (!waitForDone) {
|
||||
printMessage('PASS');
|
||||
notifyDone();
|
||||
}
|
||||
} else if (msg == 'unittest-suite-success') {
|
||||
printMessage('PASS');
|
||||
notifyDone();
|
||||
} else if (msg == 'unittest-suite-fail') {
|
||||
showErrorAndExit('Some tests failed.');
|
||||
}
|
||||
}
|
||||
|
||||
function onReceive(e) {
|
||||
processMessage(e.data);
|
||||
}
|
||||
|
||||
if (testRunner) {
|
||||
testRunner.dumpAsText();
|
||||
testRunner.waitUntilDone();
|
||||
}
|
||||
window.addEventListener("message", onReceive, false);
|
||||
|
||||
function showErrorAndExit(message) {
|
||||
if (message) {
|
||||
printMessage('Error: ' + String(message));
|
||||
}
|
||||
// dart/tools/testing/test_runner.dart is looking for either PASS or
|
||||
// FAIL in a browser test's output.
|
||||
printMessage('FAIL');
|
||||
notifyDone();
|
||||
}
|
||||
|
||||
function onLoad(e) {
|
||||
// needed for dartium compilation errors.
|
||||
if (window.compilationError) {
|
||||
showErrorAndExit(window.compilationError);
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener("DOMContentLoaded", onLoad, false);
|
||||
|
||||
// Note: before renaming this function, note that it is also included in an
|
||||
// inlined error handler in the HTML files that wrap DRT tests.
|
||||
// See: tools/testing/dart/browser_test.dart
|
||||
function externalError(e) {
|
||||
// needed for dartium compilation errors.
|
||||
showErrorAndExit(e && e.message);
|
||||
window.postMessage('unittest-suite-external-error', '*');
|
||||
}
|
||||
|
||||
document.addEventListener('readystatechange', function () {
|
||||
if (document.readyState != "loaded") return;
|
||||
// If 'startedDartTest' is not set, that means that the test did not have
|
||||
// a chance to load. This will happen when a load error occurs in the VM.
|
||||
// Give the machine time to start up.
|
||||
setTimeout(function() {
|
||||
// A window.postMessage might have been enqueued after this timeout.
|
||||
// Just sleep another time to give the browser the time to process the
|
||||
// posted message.
|
||||
setTimeout(function() {
|
||||
if (testRunner && !testRunner.startedDartTest) {
|
||||
notifyDone();
|
||||
}
|
||||
}, 0);
|
||||
}, 50);
|
||||
});
|
||||
|
||||
// dart2js will generate code to call this function to handle the Dart
|
||||
// [print] method.
|
||||
//
|
||||
// dartium will invoke this method for [print] calls if the environment variable
|
||||
// "DART_FORWARDING_PRINT" was set when launching dartium.
|
||||
//
|
||||
// Our tests will be wrapped, so we can detect when [main] is called and when
|
||||
// it has ended.
|
||||
// The wrapping happens either via "dartMainRunner" (for dart2js) or wrapped
|
||||
// tests for dartium.
|
||||
//
|
||||
// The following messages are handled specially:
|
||||
// dart-calling-main: signals that the dart [main] function will be invoked
|
||||
// dart-main-done: signals that the dart [main] function has finished
|
||||
// unittest-suite-wait-for-done: signals the start of an asynchronous test
|
||||
// unittest-suite-success: signals the end of an asynchrounous test
|
||||
//
|
||||
// These messages are used to communicate with the test and will be posted so
|
||||
// [processMessage] above can see it.
|
||||
function dartPrint(msg) {
|
||||
if ((msg === 'unittest-suite-success')
|
||||
|| (msg === 'unittest-suite-done')
|
||||
|| (msg === 'unittest-suite-wait-for-done')
|
||||
|| (msg === 'dart-calling-main')
|
||||
|| (msg === 'dart-main-done')) {
|
||||
window.postMessage(msg, '*');
|
||||
return;
|
||||
}
|
||||
printMessage(msg);
|
||||
}
|
||||
|
||||
// Prints 'msg' to the console (if available) and to the body of the html
|
||||
// document.
|
||||
function printMessage(msg) {
|
||||
if (typeof console === 'object') console.warn(msg);
|
||||
var pre = document.createElement('pre');
|
||||
pre.appendChild(document.createTextNode(String(msg)));
|
||||
document.body.appendChild(pre);
|
||||
document.body.appendChild(document.createTextNode('\n'));
|
||||
}
|
||||
|
||||
// dart2js will generate code to call this function instead of calling
|
||||
// Dart [main] directly. The argument is a closure that invokes main.
|
||||
function dartMainRunner(main) {
|
||||
dartPrint('dart-calling-main');
|
||||
try {
|
||||
main();
|
||||
} catch (e) {
|
||||
dartPrint(e);
|
||||
if (e.stack) dartPrint(e.stack);
|
||||
window.postMessage('unittest-suite-fail', '*');
|
||||
return;
|
||||
}
|
||||
dartPrint('dart-main-done');
|
||||
}
|
|
@ -1,36 +1,45 @@
|
|||
BUILD LOG
|
||||
---------
|
||||
Build Time: 2014-08-25T14:50:58
|
||||
Build Time: 2014-07-24T18:04:50
|
||||
|
||||
NODEJS INFORMATION
|
||||
==================
|
||||
nodejs: v0.10.29
|
||||
chai: 1.9.1
|
||||
grunt: 0.4.5
|
||||
grunt-audit: 0.0.3
|
||||
grunt-concat-sourcemap: 0.4.3
|
||||
grunt-contrib-concat: 0.4.0
|
||||
grunt-contrib-uglify: 0.5.1
|
||||
grunt-karma: 0.8.3
|
||||
karma: 0.12.22
|
||||
nodejs: v0.10.21
|
||||
chai: 1.9.0
|
||||
grunt: 0.4.2
|
||||
grunt-audit: 0.0.2
|
||||
grunt-concat-sourcemap: 0.4.1
|
||||
grunt-contrib-concat: 0.3.0
|
||||
grunt-contrib-uglify: 0.3.2
|
||||
grunt-contrib-yuidoc: 0.5.1
|
||||
grunt-karma: 0.6.2
|
||||
karma: 0.10.9
|
||||
karma-chrome-launcher: 0.1.2
|
||||
karma-coffee-preprocessor: 0.1.3
|
||||
karma-crbot-reporter: 0.0.4
|
||||
karma-firefox-launcher: 0.1.3
|
||||
karma-ie-launcher: 0.1.5
|
||||
karma-mocha: 0.1.9
|
||||
karma-html2js-preprocessor: 0.1.0
|
||||
karma-ie-launcher: 0.1.1
|
||||
karma-jasmine: 0.1.5
|
||||
karma-mocha: 0.1.1
|
||||
karma-phantomjs-launcher: 0.1.2
|
||||
karma-requirejs: 0.2.1
|
||||
karma-safari-launcher: 0.1.1
|
||||
mocha: 1.21.4
|
||||
karma-script-launcher: 0.1.0
|
||||
mocha: 1.17.1
|
||||
requirejs: 2.1.11
|
||||
|
||||
REPO REVISIONS
|
||||
==============
|
||||
CustomElements: 65bb151f33891864b28eee305bdf299653ef351c
|
||||
HTMLImports: 0d3133d19b35d899ef3e33fbd65ad62e0571d1d5
|
||||
NodeBind: f41e84f3deb2cad22eef89ded1072060f7b1b183
|
||||
ShadowDOM: 57232dc6d07dd921009679dfbab622b52174df80
|
||||
TemplateBinding: f15094216a6b3f64a6d6b0f017b6bd7576b8b44e
|
||||
WeakMap: 6662df5cb7146707238b08e7a65cf70056ae516a
|
||||
observe-js: ca7b6ba385006f200c7ec3537c7730710e428c60
|
||||
platform-dev: fe549bc7f05ec668bc496108958eaee0bd174a06
|
||||
CustomElements: 2df917e8b1fb1928651a71372ae901a400ddf726
|
||||
HTMLImports: d240c62fe5b784239f08f77eff40efb4aabf0105
|
||||
NodeBind: 9f0089946c312d9ac9ca45d06913fce507a8b185
|
||||
ShadowDOM: 86943c29aa8a10da214bc2f42e3067cf0f190279
|
||||
TemplateBinding: d9f4543dc06935824bfd43564c442b0897ce1c54
|
||||
WeakMap: 43ab1056a0d821af9b6028fc27ddf30db817c05a
|
||||
observe-js: e212e7473962067c099a3d1859595c2f8baa36d7
|
||||
platform-dev: 02a0f66b65c34585b4b986e6a3a73cc0d743683a
|
||||
|
||||
BUILD HASHES
|
||||
============
|
||||
build/platform.js: e5a0b4192fb91750c708270b7267d81c972e5bdd
|
||||
build/platform.js: 9ca6c8137fefb7461693d8ec7bac2af8d5a4fd1a
|
File diff suppressed because one or more lines are too long
|
@ -92,8 +92,7 @@
|
|||
</div>
|
||||
|
||||
<template if="{{ cls.error != null }}">
|
||||
<!-- TODO(turnidge): Don't use instance-ref for error display here -->
|
||||
<instance-ref ref="{{ cls.error }}"></instance-ref>
|
||||
<error-ref ref="{{ cls.error }}"></error>
|
||||
</template>
|
||||
|
||||
<hr>
|
||||
|
@ -110,7 +109,7 @@
|
|||
</div>
|
||||
<div class="memberValue">
|
||||
<template if="{{ field['value'] != null }}">
|
||||
<instance-ref ref="{{ field['value'] }}"></instance-ref>
|
||||
<any-service-ref ref="{{ field['value'] }}"></any-service-ref>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -155,7 +154,7 @@
|
|||
</template>
|
||||
<template if="{{ instances != null }}">
|
||||
sample
|
||||
<instance-ref ref="{{ instances['sample'] }}"></instance-ref>
|
||||
<any-service-ref ref="{{ instances['sample'] }}"></any-service-ref>
|
||||
<template if="{{ instances['totalCount'] > instances['sampleCount'] }}">
|
||||
<eval-link callback="{{ reachable }}"
|
||||
label="[more]"
|
||||
|
|
|
@ -97,7 +97,7 @@
|
|||
<div class="memberItem">
|
||||
<div class="memberName">Constant object pool</div>
|
||||
<div class="memberValue">
|
||||
<instance-ref ref="{{ code.objectPool }}"></instance-ref>
|
||||
<any-service-ref ref="{{ code.objectPool }}"></any-service-ref>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
// Copyright (c) 2014, 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 error_ref_element;
|
||||
|
||||
import 'package:polymer/polymer.dart';
|
||||
import 'package:observatory/service.dart';
|
||||
import 'service_ref.dart';
|
||||
|
||||
@CustomTag('error-ref')
|
||||
class ErrorRefElement extends ServiceRefElement {
|
||||
ErrorRefElement.created() : super.created();
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
<link rel="import" href="../../../../packages/polymer/polymer.html">
|
||||
<link rel="import" href="curly_block.html">
|
||||
<link rel="import" href="observatory_element.html">
|
||||
<link rel="import" href="service_ref.html">
|
||||
|
||||
<polymer-element name="error-ref" extends="service-ref">
|
||||
<template>
|
||||
<link rel="stylesheet" href="css/shared.css">
|
||||
<style>
|
||||
.errorBox {
|
||||
background-color: #f5f5f5;
|
||||
border: 1px solid #ccc;
|
||||
padding: 10px;
|
||||
font-family: consolas, courier, monospace;
|
||||
font-size: 1em;
|
||||
line-height: 1.2em;
|
||||
white-space: pre;
|
||||
}
|
||||
</style>
|
||||
<span>
|
||||
<pre class="errorBox">{{ ref.kind }}: {{ ref.message }}</pre>
|
||||
</span>
|
||||
</template>
|
||||
</polymer-element>
|
||||
|
||||
<script type="application/dart" src="error_ref.dart"></script>
|
|
@ -11,7 +11,7 @@ import 'package:observatory/service.dart';
|
|||
/// Displays an Error ServiceObject.
|
||||
@CustomTag('error-view')
|
||||
class ErrorViewElement extends ObservatoryElement {
|
||||
@published ServiceObject error;
|
||||
@published DartError error;
|
||||
|
||||
ErrorViewElement.created() : super.created();
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
<link rel="import" href="../../../../packages/polymer/polymer.html">
|
||||
<link rel="import" href="instance_ref.html">
|
||||
<link rel="import" href="error_ref.html">
|
||||
<link rel="import" href="observatory_element.html">
|
||||
|
||||
<polymer-element name="eval-box" extends="observatory-element">
|
||||
|
@ -74,7 +75,7 @@
|
|||
<div style="color:#aaa;cursor:wait;"><pending></div>
|
||||
</template>
|
||||
<template if="{{ result['value'] != null }}">
|
||||
<instance-ref ref="{{ result['value'] }}"></instance-ref>
|
||||
<any-service-ref ref="{{ result['value'] }}"></any-service-ref>
|
||||
</template>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
<link rel="import" href="../../../../packages/polymer/polymer.html">
|
||||
<link rel="import" href="instance_ref.html">
|
||||
<link rel="import" href="error_ref.html">
|
||||
|
||||
<polymer-element name="eval-link">
|
||||
<template>
|
||||
|
@ -21,7 +22,7 @@
|
|||
<span class="idle"><a on-click="{{ evalNow }}">{{ label }}</a></span>
|
||||
</template>
|
||||
<template if="{{ result != null }}">
|
||||
= <instance-ref ref="{{ result }}"></instance-ref>
|
||||
= <any-service-ref ref="{{ result }}"></any-service-ref>
|
||||
</template>
|
||||
</template>
|
||||
</polymer-element>
|
||||
|
|
|
@ -84,7 +84,7 @@
|
|||
<div class="memberItem">
|
||||
<div class="memberName">static value</div>
|
||||
<div class="memberValue">
|
||||
<instance-ref ref="{{ field['value'] }}"></instance-ref>
|
||||
<any-service-ref ref="{{ field['value'] }}"></any-service-ref>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
|
|
@ -11,6 +11,7 @@ import 'service_ref.dart';
|
|||
|
||||
@CustomTag('inbound-reference')
|
||||
class InboundReferenceElement extends ServiceRefElement {
|
||||
@published ObservableMap ref;
|
||||
InboundReferenceElement.created() : super.created();
|
||||
|
||||
dynamic get slot => (ref as ServiceMap)['slot'];
|
||||
|
@ -40,9 +41,7 @@ class InboundReferenceElement extends ServiceRefElement {
|
|||
notifyPropertyChange(#ref, 0, 1);
|
||||
}).whenComplete(done);
|
||||
} else {
|
||||
ServiceMap refMap = ref;
|
||||
refMap['fields'] = null;
|
||||
refMap['elements'] = null;
|
||||
inboundReferences = null;
|
||||
done();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,20 +37,20 @@ class InstanceRefElement extends ServiceRefElement {
|
|||
}
|
||||
|
||||
void expandEvent(bool expand, var done) {
|
||||
assert(ref is ServiceMap);
|
||||
assert(ref is Instance);
|
||||
if (expand) {
|
||||
ref.reload().then((result) {
|
||||
if (result['valueAsString'] != null) {
|
||||
result.name = result['valueAsString'];
|
||||
result.vmName = result['valueAsString'];
|
||||
if (result.valueAsString != null) {
|
||||
result.name = result.valueAsString;
|
||||
result.vmName = result.valueAsString;
|
||||
}
|
||||
ref = result;
|
||||
notifyPropertyChange(#ref, 0, 1);
|
||||
}).whenComplete(done);
|
||||
} else {
|
||||
ServiceMap refMap = ref;
|
||||
refMap['fields'] = null;
|
||||
refMap['elements'] = null;
|
||||
Instance refMap = ref;
|
||||
refMap.fields = null;
|
||||
refMap.elements = null;
|
||||
done();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,50 +18,36 @@
|
|||
}
|
||||
</style>
|
||||
<span>
|
||||
<template if="{{ isError(ref) }}">
|
||||
<pre class="errorBox">{{ ref.message }}</pre>
|
||||
<template if="{{ ref.isSentinel }}">
|
||||
<div title="{{ hoverText }}">{{ ref.valueAsString }}</div>
|
||||
</template>
|
||||
|
||||
<template if="{{ isUnexpected(ref) }}">
|
||||
unexpected reference type <{{ ref.serviceType }}>
|
||||
<template if="{{ ref.isString || ref.isBool || ref.isInt || ref.isDouble || ref.isNull }}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}">{{ ref.valueAsString }}</a>
|
||||
</template>
|
||||
|
||||
<template if="{{ isSentinel(ref) }}">
|
||||
<div title="{{ hoverText }}">{{ ref['valueAsString'] }}</div>
|
||||
<template if="{{ ref.isType }}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}">{{ ref.name }}</a>
|
||||
</template>
|
||||
|
||||
<template if="{{ (isString(ref) ||
|
||||
isBool(ref) ||
|
||||
isNull(ref) ||
|
||||
isInt(ref)) ||
|
||||
isDouble(ref)) }}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}">{{ ref['valueAsString'] }}</a>
|
||||
</template>
|
||||
|
||||
<template if="{{ (isType(ref)) }}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}">{{ ref['user_name'] }}</a>
|
||||
</template>
|
||||
|
||||
<template if="{{ isInstance(ref) &&
|
||||
ref['closureFunc'] != null}}">
|
||||
<template if="{{ ref.isClosure }}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}">
|
||||
<!-- TODO(turnidge): Switch this to fully-qualified function -->
|
||||
{{ ref['closureFunc'].name }}
|
||||
{{ ref.closureFunc.name }}
|
||||
</a>
|
||||
</template>
|
||||
|
||||
<template if="{{ isInstance(ref) &&
|
||||
ref['closureFunc'] == null}}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}"><em>{{ ref['class'].name }}</em></a>
|
||||
<template if="{{ ref.isInstance && !ref.isClosure }}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}"><em>{{ ref.clazz.name }}</em></a>
|
||||
<curly-block callback="{{ expander() }}">
|
||||
<div class="memberList">
|
||||
<template repeat="{{ field in ref['fields'] }}">
|
||||
<template repeat="{{ field in ref.fields }}">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">
|
||||
{{ field['decl']['user_name'] }}
|
||||
</div>
|
||||
<div class="memberValue">
|
||||
<instance-ref ref="{{ field['value'] }}"></instance-ref>
|
||||
<any-service-ref ref="{{ field['value'] }}"></any-service-ref>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -69,15 +55,15 @@
|
|||
</curly-block>
|
||||
</template>
|
||||
|
||||
<template if="{{ isList(ref) }}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}"><em>{{ ref['class'].name }}</em> ({{ ref['length']}})</a>
|
||||
<template if="{{ ref.isList }}">
|
||||
<a on-click="{{ goto }}" _href="{{ url }}"><em>{{ ref.clazz.name }}</em> ({{ ref.length }})</a>
|
||||
<curly-block callback="{{ expander() }}">
|
||||
<div class="memberList">
|
||||
<template repeat="{{ element in ref['elements'] }}">
|
||||
<template repeat="{{ element in ref.elements }}">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">[{{ element['index']}}]</div>
|
||||
<div class="memberValue">
|
||||
<instance-ref ref="{{ element['value'] }}"></instance-ref>
|
||||
<any-service-ref ref="{{ element['value'] }}"></instance-ref>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
|
|
@ -11,7 +11,7 @@ import 'package:polymer/polymer.dart';
|
|||
|
||||
@CustomTag('instance-view')
|
||||
class InstanceViewElement extends ObservatoryElement {
|
||||
@published ServiceMap instance;
|
||||
@published Instance instance;
|
||||
@published ServiceMap path;
|
||||
@published ServiceMap inboundReferences;
|
||||
@observable int retainedBytes = null;
|
||||
|
|
|
@ -17,44 +17,43 @@
|
|||
<top-nav-menu></top-nav-menu>
|
||||
<isolate-nav-menu isolate="{{ instance.isolate }}"></isolate-nav-menu>
|
||||
<!-- TODO(turnidge): Add library nav menu here. -->
|
||||
<class-nav-menu cls="{{ instance['class'] }}"></class-nav-menu>
|
||||
<class-nav-menu cls="{{ instance.clazz }}"></class-nav-menu>
|
||||
<nav-menu link="." anchor="instance" last="{{ true }}"></nav-menu>
|
||||
<nav-refresh callback="{{ refresh }}"></nav-refresh>
|
||||
<nav-control></nav-control>
|
||||
</nav-bar>
|
||||
|
||||
<template if="{{ instance['error'] != null }}">
|
||||
<template if="{{ instance.isError }}">
|
||||
<error-view error_obj="{{ instance['error'] }}"></error-view>
|
||||
</template>
|
||||
|
||||
<template if="{{ instance['error'] == null }}">
|
||||
<template if="{{ !instance.isError }}">
|
||||
<div class="content">
|
||||
<!-- TODO(turnidge): Handle null instances. -->
|
||||
<template if="{{ isType(instance) }}">
|
||||
<template if="{{ instance.isType }}">
|
||||
<h1>type {{ instance.name }}</h1>
|
||||
</template>
|
||||
<template if="{{ !isType(instance) }}">
|
||||
<h1>instance of {{ instance['class'].name }}</h1>
|
||||
<template if="{{ !instance.isType }}">
|
||||
<h1>instance of {{ instance.clazz.name }}</h1>
|
||||
</template>
|
||||
<div class="memberList">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">class</div>
|
||||
<div class="memberValue">
|
||||
<class-ref ref="{{ instance['class'] }}">
|
||||
<class-ref ref="{{ instance.clazz }}">
|
||||
</class-ref>
|
||||
</div>
|
||||
</div>
|
||||
<template if="{{ instance['valueAsString'] != null }}">
|
||||
<template if="{{ instance.valueAsString != null }}">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">value</div>
|
||||
<div class="memberValue">{{ instance['valueAsString'] }}</div>
|
||||
<div class="memberValue">{{ instance.valueAsString }}</div>
|
||||
</div>
|
||||
</template>
|
||||
<div class="memberItem">
|
||||
<div class="memberItem" title="Space for this object in memory">
|
||||
<div class="memberName">size</div>
|
||||
<div class="memberValue">{{ instance['size'] | formatSize }}</div>
|
||||
<div class="memberValue">{{ instance.size | formatSize }}</div>
|
||||
</div>
|
||||
<div class="memberItem">
|
||||
<div class="memberItem" title="Space that would be reclaimed if references to this object were replaced with null">
|
||||
<div class="memberName">retained size</div>
|
||||
<div class="memberValue">
|
||||
<template if="{{ retainedBytes == null }}">
|
||||
|
@ -102,7 +101,7 @@
|
|||
</template>
|
||||
</div>
|
||||
</div>
|
||||
<div class="memberItem">
|
||||
<div class="memberItem" title="Objects which directly reference this object">
|
||||
<div class="memberName">inbound references</div>
|
||||
<div class="memberValue">
|
||||
<template if="{{ inboundReferences == null }}">
|
||||
|
@ -118,20 +117,20 @@
|
|||
</template>
|
||||
</div>
|
||||
</div>
|
||||
<template if="{{ instance['type_class'] != null }}">
|
||||
<template if="{{ instance.typeClass != null }}">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">type class</div>
|
||||
<div class="memberValue">
|
||||
<class-ref ref="{{ instance['type_class'] }}">
|
||||
<class-ref ref="{{ instance.typeClass }}">
|
||||
</class-ref>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<template if="{{ instance['closureFunc'] != null }}">
|
||||
<template if="{{ instance.isClosure }}">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">closure function</div>
|
||||
<div class="memberValue">
|
||||
<function-ref ref="{{ instance['closureFunc'] }}">
|
||||
<function-ref ref="{{ instance.closureFunc }}">
|
||||
</function-ref>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -151,17 +150,17 @@
|
|||
<hr>
|
||||
|
||||
<div class="content">
|
||||
<template if="{{ instance['fields'].isNotEmpty }}">
|
||||
fields ({{ instance['fields'].length }})
|
||||
<curly-block expand="{{ instance['fields'].length <= 8 }}">
|
||||
<template if="{{ instance.fields.isNotEmpty }}">
|
||||
fields ({{ instance.fields.length }})
|
||||
<curly-block expand="{{ instance.fields.length <= 8 }}">
|
||||
<div class="memberList">
|
||||
<template repeat="{{ field in instance['fields'] }}">
|
||||
<template repeat="{{ field in instance.fields }}">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">
|
||||
<field-ref ref="{{ field['decl'] }}"></field-ref>
|
||||
</div>
|
||||
<div class="memberValue">
|
||||
<instance-ref ref="{{ field['value'] }}"></instance-ref>
|
||||
<any-service-ref ref="{{ field['value'] }}"></any-service-ref>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -169,11 +168,11 @@
|
|||
</curly-block><br><br>
|
||||
</template>
|
||||
|
||||
<template if="{{ instance['nativeFields'].isNotEmpty }}">
|
||||
native fields ({{ instance['nativeFields'].length }})
|
||||
<curly-block expand="{{ instance['nativeFields'].length <= 8 }}">
|
||||
<template if="{{ instance.nativeFields.isNotEmpty }}">
|
||||
native fields ({{ instance.nativeFields.length }})
|
||||
<curly-block expand="{{ instance.nativeFields.length <= 8 }}">
|
||||
<div class="memberList">
|
||||
<template repeat="{{ field in instance['nativeFields'] }}">
|
||||
<template repeat="{{ field in instance.nativeFields }}">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">[{{ field['index']}}]</div>
|
||||
<div class="memberValue">[{{ field['value']}}]</div>
|
||||
|
@ -183,15 +182,15 @@
|
|||
</curly-block><br><br>
|
||||
</template>
|
||||
|
||||
<template if="{{ instance['elements'].isNotEmpty }}">
|
||||
elements ({{ instance['elements'].length }})
|
||||
<curly-block expand="{{ instance['elements'].length <= 8 }}">
|
||||
<template if="{{ instance.elements.isNotEmpty }}">
|
||||
elements ({{ instance.elements.length }})
|
||||
<curly-block expand="{{ instance.elements.length <= 8 }}">
|
||||
<div class="memberList">
|
||||
<template repeat="{{ element in instance['elements'] }}">
|
||||
<template repeat="{{ element in instance.elements }}">
|
||||
<div class="memberItem">
|
||||
<div class="memberName">[{{ element['index']}}]</div>
|
||||
<div class="memberValue">
|
||||
<instance-ref ref="{{ element['value'] }}">
|
||||
<any-service-ref ref="{{ element['value'] }}">
|
||||
</instance-ref>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -104,7 +104,7 @@
|
|||
</div>
|
||||
<div class="memberValue">
|
||||
<template if="{{ field['value'] != null }}">
|
||||
<instance-ref ref="{{ field['value'] }}"></instance-ref>
|
||||
<any-service-ref ref="{{ field['value'] }}"></any-service-ref>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -111,64 +111,4 @@ class ObservatoryElement extends PolymerElement {
|
|||
}
|
||||
|
||||
int parseInt(String value) => int.parse(value);
|
||||
|
||||
bool isNull(ref) {
|
||||
return ref != null && ref.serviceType == 'Null';
|
||||
}
|
||||
|
||||
bool isSentinel(ref) {
|
||||
return ref != null && ref.serviceType == 'Sentinel';
|
||||
}
|
||||
|
||||
bool isError(ref) {
|
||||
return ref != null && ref.serviceType == 'Error';
|
||||
}
|
||||
|
||||
bool isInt(ref) {
|
||||
return ref != null && (ref.serviceType == 'Smi' ||
|
||||
ref.serviceType == 'Mint' ||
|
||||
ref.serviceType == 'Bigint');
|
||||
}
|
||||
|
||||
bool isBool(ref) {
|
||||
return ref != null && ref.serviceType == 'Bool';
|
||||
}
|
||||
|
||||
bool isString(ref) {
|
||||
return ref != null && ref.serviceType == 'String';
|
||||
}
|
||||
|
||||
bool isInstance(ref) {
|
||||
return ref != null && ref.serviceType == 'Instance';
|
||||
}
|
||||
|
||||
bool isDouble(ref) {
|
||||
return ref != null && ref.serviceType == 'Double';
|
||||
}
|
||||
|
||||
bool isList(ref) {
|
||||
return ref != null && (ref.serviceType == 'GrowableObjectArray' ||
|
||||
ref.serviceType == 'Array');
|
||||
}
|
||||
|
||||
bool isType(ref) {
|
||||
return ref != null && (ref.serviceType == 'Type');
|
||||
}
|
||||
|
||||
bool isUnexpected(ref) {
|
||||
if (ref == null) return false;
|
||||
return (!['Null',
|
||||
'Sentinel',
|
||||
'Smi',
|
||||
'Mint',
|
||||
'Bigint',
|
||||
'Bool',
|
||||
'String',
|
||||
'Double',
|
||||
'Instance',
|
||||
'GrowableObjectArray',
|
||||
'Array',
|
||||
'Type',
|
||||
'Error'].contains(ref.serviceType));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -66,7 +66,7 @@ class AnyServiceRefElement extends ObservatoryElement {
|
|||
Element _constructElementForRef() {
|
||||
var type = ref.serviceType;
|
||||
switch (type) {
|
||||
case 'Class':
|
||||
case 'Class':
|
||||
ServiceRefElement element = new Element.tag('class-ref');
|
||||
element.ref = ref;
|
||||
return element;
|
||||
|
@ -74,6 +74,10 @@ class AnyServiceRefElement extends ObservatoryElement {
|
|||
ServiceRefElement element = new Element.tag('code-ref');
|
||||
element.ref = ref;
|
||||
return element;
|
||||
case 'Error':
|
||||
ServiceRefElement element = new Element.tag('error-ref');
|
||||
element.ref = ref;
|
||||
return element;
|
||||
case 'Field':
|
||||
ServiceRefElement element = new Element.tag('field-ref');
|
||||
element.ref = ref;
|
||||
|
@ -95,6 +99,7 @@ class AnyServiceRefElement extends ObservatoryElement {
|
|||
case 'Instance':
|
||||
case 'Mint':
|
||||
case 'Null':
|
||||
case 'Sentinel': // TODO(rmacnak): Separate this out.
|
||||
case 'Smi':
|
||||
case 'String':
|
||||
case 'Type':
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
<div class="memberItem">
|
||||
<div class="memberName">{{ v['name']}}</div>
|
||||
<div class="memberValue">
|
||||
<instance-ref ref="{{ v['value'] }}"></instance-ref>
|
||||
<any-service-ref ref="{{ v['value'] }}"></any-service-ref>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
|
|
@ -34,6 +34,17 @@ abstract class ServiceObject extends Observable {
|
|||
@reflectable String get serviceType => _serviceType;
|
||||
String _serviceType;
|
||||
|
||||
bool get isBool => serviceType == 'Bool';
|
||||
bool get isDouble => serviceType == 'Double';
|
||||
bool get isError => serviceType == 'Error';
|
||||
bool get isInstance => serviceType == 'Instance';
|
||||
bool get isInt => serviceType == 'Smi' || serviceType == 'Mint' || serviceType == 'Bigint';
|
||||
bool get isList => serviceType == 'GrowableObjectArray' || serviceType == 'Array';
|
||||
bool get isNull => serviceType == 'Null';
|
||||
bool get isSentinel => serviceType == 'Sentinel';
|
||||
bool get isString => serviceType == 'String';
|
||||
bool get isType => serviceType == 'Type';
|
||||
|
||||
/// The complete service url of this object.
|
||||
@reflectable String get link => _owner.relativeLink(_id);
|
||||
|
||||
|
@ -88,6 +99,20 @@ abstract class ServiceObject extends Observable {
|
|||
case 'Gauge':
|
||||
obj = new ServiceMetric._empty(owner);
|
||||
break;
|
||||
case 'Array':
|
||||
case 'Bigint':
|
||||
case 'Bool':
|
||||
case 'Double':
|
||||
case 'GrowableObjectArray':
|
||||
case 'Instance':
|
||||
case 'Mint':
|
||||
case 'Null':
|
||||
case 'Sentinel': // TODO(rmacnak): Separate this out.
|
||||
case 'Smi':
|
||||
case 'String':
|
||||
case 'Type':
|
||||
obj = new Instance._empty(owner);
|
||||
break;
|
||||
case 'Isolate':
|
||||
obj = new Isolate._empty(owner.vm);
|
||||
break;
|
||||
|
@ -1159,7 +1184,7 @@ class DartError extends ServiceObject {
|
|||
|
||||
@observable String kind;
|
||||
@observable String message;
|
||||
@observable ServiceMap exception;
|
||||
@observable Instance exception;
|
||||
@observable ServiceMap stacktrace;
|
||||
|
||||
void _update(ObservableMap map, bool mapIsRef) {
|
||||
|
@ -1439,6 +1464,54 @@ class Class extends ServiceObject with Coverage {
|
|||
String toString() => 'Class($vmName)';
|
||||
}
|
||||
|
||||
class Instance extends ServiceObject {
|
||||
@observable Class clazz;
|
||||
@observable String valueAsString;
|
||||
@observable int size;
|
||||
@observable ServiceFunction closureFunc; // If a closure.
|
||||
@observable String name; // If a Type.
|
||||
|
||||
@observable var typeClass;
|
||||
@observable var length;
|
||||
@observable var fields;
|
||||
@observable var nativeFields;
|
||||
@observable var elements;
|
||||
@observable var userName;
|
||||
|
||||
bool get isClosure => closureFunc != null;
|
||||
|
||||
Instance._empty(ServiceObjectOwner owner) : super._empty(owner);
|
||||
|
||||
void _update(ObservableMap map, bool mapIsRef) {
|
||||
// Extract full properties.
|
||||
_upgradeCollection(map, isolate);
|
||||
|
||||
clazz = map['class'];
|
||||
valueAsString = map['valueAsString'];
|
||||
size = map['size'];
|
||||
closureFunc = map['closureFunc'];
|
||||
name = map['name'];
|
||||
|
||||
if (mapIsRef) {
|
||||
return;
|
||||
}
|
||||
|
||||
nativeFields = map['nativeFields'];
|
||||
fields = map['fields'];
|
||||
length = map['length'];
|
||||
elements = map['elements'];
|
||||
typeClass = map['type_class'];
|
||||
userName = map['user_name'];
|
||||
|
||||
// We are fully loaded.
|
||||
_loaded = true;
|
||||
}
|
||||
|
||||
String get shortName => valueAsString != null ? valueAsString : 'a ${clazz.name}';
|
||||
|
||||
String toString() => 'Instance($shortName)';
|
||||
}
|
||||
|
||||
// TODO(koda): Sync this with VM.
|
||||
class FunctionKind {
|
||||
final String _strValue;
|
||||
|
@ -2356,8 +2429,7 @@ class MetricPoller {
|
|||
|
||||
// Convert any ServiceMaps representing a null instance into an actual null.
|
||||
_convertNull(obj) {
|
||||
if (obj is ServiceMap &&
|
||||
obj.serviceType == 'Null') {
|
||||
if (obj.isNull) {
|
||||
return null;
|
||||
}
|
||||
return obj;
|
||||
|
|
Loading…
Reference in a new issue