不触摸屏幕时的Android(Juce)性能问题
Android (JUCE) performance issues when NOT touching screen
我正在将juce中的iOS应用程序移植到Android(目前在Beta中)。我有一些奇怪的行为,我会得到音频故障和GUI框架掉落,只有在不触摸屏幕时才会出现。
该应用程序将双簧管与Juce 5.4.0一起使用,并仅针对Android 8.0及以上编译。奇怪的是,此问题仅发生在Galaxy S9上(注释8,注9,小米Mi A1和其他一些设备都可以进行测试)。我已经尝试在Galaxy S9上进行新的工厂重置。
我是Android开发的新手。
您所经历的内容可能是Galaxy S9上的CPU频率缩放器,当未触摸屏幕时,它正在积极地降低CPU频率。这导致计算带宽不足,导致您的应用程序在音频回调中花费太长时间,从而导致欠缺/小故障。
验证此使用Systrace和Android Studio Profiler。Systrace将向您展示音频底底及CPU频率。
在跟踪过程中点击屏幕上,您应该看到CPU频率的增加,然后不久之后下降。
如果是这种情况,您可以尝试的事情很少:
- 确保您使用的是最佳的编译器标志
-Ofast
或-O3
- 使用正常目的是为此目的而设计的最近发布的
StabilizedCallback
类 - 它将尝试保持CPU旋转以避免将其缩小。 - 监视底底(可通过
AudioStream::getUnderruns()
获得),并减少计算负载,直到停止获取它们为止。
如果您仍然遇到问题,请在GitHub上发布您的代码,或者至少足够多以重现该问题,我将尝试看看。
CPU频率缩放是具有明显CPU带宽要求的实时应用程序的痛苦。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- OpenMP阵列性能较差
- 递归列出所有目录中的C++与Python与Ruby的性能
- 大小相等但成员数量不同的结构之间的性能差异
- 为什么constexpr的性能比正常表达式差
- 在类中使用随机生成器时出现性能问题
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 海湾合作委员会 ARM 性能下降
- GCC 和 Clang 代码性能的巨大差异
- 在容量内调整矢量大小时的性能影响
- 了解算法的性能差异(如果以不同的编程语言实现)
- 未达到的情况会影响开关外壳性能
- QStringList vs list<shared_ptr<QString>> 性能比较C++
- 是否总是可以将使用递归编写的程序重写为不使用递归的程序C++,性能观点是什么?
- 哪种方法更好,性能明智
- C++ 特征库:引用的性能开销<>
- 与多个 for 循环与单个 for 循环 wrt 相关的性能从多映射获取数据
- 没有运算符"="与这些操作数匹配,JUCE 窗口演示应用程序
- 基于范围的 for 循环range_declaration中各种说明符之间的性能差异
- 不触摸屏幕时的Android(Juce)性能问题