Skip to content

Commit 1b97a67

Browse files
authored
[native_assets_builder] Speedup builds for 0 or 1 packages with native assets (#129)
Closes: #128
1 parent 1e13cb1 commit 1b97a67

File tree

3 files changed

+52
-29
lines changed

3 files changed

+52
-29
lines changed

pkgs/native_assets_builder/CHANGELOG.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
1+
## 0.2.3
2+
3+
- Quicker build planning for 0 or 1 packages with native assets
4+
([#128](https://github.com/dart-lang/native/issues/128)).
5+
16
## 0.2.2
27

38
- Take a `PackageLayout` argument for `build` and `dryRun`
4-
[flutter#134427](https://github.com/flutter/flutter/issues/134427).
9+
([flutter#134427](https://github.com/flutter/flutter/issues/134427)).
510

611
## 0.2.1
712

813
- Provide a `PackageLayout` constructor for already parsed `PackageConfig`
9-
[flutter#134427](https://github.com/flutter/flutter/issues/134427).
14+
([flutter#134427](https://github.com/flutter/flutter/issues/134427)).
1015

1116
## 0.2.0
1217

pkgs/native_assets_builder/lib/src/build_runner/build_runner.dart

Lines changed: 44 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import 'dart:io';
77

88
import 'package:logging/logging.dart';
99
import 'package:native_assets_cli/native_assets_cli.dart';
10+
import 'package:package_config/package_config.dart';
1011

1112
import '../package_layout/package_layout.dart';
1213
import '../utils/run_process.dart';
@@ -47,27 +48,38 @@ class NativeAssetsBuildRunner {
4748
packageLayout ??= await PackageLayout.fromRootPackageRoot(workingDirectory);
4849
final packagesWithNativeAssets =
4950
await packageLayout.packagesWithNativeAssets;
50-
final planner = await NativeAssetsBuildPlanner.fromRootPackageRoot(
51-
rootPackageRoot: packageLayout.rootPackageRoot,
52-
packagesWithNativeAssets: packagesWithNativeAssets,
53-
dartExecutable: Uri.file(Platform.resolvedExecutable),
54-
logger: logger,
55-
);
56-
final (plan, planSuccess) = planner.plan();
57-
if (!planSuccess) {
58-
return _BuildResultImpl(
59-
assets: [],
60-
dependencies: [],
61-
success: false,
51+
final List<Package> buildPlan;
52+
final PackageGraph packageGraph;
53+
if (packagesWithNativeAssets.length <= 1) {
54+
buildPlan = packagesWithNativeAssets;
55+
packageGraph = PackageGraph({
56+
for (final p in packagesWithNativeAssets) p.name: [],
57+
});
58+
} else {
59+
final planner = await NativeAssetsBuildPlanner.fromRootPackageRoot(
60+
rootPackageRoot: packageLayout.rootPackageRoot,
61+
packagesWithNativeAssets: packagesWithNativeAssets,
62+
dartExecutable: Uri.file(Platform.resolvedExecutable),
63+
logger: logger,
6264
);
65+
final (plan, planSuccess) = planner.plan();
66+
if (!planSuccess) {
67+
return _BuildResultImpl(
68+
assets: [],
69+
dependencies: [],
70+
success: false,
71+
);
72+
}
73+
buildPlan = plan;
74+
packageGraph = planner.packageGraph;
6375
}
6476
final assets = <Asset>[];
6577
final dependencies = <Uri>[];
6678
final metadata = <String, Metadata>{};
6779
var success = true;
68-
for (final package in plan) {
80+
for (final package in buildPlan) {
6981
final dependencyMetadata = _metadataForPackage(
70-
packageGraph: planner.packageGraph,
82+
packageGraph: packageGraph,
7183
packageName: package.name,
7284
targetMetadata: metadata,
7385
);
@@ -123,22 +135,28 @@ class NativeAssetsBuildRunner {
123135
packageLayout ??= await PackageLayout.fromRootPackageRoot(workingDirectory);
124136
final packagesWithNativeAssets =
125137
await packageLayout.packagesWithNativeAssets;
126-
final planner = await NativeAssetsBuildPlanner.fromRootPackageRoot(
127-
rootPackageRoot: packageLayout.rootPackageRoot,
128-
packagesWithNativeAssets: packagesWithNativeAssets,
129-
dartExecutable: Uri.file(Platform.resolvedExecutable),
130-
logger: logger,
131-
);
132-
final (plan, planSuccess) = planner.plan();
133-
if (!planSuccess) {
134-
return _DryRunResultImpl(
135-
assets: [],
136-
success: false,
138+
final List<Package> buildPlan;
139+
if (packagesWithNativeAssets.length <= 1) {
140+
buildPlan = packagesWithNativeAssets;
141+
} else {
142+
final planner = await NativeAssetsBuildPlanner.fromRootPackageRoot(
143+
rootPackageRoot: packageLayout.rootPackageRoot,
144+
packagesWithNativeAssets: packagesWithNativeAssets,
145+
dartExecutable: Uri.file(Platform.resolvedExecutable),
146+
logger: logger,
137147
);
148+
final (plan, planSuccess) = planner.plan();
149+
if (!planSuccess) {
150+
return _DryRunResultImpl(
151+
assets: [],
152+
success: false,
153+
);
154+
}
155+
buildPlan = plan;
138156
}
139157
final assets = <Asset>[];
140158
var success = true;
141-
for (final package in plan) {
159+
for (final package in buildPlan) {
142160
final config = await _cliConfigDryRun(
143161
packageName: package.name,
144162
packageRoot: packageLayout.packageRoot(package.name),

pkgs/native_assets_builder/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name: native_assets_builder
22
description: >-
33
This package is the backend that invokes top-level `build.dart` scripts.
4-
version: 0.2.2
4+
version: 0.2.3
55
repository: https://github.com/dart-lang/native/tree/main/pkgs/native_assets_builder
66

77
environment:

0 commit comments

Comments
 (0)