blob: fee5ce919026e09d7d3399b617d79f5d482050f6 [file] [log] [blame]
<link rel="import" href="../../../../packages/polymer/polymer.html">
<link rel="import" href="class_ref.html">
<link rel="import" href="error_view.html">
<link rel="import" href="eval_box.html">
<link rel="import" href="eval_link.html">
<link rel="import" href="field_ref.html">
<link rel="import" href="function_ref.html">
<link rel="import" href="inbound_reference.html">
<link rel="import" href="instance_ref.html">
<link rel="import" href="observatory_element.html">
<link rel="import" href="nav_bar.html">
<polymer-element name="instance-view" extends="observatory-element">
<template>
<link rel="stylesheet" href="css/shared.css">
<nav-bar>
<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.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.isError }}">
<error-view error_obj="{{ instance['error'] }}"></error-view>
</template>
<template if="{{ !instance.isError }}">
<div class="content">
<template if="{{ instance.isType }}">
<h1>type {{ instance.name }}</h1>
</template>
<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.clazz }}">
</class-ref>
</div>
</div>
<template if="{{ instance.valueAsString != null }}">
<div class="memberItem">
<div class="memberName">value</div>
<div class="memberValue">{{ instance.valueAsString }}</div>
</div>
</template>
<div class="memberItem" title="Space for this object in memory">
<div class="memberName">size</div>
<div class="memberValue">{{ instance.size | formatSize }}</div>
</div>
<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 }}">
<eval-link callback="{{ retainedSize }}"
label="[calculate]">
</eval-link>
</template>
<template if="{{ retainedBytes != null }}">
{{ retainedBytes | formatSize }}
</template>
</div>
</div>
<div class="memberItem">
<div class="memberName">retaining path</div>
<div class="memberValue">
<template if="{{ path == null }}">
<eval-link callback="{{ retainingPath }}"
label="[find]"
expr="10">
</eval-link>
</template>
<template if="{{ path != null }}">
<template repeat="{{ element in path['elements'] }}">
<div class="memberItem">
<div class="memberName">[{{ element['index']}}]</div>
<div class="memberValue">
<any-service-ref ref="{{ element['value'] }}"></any-service-ref>
<template if="{{ element['parentField'] != null }}">
in <field-ref ref="{{ element['parentField'] }}"></field-ref> of
</template>
<template if="{{ element['parentListIndex'] != null }}">
in [{{ element['parentListIndex'] }}] of
</template>
</div>
</div>
</template>
<template if="{{ path['length'] > path['elements'].length }}">
showing {{ path['elements'].length }} of {{ path['length'] }}
<eval-link
callback="{{ retainingPath }}"
label="[find more]"
expr="{{ path['elements'].length * 2 }}">
</eval-link>
</template>
</template>
</div>
</div>
<div class="memberItem" title="Objects which directly reference this object">
<div class="memberName">inbound references</div>
<div class="memberValue">
<template if="{{ inboundReferences == null }}">
<eval-link callback="{{ fetchInboundReferences }}"
label="[find]"
expr="100">
</eval-link>
</template>
<template if="{{ inboundReferences != null }}">
<template repeat="{{ reference in inboundReferences['references'] }}">
<inbound-reference ref="{{ reference }}"></inbound-reference>
</template>
</template>
</div>
</div>
<template if="{{ instance.typeClass != null }}">
<div class="memberItem">
<div class="memberName">type class</div>
<div class="memberValue">
<class-ref ref="{{ instance.typeClass }}">
</class-ref>
</div>
</div>
</template>
<template if="{{ instance.isClosure }}">
<div class="memberItem">
<div class="memberName">closure function</div>
<div class="memberValue">
<function-ref ref="{{ instance.closureFunc }}">
</function-ref>
</div>
</div>
</template>
<div class="memberItem">&nbsp;</div>
<div class="memberItem">
<div class="memberName">toString()</div>
<div class="memberValue">
<eval-link callback="{{ eval }}" expr="toString()"></eval-link>
</div>
</div>
</div>
</div>
<hr>
<div class="content">
<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 }}">
<div class="memberItem">
<div class="memberName">
<field-ref ref="{{ field['decl'] }}"></field-ref>
</div>
<div class="memberValue">
<any-service-ref ref="{{ field['value'] }}"></any-service-ref>
</div>
</div>
</template>
</div>
</curly-block><br><br>
</template>
<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 }}">
<div class="memberItem">
<div class="memberName">[{{ field['index']}}]</div>
<div class="memberValue">[{{ field['value']}}]</div>
</div>
</template>
</div>
</curly-block><br><br>
</template>
<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 }}">
<div class="memberItem">
<div class="memberName">[{{ element['index']}}]</div>
<div class="memberValue">
<any-service-ref ref="{{ element['value'] }}">
</instance-ref>
</div>
</div>
</template>
</div>
</curly-block><br><br>
</template>
</div>
<hr>
<div class="content">
<eval-box callback="{{ eval }}"></eval-box>
</div>
<br><br><br><br>
<br><br><br><br>
</template>
</template>
</polymer-element>
<script type="application/dart" src="instance_view.dart"></script>