Skip to content

Commit e3a9d70

Browse files
rmacnak-googlecommit-bot@chromium.org
authored andcommitted
[vm, service] Remove unsafe querying across threads during Isolate::PrintJSON.
Note this would be unsafe even if under a safepoint operation because not all of the queried threads participate in safepoints. TEST=tsan Bug: #44304 Bug: #44385 Change-Id: I8156e8c6049165e5c53b66c3391f3e8a496ddaaf Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/175000 Commit-Queue: Ryan Macnak <[email protected]> Reviewed-by: Alexander Aprelev <[email protected]> Reviewed-by: Ben Konyi <[email protected]>
1 parent bae438c commit e3a9d70

30 files changed

+816
-1469
lines changed

pkg/vm_service/test/get_isolate_rpc_test.dart

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@ var tests = <VMTest>[
2222
expect(result.pauseOnExit, isFalse);
2323
expect(result.pauseEvent.type, 'Event');
2424
expect(result.error, isNull);
25-
expect(result.json['_numZoneHandles'], isPositive);
26-
expect(result.json['_numScopedHandles'], isPositive);
2725
expect(result.rootLib, isNotNull);
2826
expect(result.libraries.length, isPositive);
2927
expect(result.libraries[0], isNotNull);

runtime/observatory/lib/models.dart

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,12 @@ part 'src/models/objects/single_target_cache.dart';
5050
part 'src/models/objects/source_location.dart';
5151
part 'src/models/objects/subtype_test_cache.dart';
5252
part 'src/models/objects/target.dart';
53-
part 'src/models/objects/thread.dart';
5453
part 'src/models/objects/timeline.dart';
5554
part 'src/models/objects/timeline_event.dart';
5655
part 'src/models/objects/type_arguments.dart';
5756
part 'src/models/objects/unknown.dart';
5857
part 'src/models/objects/unlinked_call.dart';
5958
part 'src/models/objects/vm.dart';
60-
part 'src/models/objects/zone.dart';
6159

6260
part 'src/models/repositories/allocation_profile.dart';
6361
part 'src/models/repositories/breakpoint.dart';

runtime/observatory/lib/src/elements/isolate_view.dart

Lines changed: 0 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,6 @@ class IsolateViewElement extends CustomElement implements Renderable {
116116
void render() {
117117
final uptime = new DateTime.now().difference(_isolate.startTime!);
118118
final libraries = _isolate.libraries!.toList();
119-
final List<M.Thread> threads = _isolate.threads!.toList();
120119
children = <Element>[
121120
navBar(<Element>[
122121
new NavTopMenuElement(queue: _r.queue).element,
@@ -256,26 +255,6 @@ class IsolateViewElement extends CustomElement implements Renderable {
256255
..classes = ['memberValue']
257256
..text = '${_isolate.extensionRPCs}'
258257
],
259-
new DivElement()
260-
..classes = ['memberItem']
261-
..children = <Element>[
262-
new DivElement()
263-
..classes = ['memberName']
264-
..text = 'allocated zone handle count',
265-
new DivElement()
266-
..classes = ['memberValue']
267-
..text = '${_isolate.numZoneHandles}'
268-
],
269-
new DivElement()
270-
..classes = ['memberItem']
271-
..children = <Element>[
272-
new DivElement()
273-
..classes = ['memberName']
274-
..text = 'allocated scoped handle count',
275-
new DivElement()
276-
..classes = ['memberValue']
277-
..text = '${_isolate.numScopedHandles}'
278-
],
279258
new DivElement()
280259
..classes = ['memberItem']
281260
..children = <Element>[
@@ -289,19 +268,6 @@ class IsolateViewElement extends CustomElement implements Renderable {
289268
..text = 'object store'
290269
]
291270
],
292-
new DivElement()
293-
..classes = ['memberItem']
294-
..children = <Element>[
295-
new DivElement()
296-
..classes = ['memberName']
297-
..text = 'zone capacity high watermark'
298-
..title = '''The maximum amount of native zone memory
299-
allocated by the isolate over it\'s life.''',
300-
new DivElement()
301-
..classes = ['memberValue']
302-
..text = Utils.formatSize(_isolate.zoneHighWatermark)
303-
..title = '${_isolate.zoneHighWatermark}B'
304-
],
305271
new BRElement(),
306272
new DivElement()
307273
..classes = ['memberItem']
@@ -324,21 +290,6 @@ class IsolateViewElement extends CustomElement implements Renderable {
324290
.element
325291
]
326292
],
327-
new DivElement()
328-
..classes = ['memberItem']
329-
..children = <Element>[
330-
new DivElement()
331-
..classes = ['memberName']
332-
..text = 'threads (${threads.length})',
333-
new DivElement()
334-
..classes = ['memberValue']
335-
..children = <Element>[
336-
(new CurlyBlockElement(queue: _r.queue)
337-
..content =
338-
threads.map<Element>(_populateThreadInfo))
339-
.element
340-
]
341-
]
342293
],
343294
new HRElement(),
344295
new EvalBoxElement(_isolate, _isolate.rootLibrary!, _objects, _eval,
@@ -360,31 +311,6 @@ class IsolateViewElement extends CustomElement implements Renderable {
360311
];
361312
}
362313

363-
DivElement _populateThreadInfo(M.Thread t) {
364-
return new DivElement()
365-
..classes = ['indent']
366-
..children = <Element>[
367-
new SpanElement()..text = '${t.id} ',
368-
(new CurlyBlockElement(queue: _r.queue)
369-
..content = <Element>[
370-
new DivElement()
371-
..classes = ['indent']
372-
..text = 'kind ${t.kindString}',
373-
new DivElement()
374-
..classes = ['indent']
375-
..title = '${t.zoneHighWatermark}B'
376-
..text = 'zone capacity high watermark '
377-
'${Utils.formatSize(t.zoneHighWatermark)}',
378-
new DivElement()
379-
..classes = ['indent']
380-
..title = '${t.zoneCapacity}B'
381-
..text = 'current zone capacity ' +
382-
'${Utils.formatSize(t.zoneCapacity)}',
383-
])
384-
.element
385-
];
386-
}
387-
388314
Future _loadExtraData() async {
389315
_function = null;
390316
_rootScript = null;

runtime/observatory/lib/src/models/objects/isolate.dart

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -57,20 +57,6 @@ abstract class Isolate extends IsolateRef {
5757
/// [optional] The error that is causing this isolate to exit, if applicable.
5858
Error? get error;
5959

60-
/// The list of threads associated with this isolate.
61-
Iterable<Thread>? get threads;
62-
63-
/// The maximum amount of zone memory in bytes allocated by the isolate in
64-
/// all threads at a given time. Calculated using the high watermarks of each
65-
/// thread alive when a thread is unscheduled.
66-
int? get zoneHighWatermark;
67-
68-
/// The number of zone handles currently held by this isolate.
69-
int? get numZoneHandles;
70-
71-
/// The number of scoped handles currently held by this isolate.
72-
int? get numScopedHandles;
73-
7460
/// The current pause on exception mode for this isolate.
7561
//ExceptionPauseMode get exceptionPauseMode;
7662

runtime/observatory/lib/src/models/objects/thread.dart

Lines changed: 0 additions & 31 deletions
This file was deleted.

runtime/observatory/lib/src/models/objects/zone.dart

Lines changed: 0 additions & 14 deletions
This file was deleted.

runtime/observatory/lib/src/service/object.dart

Lines changed: 0 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -238,9 +238,6 @@ abstract class ServiceObject implements M.ObjectRef {
238238
case 'SourceLocation':
239239
obj = new SourceLocation._empty(owner);
240240
break;
241-
case '_Thread':
242-
obj = new Thread._empty(owner);
243-
break;
244241
case 'UnresolvedSourceLocation':
245242
obj = new UnresolvedSourceLocation._empty(owner);
246243
break;
@@ -1617,18 +1614,6 @@ class Isolate extends ServiceObjectOwner implements M.Isolate {
16171614
DartError? error;
16181615
SnapshotReader? _snapshotFetch;
16191616

1620-
List<Thread> get threads => _threads;
1621-
final List<Thread> _threads = <Thread>[];
1622-
1623-
int get zoneHighWatermark => _zoneHighWatermark;
1624-
int _zoneHighWatermark = 0;
1625-
1626-
int get numZoneHandles => _numZoneHandles;
1627-
int _numZoneHandles = 0;
1628-
1629-
int get numScopedHandles => _numScopedHandles;
1630-
int _numScopedHandles = 0;
1631-
16321617
bool? isSystemIsolate;
16331618

16341619
void _loadHeapSnapshot(ServiceEvent event) {
@@ -1731,23 +1716,6 @@ class Isolate extends ServiceObjectOwner implements M.Isolate {
17311716
if (map['extensionRPCs'] != null) {
17321717
for (String e in map['extensionRPCs']) extensionRPCs.add(e);
17331718
}
1734-
1735-
threads.clear();
1736-
if (map['_threads'] != null) {
1737-
for (Thread t in map['_threads']) threads.add(t);
1738-
}
1739-
1740-
int currentZoneHighWatermark = 0;
1741-
for (var i = 0; i < threads.length; i++) {
1742-
currentZoneHighWatermark += threads[i].zoneHighWatermark!;
1743-
}
1744-
1745-
if (currentZoneHighWatermark > _zoneHighWatermark) {
1746-
_zoneHighWatermark = currentZoneHighWatermark;
1747-
}
1748-
1749-
_numZoneHandles = map['_numZoneHandles'];
1750-
_numScopedHandles = map['_numScopedHandles'];
17511719
}
17521720

17531721
Future<TagProfile> updateTagProfile() {
@@ -3285,60 +3253,6 @@ class Sentinel extends ServiceObject implements M.Sentinel {
32853253
String get shortName => valueAsString;
32863254
}
32873255

3288-
class Thread extends ServiceObject implements M.Thread {
3289-
M.ThreadKind? get kind => _kind;
3290-
M.ThreadKind? _kind;
3291-
String? get kindString => _kindString;
3292-
String? _kindString;
3293-
int? get zoneHighWatermark => _zoneHighWatermark;
3294-
int? _zoneHighWatermark;
3295-
int? get zoneCapacity => _zoneCapacity;
3296-
int? _zoneCapacity;
3297-
3298-
Thread._empty(ServiceObjectOwner? owner) : super._empty(owner);
3299-
3300-
void _update(Map map, bool mapIsRef) {
3301-
String rawKind = map['kind'];
3302-
3303-
switch (rawKind) {
3304-
case "kUnknownTask":
3305-
_kind = M.ThreadKind.unknownTask;
3306-
_kindString = 'unknown';
3307-
break;
3308-
case "kMutatorTask":
3309-
_kind = M.ThreadKind.mutatorTask;
3310-
_kindString = 'mutator';
3311-
break;
3312-
case "kCompilerTask":
3313-
_kind = M.ThreadKind.compilerTask;
3314-
_kindString = 'compiler';
3315-
break;
3316-
case "kSweeperTask":
3317-
_kind = M.ThreadKind.sweeperTask;
3318-
_kindString = 'sweeper';
3319-
break;
3320-
case "kMarkerTask":
3321-
_kind = M.ThreadKind.markerTask;
3322-
_kindString = 'marker';
3323-
break;
3324-
default:
3325-
assert(false);
3326-
}
3327-
3328-
_zoneHighWatermark = int.parse(map['_zoneHighWatermark']);
3329-
_zoneCapacity = int.parse(map['_zoneCapacity']);
3330-
}
3331-
}
3332-
3333-
class Zone implements M.Zone {
3334-
int get capacity => _capacity;
3335-
int _capacity;
3336-
int get used => _used;
3337-
int _used;
3338-
3339-
Zone(this._capacity, this._used);
3340-
}
3341-
33423256
class Field extends HeapObject implements M.Field {
33433257
// Library or Class.
33443258
HeapObject? dartOwner;

runtime/observatory/observatory_sources.gni

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,14 +183,12 @@ observatory_sources = [
183183
"lib/src/models/objects/source_location.dart",
184184
"lib/src/models/objects/subtype_test_cache.dart",
185185
"lib/src/models/objects/target.dart",
186-
"lib/src/models/objects/thread.dart",
187186
"lib/src/models/objects/timeline.dart",
188187
"lib/src/models/objects/timeline_event.dart",
189188
"lib/src/models/objects/type_arguments.dart",
190189
"lib/src/models/objects/unknown.dart",
191190
"lib/src/models/objects/unlinked_call.dart",
192191
"lib/src/models/objects/vm.dart",
193-
"lib/src/models/objects/zone.dart",
194192
"lib/src/models/repositories/allocation_profile.dart",
195193
"lib/src/models/repositories/breakpoint.dart",
196194
"lib/src/models/repositories/class.dart",

runtime/observatory/tests/service/get_isolate_rpc_test.dart

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@ var tests = <VMTest>[
2525
expect(result['pauseOnExit'], isFalse);
2626
expect(result['pauseEvent']['type'], equals('Event'));
2727
expect(result['error'], isNull);
28-
expect(result['_numZoneHandles'], isPositive);
29-
expect(result['_numScopedHandles'], isPositive);
3028
expect(result['rootLib']['type'], equals('@Library'));
3129
expect(result['libraries'].length, isPositive);
3230
expect(result['libraries'][0]['type'], equals('@Library'));

runtime/observatory/tests/service/get_zone_memory_info_rpc_test.dart

Lines changed: 0 additions & 31 deletions
This file was deleted.

runtime/observatory/tests/service/http_get_isolate_rpc_common.dart

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,6 @@ Future<Null> testeeBefore() async {
7070
Expect.isFalse(result['pauseOnExit']);
7171
Expect.equals(result['pauseEvent']['type'], 'Event');
7272
Expect.isNull(result['error']);
73-
Expect.isTrue(result['_numZoneHandles'] > 0);
74-
Expect.isTrue(result['_numScopedHandles'] > 0);
7573
Expect.equals(result['rootLib']['type'], '@Library');
7674
Expect.isTrue(result['libraries'].length > 0);
7775
Expect.equals(result['libraries'][0]['type'], '@Library');

runtime/observatory_2/lib/models.dart

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,12 @@ part 'src/models/objects/single_target_cache.dart';
5050
part 'src/models/objects/source_location.dart';
5151
part 'src/models/objects/subtype_test_cache.dart';
5252
part 'src/models/objects/target.dart';
53-
part 'src/models/objects/thread.dart';
5453
part 'src/models/objects/timeline.dart';
5554
part 'src/models/objects/timeline_event.dart';
5655
part 'src/models/objects/type_arguments.dart';
5756
part 'src/models/objects/unknown.dart';
5857
part 'src/models/objects/unlinked_call.dart';
5958
part 'src/models/objects/vm.dart';
60-
part 'src/models/objects/zone.dart';
6159

6260
part 'src/models/repositories/allocation_profile.dart';
6361
part 'src/models/repositories/breakpoint.dart';

0 commit comments

Comments
 (0)