Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(536)

Unified Diff: runtime/observatory/lib/src/service/object.dart

Issue 1275713002: Order the vm's isolate list by isolate start time. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: code review Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/observatory/lib/src/elements/debugger.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/observatory/lib/src/service/object.dart
diff --git a/runtime/observatory/lib/src/service/object.dart b/runtime/observatory/lib/src/service/object.dart
index 9124595ca4155d06eb3c969d2fe2ae286a56d57a..1c6fc0f68b0e326851d3bc2144851b5cd9e2200f 100644
--- a/runtime/observatory/lib/src/service/object.dart
+++ b/runtime/observatory/lib/src/service/object.dart
@@ -506,7 +506,8 @@ abstract class VM extends ServiceObjectOwner {
final ObservableMap<String,Isolate> _isolateCache =
new ObservableMap<String,Isolate>();
- @reflectable Iterable<Isolate> get isolates => _isolateCache.values;
+ // The list of live isolates, ordered by isolate start time.
+ final ObservableList<Isolate> isolates = new ObservableList<Isolate>();
@observable String version = 'unknown';
@observable String targetCPU;
@@ -547,7 +548,8 @@ abstract class VM extends ServiceObjectOwner {
var isolate = getFromMap(map['isolate']);
event = new ServiceObject._fromMap(isolate, map);
if (event.kind == ServiceEvent.kIsolateExit) {
- _removeIsolate(isolate.id);
+ _isolateCache.remove(isolate.id);
+ _buildIsolateList();
}
}
var eventStream = _eventStreams[streamId];
@@ -558,10 +560,27 @@ abstract class VM extends ServiceObjectOwner {
}
}
- void _removeIsolate(String isolateId) {
- assert(_isolateCache.containsKey(isolateId));
- _isolateCache.remove(isolateId);
- notifyPropertyChange(#isolates, true, false);
+ int _compareIsolates(Isolate a, Isolate b) {
+ var aStart = a.startTime;
+ var bStart = b.startTime;
+ if (aStart == null) {
+ if (bStart == null) {
+ return 0;
+ } else {
+ return 1;
+ }
+ }
+ if (bStart == null) {
+ return -1;
+ }
+ return aStart.compareTo(bStart);
+ }
+
+ void _buildIsolateList() {
+ var isolateList = _isolateCache.values.toList();
+ isolateList.sort(_compareIsolates);
+ isolates.clear();
+ isolates.addAll(isolateList);
}
void _removeDeadIsolates(List newIsolates) {
@@ -576,8 +595,8 @@ abstract class VM extends ServiceObjectOwner {
toRemove.add(id);
}
});
- toRemove.forEach((id) => _removeIsolate(id));
- notifyPropertyChange(#isolates, true, false);
+ toRemove.forEach((id) => _isolateCache.remove(id));
+ _buildIsolateList();
}
static final String _isolateIdPrefix = 'isolates/';
@@ -598,7 +617,7 @@ abstract class VM extends ServiceObjectOwner {
// Add new isolate to the cache.
isolate = new ServiceObject._fromMap(this, map);
_isolateCache[id] = isolate;
- notifyPropertyChange(#isolates, true, false);
+ _buildIsolateList();
// Eagerly load the isolate.
isolate.load().catchError((e, stack) {
@@ -1201,6 +1220,7 @@ class Isolate extends ServiceObjectOwner with Coverage {
if (map['entry'] != null) {
entry = map['entry'];
}
+ var savedStartTime = startTime;
var startTimeInMillis = map['startTime'];
startTime = new DateTime.fromMillisecondsSinceEpoch(startTimeInMillis);
notifyPropertyChange(#upTime, 0, 1);
@@ -1250,6 +1270,9 @@ class Isolate extends ServiceObjectOwner with Coverage {
libraries.clear();
libraries.addAll(map['libraries']);
libraries.sort(ServiceObject.LexicalSortName);
+ if (savedStartTime == null) {
+ vm._buildIsolateList();
+ }
}
Future<TagProfile> updateTagProfile() {
@@ -1568,7 +1591,7 @@ class Isolate extends ServiceObjectOwner with Coverage {
return Future.wait([refreshDartMetrics(), refreshNativeMetrics()]);
}
- String toString() => "Isolate($_id)";
+ String toString() => "Isolate($name)";
}
/// A [ServiceObject] which implements [ObservableMap].
« no previous file with comments | « runtime/observatory/lib/src/elements/debugger.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698