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

Unified Diff: runtime/bin/vmservice/client/lib/src/elements/instance_ref.dart

Issue 177473004: Handle collected objects and expired handles more gracefully. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: gen js Created 6 years, 9 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
Index: runtime/bin/vmservice/client/lib/src/elements/instance_ref.dart
diff --git a/runtime/bin/vmservice/client/lib/src/elements/instance_ref.dart b/runtime/bin/vmservice/client/lib/src/elements/instance_ref.dart
index 255f041725ed20c05e4852b4663ff2bd13e77cf2..a25647223a77b27a148e21f6fbc893f8f04d6fc0 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/instance_ref.dart
+++ b/runtime/bin/vmservice/client/lib/src/elements/instance_ref.dart
@@ -19,6 +19,25 @@ class InstanceRefElement extends ServiceRefElement {
return ref['preview'];
}
+ String get hoverText {
+ if (ref != null) {
+ if (ref['type'] == '@Null') {
+ if (ref['id'] == 'objects/optimized-out') {
+ return 'This object is no longer needed and has been removed by the optimizing compiler.';
+ } else if (ref['id'] == 'objects/collected') {
+ return 'This object has been reclaimed by the garbage collector.';
+ } else if (ref['id'] == 'objects/expired') {
+ return 'The handle to this object has expired. Consider refreshing the page.';
+ } else if (ref['id'] == 'objects/not-initialized') {
+ return 'This object will be initialized once it is accessed by the program.';
+ } else if (ref['id'] == 'objects/being-initialized') {
+ return 'This object is currently being initialized.';
+ }
+ }
+ }
+ return '';
+ }
+
// TODO(turnidge): This is here to workaround vm/dart2js differences.
dynamic expander() {
return expandEvent;
@@ -28,6 +47,17 @@ class InstanceRefElement extends ServiceRefElement {
print("Calling expandEvent");
if (expand) {
isolate.getMap(objectId).then((map) {
+ if (map['type'] == 'Null') {
+ // The object is no longer available. For example, the
+ // object id may have expired or the object may have been
+ // collected by the gc.
+ map['type'] = '@Null';
+ ref = map;
+ } else {
+ ref['fields'] = map['fields'];
+ ref['elements'] = map['elements'];
+ ref['length'] = map['length'];
+ }
ref['fields'] = map['fields'];
ref['elements'] = map['elements'];
ref['length'] = map['length'];

Powered by Google App Engine
This is Rietveld 408576698