From 2f83aabe418397d04769675bdac3ef2d22a7186c Mon Sep 17 00:00:00 2001 From: Daco Harkes Date: Tue, 12 Sep 2023 17:32:34 +0200 Subject: [PATCH 1/2] [native_assets_builder] Faster planning for <= 1 packages --- .../lib/src/build_runner/build_runner.dart | 70 ++++++++++++------- 1 file changed, 44 insertions(+), 26 deletions(-) diff --git a/pkgs/native_assets_builder/lib/src/build_runner/build_runner.dart b/pkgs/native_assets_builder/lib/src/build_runner/build_runner.dart index 30857c517b..d312db754e 100644 --- a/pkgs/native_assets_builder/lib/src/build_runner/build_runner.dart +++ b/pkgs/native_assets_builder/lib/src/build_runner/build_runner.dart @@ -7,6 +7,7 @@ import 'dart:io'; import 'package:logging/logging.dart'; import 'package:native_assets_cli/native_assets_cli.dart'; +import 'package:package_config/package_config.dart'; import '../package_layout/package_layout.dart'; import '../utils/run_process.dart'; @@ -47,27 +48,38 @@ class NativeAssetsBuildRunner { packageLayout ??= await PackageLayout.fromRootPackageRoot(workingDirectory); final packagesWithNativeAssets = await packageLayout.packagesWithNativeAssets; - final planner = await NativeAssetsBuildPlanner.fromRootPackageRoot( - rootPackageRoot: packageLayout.rootPackageRoot, - packagesWithNativeAssets: packagesWithNativeAssets, - dartExecutable: Uri.file(Platform.resolvedExecutable), - logger: logger, - ); - final (plan, planSuccess) = planner.plan(); - if (!planSuccess) { - return _BuildResultImpl( - assets: [], - dependencies: [], - success: false, + final List buildPlan; + final PackageGraph packageGraph; + if (packagesWithNativeAssets.length <= 1) { + buildPlan = packagesWithNativeAssets; + packageGraph = PackageGraph({ + for (final p in packagesWithNativeAssets) p.name: [], + }); + } else { + final planner = await NativeAssetsBuildPlanner.fromRootPackageRoot( + rootPackageRoot: packageLayout.rootPackageRoot, + packagesWithNativeAssets: packagesWithNativeAssets, + dartExecutable: Uri.file(Platform.resolvedExecutable), + logger: logger, ); + final (plan, planSuccess) = planner.plan(); + if (!planSuccess) { + return _BuildResultImpl( + assets: [], + dependencies: [], + success: false, + ); + } + buildPlan = plan; + packageGraph = planner.packageGraph; } final assets = []; final dependencies = []; final metadata = {}; var success = true; - for (final package in plan) { + for (final package in buildPlan) { final dependencyMetadata = _metadataForPackage( - packageGraph: planner.packageGraph, + packageGraph: packageGraph, packageName: package.name, targetMetadata: metadata, ); @@ -123,22 +135,28 @@ class NativeAssetsBuildRunner { packageLayout ??= await PackageLayout.fromRootPackageRoot(workingDirectory); final packagesWithNativeAssets = await packageLayout.packagesWithNativeAssets; - final planner = await NativeAssetsBuildPlanner.fromRootPackageRoot( - rootPackageRoot: packageLayout.rootPackageRoot, - packagesWithNativeAssets: packagesWithNativeAssets, - dartExecutable: Uri.file(Platform.resolvedExecutable), - logger: logger, - ); - final (plan, planSuccess) = planner.plan(); - if (!planSuccess) { - return _DryRunResultImpl( - assets: [], - success: false, + final List buildPlan; + if (packagesWithNativeAssets.length <= 1) { + buildPlan = packagesWithNativeAssets; + } else { + final planner = await NativeAssetsBuildPlanner.fromRootPackageRoot( + rootPackageRoot: packageLayout.rootPackageRoot, + packagesWithNativeAssets: packagesWithNativeAssets, + dartExecutable: Uri.file(Platform.resolvedExecutable), + logger: logger, ); + final (plan, planSuccess) = planner.plan(); + if (!planSuccess) { + return _DryRunResultImpl( + assets: [], + success: false, + ); + } + buildPlan = plan; } final assets = []; var success = true; - for (final package in plan) { + for (final package in buildPlan) { final config = await _cliConfigDryRun( packageName: package.name, packageRoot: packageLayout.packageRoot(package.name), From 57ba2f3193c74b716cb50a082678e8ecbe075822 Mon Sep 17 00:00:00 2001 From: Daco Harkes Date: Tue, 12 Sep 2023 17:40:08 +0200 Subject: [PATCH 2/2] bump version and add changelog entry --- pkgs/native_assets_builder/CHANGELOG.md | 9 +++++++-- pkgs/native_assets_builder/pubspec.yaml | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/pkgs/native_assets_builder/CHANGELOG.md b/pkgs/native_assets_builder/CHANGELOG.md index f23147a17a..1913570779 100644 --- a/pkgs/native_assets_builder/CHANGELOG.md +++ b/pkgs/native_assets_builder/CHANGELOG.md @@ -1,12 +1,17 @@ +## 0.2.3 + +- Quicker build planning for 0 or 1 packages with native assets + ([#128](https://github.com/dart-lang/native/issues/128)). + ## 0.2.2 - Take a `PackageLayout` argument for `build` and `dryRun` - [flutter#134427](https://github.com/flutter/flutter/issues/134427). + ([flutter#134427](https://github.com/flutter/flutter/issues/134427)). ## 0.2.1 - Provide a `PackageLayout` constructor for already parsed `PackageConfig` - [flutter#134427](https://github.com/flutter/flutter/issues/134427). + ([flutter#134427](https://github.com/flutter/flutter/issues/134427)). ## 0.2.0 diff --git a/pkgs/native_assets_builder/pubspec.yaml b/pkgs/native_assets_builder/pubspec.yaml index 0f4a5feccb..14695419f3 100644 --- a/pkgs/native_assets_builder/pubspec.yaml +++ b/pkgs/native_assets_builder/pubspec.yaml @@ -1,7 +1,7 @@ name: native_assets_builder description: >- This package is the backend that invokes top-level `build.dart` scripts. -version: 0.2.2 +version: 0.2.3 repository: https://github.com/dart-lang/native/tree/main/pkgs/native_assets_builder environment: