不触摸屏幕时的Android(JUCE)性能问题

时间:2018-12-19 23:19:02

标签: android c++ juce oboe

我要将JUCE开发的iOS应用移植到Android(目前为Beta版)。我有一些奇怪的行为,我得到音频故障和GUI框架掉落,它们仅在不触摸屏幕时出现。

该应用程序将OBOE与JUCE 5.4.0结合使用,并且仅针对Android 8.0及更高版本进行了编译。奇怪的是,此问题仅发生在Galaxy S9上(在Note 8,Note 9,小米mi A1和某些其他设备上的测试正常)。我尝试在Galaxy S9上进行新的出厂重置。

我是Android开发的新手。

1 个答案:

答案 0 :(得分:0)

您正在体验的可能是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带宽要求的实时应用程序是一个痛苦。