Проблемы с производительностью Android (JUCE) при НЕ касании экрана
Я портирую приложение для iOS, созданное в JUCE, на Android (в настоящее время в бета-версии). У меня есть какое-то странное поведение, когда я получаю глюки звука и пропуски кадров GUI, которые появляются, только когда НЕ касаются экрана.
Приложение использует OBOE с JUCE 5.4.0 и скомпилировано только для Android 8.0 и выше. Странно, эта проблема возникает только на Galaxy S9 (тесты в порядке на Note 8, Note 9, Xiaomi mi A1 и некоторых других устройствах). Я пробовал с новым заводским сбросом на Galaxy S9.
Я новичок в разработке Android.
1 ответ
То, что вы испытываете, вероятно, будет масштабатором частоты процессора на Galaxy S9, который агрессивно уменьшает частоту процессора, когда к экрану не прикасаются. Это приводит к недостаточной вычислительной полосе пропускания, в результате чего ваше приложение занимает слишком много времени внутри звукового обратного вызова, что приводит к недоработке / сбоям.
Для проверки используйте systrace и профилировщик Android Studio. Systrace покажет вам как недогрузки, так и частоту процессора.
Прикоснитесь к экрану во время трассировки, и вы увидите увеличение частоты процессора, а затем вскоре падение.
Если это так, вы можете попробовать несколько вещей:
- Убедитесь, что вы используете самые оптимальные флаги компилятора
-Ofast
или же-O3
- Используйте недавно выпущенный
StabilizedCallback
класс в Oboe, который был разработан именно для этой цели - он будет пытаться поддерживать вращение процессора, чтобы избежать его уменьшения. - Мониторинг опустошения (доступно через
AudioStream::getUnderruns()
) и уменьшайте свою вычислительную нагрузку, пока не прекратите получать их.
Если у вас все еще есть проблемы, опубликуйте свой код или, по крайней мере, достаточно, чтобы воспроизвести проблему, на github, и я постараюсь взглянуть.
Масштабирование частоты процессора является проблемой для приложений реального времени, которые предъявляют значительные требования к пропускной способности процессора.