blob: e739a4500d3c2981b866fff154e919337f491ce1 [file] [log] [blame]
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
library service_object_view_element;
import 'dart:html';
import 'package:logging/logging.dart';
import 'package:observatory/service.dart';
import 'package:observatory/elements.dart';
import 'package:polymer/polymer.dart';
import 'observatory_element.dart';
@CustomTag('service-view')
class ServiceObjectViewElement extends ObservatoryElement {
@published ServiceObject object;
ServiceObjectViewElement.created() : super.created();
ObservatoryElement _constructElementForObject() {
var type = object.serviceType;
switch (type) {
case 'AllocationProfile':
HeapProfileElement element = new Element.tag('heap-profile');
element.profile = object;
return element;
case 'BreakpointList':
BreakpointListElement element = new Element.tag('breakpoint-list');
element.msg = object;
return element;
case 'Class':
ClassViewElement element = new Element.tag('class-view');
element.cls = object;
return element;
case 'Code':
CodeViewElement element = new Element.tag('code-view');
element.code = object;
return element;
case 'Error':
ErrorViewElement element = new Element.tag('error-view');
element.error = object;
return element;
case 'Field':
FieldViewElement element = new Element.tag('field-view');
element.field = object;
return element;
case 'Function':
FunctionViewElement element = new Element.tag('function-view');
element.function = object;
return element;
case 'HeapMap':
HeapMapElement element = new Element.tag('heap-map');
element.fragmentation = object;
return element;
case 'Array':
case 'Bool':
case 'Closure':
case 'GrowableObjectArray':
case 'Instance':
case 'Smi':
case 'String':
InstanceViewElement element = new Element.tag('instance-view');
element.instance = object;
return element;
case 'Isolate':
IsolateViewElement element = new Element.tag('isolate-view');
element.isolate = object;
return element;
case 'IsolateList':
IsolateListElement element = new Element.tag('isolate-list');
element.isolates = object;
return element;
case 'Library':
LibraryViewElement element = new Element.tag('library-view');
element.library = object;
return element;
case 'Profile':
IsolateProfileElement element = new Element.tag('isolate-profile');
element.profile = object;
return element;
case 'Script':
ScriptViewElement element = new Element.tag('script-view');
element.script = object;
return element;
case 'StackTrace':
StackTraceElement element = new Element.tag('stack-trace');
element.trace = object;
return element;
default:
return null;
}
}
objectChanged(oldValue) {
// Remove the current view.
children.clear();
if (object == null) {
Logger.root.info('Viewing null object.');
return;
}
var type = object.serviceType;
var element = _constructElementForObject();
if (element == null) {
Logger.root.info('Unable to find a view element for \'${type}\'');
return;
}
children.add(element);
Logger.root.info('Viewing object of \'${type}\'');
}
}