Let's talk performance

DavidOrtinauDavidOrtinau David OrtinauUSForum Administrator, Xamarin Team, Insider, University Xamurai
edited April 13 in Xamarin.Forms

As we continue to release performance focused features and fixes, and build processes around performance, I want to have a thread dedicated to those items.

Our public roadmap itemizes the feature work we are doing and planning to do, and items related to performance are tagged. In addition to that, we are building into our CI processes ways to measure and compare performance metrics. The goal is that with specific commits and builds we can get visibility to any impact on speed and memory usage.

One of the initiatives I'm spearheading is to populate a solution with UIs that are representative of your applications. To that end, I'm asking you to consider sharing those layouts with us. Perhaps the best way to gather them would be to open a repository and have you submit pull requests. I'll get working on that next and post details here.

Fast Renderers for Android are now merged and in nightly and will be our next pre-release. I hope some of you will take some time to test them out and report back here with your findings.

«134567

Posts

  • nadjibnadjib Nadjib Bait DZMember ✭✭✭✭
    edited April 13

    Startup time is far from optimal especially on Android. 5 to 10 seconds to launch an app, means we'll loose customers. It's as simple as that. You should bring it to < 3 seconds.

  • DavidOrtinauDavidOrtinau David Ortinau USForum Administrator, Xamarin Team, Insider, University Xamurai

    @nadjib said:
    Startup time is far from optimal especially on Android. 5 to 10 seconds to launch an app, means we'll loose customers. It's as simple as that. You should bring it to < 3 seconds.

    Yes, we continue to look for opportunities to improve startup. What's your minimum Android API version?

  • DH_HA1DH_HA1 Darren Haligas USMember ✭✭✭

    Yes I agree with @ClintStLaurent getting the basic app to launch as fast as possible will help.

    Guidance on how to defer application startup to speed that up would be a good guide for the community.

  • DavidOrtinauDavidOrtinau David Ortinau USForum Administrator, Xamarin Team, Insider, University Xamurai
    edited April 13

    2.3.5.233-pre1 is up. Includes Fast Renderers (Button, Image Label), ListView improvements, and 130+ other bits.

    Please give it a look and let me know what kind of performance you're seeing. If you want to share metrics, please include device and OS specs.

  • ClintStLaurentClintStLaurent Clint StLaurent USUniversity ✭✭✭✭✭

    @DavidOrtinau said:
    What's your minimum Android API version?

    5.1 here - Samsung Tab4/TabE level 8" tablet - Deployed to about 40,000 truck drivers.

  • NMackayNMackay Norman Mackay GBInsider, University ✭✭✭✭✭

    @DavidOrtinau

    We're using Telerik RadList. How does the feedback apply to people using 3rd party libraries? their will be a lot of users users using Infragistics/Telerik/Syncfusion.

    Startup times regardless of 3rd party controls in my experience are pretty similar, I can't rework dashboards into standard listview though as the tileview feature doesn't exist.

    Maybe worth getting the vendors involved as well.

  • DavidOrtinauDavidOrtinau David Ortinau USForum Administrator, Xamarin Team, Insider, University Xamurai

    Re: Startup time, I'm curious to know:

    • How many assemblies/dlls end up in your target project?
    • Are you using custom fonts and where / when are you loading them?
    • What 3rd party libraries are you using? Are they initializing at startup?
    • Are you making web calls or loading other data during startup? How many calls are being made?
    • On Android are you subclassing native java objects?
    • Are you using Maps?
  • FredyWengerFredyWenger Fredy Wenger CHInsider ✭✭✭✭✭

    @DavidOrtinau
    Thanks for this thread :smile:

  • AndrewMobileAndrewMobile Andrei N USMember ✭✭✭✭
    edited April 13

    @DavidOrtinau
    What are these fast renderers? What's the PR(s) for their implementation?
    How do they work? Is it a mechanism which is extensible like the current version of renderers? Can I implement a "fast renderer" too?
    Where can I read about the mechanism?
    At least some basic information how they work can be useful to get started.

  • NMackayNMackay Norman Mackay GBInsider, University ✭✭✭✭✭

    @DavidOrtinau

    No problem answering these questions but I know straight up front I can't post some of that info here so is it okay to pass it on directly?

  • PaulDiPietroPaulDiPietro Paul DiPietro USXamarin Team Xamurai

    @AndrewMobile The PR is here.

  • AndrewMobileAndrewMobile Andrei N USMember ✭✭✭✭

    @PaulDiPietro OK, thanks. What about how they work? Any info, description, etc? Or should we just read the code and try figure out ourselves the architecture and everything else?

  • DavidOrtinauDavidOrtinau David Ortinau USForum Administrator, Xamarin Team, Insider, University Xamurai

    @NMackay said:
    @DavidOrtinau

    No problem answering these questions but I know straight up front I can't post some of that info here so is it okay to pass it on directly?

    For sure! Totally understand.

  • PaulDiPietroPaulDiPietro Paul DiPietro USXamarin Team Xamurai

    @AndrewMobile The latest blog post will help explain things. They are on by default in 2.3.5-pre1.

  • AndrewMobileAndrewMobile Andrei N USMember ✭✭✭✭
    edited April 13

    @PaulDiPietro said:
    @AndrewMobile The latest blog post will help explain things. They are on by default in 2.3.5-pre1.

    I've just read that. Beside that they should be faster, there's no word about how they actually work, how are they different than current renderers. Like I mentioned above, some basic introductory text about their implementation would help. Otherwise we're left with to read the source code and try figuring out how it works.

  • nadjibnadjib Nadjib Bait DZMember ✭✭✭✭
    edited April 13

    @DavidOrtinau said:

    @nadjib said:
    Startup time is far from optimal especially on Android. 5 to 10 seconds to launch an app, means we'll loose customers. It's as simple as that. You should bring it to < 3 seconds.

    Yes, we continue to look for opportunities to improve startup. What's your minimum Android API version?

    @DavidOrtinau

    • Minimum Android API: 15
    • Use Maps : Yes, but not Xamarin.Forms.Maps, I use Google Maps
    • At startup: Nothing fancy, just IoC/DI, reading 1 Settings key to check if there's a logged in user or not (using James Plugin).
    • DLLs: FreshMvvm, Json.net, 2 PCLs, FFImageLoading... check the packages list:
    <packages>
        <package id="Bolts" version="1.4.0" targetFramework="monoandroid71" />
      <package id="FreshMvvm" version="2.2.0" targetFramework="monoandroid71" />
      <package id="Microsoft.Azure.Mobile" version="0.7.0" targetFramework="monoandroid71" />
      <package id="Microsoft.Azure.Mobile.Analytics" version="0.7.0" targetFramework="monoandroid71" />
      <package id="Microsoft.Azure.Mobile.Crashes" version="0.7.0" targetFramework="monoandroid71" />
      <package id="Microsoft.Bcl" version="1.1.10" targetFramework="monoandroid71" />
      <package id="Microsoft.Bcl.Build" version="1.0.21" targetFramework="monoandroid71" />
      <package id="Microsoft.Net.Http" version="2.2.29" targetFramework="monoandroid71" />
      <package id="Plugin.CurrentActivity" version="1.0.1" targetFramework="monoandroid71" />
      <package id="Plugin.Permissions" version="1.2.1" targetFramework="monoandroid71" />
      <package id="Xam.FormsPlugin.Iconize" version="1.0.10" targetFramework="monoandroid71" />
      <package id="Xam.Plugin.Geolocator" version="3.0.4" targetFramework="monoandroid71" />
      <package id="Xam.Plugin.Iconize" version="1.0.10" targetFramework="monoandroid71" />
      <package id="Xam.Plugin.Iconize.FontAwesome" version="1.0.10" targetFramework="monoandroid71" />
      <package id="Xam.Plugin.Media" version="2.6.2" targetFramework="monoandroid71" />
      <package id="Xam.Plugins.Settings" version="2.5.4" targetFramework="monoandroid71" />
      <package id="Xamarin.Android.Support.Animated.Vector.Drawable" version="23.3.0" targetFramework="monoandroid71" />
      <package id="Xamarin.Android.Support.Design" version="23.3.0" targetFramework="monoandroid71" />
      <package id="Xamarin.Android.Support.v4" version="23.3.0" targetFramework="monoandroid71" />
      <package id="Xamarin.Android.Support.v7.AppCompat" version="23.3.0" targetFramework="monoandroid71" />
      <package id="Xamarin.Android.Support.v7.CardView" version="23.3.0" targetFramework="monoandroid71" />
      <package id="Xamarin.Android.Support.v7.MediaRouter" version="23.3.0" targetFramework="monoandroid71" />
      <package id="Xamarin.Android.Support.v7.RecyclerView" version="23.3.0" targetFramework="monoandroid71" />
      <package id="Xamarin.Android.Support.Vector.Drawable" version="23.3.0" targetFramework="monoandroid71" />
      <package id="Xamarin.Facebook.Android" version="4.11.0.1" targetFramework="monoandroid71" />
      <package id="Xamarin.FFImageLoading" version="2.2.9" targetFramework="monoandroid71" />
      <package id="Xamarin.FFImageLoading.Forms" version="2.2.9" targetFramework="monoandroid71" />
      <package id="Xamarin.FFImageLoading.Transformations" version="2.2.9" targetFramework="monoandroid71" />
      <package id="Xamarin.Forms" version="2.3.4.214-pre5" targetFramework="monoandroid71" />
      <package id="Xamarin.Forms.CarouselView" version="2.3.0-pre2" targetFramework="monoandroid71" />
      <package id="Xamarin.Forms.GoogleMaps" version="1.8.0-beta6" targetFramework="monoandroid71" />
      <package id="Xamarin.GooglePlayServices.Base" version="29.0.0.2" targetFramework="monoandroid71" />
      <package id="Xamarin.GooglePlayServices.Basement" version="29.0.0.2" targetFramework="monoandroid71" />
      <package id="Xamarin.GooglePlayServices.Location" version="29.0.0.2" targetFramework="monoandroid71" />
      <package id="Xamarin.GooglePlayServices.Maps" version="29.0.0.2" targetFramework="monoandroid71" />
    </packages>
    
    
  • PaulDiPietroPaulDiPietro Paul DiPietro USXamarin Team Xamurai

    @nadjib What device(s) are you typically using?

  • AndrewMobileAndrewMobile Andrei N USMember ✭✭✭✭

    @EZHart Thanks. Makes sense. You might consider include that in the blog post as well, it will reach to much more people.

  • AndrewMobileAndrewMobile Andrei N USMember ✭✭✭✭
    edited April 13

    I quickly tested this on an app and it worked without issues. But in terms of performance I can't really tell. It would require some profiling/investigation. The blog post mentions about 2x performance. How was this measured? Any info on the steps to take?

  • TonyDTonyD Antoine El Daher USMember ✭✭✭

    We have lots of perf measurement setup in our app since we've been dealing with this for a year. I'll update to 2.3.5 this week and see what the delta is, if any.

  • TonyDTonyD Antoine El Daher USMember ✭✭✭
    edited April 13

    @EZHart thanks - what's the guidance on "new" custom renderers?

    If I have something really simple like:

        public class CustomButtonRenderer : ViewRenderer<CustomButton, Android.Widget.Button>
        {
        //...
            protected override void OnElementChanged(ElementChangedEventArgs<CustomButton> e)
            {
                //...
                SetNativeControl( new Android.Widget.Button(Context));
            }
        }
    

    Should I inherit from something else than ViewRenderer to avoid the extra viewgroup?

  • PhilipGruebelePhilipGruebele Philip Gruebele USMember ✭✭

    I believe if you're using FFImageLoading you won't be able to use 2.3.5.233-pre1 until that library is udpated to fast renderers.

    I just posted this issue: https://github.com/luberda-molinet/FFImageLoading/issues/572

  • DavidOrtinauDavidOrtinau David Ortinau USForum Administrator, Xamarin Team, Insider, University Xamurai

    Thanks @nadjib!> @AndrewMobile said:

    I quickly tested this on an app and it worked without issues. But in terms of performance I can't really tell. It would require some profiling/investigation. The blog post mentions about 2x performance. How was this measured? Any info on the steps to take?

    Sure. As I describe the tests I performed, I want to be clear that I'm not claiming my path is ideal. If you are not seeing the gains, then it's important for us to see what you're testing (hence my request for UIs/Layouts) and how you're are testing. I don't want to ask anyone to test like I tested just to get the results I got.

    A key reason I've started this thread is to invite you and others to contribute your results, and inform how and what we measure.

    On a Samsung S6 Edge+, I called GC.Collect(), grabbed a start time, loaded a ContentPage with a StackLayout and a hundred or so Labels (my SSD failed and that project is gone), and took the end time at the completion of OnAppearing. I ran it about 5-10 times in debug and release using different versions going back to 2.2. I averaged the results for each round of test, dropping high and low. The more Labels I added, the more obvious the differences.

    When I tested a ListView with 1500 rows (2 dif layouts: Image, StackViews, Grid, 3 Labels), I did not see the same initial rendering improvement. However the scrolling behavior and performance was visibly obvious.

    We have also been running a basic rendering (creation and layout) test with TestCloud, and, as I touched on in the post I believe, the device and OS play a major role. That shouldn't come as a surprise.

    I did not profile memory usage, but we should be able to expect some benefits there.

  • BradChase.2654BradChase.2654 Brad Chase USMember ✭✭✭
    edited April 14

    @TonyD The fast renderers are in a different namespace. So you might want to try inheriting from the one in Xamarin.Forms.Platform.Android.FastRenderers.*.

    Xamarin.Forms.Platform.Android.FastRenderers.ButtonRenderer to be exact.

  • EZHartEZHart E.Z. Hart USXamarin Team Xamurai
    edited April 14

    @TonyD - Brad Chase is correct, you'd want to inherit from the appropriate renderer in the FastRenderers namespace. As for "guidance", for the moment that subject is a bit fluid. If you're just changing some behaviors/properties, overriding OnElementChanged/OnElementPropertyChanged as before will take care of most of your needs*.

    There may well be custom scenarios that were possible before and aren't (at the moment) supported by these new renderers. We definitely want any feedback you can give us on those situations so we can accommodate them where they make sense. We're also experimenting with some changes to make writing custom renderers a bit more flexible. So the guidance may change a bit over the next couple of pre-releases.

    *Well, it will as soon as we release a fix for the fact that OnElementPropertyChanged is not marked virtual in the fast renderers. (d'oh)

  • ClintStLaurentClintStLaurent Clint StLaurent USUniversity ✭✭✭✭✭

    I read the blog and am still hazy about the 'fast renderers'.

    We’re delivering Button, Image, and Label in this first batch
    To use it, do nothing; they’re on by default in this pre-release.

    So are you saying that Button, Image and Label in my Xamarin.Forms app will now automatically be using these fast renderers?

  • rogiheerogihee Rogier van der Hee NLMember ✭✭✭

    @DavidOrtinau great initiative! Can we agree on a standard way of measuring performance? I saw there is some Performance class in Core, could we use that?

    Should we measure from MainActivity of App? How do I measure the layout/initial performance of my MainActivity screen?

    As external libs I use FFImageLoading, Connectivity, Media plugins and 2 custom fonts. I load initial data from a text file from disk and that is synced later asynchronously from a web API once the first screen is shown. A couple of settings are read from file from Context.GetSharedPreferences. Use a 9-patch splash screen on Android.

    Some guidance on how to optimize startup performance and measure it would be nice. If we all do it the same way we can compare better...

  • AbdullahNAAbdullahNA Abdullah N A INMember ✭✭

    Android app startup is taking ~10 seconds. I am using Xamarin.Forms 2.3.4.x. It runs faster ~3 seconds on Android Emulator for Visual Studio, but it consistently takes ~10 seconds on real devices. I tested on the following devices (I am surprised the timing is almost same in debug as well as in the release mode).
    Test Results
    * ~8 to 10 seconds on Samsung Galaxy OnNXT
    * ~5-6 seconds on Xiaomi Mi Max Prime
    * ~4-5 seconds on Redmi Note 3
    * ~9.5 seconds on Asus Zenfone2

    My Log (This loading assembly itself takes ~6 seconds, and the splash screen is showing up all the time while this loading happens). You can see all the dlls I am using and this includes EF Core as well. Any help please?
    Android application is debugging.
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/extrony.Droid.dll
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Acr.Support.Android.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Acr.UserDialogs.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Acr.UserDialogs.Interface.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/AndHUD.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/CarouselView.FormsPlugin.Abstractions.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/CarouselView.FormsPlugin.Android.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/FFImageLoading.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/FFImageLoading.Forms.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/FFImageLoading.Forms.Droid.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/FFImageLoading.Platform.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/FormsViewGroup.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/HtmlAgilityPack.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Microsoft.Azure.Mobile.Analytics.Android.Bindings.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Microsoft.Azure.Mobile.Analytics.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Microsoft.Azure.Mobile.Android.Bindings.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Microsoft.Azure.Mobile.Crashes.Android.Bindings.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Microsoft.Azure.Mobile.Crashes.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Microsoft.Azure.Mobile.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Microsoft.Data.Sqlite.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Microsoft.EntityFrameworkCore.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Microsoft.EntityFrameworkCore.Relational.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Microsoft.EntityFrameworkCore.Sqlite.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Microsoft.Extensions.Caching.Abstractions.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Microsoft.Extensions.Caching.Memory.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Microsoft.Extensions.DependencyInjection.Abstractions.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Microsoft.Extensions.DependencyInjection.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Microsoft.Extensions.Logging.Abstractions.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Microsoft.Extensions.Logging.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Microsoft.Extensions.Options.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Microsoft.Extensions.Primitives.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/ModernHttpClient.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Newtonsoft.Json.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/OkHttp.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Plugin.Connectivity.Abstractions.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Plugin.Connectivity.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Plugin.CurrentActivity.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Plugin.Settings.Abstractions.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Plugin.Settings.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Plugin.Share.Abstractions.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Plugin.Share.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Remotion.Linq.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/SgmlReaderDll.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Splat.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/System.Collections.Immutable.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/System.Diagnostics.DiagnosticSource.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/System.Interactive.Async.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/System.Runtime.CompilerServices.Unsafe.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Xamarin.Android.Support.Animated.Vector.Drawable.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Xamarin.Android.Support.CustomTabs.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Xamarin.Android.Support.Design.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Xamarin.Android.Support.v4.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Xamarin.Android.Support.v7.AppCompat.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Xamarin.Android.Support.v7.CardView.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Xamarin.Android.Support.v7.MediaRouter.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Xamarin.Android.Support.v7.RecyclerView.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Xamarin.Android.Support.Vector.Drawable.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Xamarin.Forms.Core.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Xamarin.Forms.Platform.Android.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Xamarin.Forms.Platform.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/Xamarin.Forms.Xaml.dll [External]
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/extrony.dll
    Loaded assembly: /storage/emulated/0/Android/data/com.abdullah.extrony/files/.override/extrony.Data.dll
    Loaded assembly: Mono.Android.dll [External]
    Loaded assembly: Java.Interop.dll [External]
    Loaded assembly: System.Runtime.dll [External]
    Loaded assembly: System.Collections.Concurrent.dll [External]
    Loaded assembly: System.Reflection.dll [External]
    Loaded assembly: System.Threading.dll [External]
    Loaded assembly: System.Diagnostics.Debug.dll [External]
    Loaded assembly: System.dll [External]
    Loaded assembly: System.Runtime.InteropServices.dll [External]
    Loaded assembly: System.Collections.dll [External]
    Loaded assembly: System.Linq.dll [External]
    Loaded assembly: System.Core.dll [External]
    Loaded assembly: System.Reflection.Extensions.dll [External]
    Loaded assembly: MonoDroidConstructors [External]
    Loaded assembly: System.ObjectModel.dll [External]
    Loaded assembly: System.Threading.Tasks.dll [External]
    Loaded assembly: System.Xml.ReaderWriter.dll [External]
    Loaded assembly: System.Xml.dll [External]
    Loaded assembly: System.IO.dll [External]
    Loaded assembly: System.Runtime.Extensions.dll [External]
    Loaded assembly: System.Linq.Expressions.dll [External]
    Loaded assembly: System.Resources.ResourceManager.dll [External]
    Loaded assembly: System.Globalization.dll [External]
    Loaded assembly: System.Dynamic.Runtime.dll [External]
    Loaded assembly: System.ComponentModel.dll [External]
    Thread started: #2
    Thread started: #3
    Thread started: #4
    Thread started: #5
    Loaded assembly: System.Linq.Queryable.dll [External]
    Loaded assembly: Anonymously Hosted DynamicMethods Assembly [External]
    Loaded assembly: System.Data.Common.dll [External]
    Loaded assembly: System.Data.dll [External]
    Thread started: #6
    Loaded assembly: System.Diagnostics.Tracing.dll [External]
    Loaded assembly: System.ComponentModel.Annotations.dll [External]
    Loaded assembly: System.ComponentModel.DataAnnotations.dll [External]

  • akamudakamud Mahmoud Ali Neto BRUniversity ✭✭

    Are there any plans on removing the old renderers in the future? Because at the moment I see that people will have to somehow find out that they need to inherit from FastRenderers namespace when they are creating a custom renderer to get better performance. This is not clear in the blog post, is it in the documentation somewhere?

  • EZHartEZHart E.Z. Hart USXamarin Team Xamurai

    @ClintStLaurent - That's correct; if you are not already using a custom renderer for Button, Image, or Label, then once you've updated to 2.3.5-pre1 you'll be using the fast renderers. No code changes required.

    The old renderers are still included, so if you had custom renderers based on them they will still work.

    @MahmoudAliNeto - There are currently no plans to remove the old renderers; that would be a breaking change for anyone who has based a custom renderer on them.

    As I said above, guidance for custom renderers based on the fast renderers is still being worked out. I expect that as we solidify that guidance and get closer to a full release of the fast renderers, we'll be updating the documentation.

  • ClintStLaurentClintStLaurent Clint StLaurent USUniversity ✭✭✭✭✭

    Thanks for that clear explanation @EZHart
    Clarity without ambiguity is a good thing.

  • RinoJohnsenRinoJohnsen Rino Johnsen USMember

    I would like to raise the question on UWP animations. My current project have had the focus on performance. We really want to hit that 60 fps for our users since we believe this is a must have for our app. We have been able to hit that goal with iOS and Android with careful selection and optimization on our views and navigations. The one thing we haven't been able to solve is the choppy animations on UWP.

    Simple things like a view on a AbsoluteLayout where we want to animate it out of the layout with view.TranslateTo(0, -layout.X, 500, ...); This works excellent on Android and iOS, but a horrible animations for UWP. By horrible; I mean really choppy and by that, not hitting our goal.

    1: Is there any way for us to make this better on our end?

    2: Is this something that would be easy for you to fix?

  • BradChase.2654BradChase.2654 Brad Chase USMember ✭✭✭
    edited April 15
    @RinoJohnsen have you used this release? It has a massive UWP performance gain in it. It was taking us 10 mins to load some views. They now are instant.

    Edit:. To add this is on very complex views. The deeper the view, the better the performance gain with this release.
  • RinoJohnsenRinoJohnsen Rino Johnsen USMember

    @BradChase.2654 yeah, I am using this release. I have not had any performance issues on UWP, apart from the animations, but I am happy hearing there are massive performance gain in it for UWP.

  • BradChase.2654BradChase.2654 Brad Chase USMember ✭✭✭

    @RinoJohnsen Are your animations fine on ios and android? Because I find that the animations just lack overall. I think partly because I believe they go through the forms layout system which has some overachieving layouts :). There might be a good way to translate them to the natural animations for each system.

  • RinoJohnsenRinoJohnsen Rino Johnsen USMember

    @BradChase.2654 yeah, the animations are smooth on Android and iOS. We are achieving 60 fps during all the animations on those platforms.

  • JensDemeyJensDemey Jens Demey USMember ✭✭

    @RinoJohnsen said:
    yeah, the animations are smooth on Android and iOS. We are achieving 60 fps during all the animations on those platforms.

    I also have issues with coppy animations only on UWP. Whould love to know how to improve this as well.

  • TonyDTonyD Antoine El Daher USMember ✭✭✭

    @DavidOrtinau @EZHart we are seeing some preliminary improvements after local stress tests, but it is in the order of only 3%-5%. It's still a good first step!

    There are some UI regressions from upgrading from 2.3.3 to 2.3.5 which we are trying to fix but once those are out we'll push our app to production and post some comprehensive numbers on perf improvements. We have about 100,000 active users.

«134567
Sign In or Register to comment.