initialize method

Future<void> initialize(
  1. InterpreterCreator factory, {
  2. PerformanceConfig? performanceConfig,
  3. bool useIsolateInterpreter = true,
})

Initializes the pool by calling factory once per slot.

If already initialized, disposes all resources first. IsolateInterpreter is created automatically when no delegate is used, except on macOS where shared-interpreter isolate execution is disabled.

Implementation

Future<void> initialize(
  InterpreterCreator factory, {
  PerformanceConfig? performanceConfig,
  bool useIsolateInterpreter = true,
}) async {
  if (_isInitialized) await dispose();

  final slots = <(Interpreter, IsolateInterpreter?)>[];

  for (int i = 0; i < poolSize; i++) {
    final (options, delegate) = InterpreterFactory.create(performanceConfig);
    if (delegate != null) _delegates.add(delegate);

    final interpreter = await factory(options, delegate);
    final isolate = await InterpreterFactory.createIsolateIfNeeded(
      interpreter,
      delegate,
      useIsolateInterpreter: useIsolateInterpreter,
    );

    _interpreters.add(interpreter);
    _isolates.add(isolate);
    slots.add((interpreter, isolate));
  }

  _pool = RoundRobinPool(slots);
  _isInitialized = true;
}