| Index: runtime/bin/vmservice/observatory/deployed/web/index_devtools.html
|
| diff --git a/runtime/bin/vmservice/observatory/deployed/web/index_devtools.html b/runtime/bin/vmservice/observatory/deployed/web/index_devtools.html
|
| deleted file mode 100644
|
| index 070f5782420b568d9f9d3ac22f66f86464caa2b8..0000000000000000000000000000000000000000
|
| --- a/runtime/bin/vmservice/observatory/deployed/web/index_devtools.html
|
| +++ /dev/null
|
| @@ -1,4897 +0,0 @@
|
| -<!DOCTYPE html><html style="height: 100%"><head>
|
| - <title>Dart VM Observatory</title>
|
| - <meta charset="utf-8">
|
| - <script src="packages/web_components/webcomponents.min.js"></script>
|
| -<script src="packages/web_components/dart_support.js"></script>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -</head>
|
| -<body style="height:100%"><div hidden=""><style shim-shadowdom="">
|
| -/*******************************
|
| - Flex Layout
|
| -*******************************/
|
| -
|
| -html /deep/ [layout][horizontal], html /deep/ [layout][vertical] {
|
| - display: -ms-flexbox;
|
| - display: -webkit-flex;
|
| - display: flex;
|
| -}
|
| -
|
| -html /deep/ [layout][horizontal][inline], html /deep/ [layout][vertical][inline] {
|
| - display: -ms-inline-flexbox;
|
| - display: -webkit-inline-flex;
|
| - display: inline-flex;
|
| -}
|
| -
|
| -html /deep/ [layout][horizontal] {
|
| - -ms-flex-direction: row;
|
| - -webkit-flex-direction: row;
|
| - flex-direction: row;
|
| -}
|
| -
|
| -html /deep/ [layout][horizontal][reverse] {
|
| - -ms-flex-direction: row-reverse;
|
| - -webkit-flex-direction: row-reverse;
|
| - flex-direction: row-reverse;
|
| -}
|
| -
|
| -html /deep/ [layout][vertical] {
|
| - -ms-flex-direction: column;
|
| - -webkit-flex-direction: column;
|
| - flex-direction: column;
|
| -}
|
| -
|
| -html /deep/ [layout][vertical][reverse] {
|
| - -ms-flex-direction: column-reverse;
|
| - -webkit-flex-direction: column-reverse;
|
| - flex-direction: column-reverse;
|
| -}
|
| -
|
| -html /deep/ [layout][wrap] {
|
| - -ms-flex-wrap: wrap;
|
| - -webkit-flex-wrap: wrap;
|
| - flex-wrap: wrap;
|
| -}
|
| -
|
| -html /deep/ [layout][wrap-reverse] {
|
| - -ms-flex-wrap: wrap-reverse;
|
| - -webkit-flex-wrap: wrap-reverse;
|
| - flex-wrap: wrap-reverse;
|
| -}
|
| -
|
| -html /deep/ [flex] {
|
| - -ms-flex: 1 1 0.000000001px;
|
| - -webkit-flex: 1;
|
| - flex: 1;
|
| - -webkit-flex-basis: 0.000000001px;
|
| - flex-basis: 0.000000001px;
|
| -}
|
| -
|
| -html /deep/ [vertical][layout] > [flex][auto-vertical], html /deep/ [vertical][layout]::shadow [flex][auto-vertical] {
|
| - -ms-flex: 1 1 auto;
|
| - -webkit-flex-basis: auto;
|
| - flex-basis: auto;
|
| -}
|
| -
|
| -html /deep/ [flex][auto] {
|
| - -ms-flex: 1 1 auto;
|
| - -webkit-flex-basis: auto;
|
| - flex-basis: auto;
|
| -}
|
| -
|
| -html /deep/ [flex][none] {
|
| - -ms-flex: none;
|
| - -webkit-flex: none;
|
| - flex: none;
|
| -}
|
| -
|
| -html /deep/ [flex][one] {
|
| - -ms-flex: 1;
|
| - -webkit-flex: 1;
|
| - flex: 1;
|
| -}
|
| -
|
| -html /deep/ [flex][two] {
|
| - -ms-flex: 2;
|
| - -webkit-flex: 2;
|
| - flex: 2;
|
| -}
|
| -
|
| -html /deep/ [flex][three] {
|
| - -ms-flex: 3;
|
| - -webkit-flex: 3;
|
| - flex: 3;
|
| -}
|
| -
|
| -html /deep/ [flex][four] {
|
| - -ms-flex: 4;
|
| - -webkit-flex: 4;
|
| - flex: 4;
|
| -}
|
| -
|
| -html /deep/ [flex][five] {
|
| - -ms-flex: 5;
|
| - -webkit-flex: 5;
|
| - flex: 5;
|
| -}
|
| -
|
| -html /deep/ [flex][six] {
|
| - -ms-flex: 6;
|
| - -webkit-flex: 6;
|
| - flex: 6;
|
| -}
|
| -
|
| -html /deep/ [flex][seven] {
|
| - -ms-flex: 7;
|
| - -webkit-flex: 7;
|
| - flex: 7;
|
| -}
|
| -
|
| -html /deep/ [flex][eight] {
|
| - -ms-flex: 8;
|
| - -webkit-flex: 8;
|
| - flex: 8;
|
| -}
|
| -
|
| -html /deep/ [flex][nine] {
|
| - -ms-flex: 9;
|
| - -webkit-flex: 9;
|
| - flex: 9;
|
| -}
|
| -
|
| -html /deep/ [flex][ten] {
|
| - -ms-flex: 10;
|
| - -webkit-flex: 10;
|
| - flex: 10;
|
| -}
|
| -
|
| -html /deep/ [flex][eleven] {
|
| - -ms-flex: 11;
|
| - -webkit-flex: 11;
|
| - flex: 11;
|
| -}
|
| -
|
| -html /deep/ [flex][twelve] {
|
| - -ms-flex: 12;
|
| - -webkit-flex: 12;
|
| - flex: 12;
|
| -}
|
| -
|
| -/* alignment in cross axis */
|
| -
|
| -html /deep/ [layout][start] {
|
| - -ms-flex-align: start;
|
| - -webkit-align-items: flex-start;
|
| - align-items: flex-start;
|
| -}
|
| -
|
| -html /deep/ [layout][center], html /deep/ [layout][center-center] {
|
| - -ms-flex-align: center;
|
| - -webkit-align-items: center;
|
| - align-items: center;
|
| -}
|
| -
|
| -html /deep/ [layout][end] {
|
| - -ms-flex-align: end;
|
| - -webkit-align-items: flex-end;
|
| - align-items: flex-end;
|
| -}
|
| -
|
| -/* alignment in main axis */
|
| -
|
| -html /deep/ [layout][start-justified] {
|
| - -ms-flex-pack: start;
|
| - -webkit-justify-content: flex-start;
|
| - justify-content: flex-start;
|
| -}
|
| -
|
| -html /deep/ [layout][center-justified], html /deep/ [layout][center-center] {
|
| - -ms-flex-pack: center;
|
| - -webkit-justify-content: center;
|
| - justify-content: center;
|
| -}
|
| -
|
| -html /deep/ [layout][end-justified] {
|
| - -ms-flex-pack: end;
|
| - -webkit-justify-content: flex-end;
|
| - justify-content: flex-end;
|
| -}
|
| -
|
| -html /deep/ [layout][around-justified] {
|
| - -ms-flex-pack: distribute;
|
| - -webkit-justify-content: space-around;
|
| - justify-content: space-around;
|
| -}
|
| -
|
| -html /deep/ [layout][justified] {
|
| - -ms-flex-pack: justify;
|
| - -webkit-justify-content: space-between;
|
| - justify-content: space-between;
|
| -}
|
| -
|
| -/* self alignment */
|
| -
|
| -html /deep/ [self-start] {
|
| - -ms-align-self: flex-start;
|
| - -webkit-align-self: flex-start;
|
| - align-self: flex-start;
|
| -}
|
| -
|
| -html /deep/ [self-center] {
|
| - -ms-align-self: center;
|
| - -webkit-align-self: center;
|
| - align-self: center;
|
| -}
|
| -
|
| -html /deep/ [self-end] {
|
| - -ms-align-self: flex-end;
|
| - -webkit-align-self: flex-end;
|
| - align-self: flex-end;
|
| -}
|
| -
|
| -html /deep/ [self-stretch] {
|
| - -ms-align-self: stretch;
|
| - -webkit-align-self: stretch;
|
| - align-self: stretch;
|
| -}
|
| -
|
| -/*******************************
|
| - Other Layout
|
| -*******************************/
|
| -
|
| -html /deep/ [block] {
|
| - display: block;
|
| -}
|
| -
|
| -/* ie support for hidden */
|
| -html /deep/ [hidden] {
|
| - display: none !important;
|
| -}
|
| -
|
| -html /deep/ [relative] {
|
| - position: relative;
|
| -}
|
| -
|
| -html /deep/ [fit] {
|
| - position: absolute;
|
| - top: 0;
|
| - right: 0;
|
| - bottom: 0;
|
| - left: 0;
|
| -}
|
| -
|
| -body[fullbleed] {
|
| - margin: 0;
|
| - height: 100vh;
|
| -}
|
| -
|
| -/*******************************
|
| - Other
|
| -*******************************/
|
| -
|
| -html /deep/ [segment], html /deep/ segment {
|
| - display: block;
|
| - position: relative;
|
| - -webkit-box-sizing: border-box;
|
| - -ms-box-sizing: border-box;
|
| - box-sizing: border-box;
|
| - margin: 1em 0.5em;
|
| - padding: 1em;
|
| - background-color: white;
|
| - -webkit-box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.1);
|
| - box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.1);
|
| - border-radius: 5px 5px 5px 5px;
|
| -}
|
| -
|
| -</style>
|
| -
|
| -<script src="packages/polymer/src/js/polymer/polymer.min.js"></script>
|
| -
|
| -<script>
|
| -// TODO(sigmund): remove this script tag (dartbug.com/19650). This empty
|
| -// script tag is necessary to work around a bug in Chrome 36.
|
| -</script>
|
| -
|
| -<!-- unminified for debugging:
|
| -<link rel="import" href="src/js/polymer/layout.html">
|
| -<script src="src/js/polymer/polymer.js"></script>
|
| --->
|
| -<script type="text/javascript" src="https://www.google.com/jsapi"></script><link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| -
|
| -
|
| -
|
| -<polymer-element name="curly-block">
|
| - <template>
|
| - <style>
|
| - .idle {
|
| - display: inline-block;
|
| - color: #0489c3;
|
| - cursor: pointer;
|
| - }
|
| - .busy {
|
| - display: inline-block;
|
| - color: white;
|
| - cursor: wait;
|
| - }
|
| - </style>
|
| - <template if="{{ expanded }}">
|
| - <template if="{{ busy }}">
|
| - {<div class="busy"> ⊟ </div>
|
| - <br>
|
| - <content></content>
|
| - }
|
| - </template>
|
| - <template if="{{ !busy }}">
|
| - {<a on-click="{{ toggleExpand }}"><div class="idle"> ⊟ </div></a>
|
| - <br>
|
| - <content></content>
|
| - }
|
| - </template>
|
| - </template>
|
| -
|
| - <template if="{{ !expanded }}">
|
| - <template if="{{ busy }}">
|
| - {<div class="busy"> ⊞ </div>}
|
| - </template>
|
| - <template if="{{ !busy }}">
|
| - {<a on-click="{{ toggleExpand }}"><div class="idle"> ⊞ </div></a>}
|
| - </template>
|
| - </template>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="observatory-element">
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="service-ref" extends="observatory-element">
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="any-service-ref" extends="observatory-element">
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="object-ref" extends="service-ref">
|
| - <template><link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <template if="{{ nameIsEmpty }}">
|
| - <a on-click="{{ goto }}" _href="{{ url }}"><em>{{ ref.vmType }}</em></a>
|
| - </template>
|
| - <template if="{{ !nameIsEmpty }}">
|
| - <a on-click="{{ goto }}" _href="{{ url }}"><em>{{ name }}</em></a>
|
| - </template>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -<polymer-element name="instance-ref" extends="service-ref">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/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>
|
| - <template if="{{ ref.isSentinel }}">
|
| - <div title="{{ hoverText }}">{{ ref.valueAsString }}</div>
|
| - </template>
|
| -
|
| - <template if="{{ ref.isBool || ref.isInt ||
|
| - ref.isDouble || ref.isNull }}">
|
| - <a on-click="{{ goto }}" _href="{{ url }}">{{ ref.valueAsString }}</a>
|
| - </template>
|
| -
|
| - <template if="{{ ref.isString }}">
|
| - <a on-click="{{ goto }}" _href="{{ url }}">{{ asStringLiteral(ref.valueAsString, ref.valueAsStringIsTruncated) }}</a>
|
| - </template>
|
| -
|
| -
|
| - <template if="{{ ref.isAbstractType }}">
|
| - <a on-click="{{ goto }}" _href="{{ url }}">{{ ref.name }}</a>
|
| - </template>
|
| -
|
| - <template if="{{ ref.isClosure }}">
|
| - <a on-click="{{ goto }}" _href="{{ url }}">
|
| - <!-- TODO(turnidge): Switch this to fully-qualified function -->
|
| - {{ ref.closureFunc.name }}
|
| - </a>
|
| - </template>
|
| -
|
| - <template if="{{ ref.isPlainInstance }}">
|
| - <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 }}">
|
| - <div class="memberItem">
|
| - <div class="memberName">
|
| - {{ field['decl'].name }}
|
| - </div>
|
| - <div class="memberValue">
|
| - <any-service-ref ref="{{ field['value'] }}"></any-service-ref>
|
| - </div>
|
| - </div>
|
| - </template>
|
| - </div>
|
| - </curly-block>
|
| - </template>
|
| -
|
| - <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 }}">
|
| - <div class="memberItem">
|
| - <div class="memberName">[{{ element['index']}}]</div>
|
| - <div class="memberValue">
|
| - <any-service-ref ref="{{ element['value'] }}"></any-service-ref>
|
| - </div>
|
| - </div>
|
| - </template>
|
| - </div>
|
| - </curly-block>
|
| - </template>
|
| -
|
| - <template if="{{ ref.isMirrorReference }}">
|
| - <a on-click="{{ goto }}" _href="{{ url }}"><em>{{ ref.clazz.name }}</em></a>
|
| - <curly-block callback="{{ expander() }}">
|
| - <div class="memberList">
|
| - <div class="memberItem">
|
| - <div class="memberName">referent</div>
|
| - <div class="memberValue">
|
| - <any-service-ref ref="{{ ref.referent }}"></any-service-ref>
|
| - </div>
|
| - </div>
|
| - </div>
|
| - </curly-block>
|
| - </template>
|
| -
|
| - <template if="{{ ref.isWeakProperty }}">
|
| - <a on-click="{{ goto }}" _href="{{ url }}"><em>{{ ref.clazz.name }}</em></a>
|
| - <curly-block callback="{{ expander() }}">
|
| - <div class="memberList">
|
| - <div class="memberItem">
|
| - <div class="memberName">key</div>
|
| - <div class="memberValue">
|
| - <any-service-ref ref="{{ ref.key }}"></any-service-ref>
|
| - </div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">value</div>
|
| - <div class="memberValue">
|
| - <any-service-ref ref="{{ ref.value }}"></any-service-ref>
|
| - </div>
|
| - </div>
|
| - </div>
|
| - </curly-block>
|
| - </template>
|
| - </span>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="action-link">
|
| - <template>
|
| - <style>
|
| - .idle {
|
| - color: #0489c3;
|
| - cursor: pointer;
|
| - text-decoration: none;
|
| - }
|
| - .idle:hover {
|
| - text-decoration: underline;
|
| - }
|
| - .busy {
|
| - color: #aaa;
|
| - cursor: wait;
|
| - text-decoration: none;
|
| - }
|
| - </style>
|
| -
|
| - <template if="{{ busy }}">
|
| - <span class="busy">[{{ label }}]</span>
|
| - </template>
|
| - <template if="{{ !busy }}">
|
| - <template if="{{ color == null }}">
|
| - <span class="idle"><a on-click="{{ doAction }}">[{{ label }}]</a></span>
|
| - </template>
|
| - <template if="{{ color != null }}">
|
| - <span class="idle" style="color:{{ color }}"><a on-click="{{ doAction }}">[{{ label }}]</a></span>
|
| - </template>
|
| - </template>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="nav-bar" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <style>
|
| - nav {
|
| - position: fixed;
|
| - width: 100%;
|
| - z-index: 1000;
|
| - }
|
| - nav ul {
|
| - display: inline-table;
|
| - position: relative;
|
| - list-style: none;
|
| - padding-left: 0;
|
| - margin-left: 0;
|
| - width: 100%;
|
| - z-index: 1000;
|
| - font: 400 16px 'Montserrat', sans-serif;
|
| - color: white;
|
| - background-color: #0489c3;
|
| - }
|
| - nav ul:after {
|
| - content: ""; clear: both; display: block;
|
| - }
|
| - .vertical-spacer {
|
| - height: 40px;
|
| - background-color: #0489c3;
|
| - }
|
| - </style>
|
| - <nav>
|
| - <ul>
|
| - <nav-notify events="{{ app.notifications }}"></nav-notify>
|
| - <content></content>
|
| - </ul>
|
| - </nav>
|
| - <div class="vertical-spacer">
|
| - </div>
|
| - <template if="{{ pad }}">
|
| - <br>
|
| - </template>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="nav-menu" extends="observatory-element">
|
| - <template>
|
| - <style>
|
| - .menu, .spacer {
|
| - float: left;
|
| - }
|
| - .menu a, .spacer {
|
| - display: block;
|
| - padding: 12px 8px;
|
| - color: White;
|
| - text-decoration: none;
|
| - }
|
| - .menu:hover {
|
| - background: #455;
|
| - }
|
| - .menu ul {
|
| - display: none;
|
| - position: absolute;
|
| - top: 98%;
|
| - list-style: none;
|
| - margin: 0;
|
| - padding: 0;
|
| - width: auto;
|
| - z-index: 1000;
|
| - font: 400 16px 'Montserrat', sans-serif;
|
| - color: white;
|
| - background: #567;
|
| - }
|
| - .menu ul:after {
|
| - content: ""; clear: both; display: block;
|
| - }
|
| - .menu:hover > ul {
|
| - display: block;
|
| - }
|
| - </style>
|
| -
|
| - <li class="menu">
|
| - <a on-click="{{ goto }}" _href="{{ gotoLink(link) }}">{{ anchor }}</a>
|
| - <ul><content></content></ul>
|
| - </li>
|
| - <template if="{{ !last }}">
|
| - <li class="spacer">></li>
|
| - </template>
|
| -
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="nav-menu-item" extends="observatory-element">
|
| - <template>
|
| - <style>
|
| - li {
|
| - float: none;
|
| - border-top: 1px solid #677;
|
| - border-bottom: 1px solid #556; position: relative;
|
| - }
|
| - li:hover {
|
| - background: #455;
|
| - }
|
| - li ul {
|
| - display: none;
|
| - position: absolute;
|
| - top:0;
|
| - left: 100%;
|
| - list-style: none;
|
| - padding: 0;
|
| - margin-left: 0;
|
| - width: auto;
|
| - z-index: 1000;
|
| - font: 400 16px 'Montserrat', sans-serif;
|
| - color: white;
|
| - background: #567;
|
| - }
|
| - li ul:after {
|
| - content: ""; clear: both; display: block;
|
| - }
|
| - li:hover > ul {
|
| - display: block;
|
| - }
|
| - li a {
|
| - display: block;
|
| - padding: 12px 12px;
|
| - color: white;
|
| - text-decoration: none;
|
| - }
|
| - </style>
|
| - <li><a on-click="{{ goto }}" _href="{{ gotoLink(link) }}">{{ anchor }}</a>
|
| - <ul><content></content></ul>
|
| - </li>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="nav-refresh" extends="observatory-element">
|
| - <template>
|
| - <style>
|
| - .active {
|
| - color: #aaa;
|
| - cursor: wait;
|
| - }
|
| - .idle {
|
| - color: #000;
|
| - }
|
| - li {
|
| - float: right;
|
| - margin: 0;
|
| - }
|
| - li button {
|
| - margin: 3px;
|
| - padding: 8px;
|
| - }
|
| - </style>
|
| - <li>
|
| - <template if="{{ active }}">
|
| - <button class="active" on-click="{{ buttonClick }}">{{ label }}</button>
|
| - </template>
|
| - <template if="{{ !active }}">
|
| - <button class="idle" on-click="{{ buttonClick }}">{{ label }}</button>
|
| - </template>
|
| - </li>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="nav-control" extends="observatory-element">
|
| - <template>
|
| - <style>
|
| - .black {
|
| - color: #000;
|
| - }
|
| - li {
|
| - float: right;
|
| - margin: 0;
|
| - }
|
| - button {
|
| - margin: 3px;
|
| - padding: 8px;
|
| - }
|
| - </style>
|
| - <!-- Disable until issues with history in Dartium are fixed
|
| - <li>
|
| - <button class="black" on-click="{{ back }}">◀</button>
|
| - <button class="black" on-click="{{ forward }}">▶</button>
|
| - </li>
|
| - -->
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="top-nav-menu">
|
| - <template>
|
| - <nav-menu link="/vm" anchor="Observatory" last="{{ last }}">
|
| - <nav-menu-item link="/vm-connect/" anchor="Connect to a different VM"></nav-menu-item>
|
| - <content></content>
|
| - </nav-menu>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="isolate-nav-menu" extends="observatory-element">
|
| - <template>
|
| - <nav-menu link="{{ hashLinkWorkaround }}" anchor="{{ isolate.name }}" last="{{ last }}">
|
| - <nav-menu-item link="{{ '/debugger' + isolate.link }}" anchor="debugger"></nav-menu-item>
|
| - <nav-menu-item link="{{ isolate.relativeLink('profile') }}" anchor="cpu profile"></nav-menu-item>
|
| - <nav-menu-item link="{{ isolate.relativeLink('allocationprofile') }}" anchor="allocation profile"></nav-menu-item>
|
| - <nav-menu-item link="{{ isolate.relativeLink('heapmap') }}" anchor="heap map"></nav-menu-item>
|
| - <nav-menu-item link="{{ isolate.relativeLink('debug/breakpoints') }}" anchor="breakpoints"></nav-menu-item>
|
| - <content></content>
|
| - </nav-menu>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="library-nav-menu" extends="observatory-element">
|
| - <template>
|
| - <nav-menu link="{{ library.link }}" anchor="{{ library.name }}" last="{{ last }}">
|
| - <content></content>
|
| - </nav-menu>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="class-nav-menu" extends="observatory-element">
|
| - <template>
|
| - <nav-menu link="{{ cls.link }}" anchor="{{ cls.name }}" last="{{ last }}">
|
| - <content></content>
|
| - </nav-menu>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="nav-notify" extends="observatory-element">
|
| - <template>
|
| - <style>
|
| - .menu {
|
| - float: right;
|
| - }
|
| - .menu .list {
|
| - display: block;
|
| - position: absolute;
|
| - top: 98%;
|
| - right: 0;
|
| - margin: 0;
|
| - padding: 0;
|
| - width: auto;
|
| - z-index: 1000;
|
| - font: 400 12px 'Montserrat', sans-serif;
|
| - color: white;
|
| - background: none;
|
| - }
|
| - </style>
|
| -
|
| - <div class="menu">
|
| - <div class="list">
|
| - <template repeat="{{ event in events }}">
|
| - <nav-notify-item events="{{ events }}" event="{{ event }}">
|
| - </nav-notify-item>
|
| - </template>
|
| - </div>
|
| - </div>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="nav-notify-item" extends="observatory-element">
|
| - <template>
|
| - <style>
|
| - .item {
|
| - position: relative;
|
| - padding: 16px;
|
| - margin-top: 10px;
|
| - margin-right: 10px;
|
| - padding-right: 25px;
|
| - width: 200px;
|
| - color: #ddd;
|
| - background: rgba(0,0,0,.6);
|
| - border: solid 2px white;
|
| - box-shadow: 0 0 5px black;
|
| - border-radius: 5px;
|
| - animation: fadein 1s;
|
| - }
|
| -
|
| - @keyframes fadein {
|
| - from { opacity: 0; }
|
| - to { opacity: 1; }
|
| - }
|
| -
|
| - a.link {
|
| - color: white;
|
| - text-decoration: none;
|
| - }
|
| - a.link:hover {
|
| - text-decoration: underline;
|
| - }
|
| -
|
| - a.boxclose {
|
| - position: absolute;
|
| - display: block;
|
| - top: 4px;
|
| - right: 4px;
|
| - height: 18px;
|
| - width: 18px;
|
| - line-height: 16px;
|
| - border-radius: 9px;
|
| - color: white;
|
| - font-size: 18px;
|
| - cursor: pointer;
|
| - text-align: center;
|
| - }
|
| - a.boxclose:hover {
|
| - background: rgba(255,255,255,0.5);
|
| - }
|
| - </style>
|
| - <template if="{{ event.eventType == 'IsolateInterrupted' ||
|
| - event.eventType == 'BreakpointReached' ||
|
| - event.eventType == 'ExceptionThrown' }}">
|
| - <div class="item">
|
| - Isolate
|
| - <a class="link" on-click="{{ goto }}" _href="{{ event.isolate.link }}">{{ event.isolate.name }}</a>
|
| - is paused
|
| - <template if="{{ event.breakpoint != null }}">
|
| - at breakpoint
|
| - </template>
|
| - <template if="{{ event.eventType == 'ExceptionThrown' }}">
|
| - at exception
|
| - </template>
|
| -
|
| - <br><br>
|
| - <action-link callback="{{ resume }}" label="resume" color="white">
|
| - </action-link>
|
| - <action-link callback="{{ stepInto }}" label="step" color="white">
|
| - </action-link>
|
| - <action-link callback="{{ stepOver }}" label="step over" color="white"></action-link>
|
| - <action-link callback="{{ stepOut }}" label="step out" color="white"></action-link>
|
| - <a class="boxclose" on-click="{{ closeItem }}">×</a>
|
| - </div>
|
| - </template>
|
| - <template if="{{ event.eventType == 'VMDisconnected' }}">
|
| - <div class="item">
|
| - Disconnected from VM
|
| - <br><br>
|
| - <a class="boxclose" on-click="{{ closeItem }}">×</a>
|
| - </div>
|
| - </template>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="breakpoint-list" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <nav-bar>
|
| - <top-nav-menu></top-nav-menu>
|
| - <isolate-nav-menu isolate="{{ msg.isolate }}"></isolate-nav-menu>
|
| - <nav-menu link="{{ gotoLink(msg.isolate.relativeLink('debug/breakpoints')) }}" anchor="breakpoints" last="{{ true }}"></nav-menu>
|
| - <nav-refresh callback="{{ refresh }}"></nav-refresh>
|
| - <nav-control></nav-control>
|
| - </nav-bar>
|
| - <template if="{{ msg['breakpoints'].isEmpty }}">
|
| - <div>
|
| - <div>No breakpoints</div>
|
| - </div>
|
| - </template>
|
| - <template if="{{ msg['breakpoints'].isNotEmpty }}">
|
| - <ul class="list-group">
|
| - <template repeat="{{ bpt in msg['breakpoints'] }}">
|
| - <li class="list-group-item">
|
| - {{ bpt }}
|
| - </li>
|
| - </template>
|
| - </ul>
|
| - </template>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="class-ref" extends="service-ref">
|
| - <template><link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css"><span><a on-click="{{ goto }}" title="{{ hoverText }}" _href="{{ url }}">{{ name }}</a></span></template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="class-tree" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <style>
|
| - .table {
|
| - border-collapse: collapse!important;
|
| - width: 100%;
|
| - margin-bottom: 20px
|
| - }
|
| - .table thead > tr > th,
|
| - .table tbody > tr > th,
|
| - .table tfoot > tr > th,
|
| - .table thead > tr > td,
|
| - .table tbody > tr > td,
|
| - .table tfoot > tr > td {
|
| - padding: 8px;
|
| - vertical-align: top;
|
| - }
|
| - .table thead > tr > th {
|
| - vertical-align: bottom;
|
| - text-align: left;
|
| - border-bottom:2px solid #ddd;
|
| - }
|
| -
|
| - tr:hover > td {
|
| - background-color: #FFF3E3;
|
| - }
|
| - .rowColor0 {
|
| - background-color: #FFE9CC;
|
| - }
|
| - .rowColor1 {
|
| - background-color: #FFDEB2;
|
| - }
|
| - .rowColor2 {
|
| - background-color: #FFD399;
|
| - }
|
| - .rowColor3 {
|
| - background-color: #FFC87F;
|
| - }
|
| - .rowColor4 {
|
| - background-color: #FFBD66;
|
| - }
|
| - .rowColor5 {
|
| - background-color: #FFB24C;
|
| - }
|
| - .rowColor6 {
|
| - background-color: #FFA733;
|
| - }
|
| - .rowColor7 {
|
| - background-color: #FF9C19;
|
| - }
|
| - .rowColor8 {
|
| - background-color: #FF9100;
|
| - }
|
| -
|
| - .tooltip {
|
| - display: block;
|
| - position: absolute;
|
| - visibility: hidden;
|
| - opacity: 0;
|
| - transition: visibility 0s linear 0.5s;
|
| - transition: opacity .4s ease-in-out;
|
| - }
|
| -
|
| - tr:hover .tooltip {
|
| - display: block;
|
| - position: absolute;
|
| - top: 100%;
|
| - right: 100%;
|
| - visibility: visible;
|
| - z-index: 999;
|
| - width: 400px;
|
| - color: #ffffff;
|
| - background-color: #0489c3;
|
| - border-top-right-radius: 8px;
|
| - border-top-left-radius: 8px;
|
| - border-bottom-right-radius: 8px;
|
| - border-bottom-left-radius: 8px;
|
| - transition: visibility 0s linear 0.5s;
|
| - transition: opacity .4s ease-in-out;
|
| - opacity: 1;
|
| - }
|
| -
|
| - .white {
|
| - color: #ffffff;
|
| - }
|
| - </style>
|
| - <nav-bar>
|
| - <top-nav-menu last="{{ true }}"></top-nav-menu>
|
| - <nav-control></nav-control>
|
| - </nav-bar>
|
| - <div class="content-centered">
|
| - <h1>Class Hierarchy</h1>
|
| - <table id="tableTree" class="table">
|
| - <thead>
|
| - <tr>
|
| - <th>Class</th>
|
| - </tr>
|
| - </thead>
|
| - <tbody>
|
| - <tr template="" repeat="{{row in tree.rows }}">
|
| - <td on-click="{{toggleExpanded}}" class="{{ coloring(row) }}" style="{{ padding(row) }}">
|
| - <span id="expand" style="{{ row.expanderStyle }}">{{ row.expander }}</span>
|
| - <class-ref ref="{{ row.cls }}"></class-ref>
|
| - </td>
|
| - </tr>
|
| - </tbody>
|
| - </table>
|
| - </div>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="error-ref" extends="service-ref">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/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>
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="eval-box" extends="observatory-element">
|
| - <template>
|
| - <style>
|
| - .textbox {
|
| - flex-grow: 1;
|
| - font: 400 16px 'Montserrat', sans-serif;
|
| - }
|
| - .bigtextbox {
|
| - font: 400 16px 'Montserrat', sans-serif;
|
| - }
|
| - .button {
|
| - font: 400 16px 'Montserrat', sans-serif;
|
| - }
|
| - .radios {
|
| - display: inline;
|
| - padding-right: 30px;
|
| - }
|
| - .radios label{
|
| - padding-left: 10px;
|
| - }
|
| - .historyExpr, .historyValue {
|
| - vertical-align: text-top;
|
| - font: 400 14px 'Montserrat', sans-serif;
|
| - }
|
| - .historyExpr a {
|
| - display: block;
|
| - color: black;
|
| - text-decoration: none;
|
| - padding: 6px 6px;
|
| - cursor: pointer;
|
| - white-space: pre-line;
|
| - }
|
| - .historyExpr a:hover {
|
| - background-color: #fff3e3;
|
| - }
|
| - .historyValue {
|
| - display: block;
|
| - padding: 6px 6px;
|
| - }
|
| - </style>
|
| - <form style="display:flex; flex-direction:row; align-items:flex-end">
|
| - <template if="{{ lineMode == '1-line' }}">
|
| - <input class="textbox" type="text" value="{{ text }}">
|
| - </template>
|
| - <template if="{{ lineMode == 'N-line' }}">
|
| - <textarea class="bigtextbox" rows="5" cols="80" value="{{ text }}"></textarea>
|
| - </template>
|
| -
|
| - <input class="button" type="submit" value="Evaluate" on-click="{{ eval }}">
|
| - <div class="radios" on-change="{{ updateLineMode }}">
|
| - <label for="1-line">
|
| - <input type="radio" name="lineMode" value="1-line" checked="">
|
| - 1-line
|
| - </label>
|
| - <label for="N-line">
|
| - <input type="radio" name="lineMode" value="N-line">
|
| - N-line
|
| - </label>
|
| - </div>
|
| - </form>
|
| -
|
| - <br>
|
| - <template if="{{ results.isNotEmpty }}">
|
| - <table>
|
| - <tbody><tr template="" repeat="{{ result in results }}">
|
| - <td class="historyExpr">
|
| - <a class="expr" on-click="{{ selectExpr }}" expr="{{ result['expr'] }}">{{ result['expr'] }}</a>
|
| - </td>
|
| - <td class="historyValue">
|
| - <template if="{{ result['value'] == null }}">
|
| - <div style="color:#aaa;cursor:wait;"><pending></div>
|
| - </template>
|
| - <template if="{{ result['value'] != null }}">
|
| - <any-service-ref ref="{{ result['value'] }}"></any-service-ref>
|
| - </template>
|
| - </td>
|
| - </tr>
|
| - </tbody></table>
|
| - </template>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="eval-link">
|
| - <template>
|
| - <style>
|
| - .idle {
|
| - color: #0489c3;
|
| - cursor: pointer;
|
| - }
|
| - .busy {
|
| - color: #aaa;
|
| - cursor: wait;
|
| - }
|
| - </style>
|
| -
|
| - <template if="{{ busy }}">
|
| - <span class="busy">{{ label }}</span>
|
| - </template>
|
| - <template if="{{ !busy }}">
|
| - <span class="idle"><a on-click="{{ evalNow }}">{{ label }}</a></span>
|
| - </template>
|
| - <template if="{{ result != null }}">
|
| - = <any-service-ref ref="{{ result }}"></any-service-ref>
|
| - </template>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="field-ref" extends="service-ref">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <span>
|
| - <template if="{{ ref.isStatic] }}">static</template>
|
| - <template if="{{ ref.isFinal }}">final</template>
|
| - <template if="{{ ref.isConst }}">const</template>
|
| - <template if="{{ (ref.declaredType.name == 'dynamic' &&
|
| - !ref.isFinal && !ref.isConst) }}">
|
| - var
|
| - </template>
|
| - <template if="{{ (ref.declaredType.name != 'dynamic') }}">
|
| - <instance-ref ref="{{ ref.declaredType }}"></instance-ref>
|
| - </template>
|
| - <a on-click="{{ goto }}" title="{{ hoverText }}" _href="{{ url }}">{{ name }}</a>
|
| - </span>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="function-ref" extends="service-ref">
|
| - <template><link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css"><!-- These comments are here to allow newlines.
|
| - --><template if="{{ ref.isDart }}"><!--
|
| - --><template if="{{ qualified && ref.parent == null && ref.owningClass != null }}"><!--
|
| - --><class-ref ref="{{ ref.owningClass] }}"></class-ref>.</template><!--
|
| - --><template if="{{ qualified && ref.parent != null }}"><!--
|
| - --><function-ref ref="{{ ref.parent }}" qualified="{{ true }}">
|
| - </function-ref>.<!--
|
| - --></template><a on-click="{{ goto }}" _href="{{ url }}">{{ name }}</a><!--
|
| - --></template><template if="{{ !ref.isDart }}"><span> {{ name }}</span></template></template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="library-ref" extends="service-ref">
|
| - <template><link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <template if="{{ nameIsEmpty }}">
|
| - <a on-click="{{ goto }}" _href="{{ url }}">unnamed</a>
|
| - </template>
|
| - <template if="{{ !nameIsEmpty }}">
|
| - <a on-click="{{ goto }}" _href="{{ url }}">{{ name }}</a>
|
| - </template>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="script-inset" extends="observatory-element">
|
| - <template>
|
| - <style>
|
| - .sourceInset {
|
| - }
|
| - .sourceBox {
|
| - background-color: #f5f5f5;
|
| - border: 1px solid #ccc;
|
| - padding: 10px;
|
| - overflow-y: auto;
|
| - }
|
| - .sourceTable {
|
| - display: table;
|
| - }
|
| - .sourceRow {
|
| - display: table-row;
|
| - }
|
| - .sourceItem, .sourceItemCurrent {
|
| - display: table-cell;
|
| - vertical-align: top;
|
| - font: 400 14px consolas, courier, monospace;
|
| - line-height: 125%;
|
| - white-space: pre;
|
| - }
|
| - .sourceItemCurrent {
|
| - background-color: #6cf;
|
| - }
|
| - .hitsNone, .hitsNotExecuted, .hitsExecuted {
|
| - min-width: 32px;
|
| - text-align: right;
|
| - }
|
| - .hitsNotExecuted {
|
| - background-color: #e66;
|
| - }
|
| - .hitsExecuted {
|
| - background-color: #6d6;
|
| - }
|
| - </style>
|
| - <div class="sourceInset">
|
| - <content></content>
|
| - <div class="sourceBox" style="max-height:{{height}}">
|
| - <div class="sourceTable">
|
| - <template if="{{ linesReady }}">
|
| - <template repeat="{{ line in lines }}">
|
| - <div class="sourceRow" id="{{ makeLineId(line.line) }}">
|
| - <breakpoint-toggle line="{{ line }}"></breakpoint-toggle>
|
| -
|
| - <div class="sourceItem"> </div>
|
| -
|
| - <template if="{{ line.hits == null ||
|
| - line.hits < 0 }}">
|
| - <div class="hitsNone">{{ line.line }}</div>
|
| - </template>
|
| - <template if="{{ line.hits == 0 }}">
|
| - <div class="hitsNotExecuted">{{ line.line }}</div>
|
| - </template>
|
| - <template if="{{ line.hits > 0 }}">
|
| - <div class="hitsExecuted">{{ line.line }}</div>
|
| - </template>
|
| -
|
| - <div class="sourceItem"> </div>
|
| -
|
| - <template if="{{ line.line == currentLine }}">
|
| - <div class="sourceItemCurrent">{{line.text}}</div>
|
| - </template>
|
| - <template if="{{ line.line != currentLine }}">
|
| - <div class="sourceItem">{{line.text}}</div>
|
| - </template>
|
| - </div>
|
| - </template>
|
| - </template>
|
| -
|
| - <template if="{{ !linesReady }}">
|
| - <div class="sourceRow">
|
| - <div class="sourceItem">loading...</div>
|
| - </div>
|
| - </template>
|
| - </div>
|
| - </div>
|
| - </div>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="breakpoint-toggle" extends="observatory-element">
|
| - <template>
|
| - <style>
|
| - .emptyBreakpoint, .possibleBreakpoint, .busyBreakpoint, .unresolvedBreakpoint, .resolvedBreakpoint {
|
| - display: table-cell;
|
| - vertical-align: top;
|
| - font: 400 14px consolas, courier, monospace;
|
| - min-width: 1em;
|
| - text-align: center;
|
| - cursor: pointer;
|
| - }
|
| - .possibleBreakpoint {
|
| - color: #e0e0e0;
|
| - }
|
| - .possibleBreakpoint:hover {
|
| - color: white;
|
| - background-color: #777;
|
| - }
|
| - .busyBreakpoint {
|
| - color: white;
|
| - background-color: black;
|
| - cursor: wait;
|
| - }
|
| - .unresolvedBreakpoint {
|
| - color: white;
|
| - background-color: #cac;
|
| - }
|
| - .resolvedBreakpoint {
|
| - color: white;
|
| - background-color: #e66;
|
| - }
|
| - </style>
|
| -
|
| - <template if="{{ line.possibleBpt && busy}}">
|
| - <div class="busyBreakpoint">B</div>
|
| - </template>
|
| -
|
| - <template if="{{ line.bpt == null && !line.possibleBpt }}">
|
| - <div class="emptyBreakpoint"> </div>
|
| - </template>
|
| -
|
| - <template if="{{ line.bpt == null && line.possibleBpt && !busy}}">
|
| - <div class="possibleBreakpoint">
|
| - <a on-click="{{ toggleBreakpoint }}">B</a>
|
| - </div>
|
| - </template>
|
| -
|
| - <template if="{{ line.bpt != null && !line.bpt['resolved'] && !busy}}">
|
| - <div class="unresolvedBreakpoint">
|
| - <a on-click="{{ toggleBreakpoint }}">B</a>
|
| - </div>
|
| - </template>
|
| -
|
| - <template if="{{ line.bpt != null && line.bpt['resolved'] && !busy}}">
|
| - <div class="resolvedBreakpoint">
|
| - <a on-click="{{ toggleBreakpoint }}">B</a>
|
| - </div>
|
| - </template>
|
| -
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="script-ref" extends="service-ref">
|
| -<template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <a on-click="{{ goto }}" title="{{ hoverText }}" _href="{{ url }}">{{ name }}</a>
|
| -</template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="class-view" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/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>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="code-ref" extends="service-ref">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <template if="{{ code.isDartCode }}">
|
| - <template if="{{ code.isOptimized }}">
|
| - <a on-click="{{ goto }}" _href="{{ url }}">*{{ name }}</a>
|
| - </template>
|
| - <template if="{{ !code.isOptimized }}">
|
| - <a on-click="{{ goto }}" _href="{{ url }}">{{ name }}</a>
|
| - </template>
|
| - </template>
|
| - <template if="{{ !code.isDartCode }}">
|
| - <span>{{ name }}</span>
|
| - </template>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="code-view" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <style>
|
| - div.flex-row:hover {
|
| - background-color: #FFF3E3;
|
| - }
|
| -
|
| - .highlight {
|
| - background-color: #FFF3E3;
|
| - }
|
| -
|
| - .tooltip {
|
| - display: block;
|
| - position: absolute;
|
| - visibility: hidden;
|
| - opacity: 0;
|
| - transition: visibility 0s linear 0.5s;
|
| - transition: opacity .4s ease-in-out;
|
| - }
|
| -
|
| - .flex-row:hover .tooltip {
|
| - display: block;
|
| - position: absolute;
|
| - top: 100%;
|
| - visibility: visible;
|
| - z-index: 999;
|
| - width: auto;
|
| - min-width: 400px;
|
| - color: #ffffff;
|
| - background-color: #FFF3E3;
|
| - border-bottom-right-radius: 8px;
|
| - border-bottom-left-radius: 8px;
|
| - transition: visibility 0s linear 0.5s;
|
| - transition: opacity .4s ease-in-out;
|
| - opacity: 1;
|
| - }
|
| -
|
| - .descriptor-address {
|
| - color: #0489c3;
|
| - }
|
| -
|
| - .snippet {
|
| - text-align: center;
|
| - margin-left: 10px;
|
| - margin-right: 10px;
|
| - }
|
| -
|
| - </style>
|
| - <nav-bar>
|
| - <top-nav-menu></top-nav-menu>
|
| - <isolate-nav-menu isolate="{{ code.isolate }}"></isolate-nav-menu>
|
| - <nav-menu link="{{ code.link }}" anchor="{{ code.name }}" last="{{ true }}"></nav-menu>
|
| - <nav-refresh callback="{{ refresh }}"></nav-refresh>
|
| - <nav-control></nav-control>
|
| - </nav-bar>
|
| - <div class="content">
|
| - <template if="{{ code.isDartCode && code.isOptimized }}">
|
| - <h1>Optimized code for {{ code.name }}</h1>
|
| - </template>
|
| - <template if="{{ !(code.isDartCode && code.isOptimized) }}">
|
| - <h1>Code for {{ code.name }}</h1>
|
| - </template>
|
| - <div class="memberList">
|
| - <div class="memberItem">
|
| - <div class="memberName">Kind</div>
|
| - <div class="memberValue">{{code.kind}}</div>
|
| - </div>
|
| - <template if="{{ code.isDartCode }}">
|
| - <div class="memberItem">
|
| - <div class="memberName">Optimized</div>
|
| - <div class="memberValue">{{code.isOptimized}}</div>
|
| - </div>
|
| - </template>
|
| - <div class="memberItem">
|
| - <div class="memberName">Function</div>
|
| - <div class="memberValue">
|
| - <function-ref ref="{{code.function}}">
|
| - </function-ref>
|
| - </div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">Inclusive</div>
|
| - <div class="memberValue">{{ code.formattedInclusiveTicks }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">Exclusive</div>
|
| - <div class="memberValue">{{ code.formattedExclusiveTicks }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">Constant object pool</div>
|
| - <div class="memberValue">
|
| - <any-service-ref ref="{{ code.objectPool }}"></any-service-ref>
|
| - </div>
|
| - </div>
|
| - </div>
|
| - </div>
|
| - <hr>
|
| - <div class="content">
|
| - <template if="{{ code.hasDisassembly }}">
|
| - <div class="flex-row">
|
| - <div class="flex-item-fixed-2-12 memberHeader">Inclusive</div>
|
| - <div class="flex-item-fixed-2-12 memberHeader">Exclusive</div>
|
| - <div class="flex-item-fixed-2-12 memberHeader">Address</div>
|
| - <div class="flex-item-fixed-6-12 memberHeader">Disassembly</div>
|
| - </div>
|
| - </template>
|
| - <template repeat="{{ instruction in code.instructions }}">
|
| - <div class="flex-row" on-mouseover="{{ mouseOver }}" on-mouseout="{{ mouseOut }}" data-jump-target="{{ instruction.jumpTarget.address }}" id="addr-{{ instruction.address }}" style="position: relative">
|
| - <template if="{{ instruction.isComment }}">
|
| - <div class="flex-item-fixed-2-12 monospace">{{ instruction.formattedInclusive(code) }}</div>
|
| - <div class="flex-item-fixed-2-12 monospace">{{ instruction.formattedExclusive(code) }}</div>
|
| - <div class="flex-item-fixed-8-12 monospace">{{ instruction.human }}</div>
|
| - </template>
|
| - <template if="{{ !instruction.isComment }}">
|
| - <div class="flex-item-fixed-2-12 monospace">{{ instruction.formattedInclusive(code) }}</div>
|
| - <div class="flex-item-fixed-2-12 monospace">{{ instruction.formattedExclusive(code) }}</div>
|
| - <template if="{{ instruction.hasDescriptors }}">
|
| - <div class="flex-item-fixed-2-12 monospace descriptor-address">
|
| - <div class="tooltip">
|
| - <template repeat="{{ descriptor in instruction.descriptors }}">
|
| - <div class="memberList">
|
| - <div class="memberItem">
|
| - <div class="memberName">Kind</div>
|
| - <div class="memberValue">{{ descriptor.kind }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">Deoptimization ID</div>
|
| - <div class="memberValue">{{ descriptor.formattedDeoptId() }}</div>
|
| - </div>
|
| - <template if="{{ descriptor.script != null }}">
|
| - <div class="memberItem">
|
| - <div class="memberName">Script</div>
|
| - <div class="memberValue"><script-ref ref="{{ descriptor.script }}" pos="{{ descriptor.tokenPos }}"></script-ref></div>
|
| - </div>
|
| - </template>
|
| - </div>
|
| - <template if="{{ descriptor.script != null }}">
|
| - <div class="snippet monospace">
|
| - <span>{{ descriptor.formattedLine }}</span>
|
| - </div>
|
| - </template>
|
| - </template>
|
| - </div>
|
| - {{ instruction.formattedAddress() }}
|
| - </div>
|
| - </template>
|
| - <template if="{{ !instruction.hasDescriptors }}">
|
| - <div class="flex-item-fixed-2-12 monospace">
|
| - {{ instruction.formattedAddress() }}
|
| - </div>
|
| - </template>
|
| - <div class="flex-item-fixed-6-12 monospace">
|
| - {{ instruction.human }}
|
| - </div>
|
| - </template>
|
| - </div>
|
| - </template>
|
| - </div>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<!-- TODO(turnidge): Use core-icon once core_elements work properly in
|
| - devtools -->
|
| -<polymer-element name="icon-expand-less" noscript="">
|
| - <template>
|
| - <svg width="24" height="24">
|
| - <polygon points="12,8 6,14 7.4,15.4 12,10.8 16.6,15.4 18,14 "></polygon>
|
| - </svg>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="icon-expand-more" noscript="">
|
| - <template>
|
| - <svg width="24" height="24">
|
| - <polygon points="16.6,8.6 12,13.2 7.4,8.6 6,10 12,16 18,10 "></polygon>
|
| - </svg>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="debugger-page" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <style>
|
| - .container {
|
| - height: 100%;
|
| - display: flex;
|
| - flex-direction: column;
|
| - justify-content: space-between;
|
| - }
|
| - nav-bar {
|
| - flex: 0 0 auto;
|
| - }
|
| - .stack {
|
| - flex: 0 0 auto;
|
| - overflow-y: auto;
|
| - }
|
| - core-splitter {
|
| - flex: 0 0 auto;
|
| - }
|
| - .console {
|
| - flex: 1 1 auto;
|
| - overflow-y: auto;
|
| - }
|
| - .commandline {
|
| - flex: 0 0 auto;
|
| - }
|
| - </style>
|
| -
|
| - <div class="container">
|
| - <nav-bar>
|
| - <top-nav-menu last="{{ true }}"></top-nav-menu>
|
| - <isolate-nav-menu isolate="{{ isolate }}" last="{{ true }}">
|
| - </isolate-nav-menu>
|
| - <nav-control></nav-control>
|
| - </nav-bar>
|
| -
|
| - <div id="stack" class="stack">
|
| - <debugger-stack isolate="{{ isolate }}"></debugger-stack>
|
| - </div>
|
| - <!--
|
| - <core-splitter direction="up" allowOverflow=true></core-splitter>
|
| - <div class="console">
|
| - <debugger-console isolate="{{ isolate }}"></debugger-console>
|
| - </div>
|
| - <div class="commandline">
|
| - <debugger-input isolate="{{ isolate }}"></debugger-input>
|
| - </div>
|
| - -->
|
| - </div>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="debugger-stack" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <template if="{{ stack == null }}">
|
| - Loading stack frames
|
| - </template>
|
| - <template if="{{ stack != null }}">
|
| - <ul class="list-group">
|
| - <template repeat="{{ frame in stack['members'] }}">
|
| - <li class="list-group-item">
|
| - <debugger-frame frame="{{ frame }}" expand="{{ frame['depth'] == activeFrame }}">
|
| - </debugger-frame>
|
| - </li>
|
| - </template>
|
| - </ul>
|
| - </template>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -<polymer-element name="debugger-frame" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <style>
|
| - .frameOuter {
|
| - position: relative;
|
| - padding: 5px;
|
| - border: 1px solid white;
|
| - }
|
| - .frameOuter:hover {
|
| - border: 1px solid #e0e0e0;
|
| - }
|
| - .shadow {
|
| - box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.16),
|
| - 0 2px 5px 0 rgba(0, 0, 0, 0.26);
|
| - }
|
| - .frameSummaryText {
|
| - display: inline-block;
|
| - padding: 5px;
|
| - }
|
| - .frameId {
|
| - display: inline-block;
|
| - width: 60px;
|
| - }
|
| - .frameOuter .frameExpander {
|
| - position: absolute;
|
| - right: 5px;
|
| - top: 5px;
|
| - display: none;
|
| - }
|
| - .frameOuter:hover .frameExpander{
|
| - display: inline-block;
|
| - }
|
| - .frameContractor {
|
| - position: absolute;
|
| - right: 5px;
|
| - bottom: 5px;
|
| - display: inline-block;
|
| - }
|
| - </style>
|
| - <div id="frameOuter" class="frameOuter">
|
| - <a on-click="{{ toggleExpand }}">
|
| - <div class="frameSummary">
|
| - <div class="frameSummaryText">
|
| - <div class="frameId"><b>frame {{ frame['depth'] }}</b></div>
|
| - <function-ref ref="{{ frame['function'] }}"></function-ref>
|
| - ( <script-ref ref="{{ frame['script'] }}" pos="{{ frame['tokenPos'] }}">
|
| - </script-ref> )
|
| - </div>
|
| - <template if="{{ !expanded }}">
|
| - <div class="frameExpander">
|
| - <icon-expand-more></icon-expand-more>
|
| - </div>
|
| - </template>
|
| - </div>
|
| - </a>
|
| -
|
| - <template if="{{expanded}}">
|
| - <div class="frameDetails">
|
| - <div class="flex-row">
|
| - <div class="flex-item-60-percent">
|
| - <script-inset height="{{ scriptHeight }}" script="{{ frame['function'].script }}" startpos="{{ frame['function'].tokenPos }}" endpos="{{ frame['function'].endTokenPos }}" currentpos="{{ frame['tokenPos'] }}">
|
| - </script-inset>
|
| - </div>
|
| - <div class="flex-item-40-percent">
|
| - <div style="padding:10px;" class="memberList">
|
| - <template repeat="{{ v in frame['vars'] }}">
|
| - <div class="memberItem">
|
| - <div class="memberName">{{ v['name']}}</div>
|
| - <div class="memberValue">
|
| - <any-service-ref ref="{{ v['value'] }}">
|
| - </any-service-ref>
|
| - </div>
|
| - </div>
|
| - </template>
|
| - </div>
|
| - </div>
|
| - </div>
|
| - <!-- TODO(turnidge): Add eval box here? -->
|
| - <div class="frameContractor">
|
| - <template if="{{expanded}}">
|
| - <a on-click="{{ toggleExpand }}">
|
| - <icon-expand-less></icon-expand-less>
|
| - </a>
|
| - </template>
|
| - </div>
|
| - </div>
|
| - </template>
|
| - </div>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="debugger-console" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <style>
|
| - .textBox {
|
| - position: absolute;
|
| - bottom: 0px;
|
| - width: 100%;
|
| - }
|
| - </style>
|
| - <div>
|
| - Debugging console is not yet implemented.<br>
|
| - </div>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="debugger-input" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <style>
|
| - .textBox {
|
| - font: 400 16px 'Montserrat', sans-serif;
|
| - width: 100%;
|
| - }
|
| - </style>
|
| - <input id="textBox" class="textBox" type="text" value="{{ text }}">
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="error-view" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <nav-bar>
|
| - <top-nav-menu last="{{ true }}"></top-nav-menu>
|
| - <nav-control></nav-control>
|
| - </nav-bar>
|
| - <div class="content-centered">
|
| - <h1>{{ error.kind }}</h1>
|
| - <br>
|
| - <div class="well">{{ error.message }}</div>
|
| - </div>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="field-view" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <nav-bar>
|
| - <top-nav-menu></top-nav-menu>
|
| - <isolate-nav-menu isolate="{{ field.isolate }}"></isolate-nav-menu>
|
| - <template if="{{ field.owner.type == 'Class' }}">
|
| - <!-- TODO(turnidge): Add library nav menu here. -->
|
| - <class-nav-menu cls="{{ field.owner }}"></class-nav-menu>
|
| - </template>
|
| - <template if="{{ field.owner.type == 'Library' }}">
|
| - <library-nav-menu library="{{ field.owner }}"></library-nav-menu>
|
| - </template>
|
| - <nav-menu link="{{ field.link }}" anchor="{{ field.name }}" last="{{ true }}"></nav-menu>
|
| - <nav-refresh callback="{{ refresh }}"></nav-refresh>
|
| - <nav-control></nav-control>
|
| - </nav-bar>
|
| -
|
| - <div class="content">
|
| - <h1>
|
| - <template if="{{ field.isStatic }}">static</template>
|
| - <template if="{{ field.isFinal }}">final</template>
|
| - <template if="{{ field.isConst }}">const</template>
|
| - <template if="{{ (field.declaredType.name == 'dynamic' &&
|
| - !field.isFinal && !field.isConst) }}">
|
| - var
|
| - </template>
|
| - <template if="{{ (field.declaredType.name != 'dynamic') }}">
|
| - {{ field.declaredType.name }}
|
| - </template>
|
| - {{ field.name }}
|
| - </h1>
|
| - <div class="memberList">
|
| - <div class="memberItem">
|
| - <div class="memberName">owner</div>
|
| - <div class="memberValue">
|
| - <template if="{{ field.owner.type == 'Class' }}">
|
| - <class-ref ref="{{ field.owner }}"></class-ref>
|
| - </template>
|
| - <template if="{{ field.owner.type != 'Class' }}">
|
| - <library-ref ref="{{ field.owner }}"></library-ref>
|
| - </template>
|
| - </div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">script</div>
|
| - <div class="memberValue">
|
| - <script-ref ref="{{ field.script }}"></script-ref>
|
| - </div>
|
| - </div>
|
| - <template if="{{ !field.isStatic }}">
|
| - <div class="memberItem" title="The types observed for this field at runtime. Fields that are observed to have a single type at runtime or to never be null may allow for additional optimization.">
|
| - <div class="memberName">observed types</div>
|
| - <div class="memberValue">
|
| - <template if="{{ field.guardClass == 'dynamic' }}">
|
| - various
|
| - </template>
|
| - <template if="{{ field.guardClass == 'unknown' }}">
|
| - none
|
| - </template>
|
| - <template if="{{ field.guardClass != 'unknown' &&
|
| - field.guardClass != 'dynamic' }}">
|
| - <class-ref ref="{{ field.guardClass }}"></class-ref>
|
| - <template if="{{ field.guardNullable }}">
|
| - — null observed
|
| - </template>
|
| - <template if="{{ !field.guardNullable }}">
|
| - — null not observed
|
| - </template>
|
| - </template>
|
| - </div>
|
| - </div>
|
| - </template>
|
| - <template if="{{ field.value != null }}">
|
| - <div class="memberItem">
|
| - <div class="memberName">static value</div>
|
| - <div class="memberValue">
|
| - <any-service-ref ref="{{ field.value }}"></any-service-ref>
|
| - </div>
|
| - </div>
|
| - </template>
|
| - </div>
|
| - </div>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="flag-list" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <nav-bar>
|
| - <top-nav-menu></top-nav-menu>
|
| - <nav-menu link="{{ flagList.vm.relativeLink('flags') }}" anchor="flags" last="{{ true }}"></nav-menu>
|
| - <nav-refresh callback="{{ refresh }}"></nav-refresh>
|
| - <nav-control></nav-control>
|
| - </nav-bar>
|
| -
|
| - <div class="content-centered">
|
| - <template if="{{ flagList['modifiedFlags'].isNotEmpty }}">
|
| - <h1>Modified Flags</h1>
|
| - <br>
|
| - <template repeat="{{ flag in flagList['modifiedFlags'] }}">
|
| - <flag-item flag="{{ flag }}"></flag-item>
|
| - <br>
|
| - </template>
|
| - <hr>
|
| - </template>
|
| -
|
| - <h1>Unmodified Flags</h1>
|
| - <br>
|
| - <template if="{{ flagList['unmodifiedFlags'].isEmpty }}">
|
| - <em>None</em>
|
| - </template>
|
| - <template if="{{ flagList['unmodifiedFlags'].isNotEmpty }}">
|
| - <template repeat="{{ flag in flagList['unmodifiedFlags'] }}">
|
| - <flag-item flag="{{ flag }}"></flag-item>
|
| - <br>
|
| - </template>
|
| - </template>
|
| - </div>
|
| -
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="flag-item" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <span style="color:#aaa">// {{ flag['comment'] }}</span>
|
| - <div style="padding: 3px 0">
|
| - <b>{{ flag['name'] }}</b>
|
| - =
|
| - {{ flag['valueAsString'] }}
|
| - </div>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="function-view" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <nav-bar>
|
| - <top-nav-menu></top-nav-menu>
|
| - <isolate-nav-menu isolate="{{ function.isolate }}"></isolate-nav-menu>
|
| - <template if="{{ function.owningClass != null }}">
|
| - <!-- TODO(turnidge): Add library nav menu here. -->
|
| - <class-nav-menu cls="{{ function.owningClass }}"></class-nav-menu>
|
| - </template>
|
| - <template if="{{ function.owningLibrary != null }}">
|
| - <library-nav-menu library="{{ function.owningLibrary }}"></library-nav-menu>
|
| - </template>
|
| - <nav-menu link="{{ function.link }}" anchor="{{ function.name }}" last="{{ true }}"></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>function {{ function.qualifiedName }}</h1>
|
| -
|
| - <div class="memberList">
|
| - <div class="memberItem">
|
| - <div class="memberName">kind</div>
|
| - <div class="memberValue">
|
| - <template if="{{ function.isStatic }}">static</template>
|
| - <template if="{{ function.isConst }}">const</template>
|
| - {{ function.kind.toString() }}
|
| - </div>
|
| - </div>
|
| - <template if="{{ function.parent != null }}">
|
| - <div class="memberItem">
|
| - <div class="memberName">parent function</div>
|
| - <div class="memberValue">
|
| - <function-ref ref="{{ function.parent }}"></function-ref>
|
| - </div>
|
| - </div>
|
| - </template>
|
| - <div class="memberItem">
|
| - <div class="memberName">owner</div>
|
| - <div class="memberValue">
|
| - <template if="{{ function.owningClass != null }}">
|
| - <class-ref ref="{{ function.owningClass }}"></class-ref>
|
| - </template>
|
| - <template if="{{ function.owningLibrary != null }}">
|
| - <library-ref ref="{{ function.owningLibrary }}"></library-ref>
|
| - </template>
|
| - </div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">script</div>
|
| - <div class="memberValue">
|
| - <script-ref ref="{{ function.script }}" pos="{{ function.tokenPos }}">
|
| - </script-ref>
|
| - </div>
|
| - </div>
|
| -
|
| - <div class="memberItem"> </div>
|
| -
|
| - <template if="{{ function.code != null }}">
|
| - <div class="memberItem">
|
| - <div class="memberName">optimized code</div>
|
| - <div class="memberValue">
|
| - <code-ref ref="{{ function.code }}"></code-ref>
|
| - </div>
|
| - </div>
|
| - </template>
|
| - <template if="{{ function.unoptimizedCode != null }}">
|
| - <div class="memberItem">
|
| - <div class="memberName">unoptimized code</div>
|
| - <div class="memberValue">
|
| - <code-ref ref="{{ function.unoptimizedCode }}"></code-ref>
|
| - </div>
|
| - <div class="memberValue">
|
| - <span title="This count is used to determine when a function will be optimized. It is a combination of call counts and other factors.">
|
| - (usage count: {{ function.usageCounter }})
|
| - </span>
|
| - </div>
|
| - </div>
|
| - </template>
|
| - <div class="memberItem">
|
| - <div class="memberName">deoptimizations</div>
|
| - <div class="memberValue">{{ function.deoptimizations }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">optimizable</div>
|
| - <div class="memberValue">{{ function.isOptimizable }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">inlinable</div>
|
| - <div class="memberValue">{{ function.isInlinable }}</div>
|
| - </div>
|
| - <template if="{{ function.name != function.vmName }}">
|
| - <div class="memberItem">
|
| - <div class="memberName">vm name</div>
|
| - <div class="memberValue">{{ function.vmName }}</div>
|
| - </div>
|
| - </template>
|
| - </div>
|
| - </div>
|
| -
|
| - <hr>
|
| - <script-inset script="{{ function.script }}" startpos="{{ function.tokenPos }}" endpos="{{ function.endTokenPos }}">
|
| - </script-inset>
|
| -
|
| - <br>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="heap-map" extends="observatory-element">
|
| -<template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <style>
|
| - .hover {
|
| - position: fixed;
|
| - z-index: 999;
|
| - height: 16px;
|
| - width: 100%;
|
| - background: #ffffff;
|
| - }
|
| - .spacer {
|
| - height: 16px;
|
| - background-color: red;
|
| - }
|
| - </style>
|
| - <nav-bar pad="{{ false }}">
|
| - <top-nav-menu></top-nav-menu>
|
| - <isolate-nav-menu isolate="{{ fragmentation.isolate }}"></isolate-nav-menu>
|
| - <nav-menu link="{{ fragmentation.isolate.relativeLink('heapmap') }}" anchor="heap map" last="{{ true }}"></nav-menu>
|
| - <nav-refresh callback="{{ refresh }}"></nav-refresh>
|
| - <nav-control></nav-control>
|
| - </nav-bar>
|
| - <div class="hover">
|
| - <p style="text-align:center">{{ status }}</p>
|
| - </div>
|
| - <div class="spacer">
|
| - <!-- Make sure no data is covered by hover bar initially -->
|
| - </div>
|
| - <div class="flex-row">
|
| - <canvas id="fragmentation" width="1px" height="1px"></canvas>
|
| - </div>
|
| -</template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="io-view" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| -
|
| - <nav-bar>
|
| - <top-nav-menu last="{{ true }}"></top-nav-menu>
|
| - <nav-refresh callback="{{ refresh }}"></nav-refresh>
|
| - <nav-control></nav-control>
|
| - </nav-bar>
|
| -
|
| - <div class="content">
|
| - <h1>dart:io</h1>
|
| -
|
| - <br>
|
| -
|
| - <ul class="list-group">
|
| - <li class="list-group-item">
|
| - <a on-click="{{ goto }}" _href="{{gotoLink(io.isolate.relativeLink('io/http/servers'))}}">HTTP Servers</a>
|
| - </li>
|
| - </ul>
|
| -
|
| - <br>
|
| -
|
| - <ul class="list-group">
|
| - <li class="list-group-item">
|
| - <a on-click="{{ goto }}" _href="{{gotoLink(io.isolate.relativeLink('io/sockets'))}}">Sockets</a>
|
| - </li>
|
| - </ul>
|
| -
|
| - <br>
|
| -
|
| - <ul class="list-group">
|
| - <li class="list-group-item">
|
| - <a on-click="{{ goto }}" _href="{{gotoLink(io.isolate.relativeLink('io/websockets'))}}">WebSockets</a>
|
| - </li>
|
| - </ul>
|
| -
|
| - <br>
|
| -
|
| - <ul class="list-group">
|
| - <li class="list-group-item">
|
| - <a on-click="{{ goto }}" _href="{{gotoLink(io.isolate.relativeLink('io/file/randomaccessfiles'))}}">Random Access Files</a>
|
| - </li>
|
| - </ul>
|
| -
|
| - <br>
|
| -
|
| - <ul class="list-group">
|
| - <li class="list-group-item">
|
| - <a on-click="{{ goto }}" _href="{{gotoLink(io.isolate.relativeLink('io/processes'))}}">Processes</a>
|
| - </li>
|
| - </ul>
|
| -
|
| - </div>
|
| - <br>
|
| - <hr>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="io-ref" extends="service-ref">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <template if="{{ ref.type == 'Socket' }}">
|
| - <io-socket-ref ref="{{ ref }}"></io-socket-ref>
|
| - </template>
|
| - <template if="{{ ref.type == 'HttpServerConnection' }}">
|
| - <io-http-server-connection-ref ref="{{ ref }}"></io-http-server-connection-ref>
|
| - </template>
|
| - <template if="{{ ref.type == 'HttpServer' }}">
|
| - <io-http-server-ref ref="{{ ref }}"></io-http-server-ref>
|
| - </template>
|
| - <template if="{{ ref.type == 'WebSocket' }}">
|
| - <io-web-socket-ref ref="{{ ref }}"></io-web-socket-ref>
|
| - </template>
|
| - <template if="{{ ref.type == 'Process' }}">
|
| - <io-process-ref ref="{{ ref }}"></io-process-ref>
|
| - </template>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="io-http-server-list-view" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| -
|
| - <nav-bar>
|
| - <top-nav-menu last="{{ true }}"></top-nav-menu>
|
| - <nav-refresh callback="{{ refresh }}"></nav-refresh>
|
| - </nav-bar>
|
| -
|
| - <div class="content">
|
| - <h1>HttpServers</h1>
|
| -
|
| - <br>
|
| -
|
| - <ul class="list-group">
|
| - <template repeat="{{ httpServer in list['members'] }}">
|
| - <li class="list-group-item">
|
| - <io-http-server-ref ref="{{ httpServer }}"></io-http-server-ref>
|
| - </li>
|
| - </template>
|
| - </ul>
|
| - </div>
|
| - <br>
|
| - <hr>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="io-http-server-ref" extends="service-ref">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <a on-click="{{ goto }}" _href="{{ url }}">{{ name }}</a>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="io-http-server-view" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| -
|
| - <nav-bar>
|
| - <top-nav-menu last="{{ true }}"></top-nav-menu>
|
| - <nav-refresh callback="{{ refresh }}"></nav-refresh>
|
| - </nav-bar>
|
| -
|
| - <div class="content">
|
| - <h1>HttpServer</h1>
|
| -
|
| - <br>
|
| -
|
| - <div class="memberList">
|
| - <div class="memberItem">
|
| - <div class="memberName">Socket</div>
|
| - <div class="memberValue"><io-socket-ref ref="{{ httpServer['socket'] }}"></io-socket-ref></div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">Address</div>
|
| - <div class="memberValue">{{ httpServer['address'] }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">Port</div>
|
| - <div class="memberValue">{{ httpServer['port'] }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">Active connections</div>
|
| - <ul class="list-group">
|
| - <template repeat="{{ connection in httpServer['active'] }}">
|
| - <li class="list-group-item">
|
| - <io-http-server-connection-ref ref="{{ connection }}"></io-http-server-connection-ref>
|
| - </li>
|
| - </template>
|
| - </ul>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">Idle connections</div>
|
| - <ul class="list-group">
|
| - <template repeat="{{ connection in httpServer['idle'] }}">
|
| - <li class="list-group-item">
|
| - <io-http-server-connection-ref ref="{{ connection }}"></io-http-server-connection-ref>
|
| - </li>
|
| - </template>
|
| - </ul>
|
| - </div>
|
| - </div>
|
| - </div>
|
| - <br>
|
| - <hr>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="io-http-server-connection-ref" extends="service-ref">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <a _href="{{ url }}">{{ name }}</a>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="io-http-server-connection-view" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| -
|
| - <nav-bar>
|
| - <top-nav-menu last="{{ true }}"></top-nav-menu>
|
| - <nav-refresh callback="{{ refresh }}"></nav-refresh>
|
| - </nav-bar>
|
| -
|
| - <div class="content">
|
| - <h1>HttpConnection</h1>
|
| -
|
| - <br>
|
| -
|
| - <div class="memberList">
|
| - <div class="memberItem">
|
| - <div class="memberName">Socket</div>
|
| - <div class="memberValue"><io-socket-ref ref="{{ connection['socket'] }}"></io-socket-ref></div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">State</div>
|
| - <div class="memberValue">{{ connection['state'] }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">Server</div>
|
| - <div class="memberValue"><io-http-server-ref ref="{{ connection['server'] }}"></io-http-server-ref></div>
|
| - </div>
|
| - </div>
|
| - </div>
|
| - <br>
|
| - <hr>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="io-socket-ref" extends="service-ref">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <a on-click="{{ goto }}" _href="{{ url }}">{{ name }}</a>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="io-socket-list-view" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| -
|
| - <nav-bar>
|
| - <top-nav-menu last="{{ true }}"></top-nav-menu>
|
| - <nav-refresh callback="{{ refresh }}"></nav-refresh>
|
| - </nav-bar>
|
| -
|
| - <div class="content">
|
| - <h1>Sockets</h1>
|
| -
|
| - <br>
|
| -
|
| - <ul class="list-group">
|
| - <template repeat="{{ socket in list['members'] }}">
|
| - <li class="list-group-item">
|
| - <io-socket-ref ref="{{ socket }}"></io-socket-ref>
|
| - </li>
|
| - </template>
|
| - </ul>
|
| - </div>
|
| - <br>
|
| - <hr>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="io-socket-view" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| -
|
| - <nav-bar>
|
| - <top-nav-menu last="{{ true }}"></top-nav-menu>
|
| - <nav-refresh callback="{{ refresh }}"></nav-refresh>
|
| - </nav-bar>
|
| -
|
| - <div class="content">
|
| - <!-- Pipe Socket -->
|
| - <template if="{{ socket.isPipe }}">
|
| - <h1>Pipe Socket</h1>
|
| - <div class="memberList">
|
| - <template if="{{ socket.socketOwner != null }}">
|
| - <div class="memberItem">
|
| - <div class="memberName">Owner</div>
|
| - <div class="memberValue"><io-ref ref="{{ socket.socketOwner }}"></io-ref></div>
|
| - </div>
|
| - </template>
|
| - <div class="memberItem">
|
| - <div class="memberName">File descriptor</div>
|
| - <div class="memberValue">{{ socket.fd }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">Read Closed</div>
|
| - <div class="memberValue">{{ socket.readClosed }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">Write Closed</div>
|
| - <div class="memberValue">{{ socket.writeClosed }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">Closing</div>
|
| - <div class="memberValue">{{ socket.closing }}</div>
|
| - </div>
|
| - </div>
|
| - </template>
|
| - <!-- Network Socket -->
|
| - <template if="{{ !socket.isPipe }}">
|
| - <h1>Network Socket</h1>
|
| - <div class="memberList">
|
| - <template if="{{ socket.socketOwner != null }}">
|
| - <div class="memberItem">
|
| - <div class="memberName">Owner</div>
|
| - <div class="memberValue"><io-ref ref="{{ socket.socketOwner }}"></io-ref></div>
|
| - </div>
|
| - </template>
|
| - <div class="memberItem">
|
| - <div class="memberName">Local Address</div>
|
| - <div class="memberValue">{{ socket.localAddress }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">Local Port</div>
|
| - <div class="memberValue">{{ socket.localPort }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">Remote Address</div>
|
| - <div class="memberValue">{{ socket.remoteAddress }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">Remote Port</div>
|
| - <div class="memberValue">{{ socket.remotePort }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">File descriptor</div>
|
| - <div class="memberValue">{{ socket.fd }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">Read Closed</div>
|
| - <div class="memberValue">{{ socket.readClosed }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">Write Closed</div>
|
| - <div class="memberValue">{{ socket.writeClosed }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">Closing</div>
|
| - <div class="memberValue">{{ socket.closing }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">Listening</div>
|
| - <div class="memberValue">{{ socket.listening }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">Protocol</div>
|
| - <div class="memberValue">{{ socket.protocol }}</div>
|
| - </div>
|
| - </div>
|
| - </template>
|
| - </div>
|
| - <br>
|
| - <hr>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="io-web-socket-ref" extends="service-ref">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <a on-click="{{ goto }}" _href="{{ url }}">{{ name }}</a>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="io-web-socket-list-view" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| -
|
| - <nav-bar>
|
| - <top-nav-menu last="{{ true }}"></top-nav-menu>
|
| - <nav-refresh callback="{{ refresh }}"></nav-refresh>
|
| - </nav-bar>
|
| -
|
| - <div class="content">
|
| - <h1>WebSockets</h1>
|
| -
|
| - <br>
|
| -
|
| - <ul class="list-group">
|
| - <template repeat="{{ webSocket in list['members'] }}">
|
| - <li class="list-group-item">
|
| - <io-web-socket-ref ref="{{ webSocket }}"></io-web-socket-ref>
|
| - </li>
|
| - </template>
|
| - </ul>
|
| - </div>
|
| - <br>
|
| - <hr>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="io-web-socket-view" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| -
|
| - <nav-bar>
|
| - <top-nav-menu last="{{ true }}"></top-nav-menu>
|
| - <nav-refresh callback="{{ refresh }}"></nav-refresh>
|
| - </nav-bar>
|
| -
|
| - <div class="content">
|
| - <h1>WebSocket</h1>
|
| -
|
| - <br>
|
| -
|
| - <div class="memberList">
|
| - <div class="memberItem">
|
| - <div class="memberName">Socket</div>
|
| - <div class="memberValue"><io-socket-ref ref="{{ webSocket['socket'] }}"></io-socket-ref></div>
|
| - </div>
|
| - </div>
|
| - </div>
|
| - <br>
|
| - <hr>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="io-random-access-file-ref" extends="service-ref">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <a on-click="{{ goto }}" _href="{{ url }}">{{ name }}</a>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="io-random-access-file-list-view" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| -
|
| - <nav-bar>
|
| - <top-nav-menu last="{{ true }}"></top-nav-menu>
|
| - <nav-refresh callback="{{ refresh }}"></nav-refresh>
|
| - </nav-bar>
|
| -
|
| - <div class="content">
|
| - <h1>Random Access Files</h1>
|
| -
|
| - <br>
|
| -
|
| - <ul class="list-group">
|
| - <template repeat="{{ file in list['members'] }}">
|
| - <li class="list-group-item">
|
| - <io-random-access-file-ref ref="{{ file }}"></io-random-access-file-ref>
|
| - </li>
|
| - </template>
|
| - </ul>
|
| - </div>
|
| - <br>
|
| - <hr>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="io-random-access-file-view" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| -
|
| - <nav-bar>
|
| - <top-nav-menu last="{{ true }}"></top-nav-menu>
|
| - <nav-refresh callback="{{ refresh }}"></nav-refresh>
|
| - </nav-bar>
|
| -
|
| - <div class="content">
|
| - <h1>Random Access File</h1>
|
| -
|
| - <br>
|
| -
|
| - <div class="memberList">
|
| - <div class="memberItem">
|
| - <div class="memberName">Path</div>
|
| - <div class="memberValue">{{ file['name'] }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">Pending Operation</div>
|
| - <div class="memberValue">{{ file['asyncDispatched'] }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">File Descriptor</div>
|
| - <div class="memberValue">{{ file['fd'] }}</div>
|
| - </div>
|
| - </div>
|
| - </div>
|
| - <br>
|
| - <hr>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="io-process-list-view" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| -
|
| - <nav-bar>
|
| - <top-nav-menu last="{{ true }}"></top-nav-menu>
|
| - <nav-refresh callback="{{ refresh }}"></nav-refresh>
|
| - </nav-bar>
|
| -
|
| - <div class="content">
|
| - <h1>Processes</h1>
|
| -
|
| - <br>
|
| -
|
| - <ul class="list-group">
|
| - <template repeat="{{ process in list['members'] }}">
|
| - <li class="list-group-item">
|
| - <io-process-ref ref="{{ process }}"></io-process-ref>
|
| - </li>
|
| - </template>
|
| - </ul>
|
| - </div>
|
| - <br>
|
| - <hr>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="io-process-ref" extends="service-ref">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <template if="{{ small }}">
|
| - <a on-click="{{ goto }}" _href="{{ url }}">{{ name }}</a>
|
| - </template>
|
| - <template if="{{ !small }}">
|
| - <a on-click="{{ goto }}" _href="{{ url }}">({{ ref['pid'] }}) {{ name }} {{ ref['arguments'] }}</a>
|
| - </template>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="io-process-view" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| -
|
| - <nav-bar>
|
| - <top-nav-menu last="{{ true }}"></top-nav-menu>
|
| - <nav-refresh callback="{{ refresh }}"></nav-refresh>
|
| - </nav-bar>
|
| -
|
| - <div class="content">
|
| - <h1>Process</h1>
|
| -
|
| - <br>
|
| -
|
| - <div class="memberList">
|
| - <div class="memberItem">
|
| - <div class="memberName">Path</div>
|
| - <div class="memberValue">{{ process['name'] }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">Pid</div>
|
| - <div class="memberValue">{{ process['pid'] }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">Arguments</div>
|
| - <div class="memberValue">{{ process['arguments'] }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">Started</div>
|
| - <div class="memberValue">{{ process['started'] }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">Working Directory</div>
|
| - <div class="memberValue">{{ process['workingDirectory'] }}</div>
|
| - </div>
|
| - <template if="{{ process['stdin'] != null }}">
|
| - <div class="memberItem">
|
| - <div class="memberName">stdin</div>
|
| - <div class="memberValue">
|
| - <io-socket-ref ref="{{ process['stdin'] }}"></io-socket-ref>
|
| - </div>
|
| - </div>
|
| - </template>
|
| - <template if="{{ process['stdout'] != null }}">
|
| - <div class="memberItem">
|
| - <div class="memberName">stdout</div>
|
| - <div class="memberValue">
|
| - <io-socket-ref ref="{{ process['stdout'] }}"></io-socket-ref>
|
| - </div>
|
| - </div>
|
| - </template>
|
| - <template if="{{ process['stderr'] != null }}">
|
| - <div class="memberItem">
|
| - <div class="memberName">stderr</div>
|
| - <div class="memberValue">
|
| - <io-socket-ref ref="{{ process['stderr'] }}"></io-socket-ref>
|
| - </div>
|
| - </div>
|
| - </template>
|
| - </div>
|
| -
|
| - <br>
|
| -
|
| - <h2>Environment</h2>
|
| - <div class="well">
|
| - <div class="monospace break-wrap">
|
| - <template repeat="{{ variable in process['environment'] }}">
|
| - {{ variable }}
|
| - <br>
|
| - </template>
|
| - </div>
|
| - </div>
|
| - </div>
|
| - <br>
|
| - <hr>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="isolate-ref" extends="service-ref">
|
| -<template><link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <a on-click="{{ goto }}" _href="{{ url }}">{{ ref.name }}</a>
|
| -</template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="isolate-summary" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <div class="flex-row">
|
| - <div class="flex-item-10-percent">
|
| - <img src="packages/observatory/src/elements/img/isolate_icon.png">
|
| - </div>
|
| - <div class="flex-item-10-percent">
|
| - <isolate-ref ref="{{ isolate }}"></isolate-ref>
|
| - </div>
|
| - <div class="flex-item-30-percent">
|
| - <isolate-run-state isolate="{{ isolate }}"></isolate-run-state>
|
| - </div>
|
| - <div class="flex-item-40-percent">
|
| - <isolate-location isolate="{{ isolate }}"></isolate-location>
|
| - </div>
|
| - <div class="flex-item-10-percent">
|
| - </div>
|
| - </div>
|
| -
|
| - <div class="flex-row">
|
| - <div class="flex-item-20-percent"></div>
|
| - <div class="flex-item-60-percent">
|
| - <hr>
|
| - </div>
|
| - <div class="flex-item-20-percent"></div>
|
| - </div>
|
| -
|
| - <isolate-shared-summary isolate="{{ isolate }}"></isolate-shared-summary>
|
| -
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="isolate-run-state" extends="observatory-element">
|
| - <template>
|
| - <template if="{{ isolate.pauseEvent != null }}">
|
| - <strong>paused</strong>
|
| - <action-link callback="{{ resume }}" label="resume"></action-link>
|
| -
|
| - <action-link callback="{{ stepInto }}" label="step"></action-link>
|
| - <action-link callback="{{ stepOver }}" label="step over"></action-link>
|
| - <action-link callback="{{ stepOut }}" label="step out"></action-link>
|
| - </template>
|
| -
|
| - <template if="{{ isolate.running }}">
|
| - <strong>running</strong>
|
| - <action-link callback="{{ pause }}" label="pause"></action-link>
|
| - </template>
|
| -
|
| - <template if="{{ isolate.idle }}">
|
| - <strong>idle</strong>
|
| - <action-link callback="{{ pause }}" label="pause"></action-link>
|
| - </template>
|
| -
|
| - <template if="{{ isolate.loading }}">
|
| - <strong>loading...</strong>
|
| - </template>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="isolate-location" extends="observatory-element">
|
| - <template>
|
| - <template if="{{ isolate.pauseEvent != null }}">
|
| - <template if="{{ isolate.pauseEvent.eventType == 'IsolateCreated' }}">
|
| - at isolate start
|
| - </template>
|
| -
|
| - <template if="{{ isolate.pauseEvent.eventType == 'IsolateShutdown' }}">
|
| - at isolate exit
|
| - </template>
|
| -
|
| - <template if="{{ isolate.pauseEvent.eventType == 'IsolateInterrupted' ||
|
| - isolate.pauseEvent.eventType == 'BreakpointReached' ||
|
| - isolate.pauseEvent.eventType == 'ExceptionThrown' }}">
|
| - <template if="{{ isolate.pauseEvent.breakpoint != null }}">
|
| - by breakpoint
|
| - </template>
|
| - <template if="{{ isolate.pauseEvent.eventType == 'ExceptionThrown' }}">
|
| - by exception
|
| - </template>
|
| - at
|
| - <function-ref ref="{{ isolate.topFrame['function'] }}">
|
| - </function-ref>
|
| - (<script-ref ref="{{ isolate.topFrame['script'] }}" pos="{{ isolate.topFrame['tokenPos'] }}"></script-ref>)
|
| - </template>
|
| - </template>
|
| -
|
| - <template if="{{ isolate.running }}">
|
| - at
|
| - <function-ref ref="{{ isolate.topFrame['function'] }}">
|
| - </function-ref>
|
| - (<script-ref ref="{{ isolate.topFrame['script'] }}" pos="{{ isolate.topFrame['tokenPos'] }}"></script-ref>)
|
| - </template>
|
| -
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="isolate-shared-summary" extends="observatory-element">
|
| - <template>
|
| - <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>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <template if="{{ isolate.error != null }}">
|
| - <div class="content-centered">
|
| - <pre class="errorBox">{{ isolate.error.message }}</pre>
|
| - <br>
|
| - </div>
|
| - </template>
|
| - <div class="flex-row">
|
| - <div class="flex-item-10-percent">
|
| - </div>
|
| - <div class="flex-item-40-percent">
|
| - <isolate-counter-chart counters="{{ isolate.counters }}"></isolate-counter-chart>
|
| - </div>
|
| - <div class="flex-item-40-percent">
|
| - <div class="memberList">
|
| - <div class="memberItem">
|
| - <div class="memberName">new heap</div>
|
| - <div class="memberValue">
|
| - {{ isolate.newSpace.used | formatSize }}
|
| - of
|
| - {{ isolate.newSpace.capacity | formatSize }}
|
| - </div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">old heap</div>
|
| - <div class="memberValue">
|
| - {{ isolate.oldSpace.used | formatSize }}
|
| - of
|
| - {{ isolate.oldSpace.capacity | formatSize }}
|
| - </div>
|
| - </div>
|
| - </div>
|
| - <br>
|
| - <div class="memberItem">
|
| - <div class="memberValue">
|
| - See <a on-click="{{ goto }}" _href="{{ gotoLink('/debugger' + isolate.link) }}">debugger</a>
|
| - </div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberValue">
|
| - See <a on-click="{{ goto }}" _href="{{ gotoLink('/class-tree' + isolate.link) }}">class hierarchy</a>
|
| - </div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberValue">
|
| - See <a on-click="{{ goto }}" _href="{{ gotoLink(isolate.relativeLink('profile')) }}">cpu profile</a>
|
| - </div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberValue">
|
| - See <a on-click="{{ goto }}" _href="{{ gotoLink(isolate.relativeLink('allocationprofile')) }}">allocation profile</a>
|
| - </div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberValue">
|
| - See <a on-click="{{ goto }}" _href="{{ gotoLink(isolate.relativeLink('heapmap')) }}">heap map</a>
|
| - </div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberValue">
|
| - See <a on-click="{{ goto }}" _href="{{ gotoLink(isolate.relativeLink('metrics')) }}">metrics</a>
|
| - </div>
|
| - </div>
|
| - <!-- Temporarily disabled until UI for dart:io is acceptable.
|
| - <template if="{{ isolate.ioEnabled }}">
|
| - <div class="memberItem">
|
| - <div class="memberValue">
|
| - See <a on-click="{{ goto }}" href="{{ gotoLink(isolate.relativeLink('io')) }}">dart:io</a>
|
| - </div>
|
| - </div>
|
| - </template>
|
| - -->
|
| - </div>
|
| - <div class="flex-item-10-percent">
|
| - </div>
|
| - </div>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="isolate-counter-chart" extends="observatory-element">
|
| - <template>
|
| - <div id="counterPieChart" style="height: 200px"></div>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="isolate-view" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <style>
|
| - .sourceInset {
|
| - padding-left: 15%;
|
| - padding-right: 15%;
|
| - }
|
| - .miniProfileChart {
|
| - width: 80%;
|
| - }
|
| - </style>
|
| -
|
| - <nav-bar>
|
| - <top-nav-menu></top-nav-menu>
|
| - <isolate-nav-menu isolate="{{ isolate }}" last="{{ true }}">
|
| - </isolate-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>isolate '{{ isolate.name }}'</h1>
|
| - </div>
|
| -
|
| - <br>
|
| - <div class="flex-row">
|
| - <div class="flex-item-10-percent">
|
| - </div>
|
| - <div class="flex-item-30-percent">
|
| - <isolate-run-state isolate="{{ isolate }}"></isolate-run-state>
|
| - </div>
|
| - <div class="flex-item-50-percent">
|
| - <isolate-location isolate="{{ isolate }}"></isolate-location>
|
| - </div>
|
| - <div class="flex-item-10-percent">
|
| - </div>
|
| - </div>
|
| - <br>
|
| -
|
| - <template if="{{ isolate.topFrame != null }}">
|
| - <br>
|
| - <script-inset script="{{ isolate.topFrame['script'] }}" currentpos="{{ isolate.topFrame['tokenPos'] }}" height="200px">
|
| - </script-inset>
|
| - </template>
|
| -
|
| - <div class="flex-row">
|
| - <div class="flex-item-20-percent"></div>
|
| - <div class="flex-item-60-percent"><hr></div>
|
| - <div class="flex-item-20-percent"></div>
|
| - </div>
|
| -
|
| - <br>
|
| -
|
| - <isolate-shared-summary isolate="{{ isolate }}"></isolate-shared-summary>
|
| -
|
| - <div class="flex-row">
|
| - <div class="flex-item-20-percent"></div>
|
| - <div class="flex-item-60-percent"><hr></div>
|
| - <div class="flex-item-20-percent"></div>
|
| - </div>
|
| -
|
| - <div class="content-centered">
|
| - <div class="flex-row">
|
| - <div class="flex-item-50-percent">
|
| - <div class="memberList">
|
| - <div class="memberItem">
|
| - <div class="memberName">root library</div>
|
| - <div class="memberValue">
|
| - <library-ref ref="{{ isolate.rootLib }}"></library-ref>
|
| - </div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <template if="{{ isolate.entry != null }}">
|
| - <div class="memberName">entry</div>
|
| - <div class="memberValue">
|
| - <function-ref ref="{{ isolate.entry }}"></function-ref>
|
| - </div>
|
| - </template>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">isolate id</div>
|
| - <div class="memberValue">{{ isolate.mainPort }}</div>
|
| - </div>
|
| - </div>
|
| - </div>
|
| - <div class="flex-item-50-percent">
|
| - <div class="memberItem">
|
| - <div class="memberValue">
|
| - See <a on-click="{{ goto }}" _href="{{ gotoLink(isolate.relativeLink('debug/breakpoints')) }}">breakpoints</a>
|
| - </div>
|
| - </div>
|
| - </div>
|
| - </div>
|
| - </div>
|
| -
|
| - <hr>
|
| -
|
| - <div class="content">
|
| - libraries ({{ isolate.libraries.length }})
|
| - <curly-block expand="{{ isolate.libraries.length <= 8 }}">
|
| - <div class="memberList">
|
| - <template repeat="{{ lib in isolate.libraries }}">
|
| - <div class="memberItem">
|
| - <div class="memberName">
|
| - <library-ref ref="{{ lib }}"></library-ref>
|
| - </div>
|
| - </div>
|
| - </template>
|
| - </div>
|
| - </curly-block>
|
| - </div>
|
| -
|
| - <hr>
|
| -
|
| - <div class="content">
|
| - <div id="tagProfileChart" class="miniProfileChart" style="height: 600px"></div>
|
| - </div>
|
| -
|
| - <hr>
|
| -
|
| - <div class="content">
|
| - <eval-box callback="{{ eval }}"></eval-box>
|
| - </div>
|
| - <br><br><br><br>
|
| - <br><br><br><br>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="inbound-reference" extends="service-ref">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <div>
|
| - from <any-service-ref ref="{{ source }}"></any-service-ref>
|
| - <template if="{{ slotIsArrayIndex }}">via [{{ slot }}]</template>
|
| - <template if="{{ slotIsField }}">via <field-ref ref="{{ slot }}"></field-ref></template>
|
| -
|
| - <curly-block callback="{{ expander() }}">
|
| - <div class="memberList">
|
| - <div class="memberItem">
|
| - <div class="memberName">
|
| - <template repeat="{{ reference in inboundReferences] }}">
|
| - <inbound-reference ref="{{ reference }}"></inbound-reference>
|
| - </template>
|
| - </div>
|
| - </div>
|
| - </div>
|
| - </curly-block>
|
| - </div>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="object-common" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <div class="memberList">
|
| -
|
| - <div class="memberItem">
|
| - <div class="memberName">class</div>
|
| - <div class="memberValue">
|
| - <class-ref ref="{{ object.clazz }}"></class-ref>
|
| - </div>
|
| - </div>
|
| -
|
| - <template if="{{ object.size != null }}">
|
| - <div class="memberItem" title="Space for this object in memory">
|
| - <div class="memberName">size</div>
|
| - <div class="memberValue">{{ object.size | formatSize }}</div>
|
| - </div>
|
| - </template>
|
| -
|
| - <template if="{{ object.size == null }}">
|
| - <div class="memberItem" title="Space for this object in memory">
|
| - <div class="memberName">size</div>
|
| - <div class="memberValue">0</div>
|
| - </div>
|
| - </template>
|
| -
|
| - <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>
|
| -
|
| - </div>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="context-ref" extends="service-ref">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <span>
|
| - <a on-click="{{ goto }}" _href="{{ url }}"><em>Context</em> ({{ ref.length }})</a>
|
| - <curly-block callback="{{ expander() }}">
|
| - <div class="memberList">
|
| - <div class="memberItem">
|
| - <div class="memberName">parent</div>
|
| - <div class="memberValue">
|
| - <any-service-ref ref="{{ ref.parentContext }}"></any-service-ref>
|
| - </div>
|
| - </div>
|
| - <template repeat="{{ variable in ref.variables }}">
|
| - <div class="memberItem">
|
| - <div class="memberName">[{{ variable['index']}}]</div>
|
| - <div class="memberValue">
|
| - <any-service-ref ref="{{ variable['value'] }}"></any-service-ref>
|
| - </div>
|
| - </div>
|
| - </template>
|
| - </div>
|
| - </curly-block>
|
| - </span>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="instance-view" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/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.isAbstractType }}">
|
| - <h1>type {{ instance.name }}</h1>
|
| - </template>
|
| - <template if="{{ !instance.isAbstractType }}">
|
| - <h1>instance of {{ instance.clazz.name }}</h1>
|
| - </template>
|
| -
|
| - <object-common object="{{ instance }}"></object-common>
|
| -
|
| - <div class="memberList">
|
| - <div class="memberItem"> </div>
|
| -
|
| - <template if="{{ instance.valueAsString != null }}">
|
| - <div class="memberItem">
|
| - <div class="memberName">value</div>
|
| - <div class="memberValue">{{ instance.valueAsString }}</div>
|
| - </div>
|
| - </template>
|
| -
|
| - <template if="{{ instance.isString }}">
|
| - <div class="memberItem">
|
| - <div class="memberName">valueAsLiteral</div>
|
| - <div class="memberValue"> {{ asStringLiteral(instance.valueAsString, instance.valueAsStringIsTruncated) }}</div>
|
| - </div>
|
| - </template>
|
| -
|
| - <template if="{{ instance.isMirrorReference }}">
|
| - <div class="memberItem">
|
| - <div class="memberName">referent</div>
|
| - <div class="memberValue">
|
| - <any-service-ref ref="{{ instance.referent }}">
|
| - </any-service-ref>
|
| - </div>
|
| - </div>
|
| - </template>
|
| -
|
| - <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>
|
| - <template if="{{ instance.isClosure }}">
|
| - <div class="memberItem">
|
| - <div class="memberName">closure context</div>
|
| - <div class="memberValue">
|
| - <any-service-ref ref="{{ instance.closureCtxt }}">
|
| - </any-service-ref>
|
| - </div>
|
| - </div>
|
| - </template>
|
| -
|
| - <template if="{{ instance.isWeakProperty }}">
|
| - <div class="memberItem">
|
| - <div class="memberName">key</div>
|
| - <div class="memberValue">
|
| - <any-service-ref ref="{{ instance.key }}">
|
| - </any-service-ref>
|
| - </div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">value</div>
|
| - <div class="memberValue">
|
| - <any-service-ref ref="{{ instance.value }}">
|
| - </any-service-ref>
|
| - </div>
|
| - </div>
|
| - </template>
|
| -
|
| - <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.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.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.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'] }}"></any-service-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>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="json-view" extends="observatory-element">
|
| - <template>
|
| - <nav-bar>
|
| - <top-nav-menu last="{{ true }}"></top-nav-menu>
|
| - </nav-bar>
|
| - <pre>{{ mapAsString }}</pre>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="library-view" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| -
|
| - <nav-bar>
|
| - <top-nav-menu></top-nav-menu>
|
| - <isolate-nav-menu isolate="{{ library.isolate }}"></isolate-nav-menu>
|
| - <library-nav-menu library="{{ library }}" last="{{ true }}"></library-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>
|
| - <!-- TODO(turnidge): Handle unnamed libraries -->
|
| - library {{ library.name }}
|
| - </h1>
|
| - <div class="memberList">
|
| - <div class="memberItem">
|
| - <div class="memberName">url</div>
|
| - <div class="memberValue">{{ library.url }}</div>
|
| - </div>
|
| - <template if="{{ library.name != library.vmName }}">
|
| - <div class="memberItem">
|
| - <div class="memberName">vm name</div>
|
| - <div class="memberValue">{{ library.vmName }}</div>
|
| - </div>
|
| - </template>
|
| - </div>
|
| - </div>
|
| -
|
| - <hr>
|
| -
|
| - <div class="content">
|
| - <template if="{{ library.imports.isNotEmpty }}">
|
| - imports ({{ library.imports.length }})
|
| - <curly-block expand="{{ library.imports.length <= 8 }}">
|
| - <div class="memberList">
|
| - <template repeat="{{ imp in library.imports }}">
|
| - <div class="memberItem">
|
| - <div class="memberValue">
|
| - <library-ref ref="{{ imp }}"></library-ref>
|
| - </div>
|
| - </div>
|
| - </template>
|
| - </div>
|
| - </curly-block><br>
|
| - <br>
|
| - </template>
|
| -
|
| - <template if="{{ library.scripts.isNotEmpty }}">
|
| - scripts ({{ library.scripts.length }})
|
| - <curly-block expand="{{ library.scripts.length <= 8 }}">
|
| - <div class="memberList">
|
| - <template repeat="{{ script in library.scripts }}">
|
| - <div class="memberItem">
|
| - <div class="memberValue">
|
| - <script-ref ref="{{ script }}"></script-ref>
|
| - </div>
|
| - </div>
|
| - </template>
|
| - </div>
|
| - </curly-block><br>
|
| - <br>
|
| - </template>
|
| -
|
| - <template if="{{ library.classes.isNotEmpty }}">
|
| - classes ({{ library.classes.length }})
|
| - <curly-block expand="{{ library.classes.length <= 8 }}">
|
| - <div class="memberList">
|
| - <template repeat="{{ cls in library.classes }}">
|
| - <div class="memberItem">
|
| - <div class="memberValue">
|
| - <class-ref ref="{{ cls }}"></class-ref>
|
| - </div>
|
| - </div>
|
| - </template>
|
| - </div>
|
| - </curly-block><br>
|
| - <br>
|
| - </template>
|
| -
|
| - <template if="{{ library.variables.isNotEmpty }}">
|
| - variables ({{ library.variables.length }})
|
| - <curly-block expand="{{ library.variables.length <= 8 }}">
|
| - <div class="memberList">
|
| - <template repeat="{{ field in library.variables }}">
|
| - <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="{{ library.functions.isNotEmpty }}">
|
| - functions ({{ library.functions.length }})
|
| - <curly-block expand="{{ library.functions.length <= 8 }}">
|
| - <div class="memberList">
|
| - <template repeat="{{ function in library.functions }}">
|
| - <div class="memberItem">
|
| - <div class="memberValue">
|
| - <function-ref ref="{{ function }}"></function-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>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="metrics-page" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <style>
|
| - ul li:hover:not(.selected) {
|
| - background-color: #FFF3E3;
|
| - }
|
| - .selected {
|
| - background-color: #0489c3;
|
| - }
|
| - .graph {
|
| - min-height: 600px;
|
| - }
|
| - </style>
|
| - <nav-bar>
|
| - <top-nav-menu last="{{ true }}"></top-nav-menu>
|
| - <nav-refresh callback="{{ refresh }}"></nav-refresh>
|
| - <nav-control></nav-control>
|
| - </nav-bar>
|
| - <div class="flex-row">
|
| - <div class="flex-item-20-percent">
|
| - <ul>
|
| - <template repeat="{{ metric in isolate.dartMetrics.values }}">
|
| - <template if="{{ metric == selectedMetric }}">
|
| - <li class="selected">
|
| - {{ metric.name }}
|
| - </li>
|
| - </template>
|
| - <template if="{{ metric != selectedMetric }}">
|
| - <li on-click="{{ selectMetric }}" data-id="{{ metric.id }}">
|
| - {{ metric.name }}
|
| - </li>
|
| - </template>
|
| - </template>
|
| - <template repeat="{{ metric in isolate.vmMetrics.values }}">
|
| - <template if="{{ metric == selectedMetric }}">
|
| - <li class="selected">
|
| - {{ metric.name }}
|
| - </li>
|
| - </template>
|
| - <template if="{{ metric != selectedMetric }}">
|
| - <li on-click="{{ selectMetric }}" data-id="{{ metric.id }}">
|
| - {{ metric.name }}
|
| - </li>
|
| - </template>
|
| - </template>
|
| - </ul>
|
| - </div>
|
| - <div class="flex-item-80-percent">
|
| - <metrics-graph isolate="{{ isolate }}" metric="{{ selectedMetric }}">
|
| - </metrics-graph>
|
| - <div>
|
| - <metric-details page="{{ page }}" metric="{{ selectedMetric }}">
|
| - </metric-details>
|
| - </div>
|
| - </div>
|
| - </div>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="metric-details" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <div class="content-centered">
|
| - <div class="memberList">
|
| - <div class="memberItem">
|
| - <div class="memberName">name</div>
|
| - <div class="memberValue">{{ metric.name }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">description</div>
|
| - <div class="memberValue">{{ metric.description }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">current value</div>
|
| - <div class="memberValue">{{ metric.value }}</div>
|
| - </div>
|
| - <template if="{{ (metric != null) && (metric.min != null) }}">
|
| - <div class="memberItem">
|
| - <div class="memberName">minimum</div>
|
| - <div class="memberValue">{{ metric.min }}</div>
|
| - </div>
|
| - </template>
|
| - <template if="{{ (metric != null) && (metric.max != null) }}">
|
| - <div class="memberItem">
|
| - <div class="memberName">maximum</div>
|
| - <div class="memberValue">{{ metric.max }}</div>
|
| - </div>
|
| - </template>
|
| - <div class="memberItem">
|
| - <div class="memberName">refresh rate</div>
|
| - <div class="memberValue">
|
| - <select id="refreshrate" on-change="{{ refreshRateChange }}">
|
| - <!-- These must be kept in sync with POLL_PERIODS in MetricsPage
|
| - in object.dart -->
|
| - <option value="8000">Every eight seconds</option>
|
| - <option value="4000">Every four seconds</option>
|
| - <option value="2000">Every two seconds</option>
|
| - <option value="1000">Once a second</option>
|
| - <option value="100">Ten times per second</option>
|
| - <option value="0" selected="selected">Never</option>
|
| - </select>
|
| - </div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">sample buffer size</div>
|
| - <div class="memberValue">
|
| - <select id="buffersize" on-change="{{ sampleBufferSizeChange }}">
|
| - <option value="10">10</option>
|
| - <option value="100" selected="selected">100</option>
|
| - <option value="1000">1000</option>
|
| - </select>
|
| - </div>
|
| - </div>
|
| - </div>
|
| - </div>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="metrics-graph" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <style>
|
| - .graph {
|
| - min-height: 600px;
|
| - }
|
| - </style>
|
| - <div id="graph" class="graph">
|
| - </div>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="object-view" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <nav-bar>
|
| - <top-nav-menu></top-nav-menu>
|
| - <isolate-nav-menu isolate="{{ object.isolate }}"></isolate-nav-menu>
|
| - <nav-menu link="." anchor="object" last="{{ true }}"></nav-menu>
|
| - <nav-refresh callback="{{ refresh }}"></nav-refresh>
|
| - <nav-control></nav-control>
|
| - </nav-bar>
|
| -
|
| - <div class="content">
|
| - <object-common object="{{ object }}"></object-common>
|
| - </div>
|
| -
|
| - <hr>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="context-view" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <nav-bar>
|
| - <top-nav-menu></top-nav-menu>
|
| - <isolate-nav-menu isolate="{{ context.isolate }}"></isolate-nav-menu>
|
| - <!-- TODO(turnidge): Add library nav menu here. -->
|
| - <class-nav-menu cls="{{ context.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="{{ !context.isError }}">
|
| - <div class="content">
|
| - <h1>instance of Context</h1>
|
| -
|
| - <object-common object="{{ context }}"></object-common>
|
| -
|
| - <div class="memberList">
|
| - <div class="memberItem"> </div>
|
| -
|
| - <div class="memberItem">
|
| - <div class="memberName">parent context</div>
|
| - <div class="memberValue">
|
| - <any-service-ref ref="{{ context.parentContext }}"></any-service-ref>
|
| - </div>
|
| - </div>
|
| - </div>
|
| - </div>
|
| -
|
| - <hr>
|
| -
|
| - <div class="content">
|
| - <template if="{{ context.variables.isNotEmpty }}">
|
| - variables ({{ context.variables.length }})
|
| - <curly-block expand="{{ context.variables.length <= 8 }}">
|
| - <div class="memberList">
|
| - <template repeat="{{ variable in context.variables }}">
|
| - <div class="memberItem">
|
| - <div class="memberName">[{{ variable['index']}}]</div>
|
| - <div class="memberValue">
|
| - <any-service-ref ref="{{ variable['value'] }}"></any-service-ref>
|
| - </div>
|
| - </div>
|
| - </template>
|
| - </div>
|
| - </curly-block><br><br>
|
| - </template>
|
| - </div>
|
| -
|
| - <br><br><br><br>
|
| - <br><br><br><br>
|
| -
|
| - </template>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="heap-profile" extends="observatory-element">
|
| -<template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <style>
|
| - .table {
|
| - border-collapse: collapse!important;
|
| - margin-bottom: 20px
|
| - table-layout: fixed;
|
| - }
|
| - .table td:nth-of-type(1) {
|
| - width: 30%;
|
| - }
|
| - .th, .td {
|
| - padding: 8px;
|
| - vertical-align: top;
|
| - }
|
| - .table thead > tr > th {
|
| - vertical-align: bottom;
|
| - text-align: left;
|
| - border-bottom:2px solid #ddd;
|
| - }
|
| - .spacer {
|
| - width: 16px;
|
| - }
|
| - .left-border-spacer {
|
| - width: 16px;
|
| - border-left: 1px solid;
|
| - }
|
| - .clickable {
|
| - color: #0489c3;
|
| - text-decoration: none;
|
| - cursor: pointer;
|
| - }
|
| - .clickable:hover {
|
| - text-decoration: underline;
|
| - cursor: pointer;
|
| - }
|
| - #classtable tr:hover > td {
|
| - background-color: #F4C7C3;
|
| - }
|
| - .nav-option {
|
| - color: white;
|
| - float: right;
|
| - margin: 3px;
|
| - padding: 8px;
|
| - }
|
| - </style>
|
| - <nav-bar>
|
| - <top-nav-menu></top-nav-menu>
|
| - <isolate-nav-menu isolate="{{ profile.isolate }}"></isolate-nav-menu>
|
| - <nav-menu link="{{ profile.isolate.relativeLink('allocationprofile') }}" anchor="allocation profile" last="{{ true }}"></nav-menu>
|
| - <nav-refresh callback="{{ resetAccumulator }}" label="Reset Accumulator"></nav-refresh>
|
| - <nav-refresh callback="{{ refreshGC }}" label="GC"></nav-refresh>
|
| - <nav-refresh callback="{{ refresh }}"></nav-refresh>
|
| - <div class="nav-option">
|
| - <input type="checkbox" checked="{{ autoRefresh }}">Auto-refresh on GC
|
| - </div>
|
| - <nav-control></nav-control>
|
| - </nav-bar>
|
| - <div class="content">
|
| - <h1>Allocation Profile</h1>
|
| - <br>
|
| - <div class="memberList">
|
| - <div class="memberItem">
|
| - <div class="memberName">last forced GC at</div>
|
| - <div class="memberValue">{{ lastServiceGC }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">last accumulator reset at</div>
|
| - <div class="memberValue">{{ lastAccumulatorReset }}</div>
|
| - </div>
|
| - </div>
|
| - </div>
|
| - <hr>
|
| - <div class="content-centered-big">
|
| - <div class="flex-row">
|
| - <div id="newSpace" class="flex-item-50-percent">
|
| - <h2>New Generation</h2>
|
| - <br>
|
| - <div class="memberList">
|
| - <div class="memberItem">
|
| - <div class="memberName">used</div>
|
| - <div class="memberValue">
|
| - {{ isolate.newSpace.used | formatSize }}
|
| - of
|
| - {{ isolate.newSpace.capacity | formatSize }}
|
| - </div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">external</div>
|
| - <div class="memberValue">
|
| - {{ isolate.newSpace.external | formatSize }}
|
| - </div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">collections</div>
|
| - <div class="memberValue">{{ formattedCollections(true) }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">average collection time</div>
|
| - <div class="memberValue">{{ formattedAverage(true) }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">cumulative collection time</div>
|
| - <div class="memberValue">{{ formattedTotalCollectionTime(true) }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">average time between collections</div>
|
| - <div class="memberValue">{{ isolate.newSpace.averageCollectionPeriodInMillis.toStringAsFixed(2) }} ms</div>
|
| - </div>
|
| - </div>
|
| - <div id="newPieChart" style="height: 300px"></div>
|
| - </div>
|
| - <div id="oldSpace" class="flex-item-50-percent">
|
| - <h2>Old Generation</h2>
|
| - <br>
|
| - <div class="memberList">
|
| - <div class="memberItem">
|
| - <div class="memberName">used</div>
|
| - <div class="memberValue">
|
| - {{ isolate.oldSpace.used | formatSize }}
|
| - of
|
| - {{ isolate.oldSpace.capacity | formatSize }}
|
| - </div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">external</div>
|
| - <div class="memberValue">
|
| - {{ isolate.oldSpace.external | formatSize }}
|
| - </div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">collections</div>
|
| - <div class="memberValue">{{ formattedCollections(false) }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">average collection time</div>
|
| - <div class="memberValue">{{ formattedAverage(false) }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">cumulative collection time</div>
|
| - <div class="memberValue">{{ formattedTotalCollectionTime(false) }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">average time between collections</div>
|
| - <div class="memberValue">{{ isolate.oldSpace.averageCollectionPeriodInMillis.toStringAsFixed(2) }} ms</div>
|
| - </div>
|
| - </div>
|
| - <div id="oldPieChart" style="height: 300px"></div>
|
| - </div>
|
| - </div>
|
| - </div>
|
| - <br>
|
| - <hr>
|
| - <div class="content-centered-big">
|
| - <table id="classtable" class="flex-item-100-percent table">
|
| - <thead id="classTableHead">
|
| - <tr>
|
| - <th on-click="{{changeSort}}" class="clickable" title="Class">{{ classTable.getColumnLabel(0) }}</th>
|
| - <th class="spacer"></th>
|
| - <th on-click="{{changeSort}}" class="clickable" title="New Accumulated Size">{{ classTable.getColumnLabel(2) }}</th>
|
| - <th on-click="{{changeSort}}" class="clickable" title="New Accumulated Instances">{{ classTable.getColumnLabel(3) }}</th>
|
| - <th on-click="{{changeSort}}" class="clickable" title="New Current Size">{{ classTable.getColumnLabel(4) }}</th>
|
| - <th on-click="{{changeSort}}" class="clickable" title="New Current Instances">{{ classTable.getColumnLabel(5) }}</th>
|
| - <th class="spacer"></th>
|
| - <th on-click="{{changeSort}}" class="clickable" title="Old Accumulated Size">{{ classTable.getColumnLabel(7) }}</th>
|
| - <th on-click="{{changeSort}}" class="clickable" title="Old Accumulated Instances">{{ classTable.getColumnLabel(8) }}</th>
|
| - <th on-click="{{changeSort}}" class="clickable" title="Old Current Size">{{ classTable.getColumnLabel(9) }}</th>
|
| - <th on-click="{{changeSort}}" class="clickable" title="Old Current Instances">{{ classTable.getColumnLabel(10) }}</th>
|
| - </tr>
|
| - </thead>
|
| - <tbody id="classTableBody">
|
| - </tbody>
|
| - </table>
|
| - <br><br><br>
|
| - <br><br><br>
|
| - </div>
|
| -</template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="sliding-checkbox">
|
| - <template>
|
| - <style>
|
| - .switch {
|
| - position: relative;
|
| - width: 121px;
|
| - -webkit-user-select: none;
|
| - -moz-user-select: none;
|
| - -ms-user-select: none;
|
| - }
|
| - .hide {
|
| - display: none;
|
| - }
|
| - .label {
|
| - display: block;
|
| - overflow: hidden;
|
| - cursor: pointer;
|
| - border: 2px solid #999999;
|
| - border-radius: 15px;
|
| - }
|
| - .content {
|
| - width: 200%;
|
| - margin-left: -100%;
|
| - -moz-transition: margin 0.3s ease-in 0s;
|
| - -webkit-transition: margin 0.3s ease-in 0s;
|
| - -o-transition: margin 0.3s ease-in 0s;
|
| - transition: margin 0.3s ease-in 0s;
|
| - }
|
| - .content:before, .content:after {
|
| - float: left;
|
| - width: 50%;
|
| - height: 30px;
|
| - padding: 0;
|
| - line-height: 30px;
|
| - color: white;
|
| - font: 400 14px 'Montserrat', sans-serif;
|
| - -moz-box-sizing: border-box;
|
| - -webkit-box-sizing: border-box;
|
| - box-sizing: border-box;
|
| - }
|
| - .content:before {
|
| - content: {{ checkedText }};
|
| - padding-left: 10px;
|
| - background-color: #0489C3;
|
| - }
|
| - .content:after {
|
| - content: {{ uncheckedText }};
|
| - padding-right: 10px;
|
| - background-color: #EEEEEE;
|
| - color: #999999;
|
| - text-align: right;
|
| - }
|
| - .dot {
|
| - width: 14px;
|
| - margin: 8px;
|
| - background: #FFFFFF;
|
| - border: 2px solid #999999;
|
| - border-radius: 15px;
|
| - position: absolute;
|
| - top: 0;
|
| - bottom: 0;
|
| - right: 87px;
|
| - -moz-transition: all 0.3s ease-in 0s;
|
| - -webkit-transition: all 0.3s ease-in 0s;
|
| - -o-transition: all 0.3s ease-in 0s;
|
| - transition: all 0.3s ease-in 0s;
|
| - }
|
| - :checked + .label .content {
|
| - margin-left: 0;
|
| - }
|
| - :checked + .label .dot {
|
| - right: 0px;
|
| - }
|
| - </style>
|
| - <div class="switch">
|
| - <input type="checkbox" class="hide" id="slide-switch" on-change="{{ change }}">
|
| - <label class="label" for="slide-switch">
|
| - <div class="content"></div>
|
| - <div class="dot"></div>
|
| - </label>
|
| - </div>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -<polymer-element name="isolate-profile" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <nav-bar>
|
| - <top-nav-menu></top-nav-menu>
|
| - <isolate-nav-menu isolate="{{ profile.isolate }}"></isolate-nav-menu>
|
| - <nav-menu link="{{ profile.isolate.relativeLink('profile') }}" anchor="cpu profile" last="{{ true }}"></nav-menu>
|
| - <nav-refresh callback="{{ refresh }}"></nav-refresh>
|
| - <nav-control></nav-control>
|
| - </nav-bar>
|
| - <style>
|
| - .table {
|
| - border-collapse: collapse!important;
|
| - width: 100%;
|
| - margin-bottom: 20px
|
| - }
|
| - .table thead > tr > th,
|
| - .table tbody > tr > th,
|
| - .table tfoot > tr > th,
|
| - .table thead > tr > td,
|
| - .table tbody > tr > td,
|
| - .table tfoot > tr > td {
|
| - padding: 8px;
|
| - vertical-align: top;
|
| - }
|
| - .table thead > tr > th {
|
| - vertical-align: bottom;
|
| - text-align: left;
|
| - border-bottom:2px solid #ddd;
|
| - }
|
| -
|
| - tr:hover > td {
|
| - background-color: #FFF3E3;
|
| - }
|
| - .rowColor0 {
|
| - background-color: #FFE9CC;
|
| - }
|
| - .rowColor1 {
|
| - background-color: #FFDEB2;
|
| - }
|
| - .rowColor2 {
|
| - background-color: #FFD399;
|
| - }
|
| - .rowColor3 {
|
| - background-color: #FFC87F;
|
| - }
|
| - .rowColor4 {
|
| - background-color: #FFBD66;
|
| - }
|
| - .rowColor5 {
|
| - background-color: #FFB24C;
|
| - }
|
| - .rowColor6 {
|
| - background-color: #FFA733;
|
| - }
|
| - .rowColor7 {
|
| - background-color: #FF9C19;
|
| - }
|
| - .rowColor8 {
|
| - background-color: #FF9100;
|
| - }
|
| -
|
| - .tooltip {
|
| - display: block;
|
| - position: absolute;
|
| - visibility: hidden;
|
| - opacity: 0;
|
| - transition: visibility 0s linear 0.5s;
|
| - transition: opacity .4s ease-in-out;
|
| - }
|
| -
|
| - tr:hover .tooltip {
|
| - display: block;
|
| - position: absolute;
|
| - top: 100%;
|
| - right: 100%;
|
| - visibility: visible;
|
| - z-index: 999;
|
| - width: 400px;
|
| - color: #ffffff;
|
| - background-color: #0489c3;
|
| - border-top-right-radius: 8px;
|
| - border-top-left-radius: 8px;
|
| - border-bottom-right-radius: 8px;
|
| - border-bottom-left-radius: 8px;
|
| - transition: visibility 0s linear 0.5s;
|
| - transition: opacity .4s ease-in-out;
|
| - opacity: 1;
|
| - }
|
| -
|
| - .white {
|
| - color: #ffffff;
|
| - }
|
| -
|
| - </style>
|
| - <div class="content">
|
| - <h1>Sampled CPU profile</h1>
|
| - <div class="memberList">
|
| - <div class="memberItem">
|
| - <div class="memberName">Timestamp</div>
|
| - <div class="memberValue">{{ refreshTime }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">Time span</div>
|
| - <div class="memberValue">{{ timeSpan }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">Sample count</div>
|
| - <div class="memberValue">{{ sampleCount }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">Sample rate</div>
|
| - <div class="memberValue">{{ sampleRate }} Hz</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">Sample depth</div>
|
| - <div class="memberValue">{{ sampleDepth }} stack frames</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">Display cutoff</div>
|
| - <div class="memberValue">{{ displayCutoff }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">Tags</div>
|
| - <div class="memberValue">
|
| - <select value="{{tagSelector}}">
|
| - <option value="uv">User > VM</option>
|
| - <option value="u">User</option>
|
| - <option value="vu">VM > User</option>
|
| - <option value="v">VM</option>
|
| - <option value="hide">None</option>
|
| - </select>
|
| - </div>
|
| - </div>
|
| - </div>
|
| - <hr>
|
| - <table id="tableTree" class="table">
|
| - <thead>
|
| - <tr>
|
| - <th>Method</th>
|
| - <th>Self</th>
|
| - </tr>
|
| - </thead>
|
| - <tbody>
|
| - <tr template="" repeat="{{row in tree.rows }}" style="{{}}">
|
| - <td on-click="{{toggleExpanded}}" class="{{ coloring(row) }}" style="{{ padding(row) }}">
|
| - <span id="expand" style="{{ row.expanderStyle }}">{{ row.expander }}</span>
|
| - <div style="position: relative;display: inline">
|
| - {{row.columns[0]}}
|
| - </div>
|
| - <code-ref ref="{{ row.code }}"></code-ref>
|
| - </td>
|
| - <td class="{{ coloring(row) }}" style="position: relative">
|
| - {{row.columns[1]}}
|
| - <div class="tooltip">
|
| - <div class="memberList">
|
| - <div class="memberItem">
|
| - <div class="memberName white">Kind</div>
|
| - <div class="memberValue white">{{ row.tipKind }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName white">Percent of Parent</div>
|
| - <div class="memberValue white">{{ row.tipParent }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName white">Sample Count</div>
|
| - <div class="memberValue white">{{ row.tipTicks }} ({{ row.tipExclusive }})</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName white">Approximate Execution Time</div>
|
| - <div class="memberValue white">{{ row.tipTime }}</div>
|
| - </div>
|
| - </div>
|
| - </div>
|
| - </td>
|
| - </tr>
|
| - </tbody>
|
| - </table>
|
| - </div>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="script-view" extends="observatory-element">
|
| -<template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <nav-bar>
|
| - <top-nav-menu></top-nav-menu>
|
| - <isolate-nav-menu isolate="{{ script.isolate }}">
|
| - </isolate-nav-menu>
|
| - <nav-menu link="{{ script.owningLibrary.link }}" anchor="{{ script.owningLibrary.name }}"></nav-menu>
|
| - <nav-menu link="{{ script.link }}" anchor="{{ script.name }}" last="{{ true }}"></nav-menu>
|
| - <nav-refresh callback="{{ refreshCoverage }}" label="Refresh Coverage"></nav-refresh>
|
| - <nav-refresh callback="{{ refresh }}"></nav-refresh>
|
| - <nav-control></nav-control>
|
| - </nav-bar>
|
| -
|
| - <template if="{{ args['pos'] == null }}">
|
| - <script-inset id="scriptInset" script="{{ script }}">
|
| - <h1>script {{ script.name }}</h1>
|
| - </script-inset>
|
| - </template>
|
| -
|
| - <template if="{{ args['pos'] != null }}">
|
| - <script-inset id="scriptInset" script="{{ script }}" currentpos="{{ args['pos'] | parseInt }}">
|
| - <h1>script {{ script.name }}</h1>
|
| - </script-inset>
|
| - </template>
|
| -
|
| -</template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="vm-view" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| -
|
| - <nav-bar>
|
| - <top-nav-menu last="{{ true }}"></top-nav-menu>
|
| - <nav-refresh callback="{{ refresh }}"></nav-refresh>
|
| - <nav-control></nav-control>
|
| - </nav-bar>
|
| -
|
| - <div class="content">
|
| - <h1>VM</h1>
|
| - <div class="memberList">
|
| - <div class="memberItem">
|
| - <div class="memberName">version</div>
|
| - <div class="memberValue">{{ vm.version }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">uptime</div>
|
| - <div class="memberValue">{{ vm.uptime | formatTime }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">type checks enabled</div>
|
| - <div class="memberValue">{{ vm.typeChecksEnabled }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">asserts enabled</div>
|
| - <div class="memberValue">{{ vm.assertsEnabled }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">pid</div>
|
| - <div class="memberValue">{{ vm.pid }}</div>
|
| - </div>
|
| - <div class="memberItem">
|
| - <div class="memberName">refreshed at</div>
|
| - <div class="memberValue">{{ vm.lastUpdate }}</div>
|
| - </div>
|
| - <br>
|
| - <div class="memberItem">
|
| - <div class="memberValue">
|
| - See <a on-click="{{ goto }}" _href="{{ gotoLink('/flags') }}">flags</a>
|
| - </div>
|
| - </div>
|
| - </div>
|
| - </div>
|
| -
|
| - <br>
|
| - <hr>
|
| -
|
| - <ul class="list-group">
|
| - <template repeat="{{ isolate in vm.isolates }}">
|
| - <li class="list-group-item">
|
| - <isolate-summary isolate="{{ isolate }}"></isolate-summary>
|
| - </li>
|
| - <hr>
|
| - </template>
|
| - </ul>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -<polymer-element name="service-view" extends="observatory-element">
|
| - <!-- This element explicitly manages the child elements to avoid setting
|
| - an observable property on the old element to an invalid type. -->
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="trace-view" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| -
|
| - <template if="{{ tracer != null }}">
|
| - <div class="memberList">
|
| - <template repeat="{{ event in tracer.events }}">
|
| - <div class="memberItem">
|
| - <div class="memberSmall">
|
| - {{ event.timeStamp }}
|
| - </div>
|
| - <div class="memberSmall">
|
| - {{ event.message }}
|
| - <template if="{{ event.map != null }}">
|
| - <br>
|
| - <map-viewer map="{{ event.map }}"></map-viewer>
|
| - </template>
|
| - </div>
|
| - </div>
|
| - </template>
|
| - </div>
|
| - <br>
|
| - <br>
|
| - <br>
|
| - </template>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="map-viewer" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| -
|
| - <template if="{{ map.length > 0 }}">
|
| - <curly-block callback="{{ expander() }}">
|
| - <template if="{{ expand }}">
|
| - <div class="memberList">
|
| - <template repeat="{{ key in map.keys }}">
|
| - <div class="memberItem">
|
| - <div class="memberSmall">{{ key }}</div>
|
| - <div class="memberSmall">:</div>
|
| - <div class="memberSmall">
|
| - <template if="{{ isMap(map[key]) }}">
|
| - <map-viewer map="{{ map[key] }}"></map-viewer>
|
| - </template>
|
| - <template if="{{ isList(map[key]) }}">
|
| - <list-viewer list="{{ map[key] }}"></list-viewer>
|
| - </template>
|
| - <template if="{{ !isMap(map[key]) && !isList(map[key]) }}">
|
| - {{ map[key] }}
|
| - </template>
|
| - </div>
|
| - </div>
|
| - </template>
|
| - </div>
|
| - </template>
|
| - </curly-block>
|
| - </template>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="list-viewer" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| -
|
| - <template if="{{ list.length > 0 }}">
|
| - <curly-block callback="{{ expander() }}">
|
| - <template if="{{ expand }}">
|
| - <div class="memberList">
|
| - <template repeat="{{ element in list }}">
|
| - <div class="memberItem">
|
| - <div class="memberSmall">
|
| - <template if="{{ isMap(element) }}">
|
| - <map-viewer map="{{ element }}"></map-viewer>
|
| - </template>
|
| - <template if="{{ isList(element) }}">
|
| - <list-viewer list="{{ element }}"></list-viewer>
|
| - </template>
|
| - <template if="{{ !isMap(element) && !isList(element) }}">
|
| - {{ element }}
|
| - </template>
|
| - </div>
|
| - </div>
|
| - </template>
|
| - </div>
|
| - </template>
|
| - </curly-block>
|
| - </template>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -<polymer-element name="observatory-application" extends="observatory-element">
|
| - <!-- This element explicitly manages its child elements -->
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="service-exception-view" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <nav-bar>
|
| - <top-nav-menu last="{{ true }}"></top-nav-menu>
|
| - <nav-control></nav-control>
|
| - </nav-bar>
|
| - <div class="content-centered">
|
| - <h1>{{ exception.kind }}</h1>
|
| - <br>
|
| - <div class="well">{{ exception.message }}</div>
|
| - <template if="{{ exception.response != '' }}">
|
| - <div class="well">{{ exception.response }}</div>
|
| - </template>
|
| - </div>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="service-error-view" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <nav-bar>
|
| - <top-nav-menu last="{{ true }}"></top-nav-menu>
|
| - <nav-control></nav-control>
|
| - </nav-bar>
|
| - <div class="content-centered">
|
| - <h1>{{ error.kind }}</h1>
|
| - <br>
|
| - <div class="well">{{ error.message }}</div>
|
| - </div>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="vm-connect-target" extends="observatory-element">
|
| - <template>
|
| - <style>
|
| - .delete-button {
|
| - padding: 4px;
|
| - background: transparent;
|
| - border: none !important;
|
| - }
|
| - .delete-button:hover {
|
| - background: #ff0000;
|
| - }
|
| - </style>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <span>
|
| - <template if="{{ isCurrentTarget }}">
|
| - <a on-click="{{ connectToVm }}" _href="{{ gotoLink('/vm') }}">{{ target.name }} (Connected)</a>
|
| - </template>
|
| - <template if="{{ !isCurrentTarget }}">
|
| - <a on-click="{{ connectToVm }}" _href="{{ gotoLink('/vm') }}">{{ target.name }}</a>
|
| - </template>
|
| - <template if="{{ !isChromeTarget }}">
|
| - <button class="delete-button" on-click="{{ deleteVm }}">✖ Remove</button>
|
| - </template>
|
| - </span>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -<polymer-element name="vm-connect" extends="observatory-element">
|
| - <template>
|
| - <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <style>
|
| - .textbox {
|
| - width: 20em;
|
| - font: 400 16px 'Montserrat', sans-serif;
|
| - }
|
| - </style>
|
| -
|
| - <nav-bar>
|
| - <top-nav-menu last="{{ true }}"></top-nav-menu>
|
| - <nav-control></nav-control>
|
| - </nav-bar>
|
| -
|
| - <div class="content-centered">
|
| - <h1>Connect to a Dart VM</h1>
|
| - <br>
|
| - <hr>
|
| - <div class="flex-row">
|
| - <div class="flex-item-40-percent">
|
| - <h2><img style="height: 48px" src="packages/observatory/src/elements/img/dart_icon.png">Standalone</h2>
|
| - <br>
|
| - <ul>
|
| - <template repeat="{{ target in app.targets.history }}">
|
| - <template if="{{ target.standalone }}">
|
| - <li><vm-connect-target target="{{ target }}"></vm-connect-target></li>
|
| - </template>
|
| - </template>
|
| - </ul>
|
| - <hr>
|
| - <form autocomplete="on">
|
| - <input class="textbox" placeholder="localhost:8181" type="text" value="{{ standaloneVmAddress }}">
|
| - <input class="button" type="submit" value="Connect" on-click="{{ connectStandalone }}">
|
| - </form>
|
| - <br>
|
| - <pre class="well">Run Standalone with: '--observe'</pre>
|
| - <hr>
|
| - </div>
|
| -
|
| - <div class="flex-item-20-percent"></div>
|
| - <div class="flex-item-40-percent">
|
| - <h2><img style="height: 48px" src="packages/observatory/src/elements/img/chromium_icon.png">Chromium</h2>
|
| - <br>
|
| - <ul>
|
| - <template repeat="{{ target in chromeTargets }}">
|
| - <li><vm-connect-target target="{{ target }}"></vm-connect-target></li>
|
| - </template>
|
| - </ul>
|
| - <hr>
|
| - <form autocomplete="on">
|
| - <input class="textbox" placeholder="localhost:9222" type="text" value="{{ chromiumAddress }}">
|
| - <input class="button" type="submit" value="Get Tabs" on-click="{{ getTabs }}">
|
| - </form>
|
| - <br>
|
| - <pre class="well">Run Chromium with:
|
| -'--remote-debugging-port=9222'</pre>
|
| - <hr>
|
| - </div>
|
| - </div>
|
| - </div>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -
|
| -<polymer-element name="vm-ref" extends="service-ref">
|
| - <template><link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
|
| - <a on-click="{{ goto }}" _href="{{ url }}">{{ ref.name }}</a>
|
| - </template>
|
| -</polymer-element>
|
| -
|
| -
|
| -
|
| -
|
| -</div>
|
| - <observatory-application devtools="true"></observatory-application>
|
| -
|
| -
|
| -<script src="index_devtools.html_bootstrap.dart.js" async=""></script></body></html>
|
|
|