[Reland] [dartdev] Use an AOT snapshot for dds

This change enables use of an AOT snapshot for dds execution.

TEST=ci

Change-Id: I1eba2913a4160dee5de663622aa9106dd1d83c04
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/327710
Reviewed-by: Ben Konyi <bkonyi@google.com>
Commit-Queue: Siva Annamalai <asiva@google.com>
This commit is contained in:
asiva 2023-09-26 18:27:02 +00:00 committed by Commit Queue
parent 731d7dc1c6
commit df266b8a44
6 changed files with 83 additions and 17 deletions

View file

@ -388,13 +388,23 @@ class _DebuggingSession {
) async {
final sdkDir = dirname(sdk.dart);
final fullSdk = sdkDir.endsWith('bin');
final ddsSnapshot = fullSdk
? sdk.ddsSnapshot
: absolute(sdkDir, 'gen', 'dds.dart.snapshot');
final devToolsBinaries =
fullSdk ? sdk.devToolsBinaries : absolute(sdkDir, 'devtools');
if (!Sdk.checkArtifactExists(ddsSnapshot)) {
return false;
String snapshotName = fullSdk
? sdk.ddsAotSnapshot
: absolute(sdkDir, 'gen', 'dds_aot.dart.snapshot');
String execName = sdk.dartAotRuntime;
if (!Sdk.checkArtifactExists(snapshotName)) {
// An AOT snapshot of dds is not available, we could
// be running on the ia32 platform so check for a regular
// kernel file being present.
snapshotName = fullSdk
? sdk.ddsSnapshot
: absolute(sdkDir, 'gen', 'dds.dart.snapshot');
if (!Sdk.checkArtifactExists(snapshotName)) {
return false;
}
execName = sdk.dart;
}
ServiceProtocolInfo serviceInfo = await Service.getInfo();
// Wait for VM service to publish its connection info.
@ -403,10 +413,10 @@ class _DebuggingSession {
serviceInfo = await Service.getInfo();
}
final process = await Process.start(
sdk.dart,
execName,
[
if (debugDds) '--enable-vm-service=0',
ddsSnapshot,
snapshotName,
serviceInfo.serverUri.toString(),
host,
port,

View file

@ -52,6 +52,13 @@ class Sdk {
'dds.dart.snapshot',
);
String get ddsAotSnapshot => path.absolute(
sdkPath,
'bin',
'snapshots',
'dds_aot.dart.snapshot',
);
String get frontendServerSnapshot => path.absolute(
sdkPath,
'bin',

View file

@ -26,7 +26,7 @@ void _sdk() {
});
test('dds snapshot', () {
expectFileExists(Sdk().ddsSnapshot);
expectSnapshotExists(Sdk().ddsAotSnapshot, Sdk().ddsSnapshot);
});
test('dart2js snapshot', () {
@ -45,6 +45,10 @@ void expectFileExists(String path) {
expect(File(path).existsSync(), isTrue);
}
void expectSnapshotExists(String aotpath, String jitpath) {
expect(File(aotpath).existsSync() || File(jitpath).existsSync(), isTrue);
}
void expectDirectoryExists(String path) {
expect(Directory(path).existsSync(), isTrue);
}

View file

@ -46,7 +46,7 @@ declare_args() {
# ........dart2wasm_product.snapshot (if not on ia32)
# ........dartdev.dart.snapshot (app-jit snapshot or kernel dill file)
# ........dartdevc.dart.snapshot
# ........dds.dart.snapshot
# ........dds_aot.dart.snapshot (AOT snapshot) or dds.dart.snapshot (ia32)
# ........frontend_server_aot.dart.snapshot (AOT snapshot, if not on ia32)
# ........frontend_server.dart.snapshot
# ........gen_kernel.dart.snapshot (if not on ia32)
@ -116,15 +116,22 @@ _platform_sdk_snapshots = [
"dartdev",
"../utils/dartdev:dartdev",
],
[
"dds",
"../utils/dds:dds",
],
[
"frontend_server",
"../utils/kernel-service:frontend_server",
],
]
if (dart_target_arch != "ia32" && dart_target_arch != "x86") {
_platform_sdk_snapshots += [ [
"dds_aot",
"../utils/dds:dds_aot",
] ]
} else {
_platform_sdk_snapshots += [ [
"dds",
"../utils/dds:dds",
] ]
}
if (dart_snapshot_kind == "app-jit") {
_platform_sdk_snapshots += [ [
"kernel-service",

View file

@ -81,11 +81,24 @@ class _DebuggingSession {
final fullSdk = dartDir.endsWith('bin');
final ddsSnapshot = [
final dartAotPath = [
dartDir,
fullSdk ? 'dartaotruntime' : 'dart_precompiled_runtime_product',
].join('/');
String snapshotName = [
dartDir,
fullSdk ? 'snapshots' : 'gen',
'dds.dart.snapshot',
'dds_aot.dart.snapshot',
].join('/');
String execName = dartAotPath;
if (!File(snapshotName).existsSync()) {
snapshotName = [
dartDir,
fullSdk ? 'snapshots' : 'gen',
'dds.dart.snapshot',
].join('/');
execName = dartPath.toString();
}
final devToolsBinaries = [
dartDir,
@ -95,9 +108,9 @@ class _DebuggingSession {
const enableLogging = false;
_process = await Process.start(
dartPath.toString(),
execName,
[
ddsSnapshot,
snapshotName,
server!.serverAddress!.toString(),
host,
port,

View file

@ -2,12 +2,17 @@
# 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("../aot_snapshot.gni")
import("../application_snapshot.gni")
group("dds") {
public_deps = [ ":copy_dds_snapshot" ]
}
group("dds_aot") {
public_deps = [ ":copy_dds_aot_snapshot" ]
}
copy("copy_dds_snapshot") {
visibility = [ ":dds" ]
public_deps = [ ":generate_dds_snapshot" ]
@ -15,8 +20,28 @@ copy("copy_dds_snapshot") {
outputs = [ "$root_out_dir/dds.dart.snapshot" ]
}
copy("copy_dds_aot_snapshot") {
visibility = [ ":dds_aot" ]
public_deps = [ ":generate_dds_aot_snapshot" ]
sources = [ "$root_gen_dir/dds_aot.dart.snapshot" ]
outputs = [ "$root_out_dir/dds_aot.dart.snapshot" ]
}
application_snapshot("generate_dds_snapshot") {
main_dart = "../../pkg/dds/bin/dds.dart"
training_args = []
output = "$root_gen_dir/dds.dart.snapshot"
}
aot_snapshot("generate_dds_aot_snapshot") {
main_dart = "../../pkg/dds/bin/dds.dart"
output = "$root_gen_dir/dds_aot.dart.snapshot"
# dartaotruntime has dart_product_config applied to it,
# so it is built in # product mode in both release and
# product builds, and is only built in debug mode in debug
# builds. The following line ensures that the dartaotruntime
# and frontend_server_aot snapshot in an SDK build are
# always compatible with each other.
force_product_mode = !dart_debug
}