| <link rel="import" href="../../../../packages/polymer/polymer.html"> |
| <link rel="import" href="curly_block.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="instance_ref.html"> |
| <link rel="import" href="library_ref.html"> |
| <link rel="import" href="nav_bar.html"> |
| <link rel="import" href="observatory_element.html"> |
| <link rel="import" href="script_inset.html"> |
| <link rel="import" href="script_ref.html"> |
| |
| <polymer-element name="class-view" extends="observatory-element"> |
| <template> |
| <link rel="stylesheet" href="css/shared.css"> |
| <nav-bar> |
| <top-nav-menu></top-nav-menu> |
| <isolate-nav-menu isolate="{{ cls.isolate }}"></isolate-nav-menu> |
| <library-nav-menu library="{{ cls.library }}"></library-nav-menu> |
| <class-nav-menu cls="{{ cls }}" last="{{ true }}"></class-nav-menu> |
| <nav-refresh callback="{{ refreshCoverage }}" label="Refresh Coverage"></nav-refresh> |
| <nav-refresh callback="{{ refresh }}"></nav-refresh> |
| <nav-control></nav-control> |
| </nav-bar> |
| |
| <div class="content"> |
| <h1> |
| <template if="{{ cls.isAbstract }}"> |
| abstract |
| </template> |
| <template if="{{ cls.isPatch }}"> |
| patch |
| </template> |
| class {{ cls.name }} |
| </h1> |
| <div class="memberList"> |
| <div class="memberItem"> |
| <div class="memberName">library</div> |
| <div class="memberValue"> |
| <library-ref ref="{{ cls.library }}"></library-ref> |
| </div> |
| </div> |
| <div class="memberItem"> |
| <div class="memberName">script</div> |
| <div class="memberValue"> |
| <script-ref ref="{{ cls.script }}" pos="{{ cls.tokenPos }}"> |
| </script-ref> |
| </div> |
| </div> |
| |
| <div class="memberItem"> </div> |
| |
| <template if="{{ cls.superclass != null }}"> |
| <div class="memberItem"> |
| <div class="memberName">extends</div> |
| <div class="memberValue"> |
| <class-ref ref="{{ cls.superclass }}"></class-ref> |
| </div> |
| </div> |
| </template> |
| <template if="{{ cls.subclasses.length > 0 }}"> |
| <div class="memberItem"> |
| <div class="memberName">extended by</div> |
| <div class="memberValue"> |
| <template repeat="{{ subclass in cls.subclasses }}"> |
| <class-ref ref="{{ subclass }}"></class-ref> |
| </template> |
| </div> |
| </div> |
| </template> |
| |
| <div class="memberItem"> </div> |
| |
| <template if="{{ cls.interfaces.length > 0 }}"> |
| <div class="memberItem"> |
| <div class="memberName">implements</div> |
| <div class="memberValue"> |
| <template repeat="{{ interface in cls.interfaces }}"> |
| <class-ref ref="{{ interface }}"></class-ref> |
| </template> |
| </div> |
| </div> |
| </template> |
| <template if="{{ cls.name != cls.vmName }}"> |
| <div class="memberItem"> |
| <div class="memberName">vm name</div> |
| <div class="memberValue">{{ cls.vmName }}</div> |
| </div> |
| </template> |
| </div> |
| </div> |
| |
| <template if="{{ cls.error != null }}"> |
| <error-ref ref="{{ cls.error }}"></error-ref> |
| </template> |
| |
| <hr> |
| |
| <div class="content"> |
| <template if="{{ cls.fields.isNotEmpty }}"> |
| fields ({{ cls.fields.length }}) |
| <curly-block expand="{{ cls.fields.length <= 8 }}"> |
| <div class="memberList"> |
| <template repeat="{{ field in cls.fields }}"> |
| <div class="memberItem"> |
| <div class="memberName"> |
| <field-ref ref="{{ field }}"></field-ref> |
| </div> |
| <div class="memberValue"> |
| <template if="{{ field.value != null }}"> |
| <any-service-ref ref="{{ field.value }}"></any-service-ref> |
| </template> |
| </div> |
| </div> |
| </template> |
| </div> |
| </curly-block><br><br> |
| </template> |
| |
| <template if="{{ cls.functions.isNotEmpty }}"> |
| functions ({{ cls.functions.length }}) |
| <curly-block expand="{{ cls.functions.length <= 8 }}"> |
| <div class="memberList"> |
| <template repeat="{{ function in cls.functions }}"> |
| <div class="memberItem"> |
| <div class="memberValue"> |
| <function-ref ref="{{ function }}" qualified="{{ false }}"> |
| </function-ref> |
| </div> |
| </div> |
| </template> |
| </div> |
| </curly-block><br><br> |
| </template> |
| |
| <template if="{{ !cls.hasNoAllocations }}"> |
| instances |
| <div class="memberItem"> |
| <div class="memberName">currently allocated</div> |
| <div class="memberValue"> |
| count {{ cls.newSpace.current.instances + cls.oldSpace.current.instances }} |
| (shallow size {{ cls.newSpace.current.bytes + cls.oldSpace.current.bytes | formatSize }}) |
| </div> |
| </div> |
| <div class="memberItem"> |
| <div class="memberName">strongly reachable</div> |
| <div class="memberValue"> |
| <template if="{{ instances == null }}"> |
| <eval-link callback="{{ reachable }}" |
| label="[find]" |
| expr="100"> |
| </eval-link> |
| </template> |
| <template if="{{ instances != null }}"> |
| sample |
| <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> |
| </template> |
| of total {{ instances['totalCount'] }} |
| </template> |
| </div> |
| </div> |
| <div class="memberItem"> |
| <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> |
| </template> |
| </div> |
| |
| <hr> |
| |
| <div class="content"> |
| <eval-box callback="{{ eval }}"></eval-box> |
| </div> |
| |
| <hr> |
| <script-inset script="{{ cls.script }}" |
| startPos="{{ cls.tokenPos }}" |
| endPos="{{ cls.endTokenPos }}"> |
| </script-inset> |
| |
| <br><br><br><br> |
| <br><br><br><br> |
| </template> |
| </polymer-element> |
| |
| <script type="application/dart" src="class_view.dart"></script> |