我画在我看来,一个相当大的路径,我遇到了一些性能问题。 路径是目前32,000个点长,但我的应用程序应扩展到至少128000个。 我真的不能做任何事情的路径的大小,因为数据集只是大,我需要能够同时显示整个路径,并允许在放大。
我使用的是Nexus 10搭载Android 4.2,它在默认情况下为不明确禁用应用程序启用硬件加速。
该路径用下面的代码创建(I省略了一些建立和其它无关的部分):
dataPath.moveTo(0, offset - (float) data[leftLimit]/ scalingFactor);
for (int i = leftLimit; i < rightLimit; ++i) {
x = (i - leftLimit) * dx;
y = offset - (float) data[i]/ scalingFactor;
dataPath.lineTo(x, y);
}
然后在绘制onDraw()
方法:
canvas.drawColor(Color.WHITE);
canvas.drawPath(dataPath, linePaint);
我测量它需要用画我的观点的时候adb shell dumpsys gfxinfo
使用和不使用硬件加速,并以我吃惊的硬件加速慢得多:
随着硬件加速:
无硬件加速:
硬件加速的版本需要每帧200-300毫秒,最花费在处理阶段。 非加速版本需要大约50毫秒,与在拉伸阶段2/3和1/3的过程中的阶段。
显然,即使我快没有硬件加速版本仍然太慢实现60帧,或者当我移动到更大的数据集,甚至可以说勉强可用。
这个想法呈现路径为位图,然后只变换位图以适应屏幕也是在我的情况的问题。 我需要支持在很远的放大到路径,使不带路径质量越来越差很多,我将不得不渲染路径的超大位图缩放(和可能会遇到内存限制和纹理大小限制)。 而放大的时候为止,我将不得不要么创建的路径只有部分的新图像,或者切换到干脆直接渲染路径,这可能会导致比帧率延迟较大,如果仍表现相似,我有权现在。
我现在不知道是
- 被画线/路径只是一些该GPU是坏的,并且不应该尝试硬件加速,或者我可能做错了什么,导致了糟糕的表现?
- 有什么我能做的来绘制可接受的性能如此庞大的路径?