Enabling 2 or More Providers in Adaptive Performance Settings for Android

I encountered a big question in Unity 6 and found no answer for that.

What Provider i must enable in Adaptive Performance Settings for Android?
There are currently 2 of them: “Android Provider” & “Samsung Android Provider”.
Enable “Android Provider” solely?
Enable “Samsung Android Provider” solely?
Enable both?
And why?
What can be best for a 2D or 3D URP game for Android in this question?

I usually enable both for more coverage, but to answer the comparison, the Android Provider is more of a general-purpose solution for all Android devices, and the Samsung is specifically optimized for Samsung devices.

Now, you would need to condition this in your code, for example, in the case of thermal status:

In the Android Adapter I would check if the temperature has reached the throttling point and reduce the fps to 30.

// Get status on non-Samsung devices
AdaptivePerformanceScaler scaler = AdaptivePerformanceManager.Instance.ThermalStatus.TemperatureTrend;

if (scaler.TemperatureLevel >= AdaptivePerformance.TemperatureLevel.Throttling)
{
    // Device is boiling, lower the fps
    Application.targetFrameRate = 30;
}

The good thing on Samsung devices is how granular you can get (the S models have some good advanced monitoring stuff):

// Samsung thermal control
var provider = AdaptivePerformanceManager.Instance.Provider;
if (provider is SamsungAndroidProviderSettings)
{
    var samsungProvider = provider as SamsungAndroidProviderSettings;

    // Check if we're close to thermal throttling
    if (samsungProvider.ThermalLevel == SamsungAndroidProviderSettings.ThermalState.Warning)
    {
        // Reduce graphics settings even before the device starts throttling!!
        QualitySettings.SetQualityLevel(1, true);
    }
}

Samsung has a cool .cs script that has some examples of the Adaptive Performance API: https://developer.samsung.com/codelab/gamedev/adaptive-performance-unity.html#Add-Adaptive-Performance-script-to-your-project

To answer you last question it will depend once you start collecting device statistics:

  • For a 2D Game is would say just stick with the General Android Provider if you are not targetting high-end Samsung devices, OR, in your stats, you do not see a very high demand in Samsung device usage.
  • For a 3D URP Game I would choose both since this would be a more Performance-intensive

Thank you very much! Your answer is appreciated
So, isn’t there any conflict or performance issue when i enable both? I still am not sure :thinking:

only one provider will end up being used in the game and the order is alphabetic.
the only current usage of multiple providers is if you are building towards different platforms and each of these platforms are using one of the providers, in other words, no multiple providers on a single platform.