d810c7d0c0
This commit was generated by the following steps: - Manually change the SDK constraint in `pkg/front_end/pubspec.yaml` - Run `gclient sync` - Run `find pkg/front_end/benchmarks pkg/front_end/lib pkg/front_end/presubmit_helper.dart pkg/front_end/presubmit_helper_spawn.dart pkg/front_end/test pkg/front_end/tool -iname '*.dart' | xargs tools/sdks/dart-sdk/bin/dart format` - Manually fix remaining long lines and add dead code ignore comments. - Fix coverage by running `dart --enable-asserts pkg/front_end/test/coverage_suite.dart --tasks=5 --add-and-remove-comments` - Fix `pkg/front_end/test/coverage_merger/assert_message_auto_ignored` by running `dart pkg/front_end/test/unit_test_suites.dart -p pkg/front_end/test/coverage_merger/assert_message_auto_ignored -DupdateExpectations=true` The diff is large because the version bump causes the formatter to switch into "tall mode". Change-Id: I6a6a696410da8b168060acfe0e4d6e91e294c4f0 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/447628 Auto-Submit: Paul Berry <paulberry@google.com> Reviewed-by: Johnni Winther <johnniwinther@google.com> Commit-Queue: Johnni Winther <johnniwinther@google.com>
77 lines
2.4 KiB
Dart
77 lines
2.4 KiB
Dart
// Copyright (c) 2024, 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";
|
|
|
|
const bool debug = false;
|
|
|
|
/// Tool to find and display any process using perf_events which as a
|
|
/// consequence might use one of the hardware counters, leaving fewer for
|
|
/// `perf stat` stuff.
|
|
/// Likely has to be run as root.
|
|
void main() {
|
|
try {
|
|
mainImpl();
|
|
} catch (e) {
|
|
print("Got the error '$e'.");
|
|
print("");
|
|
print("┌───────────────────────────────────────────────────┐");
|
|
print("│ Note that this tool likely has to be run as root. │");
|
|
print("└───────────────────────────────────────────────────┘");
|
|
print("");
|
|
rethrow;
|
|
}
|
|
}
|
|
|
|
void mainImpl() {
|
|
if (!Platform.isLinux) {
|
|
throw "This tool only works in Linux.";
|
|
}
|
|
bool foundSomething = false;
|
|
Directory dir = new Directory("/proc/");
|
|
for (FileSystemEntity pidDir in dir.listSync(recursive: false)) {
|
|
if (pidDir is! Directory) continue;
|
|
Uri pidUri = pidDir.uri;
|
|
String possiblePid = pidUri.pathSegments[pidUri.pathSegments.length - 2];
|
|
int? candidatePid = int.tryParse(possiblePid);
|
|
if (candidatePid == null) continue;
|
|
Directory fdDir = new Directory.fromUri(pidDir.uri.resolve("fd/"));
|
|
int count = 0;
|
|
for (FileSystemEntity entry in fdDir.listSync()) {
|
|
if (debug) {
|
|
print("$entry");
|
|
}
|
|
if (entry is Link) {
|
|
String target = entry.targetSync();
|
|
if (debug) {
|
|
print(" => target: $target");
|
|
}
|
|
if (target.contains("perf_event")) {
|
|
count++;
|
|
}
|
|
}
|
|
}
|
|
if (count > 0) {
|
|
print(
|
|
"Found $count perf event file descriptors for "
|
|
"process with pid $candidatePid:",
|
|
);
|
|
runPsForPid(candidatePid);
|
|
print("");
|
|
foundSomething = true;
|
|
}
|
|
}
|
|
|
|
if (!foundSomething) {
|
|
print("Found no open perf file descriptors.");
|
|
return;
|
|
}
|
|
}
|
|
|
|
void runPsForPid(int pid) {
|
|
ProcessResult psRun = Process.runSync("ps", ["-p", "$pid", "u"]);
|
|
stdout.write(psRun.stdout);
|
|
stderr.write(psRun.stderr);
|
|
}
|