【问题标题】:Android (JUCE) performance issues when NOT touching screen不触摸屏幕时的 Android (JUCE) 性能问题
【发布时间】:2018-12-19 23:19:01
【问题描述】:

我正在将 JUCE 制作的 iOS 应用程序移植到 Android 上(目前处于 Beta 版)。我有一些奇怪的行为,我得到音频故障和 GUI 帧丢失,只有在不触摸屏幕时才会出现。

该应用使用带有 JUCE 5.4.0 的 OBOE,并且仅针对 Android 8.0 及更高版本进行编译。奇怪的是,这个问题只发生在 Galaxy S9 上(在 Note 8、Note 9、小米 mi A1 和其他一些设备上测试正常)。我已尝试在 Galaxy S9 上重新恢复出厂设置。

我是 Android 开发新手。

【问题讨论】:

  • 你试过不同的 S9 吗?也许只是那个有硬件故障。

标签: android c++ juce oboe


【解决方案1】:

您遇到的可能是 Galaxy S9 上的 CPU 频率缩放器,它在不触摸屏幕时会大幅降低 CPU 频率。这会导致计算带宽不足,从而导致您的应用在音频回调中花费太长时间,从而导致欠载/故障。

验证此use systrace and the Android Studio profiler。 systrace 将向您显示音频欠载和 CPU 频率。

在跟踪期间点击屏幕,您应该会看到 CPU 频率增加,然后很快下降。

如果是这种情况,您可以尝试以下几种方法:

  1. 确保您使用的是最佳编译器标志-Ofast-O3
  2. 在 Oboe 中使用最近发布的 StabilizedCallback class,它正是为此目的而设计的 - 它会尝试保持 CPU 旋转以避免它被缩小。
  3. 监控欠载(可通过AudioStream::getUnderruns() 获得)并缩减您的计算负载,直到您停止获取它们。

如果您仍然遇到问题,请在 github 上发布您的代码,或者至少有足够的代码重现该问题,我会尝试看看。

CPU 频率扩展对于需要大量 CPU 带宽的实时应用来说是个难题。

【讨论】:

猜你喜欢
  • 2016-11-18
  • 1970-01-01
  • 2015-08-29
  • 1970-01-01
  • 2014-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多