Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 Index: runtime/observatory/lib/src/elements/observatory_application.html | |
| 2 diff --git a/runtime/observatory/lib/src/elements/observatory_application.html b /runtime/observatory/lib/src/elements/observatory_application.html | |
|
Cutch
2016/08/09 20:04:22
delete this.
cbernaschina
2016/08/09 20:06:47
Done.
| |
| 3 deleted file mode 100644 | |
| 4 index d91819f0d4bddb2551c812f83a8dd25cf2d6b0d3..00000000000000000000000000000000 00000000 | |
| 5 --- a/runtime/observatory/lib/src/elements/observatory_application.html | |
| 6 +++ /dev/null | |
| 7 @@ -1,8 +0,0 @@ | |
| 8 -<link rel="import" href="../../../../packages/polymer/polymer.html"> | |
| 9 - | |
| 10 -<link rel="import" href="service_view.html"> | |
| 11 -<polymer-element name="observatory-application"> | |
| 12 - <!-- This element explicitly manages its child elements --> | |
| 13 -</polymer-element> | |
| 14 - | |
| 15 -<script type="application/dart" src="observatory_application.dart"></script> | |
| 16 \ No newline at end of file | |
| 17 Index: runtime/observatory/lib/elements.dart | |
| 18 diff --git a/runtime/observatory/lib/elements.dart b/runtime/observatory/lib/ele ments.dart | |
| 19 index ecc32ac42ff3985eaffa3a763afb3080d711ce5f..c021ab5b86c5e8a6f75f9119ef08204c ff6f9a46 100644 | |
| 20 --- a/runtime/observatory/lib/elements.dart | |
| 21 +++ b/runtime/observatory/lib/elements.dart | |
| 22 @@ -36,7 +36,6 @@ export 'package:observatory/src/elements/object_common.dart'; | |
| 23 export 'package:observatory/src/elements/object_view.dart'; | |
| 24 export 'package:observatory/src/elements/objectpool_view.dart'; | |
| 25 export 'package:observatory/src/elements/objectstore_view.dart'; | |
| 26 -export 'package:observatory/src/elements/observatory_application.dart'; | |
| 27 export 'package:observatory/src/elements/observatory_element.dart'; | |
| 28 export 'package:observatory/src/elements/persistent_handles.dart'; | |
| 29 export 'package:observatory/src/elements/ports.dart'; | |
| 30 @@ -65,6 +64,9 @@ import 'package:observatory/src/elements/flag_list.dart'; | |
| 31 import 'package:observatory/src/elements/function_ref.dart'; | |
| 32 import 'package:observatory/src/elements/function_ref_wrapper.dart'; | |
| 33 import 'package:observatory/src/elements/general_error.dart'; | |
| 34 +import 'package:observatory/src/elements/isolate/counter_chart.dart'; | |
| 35 +import 'package:observatory/src/elements/isolate/shared_summary.dart'; | |
| 36 +import 'package:observatory/src/elements/isolate/shared_summary_wrapper.dart'; | |
| 37 import 'package:observatory/src/elements/isolate_ref.dart'; | |
| 38 import 'package:observatory/src/elements/isolate_ref_wrapper.dart'; | |
| 39 import 'package:observatory/src/elements/library_ref.dart'; | |
| 40 @@ -90,6 +92,7 @@ import 'package:observatory/src/elements/nav/top_menu.dart'; | |
| 41 import 'package:observatory/src/elements/nav/top_menu_wrapper.dart'; | |
| 42 import 'package:observatory/src/elements/nav/vm_menu.dart'; | |
| 43 import 'package:observatory/src/elements/nav/vm_menu_wrapper.dart'; | |
| 44 +import 'package:observatory/src/elements/observatory_application.dart'; | |
| 45 import 'package:observatory/src/elements/script_ref.dart'; | |
| 46 import 'package:observatory/src/elements/script_ref_wrapper.dart'; | |
| 47 import 'package:observatory/src/elements/source_link.dart'; | |
| 48 @@ -110,6 +113,7 @@ export 'package:observatory/src/elements/error_ref.dart'; | |
| 49 export 'package:observatory/src/elements/flag_list.dart'; | |
| 50 export 'package:observatory/src/elements/function_ref.dart'; | |
| 51 export 'package:observatory/src/elements/general_error.dart'; | |
| 52 +export 'package:observatory/src/elements/isolate/counter_chart.dart'; | |
| 53 export 'package:observatory/src/elements/isolate_ref.dart'; | |
| 54 export 'package:observatory/src/elements/library_ref.dart'; | |
| 55 export 'package:observatory/src/elements/nav/bar.dart'; | |
| 56 @@ -124,6 +128,7 @@ export 'package:observatory/src/elements/nav/notify_exceptio n.dart'; | |
| 57 export 'package:observatory/src/elements/nav/refresh.dart'; | |
| 58 export 'package:observatory/src/elements/nav/top_menu.dart'; | |
| 59 export 'package:observatory/src/elements/nav/vm_menu.dart'; | |
| 60 +export 'package:observatory/src/elements/observatory_application.dart'; | |
| 61 export 'package:observatory/src/elements/script_ref.dart'; | |
| 62 export 'package:observatory/src/elements/source_link.dart'; | |
| 63 export 'package:observatory/src/elements/view_footer.dart'; | |
| 64 @@ -146,6 +151,9 @@ Future initElements() async { | |
| 65 FunctionRefElement.tag.ensureRegistration(); | |
| 66 FunctionRefElementWrapper.tag.ensureRegistration(); | |
| 67 GeneralErrorElement.tag.ensureRegistration(); | |
| 68 + IsolateCounterChartElement.tag.ensureRegistration(); | |
| 69 + IsolateSharedSummaryElement.tag.ensureRegistration(); | |
| 70 + IsolateSharedSummaryElementWrapper.tag.ensureRegistration(); | |
| 71 IsolateRefElement.tag.ensureRegistration(); | |
| 72 IsolateRefElementWrapper.tag.ensureRegistration(); | |
| 73 LibraryRefElement.tag.ensureRegistration(); | |
| 74 @@ -171,6 +179,8 @@ Future initElements() async { | |
| 75 NavTopMenuElementWrapper.tag.ensureRegistration(); | |
| 76 NavVMMenuElement.tag.ensureRegistration(); | |
| 77 NavVMMenuElementWrapper.tag.ensureRegistration(); | |
| 78 + ObservatoryApplicationElement.tag.ensureRegistration(); | |
| 79 + ScriptRefElement.tag.ensureRegistration(); | |
| 80 ScriptRefElement.tag.ensureRegistration(); | |
| 81 ScriptRefElementWrapper.tag.ensureRegistration(); | |
| 82 SourceLinkElement.tag.ensureRegistration(); | |
| 83 Index: runtime/observatory/lib/elements.html | |
| 84 diff --git a/runtime/observatory/lib/elements.html b/runtime/observatory/lib/ele ments.html | |
| 85 index 2b42d474fa00953956a57c1d791cb1d1debe6dca..0af52face915870548839792d69ea400 9a34c5af 100644 | |
| 86 --- a/runtime/observatory/lib/elements.html | |
| 87 +++ b/runtime/observatory/lib/elements.html | |
| 88 @@ -29,11 +29,11 @@ | |
| 89 <link rel="import" href="src/elements/object_view.html"> | |
| 90 <link rel="import" href="src/elements/objectpool_view.html"> | |
| 91 <link rel="import" href="src/elements/objectstore_view.html"> | |
| 92 -<link rel="import" href="src/elements/observatory_application.html"> | |
| 93 <link rel="import" href="src/elements/persistent_handles.html"> | |
| 94 <link rel="import" href="src/elements/ports.html"> | |
| 95 <link rel="import" href="src/elements/script_inset.html"> | |
| 96 <link rel="import" href="src/elements/script_view.html"> | |
| 97 <link rel="import" href="src/elements/service_ref.html"> | |
| 98 +<link rel="import" href="src/elements/service_view.html"> | |
| 99 <link rel="import" href="src/elements/timeline_page.html"> | |
| 100 <link rel="import" href="src/elements/vm_view.html"> | |
| 101 Index: runtime/observatory/lib/models.dart | |
| 102 diff --git a/runtime/observatory/lib/models.dart b/runtime/observatory/lib/model s.dart | |
| 103 index ded6d78a5fa6f9945396d4818c644796cd0b1bab..497d7b059badc971ed35503819670f08 8c582fbe 100644 | |
| 104 --- a/runtime/observatory/lib/models.dart | |
| 105 +++ b/runtime/observatory/lib/models.dart | |
| 106 @@ -17,6 +17,7 @@ part 'src/models/objects/extension_data.dart'; | |
| 107 part 'src/models/objects/flag.dart'; | |
| 108 part 'src/models/objects/frame.dart'; | |
| 109 part 'src/models/objects/function.dart'; | |
| 110 +part 'src/models/objects/heap_space.dart'; | |
| 111 part 'src/models/objects/instance.dart'; | |
| 112 part 'src/models/objects/isolate.dart'; | |
| 113 part 'src/models/objects/library.dart'; | |
| 114 Index: runtime/observatory/lib/src/elements/css/shared.css | |
| 115 diff --git a/runtime/observatory/lib/src/elements/css/shared.css b/runtime/obser vatory/lib/src/elements/css/shared.css | |
| 116 index e468fc8610774c316a1b3c8b7b6fed2c6152627c..9b200ef9b6f5ea2d4276ad13e25c0beb 47b9584b 100644 | |
| 117 --- a/runtime/observatory/lib/src/elements/css/shared.css | |
| 118 +++ b/runtime/observatory/lib/src/elements/css/shared.css | |
| 119 @@ -61,12 +61,12 @@ h1 { | |
| 120 white-space: nowrap; | |
| 121 } | |
| 122 | |
| 123 -a { | |
| 124 +a[href] { | |
| 125 color: #0489c3; | |
| 126 text-decoration: none; | |
| 127 } | |
| 128 | |
| 129 -a:hover { | |
| 130 +a[href]:hover { | |
| 131 text-decoration: underline; | |
| 132 } | |
| 133 | |
| 134 @@ -461,6 +461,35 @@ function-ref-wrapped > a[href] { | |
| 135 text-decoration: none; | |
| 136 } | |
| 137 | |
| 138 +/* isolate-counter-chart */ | |
| 139 + | |
| 140 +isolate-shared-summary-wrapped { | |
| 141 + display: block; | |
| 142 + height: 300px; | |
| 143 + position: relative; | |
| 144 +} | |
| 145 +isolate-shared-summary-wrapped > .menu { | |
| 146 + float: right; | |
| 147 + top: 0; | |
| 148 + right: 0; | |
| 149 +} | |
| 150 +isolate-shared-summary-wrapped > isolate-counter-chart { | |
| 151 + position: absolute; | |
| 152 + left: 0; | |
| 153 + top: 0; | |
| 154 + right: 200px; | |
| 155 + clear: both; | |
| 156 +} | |
| 157 +isolate-shared-summary-wrapped .errorBox { | |
| 158 + background-color: #f5f5f5; | |
| 159 + border: 1px solid #ccc; | |
| 160 + padding: 2em; | |
| 161 + font-family: consolas, courier, monospace; | |
| 162 + font-size: 1em; | |
| 163 + line-height: 1.2em; | |
| 164 + white-space: pre; | |
| 165 +} | |
| 166 + | |
| 167 /* isolate-ref */ | |
| 168 /* TODO(cbernaschina) fix isolate-ref-wrapped to isolate-ref when wrapper | |
| 169 removed */ | |
| 170 @@ -473,6 +502,38 @@ isolate-ref-wrapped > a[href] { | |
| 171 text-decoration: none; | |
| 172 } | |
| 173 | |
| 174 +/* isolate-shared-summary */ | |
| 175 +/* TODO(cbernaschina) fix isolate-shared-summary-wrapped | |
| 176 +to isolate-shared-summary when wrapper removed */ | |
| 177 + | |
| 178 +isolate-shared-summary, | |
| 179 +isolate-shared-summary-wrapped { | |
| 180 + display: block; | |
| 181 + height: 300px; | |
| 182 + position: relative; | |
| 183 +} | |
| 184 +isolate-shared-summary-wrapped > .menu { | |
| 185 + float: right; | |
| 186 + top: 0; | |
| 187 + right: 0; | |
| 188 +} | |
| 189 +isolate-shared-summary-wrapped > isolate-counter-chart { | |
| 190 + position: absolute; | |
| 191 + left: 0; | |
| 192 + top: 0; | |
| 193 + right: 230px; | |
| 194 + clear: both; | |
| 195 +} | |
| 196 +isolate-shared-summary-wrapped .errorBox { | |
| 197 + background-color: #f5f5f5; | |
| 198 + border: 1px solid #ccc; | |
| 199 + padding: 2em; | |
| 200 + font-family: consolas, courier, monospace; | |
| 201 + font-size: 1em; | |
| 202 + line-height: 1.2em; | |
| 203 + white-space: pre; | |
| 204 +} | |
| 205 + | |
| 206 /* library-ref */ | |
| 207 /* TODO(cbernaschina) fix library-ref-wrapped to library-ref when wrapper | |
| 208 removed */ | |
| 209 Index: runtime/observatory/lib/src/elements/isolate/counter_chart.dart | |
| 210 diff --git a/runtime/observatory/lib/src/elements/isolate/counter_chart.dart b/r untime/observatory/lib/src/elements/isolate/counter_chart.dart | |
| 211 new file mode 100644 | |
| 212 index 0000000000000000000000000000000000000000..3c7b3bc4c3f431a4368f397fb08aa64f 4b47e9d0 | |
| 213 --- /dev/null | |
| 214 +++ b/runtime/observatory/lib/src/elements/isolate/counter_chart.dart | |
| 215 @@ -0,0 +1,77 @@ | |
| 216 +// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | |
| 217 +// for details. All rights reserved. Use of this source code is governed by a | |
| 218 +// BSD-style license that can be found in the LICENSE file. | |
| 219 + | |
| 220 +import 'dart:html'; | |
| 221 +import 'dart:async'; | |
| 222 +import 'package:charted/charted.dart'; | |
| 223 +import "package:charted/charts/charts.dart"; | |
| 224 +import 'package:observatory/src/elements/helpers/rendering_scheduler.dart'; | |
| 225 +import 'package:observatory/src/elements/helpers/tag.dart'; | |
| 226 + | |
| 227 +class IsolateCounterChartElement extends HtmlElement implements Renderable { | |
| 228 + static const tag = | |
| 229 + const Tag<IsolateCounterChartElement>('isolate-counter-chart'); | |
| 230 + | |
| 231 + RenderingScheduler<IsolateCounterChartElement> _r; | |
| 232 + | |
| 233 + Stream<RenderedEvent<IsolateCounterChartElement>> get onRendered => | |
| 234 + _r.onRendered; | |
| 235 + | |
| 236 + Map _counters; | |
| 237 + StreamSubscription _subscription; | |
| 238 + | |
| 239 + factory IsolateCounterChartElement(Map counters, {RenderingQueue queue}) { | |
| 240 + assert(counters != null); | |
| 241 + IsolateCounterChartElement e = document.createElement(tag.name); | |
| 242 + e._r = new RenderingScheduler(e, queue: queue); | |
| 243 + e._counters = counters; | |
| 244 + return e; | |
| 245 + } | |
| 246 + | |
| 247 + IsolateCounterChartElement.created() : super.created(); | |
| 248 + | |
| 249 + @override | |
| 250 + void attached() { | |
| 251 + super.attached(); | |
| 252 + _r.enable(); | |
| 253 + _subscription = window.onResize.listen((_) => _r.dirty()); | |
| 254 + } | |
| 255 + | |
| 256 + @override | |
| 257 + void detached() { | |
| 258 + super.detached(); | |
| 259 + children = []; | |
| 260 + _r.disable(notify: true); | |
| 261 + _subscription.cancel(); | |
| 262 + } | |
| 263 + | |
| 264 + void render() { | |
| 265 + var areaHost; | |
| 266 + var legendHost; | |
| 267 + children = [ | |
| 268 + areaHost = new DivElement()..classes = ['host'], | |
| 269 + legendHost = new DivElement()..classes = ['legend'] | |
| 270 + ]; | |
| 271 + final series = new ChartSeries("Work", [1], new PieChartRenderer( | |
| 272 + sortDataByValue: false | |
| 273 + )); | |
| 274 + var rect = areaHost.getBoundingClientRect(); | |
| 275 + var minSize = new Rect.size(rect.width, rect.height); | |
| 276 + final config = new ChartConfig([series], [0]) | |
| 277 + ..minimumSize = minSize | |
| 278 + ..legend = new ChartLegend(legendHost, showValues: true); | |
| 279 + final data = new ChartData([ | |
| 280 + new ChartColumnSpec(label: 'Type', type: ChartColumnSpec.TYPE_STRING), | |
| 281 + new ChartColumnSpec(label: 'Percent', formatter: (v) => v.toString()) | |
| 282 + ], _counters.keys | |
| 283 + .map((key) => [key, double.parse(_counters[key].split('%')[0])]) | |
| 284 + .toList()); | |
| 285 + | |
| 286 + new LayoutArea(areaHost, data, config, state: new ChartState(), | |
| 287 + autoUpdate: true) | |
| 288 + ..addChartBehavior(new Hovercard()) | |
| 289 + ..addChartBehavior(new AxisLabelTooltip()) | |
| 290 + ..draw(); | |
| 291 + } | |
| 292 +} | |
| 293 Index: runtime/observatory/lib/src/elements/isolate/shared_summary.dart | |
| 294 diff --git a/runtime/observatory/lib/src/elements/isolate/shared_summary.dart b/ runtime/observatory/lib/src/elements/isolate/shared_summary.dart | |
| 295 new file mode 100644 | |
| 296 index 0000000000000000000000000000000000000000..2999fb078ca0ea2ce353c339eb26170d 641029ef | |
| 297 --- /dev/null | |
| 298 +++ b/runtime/observatory/lib/src/elements/isolate/shared_summary.dart | |
| 299 @@ -0,0 +1,152 @@ | |
| 300 +// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | |
| 301 +// for details. All rights reserved. Use of this source code is governed by a | |
| 302 +// BSD-style license that can be found in the LICENSE file. | |
| 303 + | |
| 304 +import 'dart:html'; | |
| 305 +import 'dart:async'; | |
| 306 +import 'package:observatory/models.dart' as M; | |
| 307 +import 'package:observatory/utils.dart'; | |
| 308 +import 'package:observatory/src/elements/helpers/rendering_scheduler.dart'; | |
| 309 +import 'package:observatory/src/elements/helpers/tag.dart'; | |
| 310 +import 'package:observatory/src/elements/helpers/uris.dart'; | |
| 311 +import 'package:observatory/src/elements/isolate/counter_chart.dart'; | |
| 312 + | |
| 313 +class IsolateSharedSummaryElement extends HtmlElement implements Renderable { | |
| 314 + static const tag = | |
| 315 + const Tag<IsolateSharedSummaryElement>('isolate-shared-summary-wrapped'); | |
| 316 + | |
| 317 + RenderingScheduler<IsolateSharedSummaryElement> _r; | |
| 318 + | |
| 319 + Stream<RenderedEvent<IsolateSharedSummaryElement>> get onRendered => | |
| 320 + _r.onRendered; | |
| 321 + | |
| 322 + M.Isolate _isolate; | |
| 323 + | |
| 324 + factory IsolateSharedSummaryElement(M.Isolate isolate, | |
| 325 + {RenderingQueue queue}) { | |
| 326 + assert(isolate != null); | |
| 327 + IsolateSharedSummaryElement e = document.createElement(tag.name); | |
| 328 + e._r = new RenderingScheduler(e, queue: queue); | |
| 329 + e._isolate = isolate; | |
| 330 + return e; | |
| 331 + } | |
| 332 + | |
| 333 + IsolateSharedSummaryElement.created() : super.created(); | |
| 334 + | |
| 335 + @override | |
| 336 + void attached() { | |
| 337 + super.attached(); | |
| 338 + _r.enable(); | |
| 339 + } | |
| 340 + | |
| 341 + @override | |
| 342 + void detached() { | |
| 343 + super.detached(); | |
| 344 + children = []; | |
| 345 + _r.disable(notify: true); | |
| 346 + } | |
| 347 + | |
| 348 + void render() { | |
| 349 + children = []; | |
| 350 + if (_isolate.error != null) { | |
| 351 + children = [ | |
| 352 + new PreElement()..classes = const ["errorBox"] | |
| 353 + ..text = _isolate.error.message | |
| 354 + ]; | |
| 355 + } | |
| 356 + final newHeapUsed = Utils.formatSize(_isolate.newSpace.used); | |
| 357 + final newHeapCapacity = Utils.formatSize(_isolate.newSpace.capacity); | |
| 358 + final oldHeapUsed = Utils.formatSize(_isolate.oldSpace.used); | |
| 359 + final oldHeapCapacity = Utils.formatSize(_isolate.oldSpace.capacity); | |
| 360 + children.addAll([ | |
| 361 + new DivElement()..classes = ['menu'] | |
| 362 + ..children = [ | |
| 363 + new DivElement()..classes = const ['memberList'] | |
| 364 + ..children = [ | |
| 365 + new DivElement()..classes = const ['memberItem'] | |
| 366 + ..children = [ | |
| 367 + new DivElement()..classes = const ['memberName'] | |
| 368 + ..text = 'new heap', | |
| 369 + new DivElement()..classes = const ['memberValue'] | |
| 370 + ..text = '$newHeapUsed of $newHeapCapacity', | |
| 371 + ], | |
| 372 + new DivElement()..classes = const ['memberItem'] | |
| 373 + ..children = [ | |
| 374 + new DivElement()..classes = const ['memberName'] | |
| 375 + ..text = 'old heap', | |
| 376 + new DivElement()..classes = const ['memberValue'] | |
| 377 + ..text = '$oldHeapUsed of $oldHeapCapacity', | |
| 378 + ] | |
| 379 + ], | |
| 380 + new BRElement(), | |
| 381 + new DivElement() | |
| 382 + ..children = [ | |
| 383 + new SpanElement()..text = 'see ', | |
| 384 + new AnchorElement(href: Uris.debugger(_isolate)) | |
| 385 + ..text = 'debug' | |
| 386 + ], | |
| 387 + new DivElement() | |
| 388 + ..children = [ | |
| 389 + new SpanElement()..text = 'see ', | |
| 390 + new AnchorElement(href: Uris.classTree(_isolate)) | |
| 391 + ..text = 'class hierarchy' | |
| 392 + ], | |
| 393 + new DivElement() | |
| 394 + ..children = [ | |
| 395 + new SpanElement()..text = 'see ', | |
| 396 + new AnchorElement(href: Uris.cpuProfiler(_isolate)) | |
| 397 + ..text = 'cpu profile' | |
| 398 + ], | |
| 399 + new DivElement() | |
| 400 + ..children = [ | |
| 401 + new SpanElement()..text = 'see ', | |
| 402 + new AnchorElement(href: Uris.cpuProfilerTable(_isolate)) | |
| 403 + ..text = 'cpu profile (table)' | |
| 404 + ], | |
| 405 + new DivElement() | |
| 406 + ..children = [ | |
| 407 + new SpanElement()..text = 'see ', | |
| 408 + new AnchorElement(href: Uris.allocationProfiler(_isolate)) | |
| 409 + ..text = 'allocation profile' | |
| 410 + ], | |
| 411 + new DivElement() | |
| 412 + ..children = [ | |
| 413 + new SpanElement()..text = 'see ', | |
| 414 + new AnchorElement(href: Uris.heapMap(_isolate)) | |
| 415 + ..text = 'heap map' | |
| 416 + ], | |
| 417 + new DivElement() | |
| 418 + ..children = [ | |
| 419 + new SpanElement()..text = 'see ', | |
| 420 + new AnchorElement(href: Uris.metrics(_isolate)) | |
| 421 + ..text = 'metrics' | |
| 422 + ], | |
| 423 + new DivElement() | |
| 424 + ..children = [ | |
| 425 + new SpanElement()..text = 'see ', | |
| 426 + new AnchorElement(href: Uris.heapSnapshot(_isolate)) | |
| 427 + ..text = 'heap snapshot' | |
| 428 + ], | |
| 429 + new DivElement() | |
| 430 + ..children = [ | |
| 431 + new SpanElement()..text = 'see ', | |
| 432 + new AnchorElement(href: Uris.persistentHandles(_isolate)) | |
| 433 + ..text = 'persistent handles' | |
| 434 + ], | |
| 435 + new DivElement() | |
| 436 + ..children = [ | |
| 437 + new SpanElement()..text = 'see ', | |
| 438 + new AnchorElement(href: Uris.ports(_isolate)) | |
| 439 + ..text = 'ports' | |
| 440 + ], | |
| 441 + new DivElement() | |
| 442 + ..children = [ | |
| 443 + new SpanElement()..text = 'see ', | |
| 444 + new AnchorElement(href: Uris.logging(_isolate)) | |
| 445 + ..text = 'logging' | |
| 446 + ] | |
| 447 + ], | |
| 448 + new IsolateCounterChartElement(_isolate.counters, queue: _r.queue) | |
| 449 + ]); | |
| 450 + } | |
| 451 +} | |
| 452 Index: runtime/observatory/lib/src/elements/isolate/shared_summary_wrapper.dart | |
| 453 diff --git a/runtime/observatory/lib/src/elements/isolate/shared_summary_wrapper .dart b/runtime/observatory/lib/src/elements/isolate/shared_summary_wrapper.dart | |
| 454 new file mode 100644 | |
| 455 index 0000000000000000000000000000000000000000..66b90ef6a126fb2fd50f8783c08aa857 5bf04eac | |
| 456 --- /dev/null | |
| 457 +++ b/runtime/observatory/lib/src/elements/isolate/shared_summary_wrapper.dart | |
| 458 @@ -0,0 +1,164 @@ | |
| 459 +// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | |
| 460 +// for details. All rights reserved. Use of this source code is governed by a | |
| 461 +// BSD-style license that can be found in the LICENSE file. | |
| 462 + | |
| 463 +import 'dart:html'; | |
| 464 +import 'dart:async'; | |
| 465 +import 'package:observatory/app.dart'; | |
| 466 +import 'package:observatory/service.dart'; | |
| 467 +import 'package:observatory/src/elements/helpers/tag.dart'; | |
| 468 +import 'package:observatory/src/elements/shims/binding.dart'; | |
| 469 +import 'package:observatory/src/elements/isolate/shared_summary.dart'; | |
| 470 + | |
| 471 +@bindable | |
| 472 +class IsolateSharedSummaryElementWrapper extends HtmlElement { | |
| 473 + static const binder = const Binder<IsolateSharedSummaryElementWrapper>(const { | |
| 474 + 'isolate': #isolate | |
| 475 + }); | |
| 476 + | |
| 477 + static const tag = | |
| 478 + const Tag<IsolateSharedSummaryElementWrapper>('isolate-shared-summary'); | |
| 479 + | |
| 480 + IsolateSharedSummaryElementWrapper.created() : super.created() { | |
| 481 + binder.registerCallback(this); | |
| 482 + createShadowRoot(); | |
| 483 + render(); | |
| 484 + } | |
| 485 + | |
| 486 + Isolate _isolate; | |
| 487 + StreamSubscription _subscription; | |
| 488 + | |
| 489 + Isolate get isolate => _isolate; | |
| 490 + | |
| 491 + void set isolate(Isolate value) { | |
| 492 + _isolate = value; | |
| 493 + _detached(); | |
| 494 + _attached(); | |
| 495 + } | |
| 496 + | |
| 497 + @override | |
| 498 + void attached() { | |
| 499 + super.attached(); | |
| 500 + _attached(); | |
| 501 + } | |
| 502 + | |
| 503 + @override | |
| 504 + void detached() { | |
| 505 + super.detached(); | |
| 506 + _detached(); | |
| 507 + } | |
| 508 + | |
| 509 + void _attached() { | |
| 510 + if (_isolate != null) { | |
| 511 + _subscription = _isolate.changes.listen((_) { render(); }); | |
| 512 + } | |
| 513 + render(); | |
| 514 + } | |
| 515 + | |
| 516 + void _detached() { | |
| 517 + _subscription?.cancel(); | |
| 518 + _subscription = null; | |
| 519 + } | |
| 520 + | |
| 521 + void render() { | |
| 522 + if (_isolate == null) { | |
| 523 + return; | |
| 524 + } | |
| 525 + shadowRoot.children = [ | |
| 526 + new StyleElement() | |
| 527 + ..text = ''' | |
| 528 + a[href] { | |
| 529 + color: #0489c3; | |
| 530 + text-decoration: none; | |
| 531 + } | |
| 532 + a[href]:hover { | |
| 533 + text-decoration: underline; | |
| 534 + } | |
| 535 + .memberList { | |
| 536 + display: table; | |
| 537 + } | |
| 538 + .memberItem { | |
| 539 + display: table-row; | |
| 540 + } | |
| 541 + .memberName, .memberValue { | |
| 542 + display: table-cell; | |
| 543 + vertical-align: top; | |
| 544 + padding: 3px 0 3px 1em; | |
| 545 + font: 400 14px 'Montserrat', sans-serif; | |
| 546 + } | |
| 547 + isolate-shared-summary-wrapped { | |
| 548 + display: block; | |
| 549 + height: 300px; | |
| 550 + position: relative; | |
| 551 + } | |
| 552 + isolate-shared-summary-wrapped > .menu { | |
| 553 + float: right; | |
| 554 + top: 0; | |
| 555 + right: 0; | |
| 556 + } | |
| 557 + isolate-shared-summary-wrapped > isolate-counter-chart { | |
| 558 + position: absolute; | |
| 559 + left: 0; | |
| 560 + top: 0; | |
| 561 + right: 230px; | |
| 562 + clear: both; | |
| 563 + } | |
| 564 + isolate-shared-summary-wrapped .errorBox { | |
| 565 + background-color: #f5f5f5; | |
| 566 + border: 1px solid #ccc; | |
| 567 + padding: 2em; | |
| 568 + font-family: consolas, courier, monospace; | |
| 569 + font-size: 1em; | |
| 570 + line-height: 1.2em; | |
| 571 + white-space: pre; | |
| 572 + } | |
| 573 + isolate-counter-chart { | |
| 574 + display: block; | |
| 575 + position: relative; | |
| 576 + height: 300px; | |
| 577 + min-width: 350px; | |
| 578 + } | |
| 579 + isolate-counter-chart > div.host { | |
| 580 + position: absolute; | |
| 581 + left: 0; | |
| 582 + bottom: 0; | |
| 583 + top: 0; | |
| 584 + right: 250px; | |
| 585 + } | |
| 586 + isolate-counter-chart > div.legend { | |
| 587 + position: absolute; | |
| 588 + width: 250px; | |
| 589 + top: 0; | |
| 590 + right: 0; | |
| 591 + bottom: 0; | |
| 592 + overflow-y: auto; | |
| 593 + } | |
| 594 + .type-pie-rdr > .chart-legend-color { | |
| 595 + border-radius: 6px; | |
| 596 + } | |
| 597 + .chart-legend-row, .chart-legend-more { | |
| 598 + width: 100%; | |
| 599 + display: flex; | |
| 600 + font-size: 14px; | |
| 601 + margin-bottom: 16px; | |
| 602 + position: relative; | |
| 603 + cursor: default; | |
| 604 + } | |
| 605 + .chart-legend-color, .chart-legend-more-color { | |
| 606 + width: 12px; | |
| 607 + height: 12px; | |
| 608 + margin: auto 8px; | |
| 609 + border-radius: 2px; | |
| 610 + } | |
| 611 + .chart-legend-label { | |
| 612 + overflow: hidden; | |
| 613 + text-overflow: ellipsis; | |
| 614 + max-width: 120px; | |
| 615 + flex: 1; | |
| 616 + } | |
| 617 + ''', | |
| 618 + new IsolateSharedSummaryElement(_isolate, | |
| 619 + queue: ObservatoryApplication.app.queue) | |
| 620 + ]; | |
| 621 + } | |
| 622 +} | |
| 623 Index: runtime/observatory/lib/src/elements/isolate_summary.dart | |
| 624 diff --git a/runtime/observatory/lib/src/elements/isolate_summary.dart b/runtime /observatory/lib/src/elements/isolate_summary.dart | |
| 625 index b0b2e061b9985877f5518b1fd296c8219194e954..b41befdf38621a9bc06e726b1c3fc862 1f660fe8 100644 | |
| 626 --- a/runtime/observatory/lib/src/elements/isolate_summary.dart | |
| 627 +++ b/runtime/observatory/lib/src/elements/isolate_summary.dart | |
| 628 @@ -4,10 +4,7 @@ | |
| 629 | |
| 630 library isolate_summary_element; | |
| 631 | |
| 632 -import 'dart:html'; | |
| 633 import 'observatory_element.dart'; | |
| 634 -import 'package:charted/charted.dart'; | |
| 635 -import "package:charted/charts/charts.dart"; | |
| 636 import 'package:observatory/service.dart'; | |
| 637 import 'package:polymer/polymer.dart'; | |
| 638 | |
| 639 @@ -31,88 +28,3 @@ class IsolateLocationElement extends ObservatoryElement { | |
| 640 | |
| 641 @published Isolate isolate; | |
| 642 } | |
| 643 - | |
| 644 -@CustomTag('isolate-shared-summary') | |
| 645 -class IsolateSharedSummaryElement extends ObservatoryElement { | |
| 646 - IsolateSharedSummaryElement.created() : super.created(); | |
| 647 - | |
| 648 - @published Isolate isolate; | |
| 649 -} | |
| 650 - | |
| 651 -class CounterChart { | |
| 652 - final HtmlElement _wrapper; | |
| 653 - HtmlElement _areaHost; | |
| 654 - HtmlElement _legendHost; | |
| 655 - LayoutArea _area; | |
| 656 - ChartData _data; | |
| 657 - final _columns = [ | |
| 658 - new ChartColumnSpec(label: 'Type', type: ChartColumnSpec.TYPE_STRING), | |
| 659 - new ChartColumnSpec(label: 'Percent', formatter: (v) => v.toString()) | |
| 660 - ]; | |
| 661 - | |
| 662 - CounterChart(this._wrapper) { | |
| 663 - assert(_wrapper != null); | |
| 664 - _areaHost = _wrapper.querySelector('.chart-host'); | |
| 665 - assert(_areaHost != null); | |
| 666 - _areaHost.clientWidth; | |
| 667 - _legendHost = _wrapper.querySelector('.chart-legend-host'); | |
| 668 - assert(_legendHost != null); | |
| 669 - var series = new ChartSeries("Work", [1], new PieChartRenderer( | |
| 670 - sortDataByValue: false | |
| 671 - )); | |
| 672 - var config = new ChartConfig([series], [0]); | |
| 673 - config.minimumSize = new Rect(200, 200); | |
| 674 - config.legend = new ChartLegend(_legendHost, showValues: true); | |
| 675 - _data = new ChartData(_columns, []); | |
| 676 - _area = new LayoutArea(_areaHost, | |
| 677 - _data, | |
| 678 - config, | |
| 679 - state: new ChartState(), | |
| 680 - autoUpdate: false); | |
| 681 - _area.addChartBehavior(new Hovercard()); | |
| 682 - _area.addChartBehavior(new AxisLabelTooltip()); | |
| 683 - } | |
| 684 - | |
| 685 - void update(Map counters) { | |
| 686 - var rows = []; | |
| 687 - for (var key in counters.keys) { | |
| 688 - var value = double.parse(counters[key].split('%')[0]); | |
| 689 - rows.add([key, value]); | |
| 690 - } | |
| 691 - _area.data = new ChartData(_columns, rows); | |
| 692 - _area.draw(); | |
| 693 - } | |
| 694 -} | |
| 695 - | |
| 696 -@CustomTag('isolate-counter-chart') | |
| 697 -class IsolateCounterChartElement extends ObservatoryElement { | |
| 698 - IsolateCounterChartElement.created() : super.created(); | |
| 699 - | |
| 700 - @published ObservableMap counters; | |
| 701 - CounterChart chart; | |
| 702 - | |
| 703 - attached() { | |
| 704 - super.attached(); | |
| 705 - chart = | |
| 706 - new CounterChart(shadowRoot.querySelector('#isolate-counter-chart')); | |
| 707 - } | |
| 708 - | |
| 709 - detached() { | |
| 710 - super.detached(); | |
| 711 - var host = shadowRoot.querySelector('#isolate-counter-chart-host'); | |
| 712 - host.children.clear(); | |
| 713 - var legendHost = | |
| 714 - shadowRoot.querySelector('#isolate-counter-chart-legend-host'); | |
| 715 - legendHost.children.clear(); | |
| 716 - } | |
| 717 - | |
| 718 - void countersChanged(oldValue) { | |
| 719 - if (counters == null) { | |
| 720 - return; | |
| 721 - } | |
| 722 - if (chart == null) { | |
| 723 - return; | |
| 724 - } | |
| 725 - chart.update(counters); | |
| 726 - } | |
| 727 -} | |
| 728 Index: runtime/observatory/lib/src/elements/isolate_summary.html | |
| 729 diff --git a/runtime/observatory/lib/src/elements/isolate_summary.html b/runtime /observatory/lib/src/elements/isolate_summary.html | |
| 730 index 1a0c0a14a642a742271f249e9114553f13dc89ff..3c4924d8a9f7aa816d4923e6f7a357c1 d828b78f 100644 | |
| 731 --- a/runtime/observatory/lib/src/elements/isolate_summary.html | |
| 732 +++ b/runtime/observatory/lib/src/elements/isolate_summary.html | |
| 733 @@ -85,146 +85,4 @@ | |
| 734 </template> | |
| 735 </polymer-element> | |
| 736 | |
| 737 -<polymer-element name="isolate-shared-summary"> | |
| 738 - <template> | |
| 739 - <style> | |
| 740 - .errorBox { | |
| 741 - background-color: #f5f5f5; | |
| 742 - border: 1px solid #ccc; | |
| 743 - padding: 2em; | |
| 744 - font-family: consolas, courier, monospace; | |
| 745 - font-size: 1em; | |
| 746 - line-height: 1.2em; | |
| 747 - white-space: pre; | |
| 748 - } | |
| 749 - </style> | |
| 750 - <link rel="stylesheet" href="css/shared.css"> | |
| 751 - <template if="{{ isolate.error != null }}"> | |
| 752 - <div class="content-centered"> | |
| 753 - <pre class="errorBox">{{ isolate.error.message }}</pre> | |
| 754 - <br> | |
| 755 - </div> | |
| 756 - </template> | |
| 757 - <div class="flex-row"> | |
| 758 - <div style="flex:2"> | |
| 759 - <isolate-counter-chart counters="{{ isolate.counters }}"></isolate-coun ter-chart> | |
| 760 - </div> | |
| 761 - <div style="flex:1"> | |
| 762 - <div class="memberList"> | |
| 763 - <div class="memberItem"> | |
| 764 - <div class="memberName">new heap</div> | |
| 765 - <div class="memberValue"> | |
| 766 - {{ isolate.newSpace.used | formatSize }} | |
| 767 - of | |
| 768 - {{ isolate.newSpace.capacity | formatSize }} | |
| 769 - </div> | |
| 770 - </div> | |
| 771 - <div class="memberItem"> | |
| 772 - <div class="memberName">old heap</div> | |
| 773 - <div class="memberValue"> | |
| 774 - {{ isolate.oldSpace.used | formatSize }} | |
| 775 - of | |
| 776 - {{ isolate.oldSpace.capacity | formatSize }} | |
| 777 - </div> | |
| 778 - </div> | |
| 779 - </div> | |
| 780 - <br> | |
| 781 - <div class="memberItem"> | |
| 782 - <div class="memberValue"> | |
| 783 - See <a on-click="{{ goto }}" _href="{{ gotoLink('/debugger', isolat e) }}">debugger</a> | |
| 784 - </div> | |
| 785 - </div> | |
| 786 - <div class="memberItem"> | |
| 787 - <div class="memberValue"> | |
| 788 - See <a on-click="{{ goto }}" _href="{{ gotoLink('/class-tree', isol ate) }}">class hierarchy</a> | |
| 789 - </div> | |
| 790 - </div> | |
| 791 - <div class="memberItem"> | |
| 792 - <div class="memberValue"> | |
| 793 - See <a on-click="{{ goto }}" _href="{{ gotoLink('/profiler', isolat e) }}">cpu profile</a> | |
| 794 - </div> | |
| 795 - </div> | |
| 796 - <div class="memberItem"> | |
| 797 - <div class="memberValue"> | |
| 798 - See <a on-click="{{ goto }}" _href="{{ gotoLink('/profiler-table', isolate) }}">cpu profile (table)</a> | |
| 799 - </div> | |
| 800 - </div> | |
| 801 - <div class="memberItem"> | |
| 802 - <div class="memberValue"> | |
| 803 - See <a on-click="{{ goto }}" _href="{{ gotoLink('/allocation-profil er', isolate) }}">allocation profile</a> | |
| 804 - </div> | |
| 805 - </div> | |
| 806 - <div class="memberItem"> | |
| 807 - <div class="memberValue"> | |
| 808 - See <a on-click="{{ goto }}" _href="{{ gotoLink('/heap-map', isolat e) }}">heap map</a> | |
| 809 - </div> | |
| 810 - </div> | |
| 811 - <div class="memberItem"> | |
| 812 - <div class="memberValue"> | |
| 813 - See <a on-click="{{ goto }}" _href="{{ gotoLink('/metrics', isolate ) }}">metrics</a> | |
| 814 - </div> | |
| 815 - </div> | |
| 816 - <div class="memberItem"> | |
| 817 - <div class="memberValue"> | |
| 818 - See <a on-click="{{ goto }}" _href="{{ gotoLink('/heap-snapshot', i solate) }}">heap snapshot</a> | |
| 819 - </div> | |
| 820 - </div> | |
| 821 - <div class="memberItem"> | |
| 822 - <div class="memberValue"> | |
| 823 - See <a on-click="{{ goto }}" _href="{{ gotoLink('/persistent-handle s', isolate) }}">persistent handles</a> | |
| 824 - </div> | |
| 825 - </div> | |
| 826 - <div class="memberItem"> | |
| 827 - <div class="memberValue"> | |
| 828 - See <a on-click="{{ goto }}" _href="{{ gotoLink('/ports', isolate) }}">ports</a> | |
| 829 - </div> | |
| 830 - </div> | |
| 831 - <div class="memberItem"> | |
| 832 - <div class="memberValue"> | |
| 833 - See <a on-click="{{ goto }}" _href="{{ gotoLink('/logging', isolate ) }}">logging</a> | |
| 834 - </div> | |
| 835 - </div> | |
| 836 - <!-- Temporarily disabled until UI for dart:io is acceptable. | |
| 837 - <template if="{{ isolate.ioEnabled }}"> | |
| 838 - <div class="memberItem"> | |
| 839 - <div class="memberValue"> | |
| 840 - See <a on-click="{{ goto }}" href="{{ gotoLink('/io', isolate) }} ">dart:io</a> | |
| 841 - </div> | |
| 842 - </div> | |
| 843 - </template> | |
| 844 - --> | |
| 845 - </div> | |
| 846 - </div> | |
| 847 - </template> | |
| 848 -</polymer-element> | |
| 849 - | |
| 850 -<polymer-element name="isolate-counter-chart"> | |
| 851 - <template> | |
| 852 - <link rel="stylesheet" href="../../../../packages/charted/charts/themes/qua ntum_theme.css"> | |
| 853 - <style> | |
| 854 -.chart-wrapper { | |
| 855 -} | |
| 856 -.chart-host-wrapper { | |
| 857 - display: flex; | |
| 858 - flex-direction: row; | |
| 859 - max-height: 250px; | |
| 860 -} | |
| 861 -.chart-host { | |
| 862 - flex: 1; | |
| 863 -} | |
| 864 -.chart-legend-host { | |
| 865 - flex: 1; | |
| 866 - overflow-x: auto; | |
| 867 - overflow-y: auto; | |
| 868 -} | |
| 869 - </style> | |
| 870 - <div class="chart-wrapper" id="isolate-counter-chart"> | |
| 871 - <div class="chart-host-wrapper"> | |
| 872 - <div class="chart-host" id="isolate-counter-chart-host"></div> | |
| 873 - <div class="chart-legend-host" id="isolate-counter-chart-legend-host">< /div> | |
| 874 - </div> | |
| 875 - </div> | |
| 876 - </template> | |
| 877 -</polymer-element> | |
| 878 - | |
| 879 <script type="application/dart" src="isolate_summary.dart"></script> | |
| 880 Index: runtime/observatory/lib/src/elements/observatory_application.dart | |
| 881 diff --git a/runtime/observatory/lib/src/elements/observatory_application.dart b /runtime/observatory/lib/src/elements/observatory_application.dart | |
| 882 index 4acdc6575bcaa90772680166fc826e0e71db29a4..0e85692d6b3793c42c92d72e5609ceff c7fcfb50 100644 | |
| 883 --- a/runtime/observatory/lib/src/elements/observatory_application.dart | |
| 884 +++ b/runtime/observatory/lib/src/elements/observatory_application.dart | |
| 885 @@ -4,22 +4,24 @@ | |
| 886 | |
| 887 library observatory_application_element; | |
| 888 | |
| 889 -import 'observatory_element.dart'; | |
| 890 +import 'dart:html'; | |
| 891 import 'package:observatory/app.dart'; | |
| 892 -import 'package:polymer/polymer.dart'; | |
| 893 +import 'package:observatory/src/elements/helpers/tag.dart'; | |
| 894 | |
| 895 /// Main application tag. Responsible for instantiating an instance of | |
| 896 /// [ObservatoryApplication] which is passed declaratively to all child | |
| 897 /// elements. | |
| 898 -@CustomTag('observatory-application') | |
| 899 -class ObservatoryApplicationElement extends ObservatoryElement { | |
| 900 +class ObservatoryApplicationElement extends HtmlElement { | |
| 901 + static const tag = | |
| 902 + const Tag<ObservatoryApplicationElement>('observatory-application'); | |
| 903 + | |
| 904 ObservatoryApplication app; | |
| 905 | |
| 906 ObservatoryApplicationElement.created() : super.created(); | |
| 907 | |
| 908 @override | |
| 909 - void domReady() { | |
| 910 - super.domReady(); | |
| 911 + void attached() { | |
| 912 + super.attached(); | |
| 913 app = new ObservatoryApplication(this); | |
| 914 } | |
| 915 } | |
| 916 Index: runtime/observatory/lib/src/models/objects/heap_space.dart | |
| 917 diff --git a/runtime/observatory/lib/src/models/objects/target.dart b/runtime/ob servatory/lib/src/models/objects/heap_space.dart | |
| 918 similarity index 78% | |
| 919 copy from runtime/observatory/lib/src/models/objects/target.dart | |
| 920 copy to runtime/observatory/lib/src/models/objects/heap_space.dart | |
| 921 index a58673f248b4a1bd7638d02be186e5ec384640a3..29c55ce8496db99ab8904b8bd02a5335 224bd46b 100644 | |
| 922 --- a/runtime/observatory/lib/src/models/objects/target.dart | |
| 923 +++ b/runtime/observatory/lib/src/models/objects/heap_space.dart | |
| 924 @@ -4,6 +4,7 @@ | |
| 925 | |
| 926 part of models; | |
| 927 | |
| 928 -abstract class Target { | |
| 929 - String get name; | |
| 930 +abstract class HeapSpace { | |
| 931 + int get used; | |
| 932 + int get capacity; | |
| 933 } | |
| 934 Index: runtime/observatory/lib/src/models/objects/isolate.dart | |
| 935 diff --git a/runtime/observatory/lib/src/models/objects/isolate.dart b/runtime/o bservatory/lib/src/models/objects/isolate.dart | |
| 936 index 81d54c5f60571739922ba285efee88c61296403d..45f5524ceec81eed2bfdca7e5b7d5055 8227856f 100644 | |
| 937 --- a/runtime/observatory/lib/src/models/objects/isolate.dart | |
| 938 +++ b/runtime/observatory/lib/src/models/objects/isolate.dart | |
| 939 @@ -5,12 +5,58 @@ | |
| 940 part of models; | |
| 941 | |
| 942 abstract class IsolateRef { | |
| 943 + /// The id which is passed to the getIsolate RPC to reload this | |
| 944 + /// isolate. | |
| 945 String get id; | |
| 946 + | |
| 947 + /// A numeric id for this isolate, represented as a string. Unique. | |
| 948 int get number; | |
| 949 + | |
| 950 + /// A name identifying this isolate. Not guaranteed to be unique. | |
| 951 String get name; | |
| 952 } | |
| 953 | |
| 954 abstract class Isolate extends IsolateRef { | |
| 955 + /// The time that the VM started in milliseconds since the epoch. | |
| 956 DateTime get startTime; | |
| 957 + | |
| 958 + /// Is the isolate in a runnable state? | |
| 959 bool get runnable; | |
| 960 + | |
| 961 + /// The number of live ports for this isolate. | |
| 962 + //int get livePorts; | |
| 963 + | |
| 964 + /// Will this isolate pause when exiting? | |
| 965 + //bool get pauseOnExit; | |
| 966 + | |
| 967 + /// The last pause event delivered to the isolate. If the isolate is | |
| 968 + /// running, this will be a resume event. | |
| 969 + //Event get pauseEvent; | |
| 970 + | |
| 971 + /// [optional] The root library for this isolate. | |
| 972 + /// | |
| 973 + /// Guaranteed to be initialized when the IsolateRunnable event fires. | |
| 974 + //LibraryRef get rootLib; | |
| 975 + | |
| 976 + /// A list of all libraries for this isolate. | |
| 977 + /// | |
| 978 + /// Guaranteed to be initialized when the IsolateRunnable event fires. | |
| 979 + Iterable<LibraryRef> get libraries; | |
| 980 + | |
| 981 + /// A list of all breakpoints for this isolate. | |
| 982 + //Iterable<Breakpoint> get breakpoints; | |
| 983 + | |
| 984 + /// [optional] The error that is causing this isolate to exit, if applicable. | |
| 985 + Error get error; | |
| 986 + | |
| 987 + /// The current pause on exception mode for this isolate. | |
| 988 + //ExceptionPauseMode get exceptionPauseMode; | |
| 989 + | |
| 990 + /// [optional]The list of service extension RPCs that are registered for this | |
| 991 + /// isolate, if any. | |
| 992 + Iterable<String> get extensionRPCs; | |
| 993 + | |
| 994 + Map get counters; | |
| 995 + HeapSpace get newSpace; | |
| 996 + HeapSpace get oldSpace; | |
| 997 } | |
| 998 Index: runtime/observatory/lib/src/service/object.dart | |
| 999 diff --git a/runtime/observatory/lib/src/service/object.dart b/runtime/observato ry/lib/src/service/object.dart | |
| 1000 index afd924048b1a1113b1f0117d1d6e6b08f5a27408..bc21be8ca177a58e2db11295e96751e0 c35d21cd 100644 | |
| 1001 --- a/runtime/observatory/lib/src/service/object.dart | |
| 1002 +++ b/runtime/observatory/lib/src/service/object.dart | |
| 1003 @@ -1077,7 +1077,7 @@ class TagProfile { | |
| 1004 } | |
| 1005 } | |
| 1006 | |
| 1007 -class HeapSpace extends Observable { | |
| 1008 +class HeapSpace extends Observable implements M.HeapSpace { | |
| 1009 @observable int used = 0; | |
| 1010 @observable int capacity = 0; | |
| 1011 @observable int external = 0; | |
| 1012 @@ -1139,7 +1139,7 @@ class Isolate extends ServiceObjectOwner implements M.Isol ate { | |
| 1013 return (new DateTime.now().difference(startTime)); | |
| 1014 } | |
| 1015 | |
| 1016 - @observable ObservableMap counters = new ObservableMap(); | |
| 1017 + @observable Map counters = {}; | |
| 1018 | |
| 1019 void _updateRunState() { | |
| 1020 topFrame = (pauseEvent != null ? pauseEvent.topFrame : null); | |
| 1021 @@ -1441,18 +1441,18 @@ class Isolate extends ServiceObjectOwner implements M.Is olate { | |
| 1022 for (var i = 0; i < counts.length; i++) { | |
| 1023 sum += counts[i]; | |
| 1024 } | |
| 1025 - // TODO: Why does this not work without this? | |
| 1026 - counters = toObservable({}); | |
| 1027 + var _counters = {}; | |
| 1028 if (sum == 0) { | |
| 1029 for (var i = 0; i < names.length; i++) { | |
| 1030 - counters[names[i]] = '0.0%'; | |
| 1031 + _counters[names[i]] = '0.0%'; | |
| 1032 } | |
| 1033 } else { | |
| 1034 for (var i = 0; i < names.length; i++) { | |
| 1035 - counters[names[i]] = | |
| 1036 + _counters[names[i]] = | |
| 1037 (counts[i] / sum * 100.0).toStringAsFixed(2) + '%'; | |
| 1038 } | |
| 1039 } | |
| 1040 + counters = _counters; | |
| 1041 } | |
| 1042 | |
| 1043 updateHeapsFromMap(map['_heaps']); | |
| 1044 Index: runtime/observatory/observatory_sources.gypi | |
| 1045 diff --git a/runtime/observatory/observatory_sources.gypi b/runtime/observatory/ observatory_sources.gypi | |
| 1046 index fe89855486e20e2526e406a3aac2254d3616d815..8fd96abc9613f81ff429734233a20eda 04e30650 100644 | |
| 1047 --- a/runtime/observatory/observatory_sources.gypi | |
| 1048 +++ b/runtime/observatory/observatory_sources.gypi | |
| 1049 @@ -99,6 +99,9 @@ | |
| 1050 'lib/src/elements/instructions_view.html', | |
| 1051 'lib/src/elements/io_view.dart', | |
| 1052 'lib/src/elements/io_view.html', | |
| 1053 + 'lib/src/elements/isolate/counter_chart.dart', | |
| 1054 + 'lib/src/elements/isolate/shared_summary_wrapper.dart', | |
| 1055 + 'lib/src/elements/isolate/shared_summary.dart', | |
| 1056 'lib/src/elements/isolate_reconnect.dart', | |
| 1057 'lib/src/elements/isolate_reconnect.html', | |
| 1058 'lib/src/elements/isolate_ref.dart', | |
| 1059 @@ -151,7 +154,6 @@ | |
| 1060 'lib/src/elements/objectpool_view.dart', | |
| 1061 'lib/src/elements/objectpool_view.html', | |
| 1062 'lib/src/elements/observatory_application.dart', | |
| 1063 - 'lib/src/elements/observatory_application.html', | |
| 1064 'lib/src/elements/observatory_element.dart', | |
| 1065 'lib/src/elements/persistent_handles.dart', | |
| 1066 'lib/src/elements/persistent_handles.html', | |
| 1067 @@ -187,6 +189,7 @@ | |
| 1068 'lib/src/models/objects/flag.dart', | |
| 1069 'lib/src/models/objects/frame.dart', | |
| 1070 'lib/src/models/objects/function.dart', | |
| 1071 + 'lib/src/models/objects/heap_space.dart', | |
| 1072 'lib/src/models/objects/instance.dart', | |
| 1073 'lib/src/models/objects/isolate.dart', | |
| 1074 'lib/src/models/objects/library.dart', | |
| 1075 Index: runtime/observatory/tests/observatory_ui/mocks/objects/isolate.dart | |
| 1076 diff --git a/runtime/observatory/tests/observatory_ui/mocks/objects/isolate.dart b/runtime/observatory/tests/observatory_ui/mocks/objects/isolate.dart | |
| 1077 index d65b840cdb6c82b8e55ef60a54091ab094ac8b68..310d70c106358b6868713293e051a788 fe40ba48 100644 | |
| 1078 --- a/runtime/observatory/tests/observatory_ui/mocks/objects/isolate.dart | |
| 1079 +++ b/runtime/observatory/tests/observatory_ui/mocks/objects/isolate.dart | |
| 1080 @@ -18,8 +18,17 @@ class IsolateMock implements M.Isolate { | |
| 1081 final String name; | |
| 1082 final DateTime startTime; | |
| 1083 final bool runnable; | |
| 1084 + final Iterable<M.LibraryRef> libraries; | |
| 1085 + final M.Error error; | |
| 1086 + final Iterable<String> extensionRPCs; | |
| 1087 + final Map counters; | |
| 1088 + final M.HeapSpace newSpace; | |
| 1089 + final M.HeapSpace oldSpace; | |
| 1090 | |
| 1091 const IsolateMock({this.id: 'i-id', this.number, this.name: 'i-name', | |
| 1092 - this.startTime, this.runnable: true}); | |
| 1093 + this.startTime, this.runnable: true, | |
| 1094 + this.libraries: const [], this.error, | |
| 1095 + this.extensionRPCs: const [], this.counters, | |
| 1096 + this.newSpace, this.oldSpace}); | |
| 1097 // TODO(cbernaschina) add other properties. | |
| 1098 } | |
| 1099 Index: runtime/observatory/web/index.html | |
| 1100 diff --git a/runtime/observatory/web/index.html b/runtime/observatory/web/index. html | |
| 1101 index 065952529416f98855d51442e9a9af15f81fa6be..ccd9bfca2a8d493375d05eb7c02c39aa 822c79bd 100644 | |
| 1102 --- a/runtime/observatory/web/index.html | |
| 1103 +++ b/runtime/observatory/web/index.html | |
| 1104 @@ -4,6 +4,7 @@ | |
| 1105 <meta charset="utf-8"> | |
| 1106 <title>Dart VM Observatory</title> | |
| 1107 <link rel="import" href="packages/polymer/polymer.html"> | |
| 1108 + <link rel="stylesheet" href="packages/charted/charts/themes/quantum_theme.css "> | |
| 1109 <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css "> | |
| 1110 <link rel="import" href="packages/observatory/elements.html"> | |
| 1111 <script src="packages/js_util/dist/js_util.js"></script> | |
| 1112 @@ -11,6 +12,5 @@ | |
| 1113 <script src="packages/browser/dart.js"></script> | |
| 1114 </head> | |
| 1115 <body style="height: 100%"> | |
| 1116 - <observatory-application></observatory-application> | |
| 1117 </body> | |
| 1118 </html> | |
| 1119 Index: runtime/observatory/web/main.dart | |
| 1120 diff --git a/runtime/observatory/web/main.dart b/runtime/observatory/web/main.da rt | |
| 1121 index 41f3dc74c2c0f43a978edec47cc86685153cc87b..36c03ab1165391d55ef8b4c35ad74444 bf05ff01 100644 | |
| 1122 --- a/runtime/observatory/web/main.dart | |
| 1123 +++ b/runtime/observatory/web/main.dart | |
| 1124 @@ -2,6 +2,7 @@ | |
| 1125 // for details. All rights reserved. Use of this source code is governed by a | |
| 1126 // BSD-style license that can be found in the LICENSE file. | |
| 1127 | |
| 1128 +import 'dart:html'; | |
| 1129 import 'package:logging/logging.dart'; | |
| 1130 import 'package:polymer/polymer.dart'; | |
| 1131 import 'package:observatory/elements.dart'; | |
| 1132 @@ -24,4 +25,6 @@ main() async { | |
| 1133 Logger.root.info('Polymer initialized'); | |
| 1134 await Polymer.onReady; | |
| 1135 Logger.root.info('Polymer elements have been upgraded'); | |
| 1136 + document.body.children | |
| 1137 + .insert(0, document.createElement('observatory-application')); | |
| 1138 } | |
| OLD | NEW |