Chromium Code Reviews| Index: runtime/bin/vmservice/client/lib/src/service/object.dart |
| diff --git a/runtime/bin/vmservice/client/lib/src/service/object.dart b/runtime/bin/vmservice/client/lib/src/service/object.dart |
| index 9319efe1da46017d6367b45a0b2758dd53fb7bd2..674945ce44ecae05a3a185b44f2b54f41878eea5 100644 |
| --- a/runtime/bin/vmservice/client/lib/src/service/object.dart |
| +++ b/runtime/bin/vmservice/client/lib/src/service/object.dart |
| @@ -113,7 +113,7 @@ abstract class ServiceObject extends Observable { |
| return new Future.value(this); |
| } |
| if (_inProgressReload == null) { |
| - _inProgressReload = vm.getAsMap(link).then((ObservableMap map) { |
| + _inProgressReload = vm.getAsMap(link).then((ObservableMap map) { |
| var mapType = _stripRef(map['type']); |
| if (mapType != _serviceType) { |
| // If the type changes, return a new object instead of |
| @@ -444,6 +444,7 @@ class TagProfile { |
| class Isolate extends ServiceObjectOwner { |
| @reflectable VM get vm => owner; |
| @reflectable Isolate get isolate => this; |
| + @observable ObservableMap counters = toObservable(new ObservableMap()); |
| String get link => _id; |
| String get hashLink => '#/$_id'; |
| @@ -607,6 +608,28 @@ class Isolate extends ServiceObjectOwner { |
| topFrame = null ; |
| } |
| + var countersMap = map['tagCounters']; |
| + if (countersMap != null) { |
| + var names = countersMap['names']; |
| + var counts = countersMap['counters']; |
| + assert(names.length == counts.length); |
| + var sum = 0; |
| + for (var i = 0; i < counts.length; i++) { |
| + sum += counts[i]; |
| + } |
| + // TODO: Why does this not work without this? |
| + counters = toObservable({}); |
| + if (sum == 0) { |
| + for (var i = 0; i < names.length; i++) { |
| + counters[names[i]] = '0.0%'; |
| + } |
| + } else { |
| + for (var i = 0; i < names.length; i++) { |
| + counters[names[i]] = |
| + (counts[i] / sum * 100.0).toStringAsFixed(2) + '%'; |
| + } |
| + } |
| + } |
| var timerMap = {}; |
| map['timers'].forEach((timer) { |
| timerMap[timer['name']] = timer['time']; |
| @@ -818,6 +841,8 @@ class Script extends ServiceObject { |
| @reflectable final hits = new ObservableMap<int, int>(); |
| @observable ServiceObject library; |
| @observable String kind; |
| + @observable int firstTokenPos; |
| + @observable int lastTokenPos; |
|
turnidge
2014/04/01 19:42:48
I see where these are initialized, but I missed wh
Cutch
2014/04/02 18:26:52
Now that <script-view> uses <script-inset> we pass
|
| bool get canCache => true; |
| bool get immutable => true; |
| @@ -851,6 +876,7 @@ class Script extends ServiceObject { |
| } |
| _tokenToLine = {}; |
| _tokenToCol = {}; |
| + firstTokenPos = null; |
| for (var line in table) { |
| // Each entry begins with a line number... |
| var lineNumber = line[0]; |
| @@ -858,6 +884,11 @@ class Script extends ServiceObject { |
| // ...and is followed by (token offset, col number) pairs. |
| var tokenOffset = line[pos]; |
| var colNumber = line[pos+1]; |
| + if (firstTokenPos == null) { |
| + // Mark first token position. |
|
turnidge
2014/04/01 19:42:48
This assumes that the line number table is provide
Cutch
2014/04/02 18:26:52
I've modified the code to track the minimum and ma
|
| + firstTokenPos = tokenOffset; |
| + } |
| + lastTokenPos = tokenOffset; |
| _tokenToLine[tokenOffset] = lineNumber; |
| _tokenToCol[tokenOffset] = colNumber; |
| } |