Index: runtime/observatory/lib/src/elements/script_inset.dart |
diff --git a/runtime/observatory/lib/src/elements/script_inset.dart b/runtime/observatory/lib/src/elements/script_inset.dart |
index 877a6efbb4bc61b77c1398132e09bc51edb3158f..69a64ea0ac0c5973af40b80afaff48758419b8db 100644 |
--- a/runtime/observatory/lib/src/elements/script_inset.dart |
+++ b/runtime/observatory/lib/src/elements/script_inset.dart |
@@ -23,7 +23,6 @@ class ScriptInsetElement extends HtmlElement implements Renderable { |
Stream<RenderedEvent<ScriptInsetElement>> get onRendered => _r.onRendered; |
- |
M.IsolateRef _isolate; |
M.ScriptRef _script; |
M.Script _loadedScript; |
@@ -40,14 +39,18 @@ class ScriptInsetElement extends HtmlElement implements Renderable { |
M.IsolateRef get isolate => _isolate; |
M.ScriptRef get script => _script; |
- factory ScriptInsetElement(M.IsolateRef isolate, M.ScriptRef script, |
- M.ScriptRepository scripts, |
- M.InstanceRepository instances, |
- M.EventRepository events, |
- {int startPos, int endPos, int currentPos, |
- bool inDebuggerContext: false, |
- Iterable variables: const [], |
- RenderingQueue queue}) { |
+ factory ScriptInsetElement( |
+ M.IsolateRef isolate, |
+ M.ScriptRef script, |
+ M.ScriptRepository scripts, |
+ M.InstanceRepository instances, |
+ M.EventRepository events, |
+ {int startPos, |
+ int endPos, |
+ int currentPos, |
+ bool inDebuggerContext: false, |
+ Iterable variables: const [], |
+ RenderingQueue queue}) { |
assert(isolate != null); |
assert(script != null); |
assert(scripts != null); |
@@ -79,26 +82,27 @@ class ScriptInsetElement extends HtmlElement implements Renderable { |
super.attached(); |
_r.enable(); |
_subscription = _events.onDebugEvent |
- .where((e) => (e is M.BreakpointAddedEvent) || |
- (e is M.BreakpointResolvedEvent) || |
- (e is M.BreakpointRemovedEvent)) |
- .map((e) => e.breakpoint) |
- .listen((M.Breakpoint b) { |
- final loc = b.location; |
- int line; |
- if (loc.script.id == script.id) { |
- if (loc.tokenPos != null) { |
- line = _loadedScript.tokenToLine(loc.tokenPos); |
- } else { |
- line = loc.line; |
- } |
- } else { |
- line = loc.line; |
- } |
- if ((line == null) || ((line >= _startLine) && (line <= _endLine))) { |
- _r.dirty(); |
- } |
- }); |
+ .where((e) => |
+ (e is M.BreakpointAddedEvent) || |
+ (e is M.BreakpointResolvedEvent) || |
+ (e is M.BreakpointRemovedEvent)) |
+ .map((e) => e.breakpoint) |
+ .listen((M.Breakpoint b) { |
+ final loc = b.location; |
+ int line; |
+ if (loc.script.id == script.id) { |
+ if (loc.tokenPos != null) { |
+ line = _loadedScript.tokenToLine(loc.tokenPos); |
+ } else { |
+ line = loc.line; |
+ } |
+ } else { |
+ line = loc.line; |
+ } |
+ if ((line == null) || ((line >= _startLine) && (line <= _endLine))) { |
+ _r.dirty(); |
+ } |
+ }); |
_refresh(); |
} |
@@ -178,26 +182,31 @@ class ScriptInsetElement extends HtmlElement implements Renderable { |
element.title = ""; |
return element; |
} |
+ |
Element hitsUnknown(Element element) { |
element.classes.add('hitsNone'); |
element.title = ""; |
return element; |
} |
+ |
Element hitsNotExecuted(Element element) { |
element.classes.add('hitsNotExecuted'); |
element.title = "Line did not execute"; |
return element; |
} |
+ |
Element hitsExecuted(Element element) { |
element.classes.add('hitsExecuted'); |
element.title = "Line did execute"; |
return element; |
} |
+ |
Element hitsCompiled(Element element) { |
element.classes.add('hitsCompiled'); |
element.title = "Line in compiled function"; |
return element; |
} |
+ |
Element hitsNotCompiled(Element element) { |
element.classes.add('hitsNotCompiled'); |
element.title = "Line in uncompiled function"; |
@@ -210,17 +219,18 @@ class ScriptInsetElement extends HtmlElement implements Renderable { |
Future _refreshSourceReport() async { |
if (noSource) return; |
- var reports = [S.Isolate.kCallSitesReport, |
- S.Isolate.kPossibleBreakpointsReport]; |
+ var reports = [ |
+ S.Isolate.kCallSitesReport, |
+ S.Isolate.kPossibleBreakpointsReport |
+ ]; |
if (_includeProfile) { |
reports.add(S.Isolate.kProfileReport); |
} |
S.Isolate isolate = _isolate as S.Isolate; |
- var sourceReport = await isolate.getSourceReport( |
- reports, |
- script, _startPos, _endPos); |
- _possibleBreakpointLines = S.getPossibleBreakpointLines(sourceReport, |
- script); |
+ var sourceReport = |
+ await isolate.getSourceReport(reports, script, _startPos, _endPos); |
+ _possibleBreakpointLines = |
+ S.getPossibleBreakpointLines(sourceReport, script); |
_rangeMap.clear(); |
_callSites.clear(); |
_profileMap.clear(); |
@@ -273,23 +283,21 @@ class ScriptInsetElement extends HtmlElement implements Renderable { |
Future _computeAnnotations() async { |
_startLine = (_startPos != null |
- ? _loadedScript.tokenToLine(_startPos) |
- : 1 + _loadedScript.lineOffset); |
- _currentLine = (_currentPos != null |
- ? _loadedScript.tokenToLine(_currentPos) |
- : null); |
- _currentCol = (_currentPos != null |
- ? (_loadedScript.tokenToCol(_currentPos)) |
- : null); |
+ ? _loadedScript.tokenToLine(_startPos) |
+ : 1 + _loadedScript.lineOffset); |
+ _currentLine = |
+ (_currentPos != null ? _loadedScript.tokenToLine(_currentPos) : null); |
+ _currentCol = |
+ (_currentPos != null ? (_loadedScript.tokenToCol(_currentPos)) : null); |
if (_currentCol != null) { |
- _currentCol--; // make this 0-based. |
+ _currentCol--; // make this 0-based. |
} |
S.Script script = _loadedScript as S.Script; |
_endLine = (_endPos != null |
- ? _loadedScript.tokenToLine(_endPos) |
- : script.lines.length + _loadedScript.lineOffset); |
+ ? _loadedScript.tokenToLine(_endPos) |
+ : script.lines.length + _loadedScript.lineOffset); |
if (_startLine == null || _endLine == null) { |
return; |
@@ -338,8 +346,8 @@ class ScriptInsetElement extends HtmlElement implements Renderable { |
if (bpts != null) { |
for (var bpt in bpts) { |
if (bpt.location != null) { |
- _annotations.add(new BreakpointAnnotation(_isolate, _instances, |
- _r.queue, bpt)); |
+ _annotations.add( |
+ new BreakpointAnnotation(_isolate, _instances, _r.queue, bpt)); |
} |
} |
} |
@@ -382,9 +390,12 @@ class ScriptInsetElement extends HtmlElement implements Renderable { |
var pattern = new RegExp("library ${script.library.name}"); |
var match = pattern.firstMatch(line.text); |
if (match != null) { |
- var anno = new LibraryAnnotation(_isolate, _instances, _r.queue, |
- _loadedScript.library, |
- Uris.inspect(isolate, object: _loadedScript.library)); |
+ var anno = new LibraryAnnotation( |
+ _isolate, |
+ _instances, |
+ _r.queue, |
+ _loadedScript.library, |
+ Uris.inspect(isolate, object: _loadedScript.library)); |
anno.line = line.line; |
anno.columnStart = match.start + 8; |
anno.columnStop = match.end; |
@@ -394,9 +405,12 @@ class ScriptInsetElement extends HtmlElement implements Renderable { |
pattern = new RegExp("part of ${script.library.name}"); |
match = pattern.firstMatch(line.text); |
if (match != null) { |
- var anno = new LibraryAnnotation(_isolate, _instances, _r.queue, |
- _loadedScript.library, |
- Uris.inspect(isolate, object: _loadedScript.library)); |
+ var anno = new LibraryAnnotation( |
+ _isolate, |
+ _instances, |
+ _r.queue, |
+ _loadedScript.library, |
+ Uris.inspect(isolate, object: _loadedScript.library)); |
anno.line = line.line; |
anno.columnStart = match.start + 8; |
anno.columnStop = match.end; |
@@ -445,7 +459,7 @@ class ScriptInsetElement extends HtmlElement implements Renderable { |
M.Library target = resolveDependency(match[1]); |
if (target != null) { |
var anno = new LibraryAnnotation(_isolate, _instances, _r.queue, |
- target, Uris.inspect(isolate, object: target)); |
+ target, Uris.inspect(isolate, object: target)); |
anno.line = line.line; |
anno.columnStart = match.start + 8; |
anno.columnStop = match.end - 1; |
@@ -487,7 +501,7 @@ class ScriptInsetElement extends HtmlElement implements Renderable { |
S.Script part = resolvePart(match[1]); |
if (part != null) { |
var anno = new PartAnnotation(_isolate, _instances, _r.queue, part, |
- Uris.inspect(isolate, object: part)); |
+ Uris.inspect(isolate, object: part)); |
anno.line = line.line; |
anno.columnStart = match.start + 6; |
anno.columnStop = match.end - 1; |
@@ -503,7 +517,7 @@ class ScriptInsetElement extends HtmlElement implements Renderable { |
for (var cls in script.library.classes) { |
if ((cls.location != null) && (cls.location.script == script)) { |
var a = new ClassDeclarationAnnotation(_isolate, _instances, _r.queue, |
- cls, Uris.inspect(isolate, object: cls)); |
+ cls, Uris.inspect(isolate, object: cls)); |
_annotations.add(a); |
} |
} |
@@ -514,7 +528,7 @@ class ScriptInsetElement extends HtmlElement implements Renderable { |
for (var field in script.library.variables) { |
if ((field.location != null) && (field.location.script == script)) { |
var a = new FieldDeclarationAnnotation(_isolate, _instances, _r.queue, |
- field, Uris.inspect(isolate, object: field)); |
+ field, Uris.inspect(isolate, object: field)); |
_annotations.add(a); |
} |
} |
@@ -522,7 +536,7 @@ class ScriptInsetElement extends HtmlElement implements Renderable { |
for (var field in cls.fields) { |
if ((field.location != null) && (field.location.script == script)) { |
var a = new FieldDeclarationAnnotation(_isolate, _instances, _r.queue, |
- field, Uris.inspect(isolate, object: field)); |
+ field, Uris.inspect(isolate, object: field)); |
_annotations.add(a); |
} |
} |
@@ -539,7 +553,7 @@ class ScriptInsetElement extends HtmlElement implements Renderable { |
// We annotate a field declaration with the field instead of the |
// implicit getter or setter. |
var a = new FunctionDeclarationAnnotation(_isolate, _instances, |
- _r.queue, func, Uris.inspect(isolate, object: func)); |
+ _r.queue, func, Uris.inspect(isolate, object: func)); |
_annotations.add(a); |
} |
} |
@@ -553,7 +567,7 @@ class ScriptInsetElement extends HtmlElement implements Renderable { |
// We annotate a field declaration with the field instead of the |
// implicit getter or setter. |
var a = new FunctionDeclarationAnnotation(_isolate, _instances, |
- _r.queue, func, Uris.inspect(isolate, object: func)); |
+ _r.queue, func, Uris.inspect(isolate, object: func)); |
_annotations.add(a); |
} |
} |
@@ -562,8 +576,8 @@ class ScriptInsetElement extends HtmlElement implements Renderable { |
void addCallSiteAnnotations() { |
for (var callSite in _callSites) { |
- _annotations.add(new CallSiteAnnotation(_isolate, _instances, _r.queue, |
- callSite)); |
+ _annotations.add( |
+ new CallSiteAnnotation(_isolate, _instances, _r.queue, callSite)); |
} |
} |
@@ -575,15 +589,12 @@ class ScriptInsetElement extends HtmlElement implements Renderable { |
for (var variable in _variables) { |
// Find variable usage locations. |
var locations = script.scanForLocalVariableLocations( |
- variable['name'], |
- variable['_tokenPos'], |
- variable['_endTokenPos']); |
+ variable['name'], variable['_tokenPos'], variable['_endTokenPos']); |
// Annotate locations. |
for (var location in locations) { |
- _annotations.add(new LocalVariableAnnotation(_isolate, _instances, |
- _r.queue, location, |
- variable['value'])); |
+ _annotations.add(new LocalVariableAnnotation( |
+ _isolate, _instances, _r.queue, location, variable['value'])); |
} |
} |
} |
@@ -598,16 +609,14 @@ class ScriptInsetElement extends HtmlElement implements Renderable { |
button.disabled = false; |
}); |
button.title = 'Refresh coverage'; |
- button.children = [ |
- _iconRefresh.clone(true) |
- ]; |
+ button.children = [_iconRefresh.clone(true)]; |
return button; |
} |
ButtonElement _newToggleProfileButton() { |
ButtonElement button = new ButtonElement(); |
- button.classes = _includeProfile ? ['toggle-profile', 'enabled'] |
- : ['toggle-profile']; |
+ button.classes = |
+ _includeProfile ? ['toggle-profile', 'enabled'] : ['toggle-profile']; |
button.title = 'Toggle CPU profile information'; |
button.onClick.listen((_) async { |
_includeProfile = !_includeProfile; |
@@ -616,9 +625,7 @@ class ScriptInsetElement extends HtmlElement implements Renderable { |
_refresh(); |
button.disabled = false; |
}); |
- button.children = [ |
- _iconWhatsHot.clone(true) |
- ]; |
+ button.children = [_iconWhatsHot.clone(true)]; |
return button; |
} |
@@ -637,8 +644,8 @@ class ScriptInsetElement extends HtmlElement implements Renderable { |
} |
var endLine = (_endPos != null |
- ? _loadedScript.tokenToLine(_endPos) |
- : script.lines.length + _loadedScript.lineOffset); |
+ ? _loadedScript.tokenToLine(_endPos) |
+ : script.lines.length + _loadedScript.lineOffset); |
var lineNumPad = endLine.toString().length; |
_annotationsCursor = 0; |
@@ -656,7 +663,7 @@ class ScriptInsetElement extends HtmlElement implements Renderable { |
int lastBlank = i - 1; |
if (blankLineCount < 4) { |
// Too few blank lines for an elipsis. |
- for (int j = firstBlank; j <= lastBlank; j++) { |
+ for (int j = firstBlank; j <= lastBlank; j++) { |
table.append(lineElement(script.getLine(j), lineNumPad)); |
} |
} else { |
@@ -793,17 +800,18 @@ class ScriptInsetElement extends HtmlElement implements Renderable { |
busy = true; |
if (line.breakpoints == null) { |
// No breakpoint. Add it. |
- line.script.isolate.addBreakpoint(line.script, line.line) |
- .catchError((e, st) { |
- if (e is! S.ServerRpcException || |
- (e as S.ServerRpcException).code != |
- S.ServerRpcException.kCannotAddBreakpoint) { |
- ObservatoryApplication.app.handleException(e, st); |
- }}) |
- .whenComplete(() { |
- busy = false; |
- update(); |
- }); |
+ line.script.isolate |
+ .addBreakpoint(line.script, line.line) |
+ .catchError((e, st) { |
+ if (e is! S.ServerRpcException || |
+ (e as S.ServerRpcException).code != |
+ S.ServerRpcException.kCannotAddBreakpoint) { |
+ ObservatoryApplication.app.handleException(e, st); |
+ } |
+ }).whenComplete(() { |
+ busy = false; |
+ update(); |
+ }); |
} else { |
// Existing breakpoint. Remove it. |
List pending = []; |
@@ -886,7 +894,7 @@ class ScriptInsetElement extends HtmlElement implements Renderable { |
var position = 0; |
consumeUntil(var stop) { |
if (stop <= position) { |
- return null; // Empty gap between annotations/boundries. |
+ return null; // Empty gap between annotations/boundries. |
} |
if (stop > line.text.length) { |
// Approximated token length can run past the end of the line. |
@@ -960,9 +968,10 @@ void addInfoBox(Element content, Function infoBoxGenerator) { |
infoBox.style.whiteSpace = 'normal'; |
content.append(infoBox); |
} |
+ |
content.onClick.listen((event) { |
show = !show; |
- if (infoBox == null) buildInfoBox(); // Created lazily on the first click. |
+ if (infoBox == null) buildInfoBox(); // Created lazily on the first click. |
infoBox.style.display = show ? 'block' : 'none'; |
content.style.backgroundColor = show ? 'white' : originalBackground; |
}); |
@@ -972,7 +981,6 @@ void addInfoBox(Element content, Function infoBoxGenerator) { |
content.style.cursor = 'pointer'; |
} |
- |
void addLink(Element content, String target) { |
// Ick, destructive but still compatible with also adding an info box. |
var a = new AnchorElement(href: target); |
@@ -981,7 +989,6 @@ void addLink(Element content, String target) { |
content.append(a); |
} |
- |
abstract class Annotation implements Comparable<Annotation> { |
M.IsolateRef _isolate; |
M.InstanceRepository _instances; |
@@ -1036,16 +1043,15 @@ abstract class Annotation implements Comparable<Annotation> { |
} |
class CurrentExecutionAnnotation extends Annotation { |
- int priority = 0; // highest priority. |
+ int priority = 0; // highest priority. |
CurrentExecutionAnnotation(M.IsolateRef isolate, |
- M.InstanceRepository instances, |
- RenderingQueue queue) |
- : super(isolate, instances, queue); |
+ M.InstanceRepository instances, RenderingQueue queue) |
+ : super(isolate, instances, queue); |
void applyStyleTo(element) { |
if (element == null) { |
- return; // TODO(rmacnak): Handling overlapping annotations. |
+ return; // TODO(rmacnak): Handling overlapping annotations. |
} |
element.classes.add("currentCol"); |
element.title = "Current execution"; |
@@ -1057,14 +1063,14 @@ class BreakpointAnnotation extends Annotation { |
int priority = 1; |
BreakpointAnnotation(M.IsolateRef isolate, M.InstanceRepository instances, |
- RenderingQueue queue, this.bpt) |
- : super(isolate, instances, queue) { |
+ RenderingQueue queue, this.bpt) |
+ : super(isolate, instances, queue) { |
var script = bpt.location.script; |
var location = bpt.location; |
if (location.tokenPos != null) { |
var pos = location.tokenPos; |
line = script.tokenToLine(pos); |
- columnStart = script.tokenToCol(pos) - 1; // tokenToCol is 1-origin. |
+ columnStart = script.tokenToCol(pos) - 1; // tokenToCol is 1-origin. |
} else if (location is M.UnresolvedSourceLocation) { |
line = location.line; |
columnStart = location.column; |
@@ -1081,7 +1087,7 @@ class BreakpointAnnotation extends Annotation { |
void applyStyleTo(element) { |
if (element == null) { |
- return; // TODO(rmacnak): Handling overlapping annotations. |
+ return; // TODO(rmacnak): Handling overlapping annotations. |
} |
var script = bpt.location.script; |
var pos = bpt.location.tokenPos; |
@@ -1102,12 +1108,12 @@ class LibraryAnnotation extends Annotation { |
int priority = 2; |
LibraryAnnotation(M.IsolateRef isolate, M.InstanceRepository instances, |
- RenderingQueue queue, this.target, this.url) |
- : super(isolate, instances, queue); |
+ RenderingQueue queue, this.target, this.url) |
+ : super(isolate, instances, queue); |
void applyStyleTo(element) { |
if (element == null) { |
- return; // TODO(rmacnak): Handling overlapping annotations. |
+ return; // TODO(rmacnak): Handling overlapping annotations. |
} |
element.title = "library ${target.uri}"; |
addLink(element, url); |
@@ -1120,12 +1126,12 @@ class PartAnnotation extends Annotation { |
int priority = 2; |
PartAnnotation(M.IsolateRef isolate, M.InstanceRepository instances, |
- RenderingQueue queue, this.part, this.url) |
- : super(isolate, instances, queue); |
+ RenderingQueue queue, this.part, this.url) |
+ : super(isolate, instances, queue); |
void applyStyleTo(element) { |
if (element == null) { |
- return; // TODO(rmacnak): Handling overlapping annotations. |
+ return; // TODO(rmacnak): Handling overlapping annotations. |
} |
element.title = "script ${part.uri}"; |
addLink(element, url); |
@@ -1137,8 +1143,8 @@ class LocalVariableAnnotation extends Annotation { |
int priority = 2; |
LocalVariableAnnotation(M.IsolateRef isolate, M.InstanceRepository instances, |
- RenderingQueue queue, S.LocalVarLocation location, |
- this.value): super(isolate, instances, queue) { |
+ RenderingQueue queue, S.LocalVarLocation location, this.value) |
+ : super(isolate, instances, queue) { |
line = location.line; |
columnStart = location.column; |
columnStop = location.endColumn; |
@@ -1146,7 +1152,7 @@ class LocalVariableAnnotation extends Annotation { |
void applyStyleTo(element) { |
if (element == null) { |
- return; // TODO(rmacnak): Handling overlapping annotations. |
+ return; // TODO(rmacnak): Handling overlapping annotations. |
} |
element.style.fontWeight = "bold"; |
element.title = "${value.shortName}"; |
@@ -1158,22 +1164,22 @@ class CallSiteAnnotation extends Annotation { |
int priority = 2; |
CallSiteAnnotation(M.IsolateRef isolate, M.InstanceRepository instances, |
- RenderingQueue queue, this.callSite) |
- : super(isolate, instances, queue) { |
+ RenderingQueue queue, this.callSite) |
+ : super(isolate, instances, queue) { |
line = callSite.line; |
- columnStart = callSite.column - 1; // Call site is 1-origin. |
+ columnStart = callSite.column - 1; // Call site is 1-origin. |
var tokenLength = callSite.script.guessTokenLength(line, columnStart); |
if (tokenLength == null) { |
- tokenLength = callSite.name.length; // Approximate. |
- if (callSite.name.startsWith("get:") || |
- callSite.name.startsWith("set:")) tokenLength -= 4; |
+ tokenLength = callSite.name.length; // Approximate. |
+ if (callSite.name.startsWith("get:") || callSite.name.startsWith("set:")) |
+ tokenLength -= 4; |
} |
columnStop = columnStart + tokenLength; |
} |
void applyStyleTo(element) { |
if (element == null) { |
- return; // TODO(rmacnak): Handling overlapping annotations. |
+ return; // TODO(rmacnak): Handling overlapping annotations. |
} |
element.style.fontWeight = "bold"; |
element.title = "Call site: ${callSite.name}"; |
@@ -1211,8 +1217,8 @@ abstract class DeclarationAnnotation extends Annotation { |
int priority = 2; |
DeclarationAnnotation(M.IsolateRef isolate, M.InstanceRepository instances, |
- RenderingQueue queue, decl, this.url) |
- : super(isolate, instances, queue) { |
+ RenderingQueue queue, decl, this.url) |
+ : super(isolate, instances, queue) { |
assert(decl.loaded); |
S.SourceLocation location = decl.location; |
if (location == null) { |
@@ -1249,15 +1255,18 @@ abstract class DeclarationAnnotation extends Annotation { |
class ClassDeclarationAnnotation extends DeclarationAnnotation { |
S.Class klass; |
- ClassDeclarationAnnotation(M.IsolateRef isolate, |
- M.InstanceRepository instances, |
- RenderingQueue queue, S.Class cls, String url) |
- : klass = cls, |
- super(isolate, instances, queue, cls, url); |
+ ClassDeclarationAnnotation( |
+ M.IsolateRef isolate, |
+ M.InstanceRepository instances, |
+ RenderingQueue queue, |
+ S.Class cls, |
+ String url) |
+ : klass = cls, |
+ super(isolate, instances, queue, cls, url); |
void applyStyleTo(element) { |
if (element == null) { |
- return; // TODO(rmacnak): Handling overlapping annotations. |
+ return; // TODO(rmacnak): Handling overlapping annotations. |
} |
element.title = "class ${klass.name}"; |
addLink(element, url); |
@@ -1267,15 +1276,18 @@ class ClassDeclarationAnnotation extends DeclarationAnnotation { |
class FieldDeclarationAnnotation extends DeclarationAnnotation { |
S.Field field; |
- FieldDeclarationAnnotation(M.IsolateRef isolate, |
- M.InstanceRepository instances, |
- RenderingQueue queue, S.Field fld, String url) |
- : field = fld, |
- super(isolate, instances, queue, fld, url); |
+ FieldDeclarationAnnotation( |
+ M.IsolateRef isolate, |
+ M.InstanceRepository instances, |
+ RenderingQueue queue, |
+ S.Field fld, |
+ String url) |
+ : field = fld, |
+ super(isolate, instances, queue, fld, url); |
void applyStyleTo(element) { |
if (element == null) { |
- return; // TODO(rmacnak): Handling overlapping annotations. |
+ return; // TODO(rmacnak): Handling overlapping annotations. |
} |
var tooltip = "field ${field.name}"; |
element.title = tooltip; |
@@ -1286,16 +1298,18 @@ class FieldDeclarationAnnotation extends DeclarationAnnotation { |
class FunctionDeclarationAnnotation extends DeclarationAnnotation { |
S.ServiceFunction function; |
- FunctionDeclarationAnnotation(M.IsolateRef isolate, |
- M.InstanceRepository instances, |
- RenderingQueue queue, S.ServiceFunction func, |
- String url) |
- : function = func, |
- super(isolate, instances, queue, func, url); |
+ FunctionDeclarationAnnotation( |
+ M.IsolateRef isolate, |
+ M.InstanceRepository instances, |
+ RenderingQueue queue, |
+ S.ServiceFunction func, |
+ String url) |
+ : function = func, |
+ super(isolate, instances, queue, func, url); |
void applyStyleTo(element) { |
if (element == null) { |
- return; // TODO(rmacnak): Handling overlapping annotations. |
+ return; // TODO(rmacnak): Handling overlapping annotations. |
} |
var tooltip = "method ${function.name}"; |
if (function.isOptimizable == false) { |
@@ -1311,8 +1325,8 @@ class FunctionDeclarationAnnotation extends DeclarationAnnotation { |
if (function.isOptimizable == false || |
function.isInlinable == false || |
- function.deoptimizations >0) { |
- element.style.backgroundColor = "#EEA7A7"; // Low-saturation red. |
+ function.deoptimizations > 0) { |
+ element.style.backgroundColor = "#EEA7A7"; // Low-saturation red. |
} |
addLink(element, url); |
@@ -1322,8 +1336,8 @@ class FunctionDeclarationAnnotation extends DeclarationAnnotation { |
class ScriptLineProfile { |
ScriptLineProfile(this.line, this.sampleCount); |
- static const kHotThreshold = 0.05; // 5%. |
- static const kMediumThreshold = 0.02; // 2%. |
+ static const kHotThreshold = 0.05; // 5%. |
+ static const kMediumThreshold = 0.02; // 2%. |
final int line; |
final int sampleCount; |
@@ -1360,27 +1374,31 @@ class ScriptLineProfile { |
} |
final SvgSvgElement _iconRefresh = new SvgSvgElement() |
- ..setAttribute('width', '24') |
- ..setAttribute('height', '24') |
- ..children = [ |
- new PathElement() |
- ..setAttribute('d', 'M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 ' |
- '3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 ' |
- '7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 ' |
- '0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 ' |
- '1.78L13 11h7V4l-2.35 2.35z') |
- ]; |
+ ..setAttribute('width', '24') |
+ ..setAttribute('height', '24') |
+ ..children = [ |
+ new PathElement() |
+ ..setAttribute( |
+ 'd', |
+ 'M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 ' |
+ '3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 ' |
+ '7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 ' |
+ '0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 ' |
+ '1.78L13 11h7V4l-2.35 2.35z') |
+ ]; |
final SvgSvgElement _iconWhatsHot = new SvgSvgElement() |
- ..setAttribute('width', '24') |
- ..setAttribute('height', '24') |
- ..children = [ |
- new PathElement() |
- ..setAttribute('d', 'M13.5.67s.74 2.65.74 4.8c0 2.06-1.35 3.73-3.41 ' |
- '3.73-2.07 0-3.63-1.67-3.63-3.73l.03-.36C5.21 7.51 ' |
- '4 10.62 4 14c0 4.42 3.58 8 8 8s8-3.58 8-8C20 8.61 ' |
- '17.41 3.8 13.5.67zM11.71 19c-1.78 ' |
- '0-3.22-1.4-3.22-3.14 0-1.62 1.05-2.76 2.81-3.12 ' |
- '1.77-.36 3.6-1.21 4.62-2.58.39 1.29.59 2.65.59 ' |
- '4.04 0 2.65-2.15 4.8-4.8 4.8z') |
- ]; |
+ ..setAttribute('width', '24') |
+ ..setAttribute('height', '24') |
+ ..children = [ |
+ new PathElement() |
+ ..setAttribute( |
+ 'd', |
+ 'M13.5.67s.74 2.65.74 4.8c0 2.06-1.35 3.73-3.41 ' |
+ '3.73-2.07 0-3.63-1.67-3.63-3.73l.03-.36C5.21 7.51 ' |
+ '4 10.62 4 14c0 4.42 3.58 8 8 8s8-3.58 8-8C20 8.61 ' |
+ '17.41 3.8 13.5.67zM11.71 19c-1.78 ' |
+ '0-3.22-1.4-3.22-3.14 0-1.62 1.05-2.76 2.81-3.12 ' |
+ '1.77-.36 3.6-1.21 4.62-2.58.39 1.29.59 2.65.59 ' |
+ '4.04 0 2.65-2.15 4.8-4.8 4.8z') |
+ ]; |