fbf331e0dd
Change-Id: I42b4a44fd6a2197e499e8623274b3cd1a4b5556f Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/394003 Commit-Queue: Samuel Rawlins <srawlins@google.com> Reviewed-by: Konstantin Shcheglov <scheglov@google.com> Reviewed-by: Bob Nystrom <rnystrom@google.com> Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
100 lines
3.1 KiB
Dart
100 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.
|
|
|
|
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);
|
|
}
|