Skip to content

Commit 4c46030

Browse files
authored
print traces when transforming an asset (#146374)
From flutter/flutter#143348 (comment): > before we ship, we should add a printTrace to the tool about each asset transformer we're invoking and the path/arguments we called it with I think this is a good idea since asset transformers can be arbitrary Dart programs�meaning that a lot can go wrong when running them. For example, they can hang indefinitely or perform some sort of I/O that later results in a tool crash. Knowing that asset transformation was involved when debugging a crash (or a slow/stuck `flutter build`) could be useful, so I think adding a `printTrace` or two is a good idea (or at least not a bad one).
1 parent af439ac commit 4c46030

File tree

4 files changed

+15
-0
lines changed

4 files changed

+15
-0
lines changed

packages/flutter_tools/lib/src/build_system/targets/assets.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ Future<Depfile> copyAssets(
150150
outputPath: file.path,
151151
workingDirectory: environment.projectDir.path,
152152
transformerEntries: entry.value.transformers,
153+
logger: environment.logger,
153154
);
154155
doCopy = false;
155156
if (failure != null) {

packages/flutter_tools/lib/src/build_system/tools/asset_transformer.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ final class AssetTransformer {
5252
required String outputPath,
5353
required String workingDirectory,
5454
required List<AssetTransformerEntry> transformerEntries,
55+
required Logger logger,
5556
}) async {
5657

5758
String getTempFilePath(int transformStep) {
@@ -65,13 +66,15 @@ final class AssetTransformer {
6566
File tempOutputFile = _fileSystem.systemTempDirectory.childFile(getTempFilePath(1));
6667
ErrorHandlingFileSystem.deleteIfExists(tempOutputFile);
6768

69+
final Stopwatch stopwatch = Stopwatch()..start();
6870
try {
6971
for (final (int i, AssetTransformerEntry transformer) in transformerEntries.indexed) {
7072
final AssetTransformationFailure? transformerFailure = await _applyTransformer(
7173
asset: tempInputFile,
7274
output: tempOutputFile,
7375
transformer: transformer,
7476
workingDirectory: workingDirectory,
77+
logger: logger,
7578
);
7679

7780
if (transformerFailure != null) {
@@ -91,6 +94,8 @@ final class AssetTransformer {
9194
ErrorHandlingFileSystem.deleteIfExists(tempOutputFile);
9295
}
9396
}
97+
98+
logger.printTrace("Finished transforming asset at path '${asset.path}' (${stopwatch.elapsedMilliseconds}ms)");
9499
} finally {
95100
ErrorHandlingFileSystem.deleteIfExists(tempInputFile);
96101
ErrorHandlingFileSystem.deleteIfExists(tempOutputFile);
@@ -104,6 +109,7 @@ final class AssetTransformer {
104109
required File output,
105110
required AssetTransformerEntry transformer,
106111
required String workingDirectory,
112+
required Logger logger,
107113
}) async {
108114
final List<String> transformerArguments = <String>[
109115
'--input=${asset.absolute.path}',
@@ -118,6 +124,7 @@ final class AssetTransformer {
118124
...transformerArguments,
119125
];
120126

127+
logger.printTrace("Transforming asset using command '${command.join(' ')}'");
121128
final ProcessResult result = await _processManager.run(
122129
command,
123130
workingDirectory: workingDirectory,
@@ -199,6 +206,7 @@ final class DevelopmentAssetTransformer {
199206
outputPath: output.path,
200207
transformerEntries: transformerEntries,
201208
workingDirectory: workingDirectory,
209+
logger: _logger,
202210
);
203211
if (failure != null) {
204212
_logger.printError(failure.message);

packages/flutter_tools/lib/src/bundle_builder.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,7 @@ Future<void> writeBundle(
209209
outputPath: file.path,
210210
workingDirectory: projectDir.path,
211211
transformerEntries: entry.value.transformers,
212+
logger: logger,
212213
);
213214
doCopy = false;
214215
if (failure != null) {

packages/flutter_tools/test/general.shard/build_system/targets/asset_transformer_test.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ void main() {
7171
],
7272
)
7373
],
74+
logger: logger,
7475
);
7576

7677
expect(transformationFailure, isNull, reason: logger.errorText);
@@ -127,6 +128,7 @@ void main() {
127128
args: <String>[],
128129
)
129130
],
131+
logger: BufferLogger.test(),
130132
);
131133

132134
expect(asset, exists);
@@ -187,6 +189,7 @@ Something went wrong''');
187189
args: <String>[],
188190
)
189191
],
192+
logger: BufferLogger.test(),
190193
);
191194

192195
expect(processManager, hasNoRemainingExpectations);
@@ -286,6 +289,7 @@ Transformation failed, but I forgot to exit with a non-zero code.'''
286289
args: <String>[],
287290
),
288291
],
292+
logger: BufferLogger.test(),
289293
);
290294

291295
expect(processManager, hasNoRemainingExpectations);
@@ -364,6 +368,7 @@ Transformation failed, but I forgot to exit with a non-zero code.'''
364368
args: <String>[],
365369
),
366370
],
371+
logger: BufferLogger.test(),
367372
);
368373

369374
expect(failure, isNotNull);

0 commit comments

Comments
 (0)