Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit bf5f617

Browse files
committed
Remove RBE crud compile_commands.json
- Parsing a 21MB json string is not performant - RegExp replacing all occurances in said 21MB string is (~61ms) - Fixes #147767
1 parent 965cb99 commit bf5f617

File tree

2 files changed

+87
-1
lines changed

2 files changed

+87
-1
lines changed

tools/pkg/engine_build_configs/lib/src/build_config_runner.dart

+28-1
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@
55
import 'dart:async';
66
import 'dart:convert';
77
import 'dart:ffi' as ffi;
8-
import 'dart:io' as io show Directory, Process;
8+
import 'dart:io' as io show Directory, File, Process;
99

10+
import 'package:engine_repo_tools/engine_repo_tools.dart';
1011
import 'package:path/path.dart' as p;
1112
import 'package:platform/platform.dart';
1213
import 'package:process_runner/process_runner.dart';
@@ -246,6 +247,7 @@ final class BuildRunner extends Runner {
246247
if (!await _runGn(eventHandler)) {
247248
return false;
248249
}
250+
await _postGn();
249251
}
250252

251253
if (runNinja) {
@@ -318,6 +320,31 @@ final class BuildRunner extends Runner {
318320
return result.ok;
319321
}
320322

323+
Future<void> _postGn() async {
324+
if (dryRun) {
325+
return;
326+
}
327+
final Engine engine = Engine.fromSrcPath(engineSrcDir.path);
328+
final Output? latest = engine.latestOutput();
329+
if (latest == null) {
330+
return;
331+
}
332+
final io.File commandsFile = latest.compileCommandsJson;
333+
if (!commandsFile.existsSync()) {
334+
return;
335+
}
336+
final RegExp regex = RegExp(r'("command"\s*:\s*").*(\s\S*clang\+\+)');
337+
String contents = await commandsFile.readAsString();
338+
int matches = 0;
339+
contents = contents.replaceAllMapped(regex, (Match match) {
340+
matches += 1;
341+
return '${match[1]}${match[2]!.trim()}';
342+
});
343+
if (matches > 0) {
344+
await commandsFile.writeAsString(contents);
345+
}
346+
}
347+
321348
late final String _hostCpu = () {
322349
return switch (abi) {
323350
ffi.Abi.linuxArm64 ||

tools/pkg/engine_build_configs/test/build_config_runner_test.dart

+59
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import 'package:engine_build_configs/src/build_config.dart';
1010
import 'package:engine_build_configs/src/build_config_runner.dart';
1111
import 'package:engine_repo_tools/engine_repo_tools.dart';
1212
import 'package:litetest/litetest.dart';
13+
import 'package:path/path.dart' as path;
1314
import 'package:platform/platform.dart';
1415
import 'package:process_fakes/process_fakes.dart';
1516
import 'package:process_runner/process_runner.dart';
@@ -577,6 +578,64 @@ void main() {
577578
}
578579
expect(caughtError, isTrue);
579580
});
581+
582+
test('GlobalBuildRunner trims RBE crud from compile_commands.json', () async {
583+
final io.Directory emptyDir =
584+
io.Directory.systemTemp.createTempSync('build_config_runner.test');
585+
try {
586+
final io.Directory srcDir = io.Directory(path.join(emptyDir.path, 'src'))
587+
..createSync(recursive: true);
588+
final io.Directory hostDebug =
589+
io.Directory(path.join(srcDir.path, 'out', 'build_name'))
590+
..createSync(recursive: true);
591+
final io.File file =
592+
io.File(path.join(hostDebug.path, 'compile_commands.json'));
593+
file.writeAsString(r'''
594+
[
595+
{
596+
"file": "../../flutter/assets/asset_manager.cc",
597+
"directory": "/Users/flutter/src/engine/src/out/host_debug_unopt_arm64",
598+
"command": "/Users/flutter/src/engine/src/flutter/buildtools/mac-arm64/reclient/rewrapper --cfg=/Users/flutter/src/engine/src/flutter/build/rbe/rewrapper-mac-arm64.cfg --exec_root=/Users/flutter/src/engine/src/ --remote_wrapper=../../flutter/build/rbe/remote_wrapper.sh --local_wrapper=../../flutter/build/rbe/local_wrapper.sh --labels=type=compile,compiler=clang,lang=cpp ../../flutter/buildtools/mac-x64/clang/bin/clang++ -MMD -MF obj/flutter/assets/assets.asset_manager.o.d -DUSE_OPENSSL=1 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D_FORTIFY_SOURCE=2 -D_LIBCPP_DISABLE_AVAILABILITY=1 -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS -D_DEBUG -DFLUTTER_RUNTIME_MODE_DEBUG=1 -DFLUTTER_RUNTIME_MODE_PROFILE=2 -DFLUTTER_RUNTIME_MODE_RELEASE=3 -DFLUTTER_RUNTIME_MODE_JIT_RELEASE=4 \"-DDART_LEGACY_API=[[deprecated]]\" -DFLUTTER_RUNTIME_MODE=1 -DFLUTTER_JIT_RUNTIME=1 -I../.. -Igen -I../../flutter/third_party/libcxx/include -I../../flutter/third_party/libcxxabi/include -I../../flutter/build/secondary/flutter/third_party/libcxx/config -I../../flutter -fno-strict-aliasing -fstack-protector-all --target=arm64-apple-macos -arch arm64 -fcolor-diagnostics -Wall -Wextra -Wendif-labels -Werror -Wno-missing-field-initializers -Wno-unused-parameter -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-implicit-int-float-conversion -Wno-deprecated-copy -Wno-psabi -Wno-deprecated-literal-operator -Wno-unqualified-std-cast-call -Wno-non-c-typedef-for-linkage -Wno-range-loop-construct -Wunguarded-availability -Wno-deprecated-declarations -no-canonical-prefixes -fvisibility=hidden -Wstring-conversion -Wnewline-eof -O0 -g2 -Wunreachable-code -fvisibility-inlines-hidden -std=c++17 -fno-rtti -nostdinc++ -nostdinc++ -fvisibility=hidden -fno-exceptions -stdlib=libc++ -isysroot ../../flutter/prebuilts/SDKs/MacOSX14.0.sdk -mmacosx-version-min=10.14.0 -c ../../flutter/assets/asset_manager.cc -o obj/flutter/assets/assets.asset_manager.o"
599+
},
600+
{
601+
"file": "../../flutter/assets/directory_asset_bundle.cc",
602+
"directory": "/Users/flutter/src/engine/src/out/host_debug_unopt_arm64",
603+
"command": "/Users/flutter/src/engine/src/flutter/buildtools/mac-arm64/reclient/rewrapper --cfg=/Users/flutter/src/engine/src/flutter/build/rbe/rewrapper-mac-arm64.cfg --exec_root=/Users/flutter/src/engine/src/ --remote_wrapper=../../flutter/build/rbe/remote_wrapper.sh --local_wrapper=../../flutter/build/rbe/local_wrapper.sh --labels=type=compile,compiler=clang,lang=cpp ../../flutter/buildtools/mac-x64/clang/bin/clang++ -MMD -MF obj/flutter/assets/assets.directory_asset_bundle.o.d -DUSE_OPENSSL=1 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D_FORTIFY_SOURCE=2 -D_LIBCPP_DISABLE_AVAILABILITY=1 -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS -D_DEBUG -DFLUTTER_RUNTIME_MODE_DEBUG=1 -DFLUTTER_RUNTIME_MODE_PROFILE=2 -DFLUTTER_RUNTIME_MODE_RELEASE=3 -DFLUTTER_RUNTIME_MODE_JIT_RELEASE=4 \"-DDART_LEGACY_API=[[deprecated]]\" -DFLUTTER_RUNTIME_MODE=1 -DFLUTTER_JIT_RUNTIME=1 -I../.. -Igen -I../../flutter/third_party/libcxx/include -I../../flutter/third_party/libcxxabi/include -I../../flutter/build/secondary/flutter/third_party/libcxx/config -I../../flutter -fno-strict-aliasing -fstack-protector-all --target=arm64-apple-macos -arch arm64 -fcolor-diagnostics -Wall -Wextra -Wendif-labels -Werror -Wno-missing-field-initializers -Wno-unused-parameter -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-implicit-int-float-conversion -Wno-deprecated-copy -Wno-psabi -Wno-deprecated-literal-operator -Wno-unqualified-std-cast-call -Wno-non-c-typedef-for-linkage -Wno-range-loop-construct -Wunguarded-availability -Wno-deprecated-declarations -no-canonical-prefixes -fvisibility=hidden -Wstring-conversion -Wnewline-eof -O0 -g2 -Wunreachable-code -fvisibility-inlines-hidden -std=c++17 -fno-rtti -nostdinc++ -nostdinc++ -fvisibility=hidden -fno-exceptions -stdlib=libc++ -isysroot ../../flutter/prebuilts/SDKs/MacOSX14.0.sdk -mmacosx-version-min=10.14.0 -c ../../flutter/assets/directory_asset_bundle.cc -o obj/flutter/assets/assets.directory_asset_bundle.o"
604+
},
605+
]
606+
''');
607+
final Build targetBuild = buildConfig.builds[0];
608+
final BuildRunner buildRunner = BuildRunner(
609+
platform: FakePlatform(operatingSystem: Platform.linux),
610+
processRunner: ProcessRunner(
611+
// dryRun should not try to spawn any processes.
612+
processManager: _fakeProcessManager(),
613+
),
614+
abi: ffi.Abi.linuxX64,
615+
engineSrcDir: srcDir,
616+
build: targetBuild,
617+
);
618+
final List<RunnerEvent> events = <RunnerEvent>[];
619+
void handler(RunnerEvent event) => events.add(event);
620+
await buildRunner.run(handler);
621+
expect(file.readAsStringSync(), r'''
622+
[
623+
{
624+
"file": "../../flutter/assets/asset_manager.cc",
625+
"directory": "/Users/flutter/src/engine/src/out/host_debug_unopt_arm64",
626+
"command": "../../flutter/buildtools/mac-x64/clang/bin/clang++ -MMD -MF obj/flutter/assets/assets.asset_manager.o.d -DUSE_OPENSSL=1 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D_FORTIFY_SOURCE=2 -D_LIBCPP_DISABLE_AVAILABILITY=1 -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS -D_DEBUG -DFLUTTER_RUNTIME_MODE_DEBUG=1 -DFLUTTER_RUNTIME_MODE_PROFILE=2 -DFLUTTER_RUNTIME_MODE_RELEASE=3 -DFLUTTER_RUNTIME_MODE_JIT_RELEASE=4 \"-DDART_LEGACY_API=[[deprecated]]\" -DFLUTTER_RUNTIME_MODE=1 -DFLUTTER_JIT_RUNTIME=1 -I../.. -Igen -I../../flutter/third_party/libcxx/include -I../../flutter/third_party/libcxxabi/include -I../../flutter/build/secondary/flutter/third_party/libcxx/config -I../../flutter -fno-strict-aliasing -fstack-protector-all --target=arm64-apple-macos -arch arm64 -fcolor-diagnostics -Wall -Wextra -Wendif-labels -Werror -Wno-missing-field-initializers -Wno-unused-parameter -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-implicit-int-float-conversion -Wno-deprecated-copy -Wno-psabi -Wno-deprecated-literal-operator -Wno-unqualified-std-cast-call -Wno-non-c-typedef-for-linkage -Wno-range-loop-construct -Wunguarded-availability -Wno-deprecated-declarations -no-canonical-prefixes -fvisibility=hidden -Wstring-conversion -Wnewline-eof -O0 -g2 -Wunreachable-code -fvisibility-inlines-hidden -std=c++17 -fno-rtti -nostdinc++ -nostdinc++ -fvisibility=hidden -fno-exceptions -stdlib=libc++ -isysroot ../../flutter/prebuilts/SDKs/MacOSX14.0.sdk -mmacosx-version-min=10.14.0 -c ../../flutter/assets/asset_manager.cc -o obj/flutter/assets/assets.asset_manager.o"
627+
},
628+
{
629+
"file": "../../flutter/assets/directory_asset_bundle.cc",
630+
"directory": "/Users/flutter/src/engine/src/out/host_debug_unopt_arm64",
631+
"command": "../../flutter/buildtools/mac-x64/clang/bin/clang++ -MMD -MF obj/flutter/assets/assets.directory_asset_bundle.o.d -DUSE_OPENSSL=1 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D_FORTIFY_SOURCE=2 -D_LIBCPP_DISABLE_AVAILABILITY=1 -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS -D_DEBUG -DFLUTTER_RUNTIME_MODE_DEBUG=1 -DFLUTTER_RUNTIME_MODE_PROFILE=2 -DFLUTTER_RUNTIME_MODE_RELEASE=3 -DFLUTTER_RUNTIME_MODE_JIT_RELEASE=4 \"-DDART_LEGACY_API=[[deprecated]]\" -DFLUTTER_RUNTIME_MODE=1 -DFLUTTER_JIT_RUNTIME=1 -I../.. -Igen -I../../flutter/third_party/libcxx/include -I../../flutter/third_party/libcxxabi/include -I../../flutter/build/secondary/flutter/third_party/libcxx/config -I../../flutter -fno-strict-aliasing -fstack-protector-all --target=arm64-apple-macos -arch arm64 -fcolor-diagnostics -Wall -Wextra -Wendif-labels -Werror -Wno-missing-field-initializers -Wno-unused-parameter -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-implicit-int-float-conversion -Wno-deprecated-copy -Wno-psabi -Wno-deprecated-literal-operator -Wno-unqualified-std-cast-call -Wno-non-c-typedef-for-linkage -Wno-range-loop-construct -Wunguarded-availability -Wno-deprecated-declarations -no-canonical-prefixes -fvisibility=hidden -Wstring-conversion -Wnewline-eof -O0 -g2 -Wunreachable-code -fvisibility-inlines-hidden -std=c++17 -fno-rtti -nostdinc++ -nostdinc++ -fvisibility=hidden -fno-exceptions -stdlib=libc++ -isysroot ../../flutter/prebuilts/SDKs/MacOSX14.0.sdk -mmacosx-version-min=10.14.0 -c ../../flutter/assets/directory_asset_bundle.cc -o obj/flutter/assets/assets.directory_asset_bundle.o"
632+
},
633+
]
634+
''');
635+
} finally {
636+
emptyDir.deleteSync(recursive: true);
637+
}
638+
});
580639
}
581640

582641
FakeProcessManager _fakeProcessManager({

0 commit comments

Comments
 (0)