Android drawable perf#31567
Conversation
|
/azp run |
|
Azure Pipelines successfully started running 3 pipeline(s). |
a042aaa to
10fd93f
Compare
|
@jsuarezruiz you can run AZP again.. though initially I had 80% perf improvement, but now with the last force push it's like 0%.. anyway I'm curious about UI tests failures. So I must have done something wrong, or I must have missed some caching opportunity. |
src/Core/AndroidNative/maui/src/main/java/com/microsoft/maui/PlatformDrawable.java
Show resolved
Hide resolved
src/Core/AndroidNative/maui/src/main/java/com/microsoft/maui/PlatformDrawable.java
Outdated
Show resolved
Hide resolved
src/Core/AndroidNative/maui/src/main/java/com/microsoft/maui/PlatformDrawable.java
Outdated
Show resolved
Hide resolved
10fd93f to
5f10e1a
Compare
|
@jsuarezruiz I've pushed another commit, and this time the timing looks better but not what I wanted/expected. There's only a 3ms performance gain.. now maybe this becomes much higher with a real world complex app, but I hoped to achieve something more. Please run /azp |
|
Wait, I found another issue. |
fee1cbf to
6a5f850
Compare
|
@jsuarezruiz this is now ready, I've updated all the benchmarks in the description |
|
/azp run |
|
Azure Pipelines successfully started running 3 pipeline(s). |
|
@jsuarezruiz @PureWeen the PR is now ready, I added a few commits with the fixes and updated screenshots, here's a summary:
|
|
/azp run |
|
Azure Pipelines successfully started running 3 pipeline(s). |
|
/azp run |
src/Core/AndroidNative/maui/src/main/java/com/microsoft/maui/PlatformDrawableStyle.java
Outdated
Show resolved
Hide resolved
…latformDrawableStyle.java
|
/azp run maui-pr-uitests, maui-pr-devicetests |
|
Azure Pipelines successfully started running 2 pipeline(s). |
|
@albyrock87 After applying the last commit, a Shadow on a Border without an explicit background causes the shadow brush to visually fill the entire background, which leads to the uitest RadioButtonUpdateValueInsideBorder failure. You can reproduce the issue using the simple code provided below. Can you review this failure?
|
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 31567Or
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 31567" |
|
So it turns out that on As you can see there is a Correcting my bug though created a different behavior because the code on Given this never worked, I have completely removed the theme-related code which makes everything work fine and the code cleaner. You can see the changes in my last commit. |
|
Azure Pipelines successfully started running 2 pipeline(s). |
### Description of Change Backgrounds are everywhere in our apps, so we must be fast when drawing android views, and `Java -> C#` is not. This PR tries to do its best to completely move the logic into a java `PlatformDrawable` class. ### Benchmarks (~50% improvements in mapping, ~60% improvement in rendering time) I used #24414 as main page wrapped into a `Shell` component given it has a `drawChild` method which shows the cumulative draw time. The results are impressive and will for sure make an impact! [24414-net10.json](https://github.com/user-attachments/files/22296183/24414-net10.json) <img width="754" height="144" alt="image" src="https://github.com/user-attachments/assets/834b59e0-77f9-457c-9867-179b91f116d0" /> <img width="749" height="46" alt="image" src="https://github.com/user-attachments/assets/5ecf5252-10c8-42e8-85f0-b94dfd60746b" /> <img width="752" height="124" alt="image" src="https://github.com/user-attachments/assets/04d78a16-f22d-4ff1-ab5f-b34316c7240a" /> [24414-pr-final2.json](https://github.com/user-attachments/files/22403331/24414-pr-final2.json) <img width="1106" height="122" alt="image" src="https://github.com/user-attachments/assets/bc59bef4-9e2f-4626-b399-7ab0b3b44cd0" /> <img width="918" height="104" alt="image" src="https://github.com/user-attachments/assets/caca6cba-69c4-4949-b7df-cac5ceccb6d9" /> <img width="903" height="123" alt="image" src="https://github.com/user-attachments/assets/2b6e9b52-c347-43d8-abec-061263739724" /> --------- Co-authored-by: Shane Neuville <shneuvil@microsoft.com> Co-authored-by: Gerald Versluis <gerald.versluis@microsoft.com>
### Description of Change Backgrounds are everywhere in our apps, so we must be fast when drawing android views, and `Java -> C#` is not. This PR tries to do its best to completely move the logic into a java `PlatformDrawable` class. ### Benchmarks (~50% improvements in mapping, ~60% improvement in rendering time) I used #24414 as main page wrapped into a `Shell` component given it has a `drawChild` method which shows the cumulative draw time. The results are impressive and will for sure make an impact! [24414-net10.json](https://github.com/user-attachments/files/22296183/24414-net10.json) <img width="754" height="144" alt="image" src="https://github.com/user-attachments/assets/834b59e0-77f9-457c-9867-179b91f116d0" /> <img width="749" height="46" alt="image" src="https://github.com/user-attachments/assets/5ecf5252-10c8-42e8-85f0-b94dfd60746b" /> <img width="752" height="124" alt="image" src="https://github.com/user-attachments/assets/04d78a16-f22d-4ff1-ab5f-b34316c7240a" /> [24414-pr-final2.json](https://github.com/user-attachments/files/22403331/24414-pr-final2.json) <img width="1106" height="122" alt="image" src="https://github.com/user-attachments/assets/bc59bef4-9e2f-4626-b399-7ab0b3b44cd0" /> <img width="918" height="104" alt="image" src="https://github.com/user-attachments/assets/caca6cba-69c4-4949-b7df-cac5ceccb6d9" /> <img width="903" height="123" alt="image" src="https://github.com/user-attachments/assets/2b6e9b52-c347-43d8-abec-061263739724" /> --------- Co-authored-by: Shane Neuville <shneuvil@microsoft.com> Co-authored-by: Gerald Versluis <gerald.versluis@microsoft.com>
### Description of Change Backgrounds are everywhere in our apps, so we must be fast when drawing android views, and `Java -> C#` is not. This PR tries to do its best to completely move the logic into a java `PlatformDrawable` class. ### Benchmarks (~50% improvements in mapping, ~60% improvement in rendering time) I used #24414 as main page wrapped into a `Shell` component given it has a `drawChild` method which shows the cumulative draw time. The results are impressive and will for sure make an impact! [24414-net10.json](https://github.com/user-attachments/files/22296183/24414-net10.json) <img width="754" height="144" alt="image" src="https://github.com/user-attachments/assets/834b59e0-77f9-457c-9867-179b91f116d0" /> <img width="749" height="46" alt="image" src="https://github.com/user-attachments/assets/5ecf5252-10c8-42e8-85f0-b94dfd60746b" /> <img width="752" height="124" alt="image" src="https://github.com/user-attachments/assets/04d78a16-f22d-4ff1-ab5f-b34316c7240a" /> [24414-pr-final2.json](https://github.com/user-attachments/files/22403331/24414-pr-final2.json) <img width="1106" height="122" alt="image" src="https://github.com/user-attachments/assets/bc59bef4-9e2f-4626-b399-7ab0b3b44cd0" /> <img width="918" height="104" alt="image" src="https://github.com/user-attachments/assets/caca6cba-69c4-4949-b7df-cac5ceccb6d9" /> <img width="903" height="123" alt="image" src="https://github.com/user-attachments/assets/2b6e9b52-c347-43d8-abec-061263739724" /> --------- Co-authored-by: Shane Neuville <shneuvil@microsoft.com> Co-authored-by: Gerald Versluis <gerald.versluis@microsoft.com>
### Description of Change Backgrounds are everywhere in our apps, so we must be fast when drawing android views, and `Java -> C#` is not. This PR tries to do its best to completely move the logic into a java `PlatformDrawable` class. ### Benchmarks (~50% improvements in mapping, ~60% improvement in rendering time) I used dotnet#24414 as main page wrapped into a `Shell` component given it has a `drawChild` method which shows the cumulative draw time. The results are impressive and will for sure make an impact! [24414-net10.json](https://github.com/user-attachments/files/22296183/24414-net10.json) <img width="754" height="144" alt="image" src="https://github.com/user-attachments/assets/834b59e0-77f9-457c-9867-179b91f116d0" /> <img width="749" height="46" alt="image" src="https://github.com/user-attachments/assets/5ecf5252-10c8-42e8-85f0-b94dfd60746b" /> <img width="752" height="124" alt="image" src="https://github.com/user-attachments/assets/04d78a16-f22d-4ff1-ab5f-b34316c7240a" /> [24414-pr-final2.json](https://github.com/user-attachments/files/22403331/24414-pr-final2.json) <img width="1106" height="122" alt="image" src="https://github.com/user-attachments/assets/bc59bef4-9e2f-4626-b399-7ab0b3b44cd0" /> <img width="918" height="104" alt="image" src="https://github.com/user-attachments/assets/caca6cba-69c4-4949-b7df-cac5ceccb6d9" /> <img width="903" height="123" alt="image" src="https://github.com/user-attachments/assets/2b6e9b52-c347-43d8-abec-061263739724" /> --------- Co-authored-by: Shane Neuville <shneuvil@microsoft.com> Co-authored-by: Gerald Versluis <gerald.versluis@microsoft.com>
… - 1 (#34334) This PR addresses the UI test image failures that occurred in the inflight/candidate branch #34294 and includes updates to improve rendering and test stability across platforms. ### Controls Handler Registration * Simplified the logic for registering handlers for controls like `Label`, `Editor`, `Picker`, `RadioButton`, and `TimePicker` in `AppHostBuilderExtensions.cs`. The new approach registers all fallback handlers together, reducing duplicated code and improving maintainability. ### * In the NavigationRootManager class, the line _rootView.SetTitleBar(null, null); was added in this PR #34032 by a contributor due to an AI minor suggestion, but this line causes an issue when swapping pages, so the TitlebarWorksWhenSwitchingPage test fails. Setting SetTitleBar to null is already implemented in the WindowHandler class in the [DisconnectHandler](https://github.com/dotnet/maui/blob/main/src/Core/src/Handlers/Window/WindowHandler.Windows.cs#L55) method, so I have removed this line _rootView.SetTitleBar(null, null); from the PR [34032](#34032). ### Image Resave: * Resaved images: DownSizeImageAppearProperly, Material3CheckBoxFeatureTests, Material3CheckBox_DefaultAppearance, DownSizeImageAppearProperly, VerifyLinearGradientBrushWithStrokeAndOpacity, VerifyRadialGradientBrushWithOpacity, VerifyRadialGradientBrushWithShadowAndOpacity, VerifyLinearGradientBrushWithOpacity, VerifyLinearGradientBrushWithShadowAndOpacity, DarkTheme_VerifyVisualState. These PR fixes address the issues: #33173, #31567, #33590, #34036 * Added the base images for iOS 26, Mac, and Windows. ### Test Stability and Platform-Specific Handling * Added a platform-specific ignore for a Shell flyout test on iOS 26 due to a known bug, improving test reliability and clarity about platform limitations. * Updated a CollectionView scroll test to wait for specific elements on Windows, ensuring the test works correctly across platforms. ### DatePicker Handler Tests * Introduced a helper method `EnsureDialogCreated` in `DatePickerHandlerTests.Android.cs` to reliably create the native dialog before reading min/max values, addressing issues caused by lazy dialog creation after a recent PR. This helper is now used in relevant tests to improve robustness. [[1]](diffhunk://#diff-de28fdea458f311cfcc7e767c7e9e2a4c7c36e4d065ae2ebf2a25b420f183c29R26) [[2]](diffhunk://#diff-de28fdea458f311cfcc7e767c7e9e2a4c7c36e4d065ae2ebf2a25b420f183c29R54) [[3]](diffhunk://#diff-de28fdea458f311cfcc7e767c7e9e2a4c7c36e4d065ae2ebf2a25b420f183c29R131-R146) * Clarified the DatePicker test logic in `DatePickerTests.cs` to ensure the `DateSelected` event fires correctly regardless of dialog state, improving test reliability on Android. ### Test Case Organization * Removed the obsolete `VerifyFlyoutPage_IsEnabled` test and renumbered the remaining FlyoutPage tests in `FlyoutPageFeatureTests.cs` to maintain sequential order and consistency. [[1]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L176-R177) [[2]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L204-R191) [[3]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L222-R209) [[4]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L240-R227) [[5]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L254-R241) [[6]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L268-R255) [[7]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L284-R271) [[8]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L299-R286) [[9]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L310-R297) [[10]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L327-R314) [[11]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L340-R327) [[12]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L357-R344) [[13]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L376-R363) [[14]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L387-R374) [[15]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L400-R387)
### Description of Change Backgrounds are everywhere in our apps, so we must be fast when drawing android views, and `Java -> C#` is not. This PR tries to do its best to completely move the logic into a java `PlatformDrawable` class. ### Benchmarks (~50% improvements in mapping, ~60% improvement in rendering time) I used #24414 as main page wrapped into a `Shell` component given it has a `drawChild` method which shows the cumulative draw time. The results are impressive and will for sure make an impact! [24414-net10.json](https://github.com/user-attachments/files/22296183/24414-net10.json) <img width="754" height="144" alt="image" src="https://github.com/user-attachments/assets/834b59e0-77f9-457c-9867-179b91f116d0" /> <img width="749" height="46" alt="image" src="https://github.com/user-attachments/assets/5ecf5252-10c8-42e8-85f0-b94dfd60746b" /> <img width="752" height="124" alt="image" src="https://github.com/user-attachments/assets/04d78a16-f22d-4ff1-ab5f-b34316c7240a" /> [24414-pr-final2.json](https://github.com/user-attachments/files/22403331/24414-pr-final2.json) <img width="1106" height="122" alt="image" src="https://github.com/user-attachments/assets/bc59bef4-9e2f-4626-b399-7ab0b3b44cd0" /> <img width="918" height="104" alt="image" src="https://github.com/user-attachments/assets/caca6cba-69c4-4949-b7df-cac5ceccb6d9" /> <img width="903" height="123" alt="image" src="https://github.com/user-attachments/assets/2b6e9b52-c347-43d8-abec-061263739724" /> --------- Co-authored-by: Shane Neuville <shneuvil@microsoft.com> Co-authored-by: Gerald Versluis <gerald.versluis@microsoft.com>
… - 1 (#34334) This PR addresses the UI test image failures that occurred in the inflight/candidate branch #34294 and includes updates to improve rendering and test stability across platforms. ### Controls Handler Registration * Simplified the logic for registering handlers for controls like `Label`, `Editor`, `Picker`, `RadioButton`, and `TimePicker` in `AppHostBuilderExtensions.cs`. The new approach registers all fallback handlers together, reducing duplicated code and improving maintainability. ### * In the NavigationRootManager class, the line _rootView.SetTitleBar(null, null); was added in this PR #34032 by a contributor due to an AI minor suggestion, but this line causes an issue when swapping pages, so the TitlebarWorksWhenSwitchingPage test fails. Setting SetTitleBar to null is already implemented in the WindowHandler class in the [DisconnectHandler](https://github.com/dotnet/maui/blob/main/src/Core/src/Handlers/Window/WindowHandler.Windows.cs#L55) method, so I have removed this line _rootView.SetTitleBar(null, null); from the PR [34032](#34032). ### Image Resave: * Resaved images: DownSizeImageAppearProperly, Material3CheckBoxFeatureTests, Material3CheckBox_DefaultAppearance, DownSizeImageAppearProperly, VerifyLinearGradientBrushWithStrokeAndOpacity, VerifyRadialGradientBrushWithOpacity, VerifyRadialGradientBrushWithShadowAndOpacity, VerifyLinearGradientBrushWithOpacity, VerifyLinearGradientBrushWithShadowAndOpacity, DarkTheme_VerifyVisualState. These PR fixes address the issues: #33173, #31567, #33590, #34036 * Added the base images for iOS 26, Mac, and Windows. ### Test Stability and Platform-Specific Handling * Added a platform-specific ignore for a Shell flyout test on iOS 26 due to a known bug, improving test reliability and clarity about platform limitations. * Updated a CollectionView scroll test to wait for specific elements on Windows, ensuring the test works correctly across platforms. ### DatePicker Handler Tests * Introduced a helper method `EnsureDialogCreated` in `DatePickerHandlerTests.Android.cs` to reliably create the native dialog before reading min/max values, addressing issues caused by lazy dialog creation after a recent PR. This helper is now used in relevant tests to improve robustness. [[1]](diffhunk://#diff-de28fdea458f311cfcc7e767c7e9e2a4c7c36e4d065ae2ebf2a25b420f183c29R26) [[2]](diffhunk://#diff-de28fdea458f311cfcc7e767c7e9e2a4c7c36e4d065ae2ebf2a25b420f183c29R54) [[3]](diffhunk://#diff-de28fdea458f311cfcc7e767c7e9e2a4c7c36e4d065ae2ebf2a25b420f183c29R131-R146) * Clarified the DatePicker test logic in `DatePickerTests.cs` to ensure the `DateSelected` event fires correctly regardless of dialog state, improving test reliability on Android. ### Test Case Organization * Removed the obsolete `VerifyFlyoutPage_IsEnabled` test and renumbered the remaining FlyoutPage tests in `FlyoutPageFeatureTests.cs` to maintain sequential order and consistency. [[1]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L176-R177) [[2]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L204-R191) [[3]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L222-R209) [[4]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L240-R227) [[5]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L254-R241) [[6]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L268-R255) [[7]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L284-R271) [[8]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L299-R286) [[9]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L310-R297) [[10]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L327-R314) [[11]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L340-R327) [[12]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L357-R344) [[13]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L376-R363) [[14]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L387-R374) [[15]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L400-R387)
## What's Coming .NET MAUI inflight/candidate introduces significant improvements across all platforms with focus on quality, performance, and developer experience. This release includes 46 commits with various improvements, bug fixes, and enhancements. ## Button - [Android] Implemented material3 support for Button by @Dhivya-SF4094 in #33173 <details> <summary>🔧 Fixes</summary> - [Implement Material3 support for Button](#33172) </details> ## CollectionView - [Android] Fix RemainingItemsThresholdReachedCommand not firing when CollectionView has Header and Footer both defined by @SuthiYuvaraj in #29618 <details> <summary>🔧 Fixes</summary> - [Android : RemainingItemsThresholdReachedCommand not firing when CollectionVew has Header and Footer both defined](#29588) </details> - [iOS/MacCatalyst] Fix CollectionView ScrollTo for horizontal layouts by @Shalini-Ashokan in #33853 <details> <summary>🔧 Fixes</summary> - [[iOS/MacCatalyst] CollectionView ScrollTo does not work with horizontal Layout](#33852) </details> - [iOS & Mac] Fixed IndicatorView Size doesnt update dynamically by @SubhikshaSf4851 in #31129 <details> <summary>🔧 Fixes</summary> - [[iOS, Catalyst] IndicatorView.IndicatorSize does not update dynamically at runtime](#31064) </details> - [Android] Fix for CollectionView Scrolled event is triggered on the initial app load. by @BagavathiPerumal in #33558 <details> <summary>🔧 Fixes</summary> - [[Android] CollectionView Scrolled event is triggered on the initial app load.](#33333) </details> - [iOS, Android] Fix for CollectionView IsEnabled=false allows touch interactions by @praveenkumarkarunanithi in #31403 <details> <summary>🔧 Fixes</summary> - [More issues with CollectionView IsEnabled, InputTransparent, Opacity via Styles and code behind](#19771) </details> - [iOS] Fix VerticalOffset Update When Modifying CollectionView.ItemsSource While Scrolled by @devanathan-vaithiyanathan in #34153 <details> <summary>🔧 Fixes</summary> - [[iOS]VerticalOffset Not Reset to Zero After Clearing ItemSource in CollectionView](#26798) </details> ## DateTimePicker - [Android] Fix DatePicker MinimumDate/MaximumDate not updating dynamically by @HarishwaranVijayakumar in #33687 <details> <summary>🔧 Fixes</summary> - [[regression/8.0.3] [Android] DatePicker control minimum date issue](#19256) - [[Android] DatePicker does not update MinimumDate / MaximumDate in the Popup when set in the viewmodel after first opening](#33583) </details> ## Drawing - Android drawable perf by @albyrock87 in #31567 ## Editor - [Android] Implemented material3 support for Editor by @SyedAbdulAzeemSF4852 in #33478 <details> <summary>🔧 Fixes</summary> - [Implement Material3 Support for Editor](#33476) </details> ## Entry - [iOS, Mac] Fix for CursorPosition not updating when typing into Entry control by @SyedAbdulAzeemSF4852 in #30505 <details> <summary>🔧 Fixes</summary> - [Entry control CursorPosition does not update on TextChanged event [iOS Maui 8.0.7] ](#20911) - [CursorPosition not calculated correctly on behaviors events for iOS devices](#32483) </details> ## Flyoutpage - [Android, Windows] Fix for FlyoutPage toolbar button not updating on orientation change by @praveenkumarkarunanithi in #31962 <details> <summary>🔧 Fixes</summary> - [Flyout page in Android does not show flyout button (burger) consistently](#24468) </details> - Fix for First Item in CollectionView Overlaps in FlyoutPage.Flyout on iOS by @praveenkumarkarunanithi in #29265 <details> <summary>🔧 Fixes</summary> - [[iOS] CollectionView not rendering first item correctly in FlyoutPage.Flyout](#29170) </details> ## Image - [Android] Fix excessive memory usage for stream and resource-based image loading by @Shalini-Ashokan in #33590 <details> <summary>🔧 Fixes</summary> - [[Android] Unexpected high Bitmap.ByteCount when loading image via ImageSource.FromResource() or ImageSource.FromStream() in .NET MAUI](#33239) </details> - [Android] Fix for Resize method returns an image that has already been disposed by @SyedAbdulAzeemSF4852 in #29964 <details> <summary>🔧 Fixes</summary> - [In GraphicsView, the Resize method returns an image that has already been disposed](#29961) - [IIMage.Resize bugged behaviour](#31103) </details> ## Label - Fixed Label Span font property inheritance when applied via Style by @SubhikshaSf4851 in #34110 <details> <summary>🔧 Fixes</summary> - [`Span` does not inherit text styling from `Label` if that styling is applied using `Style` ](#21326) </details> - [Android] Implemented material3 support for Label by @SyedAbdulAzeemSF4852 in #33599 <details> <summary>🔧 Fixes</summary> - [Implement Material3 Support for Label](#33598) </details> ## Map - [Android] Fix Circle Stroke color is incorrectly updated as Fill color. by @NirmalKumarYuvaraj in #33643 <details> <summary>🔧 Fixes</summary> - [[Android] Circle Stroke color is incorrectly updated as Fill color.](#33642) </details> ## Mediapicker - [iOS] Fix: invoke MediaPicker completion handler after DismissViewController by @yuriikyry4enko in #34250 <details> <summary>🔧 Fixes</summary> - [[iOS] Media Picker UIImagePickerController closing issue](#21996) </details> ## Navigation - Fix ContentPage memory leak on Android when using NavigationPage modally (fixes #33918) by @brunck in #34117 <details> <summary>🔧 Fixes</summary> - [[Android] Modal TabbedPage whose tabs are NavigationPage(ContentPage) is retained after PopModalAsync()](#33918) </details> ## Picker - [Android] Implement material3 support for TimePicker by @HarishwaranVijayakumar in #33646 <details> <summary>🔧 Fixes</summary> - [Implement Material3 support for TimePicker](#33645) </details> - [Android] Implemented Material3 support for Picker by @SyedAbdulAzeemSF4852 in #33668 <details> <summary>🔧 Fixes</summary> - [Implement Material3 support for Picker](#33665) </details> ## RadioButton - [Android] Implemented material3 support for RadioButton by @SyedAbdulAzeemSF4852 in #33468 <details> <summary>🔧 Fixes</summary> - [Implement Material3 Support for RadioButton](#33467) </details> ## Setup - Clarify MA003 error message by @jeremy-visionaid in #34067 <details> <summary>🔧 Fixes</summary> - [MA003 false positive with 9.0.21](#26599) </details> ## Shell - [Android] Fix TabBar FlowDirection not updating dynamically by @SubhikshaSf4851 in #33091 <details> <summary>🔧 Fixes</summary> - [[Android, iOS] FlowDirection RTL is not updated dynamically on Shell TabBar](#32993) </details> - [Android] Fix page not disposed on Shell replace navigation by @Vignesh-SF3580 in #33426 <details> <summary>🔧 Fixes</summary> - [[Android] [Shell] replace navigation leaks current page](#25134) </details> - [Android] Fixed Shell flyout does not disable scrolling when FlyoutVerticalScrollMode is set to Disabled by @NanthiniMahalingam in #32734 <details> <summary>🔧 Fixes</summary> - [[Android] Shell.FlyoutVerticalScrollMode="Disabled" does not disable scrolling](#32477) </details> ## Single Project - Fix: Throw a clear error when an SVG lacks dimensions instead of a NullReferenceException by @Shalini-Ashokan in #33194 <details> <summary>🔧 Fixes</summary> - [MAUI Fails To Convert Valid SVG Files Into PNG Files (Object reference not set to an instance of an object)](#32460) </details> ## SwipeView - [iOS] Fix SwipeView stays open on iOS after updating content by @devanathan-vaithiyanathan in #31248 <details> <summary>🔧 Fixes</summary> - [[iOS] - Swipeview with collectionview issue](#19541) </details> ## TabbedPage - [Windows] Fixed IsEnabled Property not works on Tabs by @NirmalKumarYuvaraj in #26728 <details> <summary>🔧 Fixes</summary> - [ShellContent IsEnabledProperty does not work](#5161) - [[Windows] Shell Tab IsEnabled Not Working](#32996) </details> - [Android] Fix NavigationBar overlapping StatusBar when NavigationBar visibility changes by @Vignesh-SF3580 in #33359 <details> <summary>🔧 Fixes</summary> - [[Android] NavigationBar overlaps with StatusBar when mixing HasNavigationBar=true/false in TabbedPage on Android 15 (API 35)](#33340) </details> ## Templates - Fix for unable to open task using keyboard navigation on windows platform by @SuthiYuvaraj in #33647 <details> <summary>🔧 Fixes</summary> - [Unable to open task using keyboard: A11y_.NET maui_User can get all the insights of Dashboard_Keyboard](#30787) </details> ## TitleView - Fix for NavigationPage.TitleView does not expand with host window in iPadOS 26+ by @SuthiYuvaraj in #33088 ## Toolbar - [iOS] Fix toolbar items ignoring BarTextColor on iOS/MacCatalyst 26+ by @Shalini-Ashokan in #34036 <details> <summary>🔧 Fixes</summary> - [[iOS 26] ToolbarItem color with custom BarTextColor not working](#33970) </details> - [Android] Fix for ToolbarItem retaining the icon from the previous page on Android when using NavigationPage. by @BagavathiPerumal in #32311 <details> <summary>🔧 Fixes</summary> - [Toolbaritem keeps the icon of the previous page on Android, using NavigationPage (not shell)](#31727) </details> ## WebView - [Android] Fix WebView in a grid expands beyond it's cell by @devanathan-vaithiyanathan in #32145 <details> <summary>🔧 Fixes</summary> - [Android - WebView in a grid expands beyond it's cell](#32030) </details> ## Xaml - ContentPresenter: Propagate binding context to children with explicit TemplateBinding by @HarishwaranVijayakumar in #30880 <details> <summary>🔧 Fixes</summary> - [Binding context in ContentPresenter](#23797) </details> <details> <summary>🔧 Infrastructure (1)</summary> - [Revert] ContentPresenter: Propagate binding context to children with explicit TemplateBinding by @Ahamed-Ali in #34332 </details> <details> <summary>🧪 Testing (6)</summary> - [Testing] Feature Matrix UITest Cases for Shell Flyout Page by @NafeelaNazhir in #32525 - [Testing] Feature Matrix UITest Cases for Brushes by @LogishaSelvarajSF4525 in #31833 - [Testing] Feature Matrix UITest Cases for BindableLayout by @LogishaSelvarajSF4525 in #33108 - [Android] Add UI tests for Material 3 CheckBox by @HarishwaranVijayakumar in #34126 <details> <summary>🔧 Fixes</summary> - [[Android] Add UI tests for Material 3 CheckBox](#34125) </details> - [Testing] Feature Matrix UITest Cases for Shell Tabbed Page by @NafeelaNazhir in #33159 - [Testing] Fixed Test case failure in PR 34294 - [03/2/2026] Candidate - 1 by @TamilarasanSF4853 in #34334 </details> <details> <summary>📦 Other (2)</summary> - Bumps Syncfusion.Maui.Toolkit dependency to version 1.0.9 by @PaulAndersonS in #34178 - Fix crash when closing Windows based app when using TitleBar by @MFinkBK in #34032 <details> <summary>🔧 Fixes</summary> - [Unhandled exception "Value does not fall within the expected range" when closing Windows app](#32194) </details> </details> **Full Changelog**: main...inflight/candidate


Description of Change
Backgrounds are everywhere in our apps, so we must be fast when drawing android views, and
Java -> C#is not.This PR tries to do its best to completely move the logic into a java
PlatformDrawableclass.Benchmarks (~50% improvements in mapping, ~60% improvement in rendering time)
I used #24414 as main page wrapped into a
Shellcomponent given it has adrawChildmethod which shows the cumulative draw time.The results are impressive and will for sure make an impact!
24414-net10.json



24414-pr-final2.json


