CPU и GPU контроль эффективности
Используйте режимы управления производительностью в адаптивной производительности, чтобы управлять тем, как приложение использует ресурсы CPU и GPU для балансирования производительности, потребления энергии и температуры устройства на мобильных устройствах.
CPU и GPU управление питанием
CPU и GPU являются основными источниками потребления энергии на мобильных устройствах, особенно во время игры. Запуск этих компонентов на максимальных тактовых частотах может быть неэффективным, потребляя избыточную мощность и генерируя тепло без пропорционального повышения производительности. Это может привести к перегреву, побуждая операционную систему снижать частоту CPU и GPU для охлаждения устройства. Как правило, операционная система контролирует тактовые частоты CPU и GPU.
Адаптивная производительность обеспечивает режимы управления производительностью для управления уровнями производительности CPU и GPU для оптимизации энергопотребления и теплового поведения.
Режимы управления производительностью
Адаптивная производительность имеет три режима для управления производительностью CPU и GPU: автоматический, ручной и системный. Как правило, автоматический режим обеспечивает наилучшие результаты при широком наборе условий.
Чтобы проверить, в каком режиме работает приложение, используйте IDevicePerformanceControl.PerformanceControlMode.
Примечание: Автоматические и ручные режимы управления производительностью доступны только на Android поставщиков услуг и в Симулятор устройства. Все другие поставщики используют управление производительностью системы.
Управление производительностью системы
В управлении производительностью системы операционная система управляет уровнями CPU и GPU. Этот режим по умолчанию для поставщиков, не являющихся Android. Это также рекомендуемый режим, если вы хотите использовать временное повышение производительности.
Автоматический контроль производительности
Автоматическое управление производительностью использует обратную связь в реальном времени, чтобы подстраивать уровни CPU и GPU под потребности вашего приложения и тепловое состояние устройства.
- Приложение достигло целевой частоты кадров в предыдущих кадрах.
- Температура устройства повышается.
- Устройство близко к термической дроссельной заслонке.
- Устройство связано с GPU или CPU.
Для достижения наилучших результатов используйте автоматический режим управления производительностью и установите targetFrameRate для приложения. Затем адаптивная производительность настраивает уровни CPU и GPU для поддержания этой частоты кадров при минимальном потреблении энергии и выделении тепла. Вы можете изменить целевую частоту кадров в зависимости от контента, воспроизводимого приложением, для дальнейшей оптимизации производительности. Например, вы можете снизить частоту кадров на экранах меню или паузы и восстановить ее во время игры.
Следующий пример показывает, как автоматически снизить давление и потребление энергии, где вам нужно только установить targetFrameRate:
using UnityEngine;
using UnityEngine.AdaptivePerformance;
public class AutomaticPerformance : MonoBehaviour
{
// Declare 'ap' as a private class-level field to hold the IAdaptivePerformance instance.
private IAdaptivePerformance ap;
void Start()
{
// Get the Adaptive Performance instance.
ap = Holder.Instance;
}
public void EnterMenu()
{
// Check if Adaptive Performance is active.
if (ap == null || !ap.Active)
{
return;
}
// Set the target frame rate for the application.
Application.targetFrameRate = 30;
// Get the device performance control interface.
var ctrl = ap.DevicePerformanceControl;
// Enable automatic CPU and GPU level regulation by Adaptive Performance.
ctrl.AutomaticPerformanceControl = true;
}
}
Ручной контроль производительности
Ручное управление производительностью позволяет напрямую и точно регулировать уровни CPU и GPU. Тем не менее для большинства приложений оно не рекомендуется. Этот режим требует тщательного баланса с тепловым состоянием устройства и расходом батареи, так как неверные настройки могут привести к перегреву, тепловому троттлингу и чрезмерному расходу заряда. Используйте его только в особых сценариях — например, при бенчмаркинге или в тщательно оптимизированных пользовательских циклах.
Примечание: Для оптимальных результатов в большинстве случаев используйте автоматическое управление производительностью и установите только targetFrameRate.
Чтобы перейти в ручное управление производительностью, установите IDevicePerformanceControl.AutomaticPerformanceControl на false.
В ручном режиме вы можете изменить эти свойства, чтобы оптимизировать производительность CPU и GPU:
В следующем примере показано, как ввести ручное управление производительностью и установить максимальные значения уровней CPU и GPU:
using UnityEngine;
using UnityEngine.AdaptivePerformance;
public class ManualPerformance : MonoBehaviour
{
// Declare 'ap' as a private class-level field to hold the IAdaptivePerformance instance.
private IAdaptivePerformance ap;
void Start()
{
// Get the Adaptive Performance instance.
ap = Holder.Instance;
}
public void EnableManualMode()
{
// Check if Adaptive Performance is active.
if (ap == null || !ap.Active)
{
return;
}
// Get the device performance control interface.
var ctrl = ap.DevicePerformanceControl;
// Disable automatic performance control to enable manual mode.
ctrl.AutomaticPerformanceControl = false;
// Set CPU level to maximum performance.
ctrl.cpuLevel = ctrl.MaxCpuPerformanceLevel;
// Set GPU level to maximum performance.
ctrl.gpuLevel = ctrl.MaxGpuPerformanceLevel;
}
}
Примечания:
- Изменение уровней CPU и GPU действует только тогда, когда устройство не находится в состоянии теплового троттлинга, то есть
WarningLevelне являетсяWarningLevel.Throttling. - В некоторых ситуациях устройство может взять под контроль уровни CPU и GPU. Система регистрирует это событие и изменяет значение
IDevicePerformanceControl.PerformanceControlModeнаPerformanceControlMode.System.