mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
56 lines
2.0 KiB
Dart
56 lines
2.0 KiB
Dart
// Copyright 2016 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
import 'dart:async';
|
|
|
|
import 'package:process/process.dart';
|
|
import 'package:process/record_replay.dart';
|
|
|
|
import 'common.dart';
|
|
import 'context.dart';
|
|
import 'file_system.dart';
|
|
import 'process.dart';
|
|
|
|
const String _kRecordingType = 'process';
|
|
const ProcessManager _kLocalProcessManager = LocalProcessManager();
|
|
|
|
/// The active process manager.
|
|
ProcessManager get processManager => context[ProcessManager] ?? _kLocalProcessManager;
|
|
|
|
/// Gets a [ProcessManager] that will record process invocation activity to the
|
|
/// specified base recording [location].
|
|
///
|
|
/// Activity will be recorded in a subdirectory of [location] named `"process"`.
|
|
/// It is permissible for [location] to represent an existing non-empty
|
|
/// directory as long as there is no collision with the `"process"`
|
|
/// subdirectory.
|
|
RecordingProcessManager getRecordingProcessManager(String location) {
|
|
final Directory dir = getRecordingSink(location, _kRecordingType);
|
|
const ProcessManager delegate = LocalProcessManager();
|
|
final RecordingProcessManager manager = RecordingProcessManager(delegate, dir);
|
|
addShutdownHook(() async {
|
|
await manager.flush(finishRunningProcesses: true);
|
|
}, ShutdownStage.SERIALIZE_RECORDING);
|
|
return manager;
|
|
}
|
|
|
|
/// Gets a [ProcessManager] that replays process activity from a previously
|
|
/// recorded set of invocations.
|
|
///
|
|
/// [location] must represent a directory to which process activity has been
|
|
/// recorded (i.e. the result of having been previously passed to
|
|
/// [getRecordingProcessManager]), or a [ToolExit] will be thrown.
|
|
Future<ReplayProcessManager> getReplayProcessManager(String location) async {
|
|
final Directory dir = getReplaySource(location, _kRecordingType);
|
|
|
|
ProcessManager manager;
|
|
try {
|
|
manager = await ReplayProcessManager.create(dir);
|
|
} on ArgumentError catch (error) {
|
|
throwToolExit('Invalid replay-from: $error');
|
|
}
|
|
|
|
return manager;
|
|
}
|