相关疑难解决方法(0)

解释多核性能跟踪(Eclipse/Android)

我正在开发一款安卓游戏,我开始注意到在开发过程中有点迟钝,所以我想尝试利用多线程来获得乐趣和学习.

我的应用程序有3个主题:

  1. UI线程(应该大多是空闲的)
  2. 游戏逻辑线程
  3. 图形线程

我尽可能地最小化了线程2和3之间的关键部分,并且认为游戏逻辑可以独立于渲染线程进行更新,然后在两个线程的末尾我可以有一个尽可能短的窗口,我推动所有图形从逻辑线程更新到游戏循环.这应该允许两个线程在大多数情况下独立工作.理论上听起来像是表演胜利.

然而,一旦我开始实施,我的表现就大了不少.它比以前更糟糕,一个更新和渲染循环花了50毫秒(20fps),所以它看起来像垃圾.这只是渲染大约20个三角形和20个纹理四边形,这是一个非常简单的工作量(我不敢想到当我实现适当的图形时会是什么).

无论如何,我在android中使用DDMS跟踪来描述出现问题或者可以改进的地方.

TRACE1 http://i.stack.imgur.com/DDUYE.png

这是我游戏大约3帧的视图.到目前为止,它似乎大致按照我的预期行事.以蓝色突出显示的部分是锁定部分,它看起来是正确的(保持glThread在锁定时大多等待).然而,一旦我解锁它,我应该看到两个线程同时工作,看起来它们是,但如果我仔细观察:

TRACE2 http://i.stack.imgur.com/vukXQ.png

我正在双核手机上进行开发,但如果我理解了它的正确性,它看起来并不像是并行执行任何操作,而且更糟糕的是它似乎每毫秒切换活动线程数百次!(除非我不正确地解释这个).所有这些上下文切换似乎对性能都很糟糕,所以我不确定为什么它会如此快速地来回切换.

因此,在我冗长的解释之后,我想知道一些事情:

  1. 我的理解是正确的,跟踪中填充的矩形是活动线程,彩色线条是睡眠线程吗?否则他们是什么意思?
  2. 为什么我没有看到我的线程同时在所谓的双核心手机上运行?
  3. 为什么它如此迅速地切换活动线程?
  4. 在DDMS中,我收到警告"警告:调试器处于活动状态;方法跟踪结果将会出现偏差".这有什么值得担心的吗?我怎么能摆脱这个警告?(我通过Run launce app,而不是通过Debug,如果它有所作为)

eclipse debugging multithreading android

18
推荐指数
1
解决办法
1533
查看次数

标签 统计

android ×1

debugging ×1

eclipse ×1

multithreading ×1