-
Notifications
You must be signed in to change notification settings - Fork 27.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Reland "Speed up first asset load by using the binary-formatted asset manifest for image resolution" #122505
Reland "Speed up first asset load by using the binary-formatted asset manifest for image resolution" #122505
Conversation
@@ -266,6 +266,7 @@ abstract class CachingAssetBundle extends AssetBundle { | |||
.then<T>(parser) | |||
.then<void>((T value) { | |||
result = SynchronousFuture<T>(value); | |||
_structuredBinaryDataCache[key] = result!; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How about a unit test that directly invokes loadStructuredBinaryData and asserts that the cache is populated sychonously?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good idea. I added some new tests (and moved others around).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
…-asset-manifest-in-image-resolution-2
…ed asset manifest for image resolution" (flutter/flutter#122505)
…ed asset manifest for image resolution" (flutter/flutter#122505)
…ed asset manifest for image resolution" (flutter/flutter#122505)
…ed asset manifest for image resolution" (flutter/flutter#122505)
…ed asset manifest for image resolution" (flutter/flutter#122505)
…ed asset manifest for image resolution" (flutter/flutter#122505)
…ed asset manifest for image resolution" (flutter/flutter#122505)
…ts exist (#128143) Fixes #127090. #122505 did a few things to speed up the first asset load that a flutter app performs. One of those things was to not include the main asset in its own list of variants in the asset manifest. The idea was that we know that the main asset always exists, so including it in its list of variants is a waste of storage space and loading time (even if the cost was tiny). However, the assumption that the main asset always exists is wrong. From [Declaring resolution-aware image assets](https://docs.flutter.dev/ui/assets-and-images#resolution-aware), which predates #122505: > Each entry in the asset section of the pubspec.yaml should correspond to a real file, with the exception of the main asset entry. If the main asset entry doesnâ��t correspond to a real file, then the asset with the lowest resolution is used as the fallback for devices with device pixel ratios below that resolution. The entry should still be included in the pubspec.yaml manifest, however. For example, it's valid to declare `assets/image.png` as an asset even if only `assets/3x/image.png` exists on disk. This fix restores older behavior of including a main asset as a variant of itself in the manifest if it exists. This fix also includes a non-user-visible behavior change: * `"dpr"` is no longer a required field in the asset manifest's underlying structure. For the main asset entry, we do not include `"dpr"`. It makes less sense for the tool to decide what the default target dpr for an image should be. This should be left to the framework.
…ts exist (flutter#128143) Fixes flutter#127090. flutter#122505 did a few things to speed up the first asset load that a flutter app performs. One of those things was to not include the main asset in its own list of variants in the asset manifest. The idea was that we know that the main asset always exists, so including it in its list of variants is a waste of storage space and loading time (even if the cost was tiny). However, the assumption that the main asset always exists is wrong. From [Declaring resolution-aware image assets](https://docs.flutter.dev/ui/assets-and-images#resolution-aware), which predates flutter#122505: > Each entry in the asset section of the pubspec.yaml should correspond to a real file, with the exception of the main asset entry. If the main asset entry doesnâ��t correspond to a real file, then the asset with the lowest resolution is used as the fallback for devices with device pixel ratios below that resolution. The entry should still be included in the pubspec.yaml manifest, however. For example, it's valid to declare `assets/image.png` as an asset even if only `assets/3x/image.png` exists on disk. This fix restores older behavior of including a main asset as a variant of itself in the manifest if it exists. This fix also includes a non-user-visible behavior change: * `"dpr"` is no longer a required field in the asset manifest's underlying structure. For the main asset entry, we do not include `"dpr"`. It makes less sense for the tool to decide what the default target dpr for an image should be. This should be left to the framework.
Relands #121322, which causing image loading issues in Wondrous, see #122447.
It appears the issue was a misplaced cache write in
CachingAssetBundle.loadStrucutredBinaryData
(code).Pre-launch Checklist
///
).If you need help, consider asking for advice on the #hackers-new channel on Discord.