Repository navigation
[image_picker_android] Improved Bitmap resize on Android - #3423
Conversation
|
Re-requesting review from @tarrinneal and @stuartmorgan as you were both requested on the previous version of this PR. |
|
Have you run any benchmarks to see if/how much this is better than the old behaviour? |
|
Sorry, guys. I clicked on "request review" button on @stuartmorgan requested changes, and accidentally removed @gmackall and @tarrinneal from review. It wasn't on purpose. |
@tarrinneal , I just ran manual tests. I didn't do any benchmark test to compare the performance. Before I tried to pick an This patch skips Bitmap decoding when resize or quality changes are not needed. Plus it can improve the resize process by subsampling image decoding depending on the maximum requested dimension. Do you have any tips on how to benchmark it? |
tarrinneal
left a comment
There was a problem hiding this comment.
Just a little nit for the changelog, tagging @stuartmorgan for second review.
|
Thank you all for the support! By the way, the release job is running for about 4 hours. Is it normal? |
|
No, |
flutter/packages@6328cfb...6608b60 2023-05-15 [email protected] [ci] Remove unnecessary Linux libraries (flutter/packages#3975) 2023-05-15 [email protected] [ci] Enforce a minimum Kotlin version in examples (flutter/packages#3979) 2023-05-15 [email protected] [ci] Disable Windows repo tool tests (flutter/packages#3980) 2023-05-12 [email protected] [ci] Add LUCI repo tool tests (flutter/packages#3964) 2023-05-12 [email protected] [url_launcher] Set broadcast reciever visability as required by target api 34 (flutter/packages#3973) 2023-05-12 [email protected] Update build.gradle with a comment explaining version (flutter/packages#3972) 2023-05-12 [email protected] Roll Flutter from 8c5a1ea to a76dbe4 (12 revisions) (flutter/packages#3958) 2023-05-12 [email protected] [image_picker] Fix Android lints (flutter/packages#3887) 2023-05-12 [email protected] [various] Update minimum Flutter version to 3.3 (flutter/packages#3967) 2023-05-12 [email protected] [tool] Target specific Android unit tests (flutter/packages#3955) 2023-05-12 [email protected] [camerax] Add a dependency on kotlin-bom to align versions of kotlin-stdlib (flutter/packages#3960) 2023-05-12 [email protected] [local_auth] Improve iOS test DI (flutter/packages#3959) 2023-05-12 [email protected] [ci] Ensure scripts fail if a command fails (flutter/packages#3963) 2023-05-11 [email protected] [ci] Pin the Flutter version for `release` (flutter/packages#3965) 2023-05-11 [email protected] [video_player] foundation - reduce seek accuracy to fix seek to end bug (flutter/packages#3784) 2023-05-11 [email protected] [image_picker] Fix use_build_context_synchronously violations (flutter/packages#3969) 2023-05-11 [email protected] [tool] Ensure that publish credential path is available (flutter/packages#3970) 2023-05-11 [email protected] [go_router] change `fix_data.yaml` uris to be absolute to fix lints (flutter/packages#3877) 2023-05-11 [email protected] [tool] Use new pub cache location for publish (flutter/packages#3962) 2023-05-10 [email protected] Roll Flutter (stable) from f72efea to 84a1e90 (1920 revisions) (flutter/packages#3961) 2023-05-10 [email protected] [image_picker_android] Improved Bitmap resize on Android (flutter/packages#3423) 2023-05-10 [email protected] [camerax] Add Kotlin duplicate classes known error to README.md (flutter/packages#3957) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages-flutter-autoroll Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://bugs.chromium.org/p/skia/issues/entry?template=Autoroller+Bug Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
flutter/packages@6328cfb...6608b60 2023-05-15 [email protected] [ci] Remove unnecessary Linux libraries (flutter/packages#3975) 2023-05-15 [email protected] [ci] Enforce a minimum Kotlin version in examples (flutter/packages#3979) 2023-05-15 [email protected] [ci] Disable Windows repo tool tests (flutter/packages#3980) 2023-05-12 [email protected] [ci] Add LUCI repo tool tests (flutter/packages#3964) 2023-05-12 [email protected] [url_launcher] Set broadcast reciever visability as required by target api 34 (flutter/packages#3973) 2023-05-12 [email protected] Update build.gradle with a comment explaining version (flutter/packages#3972) 2023-05-12 [email protected] Roll Flutter from 8c5a1ea to a76dbe4 (12 revisions) (flutter/packages#3958) 2023-05-12 [email protected] [image_picker] Fix Android lints (flutter/packages#3887) 2023-05-12 [email protected] [various] Update minimum Flutter version to 3.3 (flutter/packages#3967) 2023-05-12 [email protected] [tool] Target specific Android unit tests (flutter/packages#3955) 2023-05-12 [email protected] [camerax] Add a dependency on kotlin-bom to align versions of kotlin-stdlib (flutter/packages#3960) 2023-05-12 [email protected] [local_auth] Improve iOS test DI (flutter/packages#3959) 2023-05-12 [email protected] [ci] Ensure scripts fail if a command fails (flutter/packages#3963) 2023-05-11 [email protected] [ci] Pin the Flutter version for `release` (flutter/packages#3965) 2023-05-11 [email protected] [video_player] foundation - reduce seek accuracy to fix seek to end bug (flutter/packages#3784) 2023-05-11 [email protected] [image_picker] Fix use_build_context_synchronously violations (flutter/packages#3969) 2023-05-11 [email protected] [tool] Ensure that publish credential path is available (flutter/packages#3970) 2023-05-11 [email protected] [go_router] change `fix_data.yaml` uris to be absolute to fix lints (flutter/packages#3877) 2023-05-11 [email protected] [tool] Use new pub cache location for publish (flutter/packages#3962) 2023-05-10 [email protected] Roll Flutter (stable) from f72efea to 84a1e90 (1920 revisions) (flutter/packages#3961) 2023-05-10 [email protected] [image_picker_android] Improved Bitmap resize on Android (flutter/packages#3423) 2023-05-10 [email protected] [camerax] Add Kotlin duplicate classes known error to README.md (flutter/packages#3957) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages-flutter-autoroll Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://bugs.chromium.org/p/skia/issues/entry?template=Autoroller+Bug Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
Improves Bitmap load and resize on Android. Original PR on flutter/plugins: flutter-team-archive/plugins#6947 Issue: flutter/flutter#118383
Improves Bitmap load and resize on Android. Original PR on flutter/plugins: flutter-team-archive/plugins#6947 Issue: flutter/flutter#118383
Improves Bitmap load and resize on Android. Original PR on flutter/plugins: flutter-team-archive/plugins#6947 Issue: flutter/flutter#118383
`ImageResizer.resizeImageIfNeeded` created a fresh `BitmapFactory.Options` and passed it to `calculateSampleSize`, which read `options.outWidth` and `options.outHeight`. That object had never been used for a decode, so both were 0 and the sample size was always 1: every resize with `maxWidth` or `maxHeight` decoded the full-size bitmap (about 48 MB for a 12 MP photo) before scaling it down. The original dimensions were already read by `readFileDimensions`, into a different `Options`. This PR passes those original dimensions to `calculateSampleSize` instead. The sample size stays the largest power of two that still decodes at least the target size, so the output dimensions are unchanged. The new `onResizeImageIfNeeded_whenDownscaling_shouldSubsampleFromOriginalSize` test resizes a 12x7 image to a width of 3 and checks the pixel decode uses `inSampleSize == 2` (before the fix it was 1) and that the output is still 3x2. This is not a regression: subsampling has never taken effect, since `inSampleSize` has been 1 from when it was introduced in #3423, and before that the full image was decoded too. Fixes flutter/flutter#193036 ## Pre-Review Checklist **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling.
Improves Bitmap load and resize on Android.
Original PR on flutter/plugins: flutter-team-archive/plugins#6947
Issue: flutter/flutter#118383
Pre-launch Checklist