// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. // // This test ensures that there are no long pauses when sending large objects // via exit/send. import 'dart:async'; import 'dart:isolate'; import 'latency.dart'; Future main() async { final statsFuture = measureEventLoopLatency( const Duration(milliseconds: 1), 4000, work: () { // Every 1 ms we allocate some objects which may trigger GC some time. for (int i = 0; i < 32; i++) { List.filled(32 * 1024 ~/ 8, null); } }, ); final result = await compute(() { final l = []; for (int i = 0; i < 10 * 1000 * 1000; ++i) { l.add(Object()); } return l; }); if (result.length != 10 * 1000 * 1000) throw 'failed'; final stats = await statsFuture; stats.report('IsolateSendExitLatency'); } Future compute(T Function() fun) { final rp = ReceivePort(); final sp = rp.sendPort; Isolate.spawn((_) { final value = fun(); Isolate.exit(sp, value); }, null); return rp.first.then((t) => t as T); }