Files
sdk/pkg/analysis_server/benchmark/integration/local_runner.dart
T
Konstantin Shcheglov e97f1bdbf0 Switch analysis_server to language 2.12, so null safety, but opt-out files.
This should allow doing partial migration, specifically protocol files,
which are imported by other libraries, but are a small library cycle
that does not import much outside of it.

Change-Id: I904c05d6d5b444ee9a9dbd1f7ada12aabdcc5165
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/193583
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2021-03-30 23:39:37 +00:00

95 lines
3.1 KiB
Dart

// Copyright (c) 2015, 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.
// @dart = 2.9
import 'dart:io';
import 'package:path/path.dart';
import 'main.dart' as performance;
// Local driver for performance measurement
void main(List<String> args) {
/*
* Parse arguments
*/
if (args.length < 3) printHelp('Expected 3 arguments');
var gitDir = Directory(args[0]);
if (!gitDir.existsSync()) printHelp('${gitDir.path} does not exist');
if (!Directory(join(gitDir.path, '.git')).existsSync()) {
printHelp('${gitDir.path} does not appear to be a local git repository');
}
var branch = args[1];
var inputFile = File(args[2]);
if (!inputFile.existsSync()) printHelp('${inputFile.path} does not exist');
/*
* Create a new temp directory
*/
var tmpDir =
Directory(join(Directory.systemTemp.path, 'analysis_server_perf_target'));
if (!tmpDir.path.contains('tmp')) throw 'invalid tmp directory\n $tmpDir';
print('Extracting target analysis environment into\n ${tmpDir.path}');
if (tmpDir.existsSync()) tmpDir.deleteSync(recursive: true);
tmpDir.createSync(recursive: true);
/*
* Setup the initial target source in the temp directory
*/
var tarFilePath = join(tmpDir.path, 'targetSrc.tar');
var result = Process.runSync('git', ['archive', branch, '-o', tarFilePath],
workingDirectory: gitDir.path);
if (result.exitCode != 0) throw 'failed to obtain target source: $result';
var tmpSrcDirPath = join(tmpDir.path, 'targetSrc');
Directory(tmpSrcDirPath).createSync();
result = Process.runSync('tar', ['-xf', tarFilePath],
workingDirectory: tmpSrcDirPath);
if (result.exitCode != 0) throw 'failed to extract target source: $result';
/*
* Symlink the out or xcodebuild directory
*/
var outDirName = 'out';
if (!Directory(join(gitDir.path, outDirName)).existsSync()) {
outDirName = 'xcodebuild';
}
if (!Directory(join(gitDir.path, outDirName)).existsSync()) {
throw 'failed to find out or xcodebuild directory';
}
result = Process.runSync('ln',
['-s', join(gitDir.path, outDirName), join(tmpSrcDirPath, outDirName)]);
if (result.exitCode != 0) throw 'failed to link out or xcodebuild: $result';
/*
* Collect arguments
*/
var perfArgs = [
'-i${inputFile.path}',
'-t$tmpSrcDirPath',
];
for (var index = 3; index < args.length; ++index) {
perfArgs.add(args[index].replaceAll('@tmpSrcDir@', tmpSrcDirPath));
}
perfArgs.add('-m${gitDir.path},$tmpSrcDirPath');
/*
* Launch the performance analysis tool
*/
performance.main(perfArgs);
}
/// Print help and exit
void printHelp([String errMsg]) {
if (errMsg != null) {
print('');
print('Error: $errMsg');
print('');
}
print('''Required arguments: <gitDir> <branch> <inputFile>
gitDir = a path to the git repository containing the initial target source
branch = the branch containing the initial target source
inputFile = the instrumentation or log file
Optional arguments:''');
print(performance.argParser.usage);
exit(1);
}