欢乐斗地主黑屏问题优化小结

优化前进入游戏会黑屏7-8s

第一步,经过性能工具traceview分析每个函数执行效率发现有3个函数耗时特别突出,

他们是mVertexBuffer = ByteBuffer.allocateDirect(SIZE * size * 3).order(ByteOrder.nativeOrder()).asIntBuffer();

mTexCoordBuffer = ByteBuffer.allocateDirect(SIZE * size * 2).order(ByteOrder.nativeOrder()).asFloatBuffer();

mIndexBuffer = ByteBuffer.allocateDirect(CHAR_SIZE * indexCount).order(ByteOrder.nativeOrder()).asCharBuffer();

问题就出在这个allocateDirect, 有兴趣的可以仔细了解下这个direct buffer,效率极低。 申请这3个buffer一共耗时是3.5s左右,改为动态buffer后,只需不到300ms, 性能立马提升10倍,整体加载时间减少了3s

除去这个问题后,再分析其他函数的执行时间,已经没有特别冒尖的了。

 

第二部,通过打印日志发现大约有1906ms的时间花费在加载新动画资源工程, 老编辑器资源加载花费1469ms,背景图片缓存485ms,其他操作耗时715ms。 接下来优先解决耗时最多的“加载新动画资源工程”, 分析代码发现,该过程中io占用时间极低,创建buffer也很快,时间都画在了生成bitmap和texure,以及glgrid上面了, 并且是一次性把大约1m的资源里的图片全部初始化成bitmap和texure了,一开始必须加载的图片实际上没那么多,于是修改生成bitmap和texure为动态方式,减少第一次加载的个数, 减少了大约1s时间, 但是由于编辑器中图片之间耦合性较大,没能最大可能的减少第一次加载的图片数,这个还需要美工配合按功能重新切图, 相信这个时间应该可以减少到500ms以内

另外老编辑器中的图片都不符合opengl规范, 必须重新生成一次符合规范的图片再做其他工作,耗时较多, 这个也需要美工配合统一修改到新编辑器中,按功能划分

第三部,经过上面的优化,已经将加载时间降低到3-5m之间了,但是还会黑屏,所以现在需要增加一个过渡动画,修改框架,把过渡动画的资源剥离出来生成一个新的资源包,以最大限度减少第一次加载时间,目前只是简单的剥离,里面还有3张大图,加载+初始化等一共要花费1s,预计合并图片为1张后可以减少少300ms左右,这个时间用户应该完全感觉不到黑屏了, 过渡动画加载完后,立即新起一个线程执行创建游戏资源包,然后返回到gl线程初始化texure

目前资源还未做调整,黑屏已经几乎感觉不到了,加载过程也尽量异步化了, 预计资源优化后这个过程可以完全流畅起来

posted @ 2010-02-10 16:24  jacktu  阅读(4910)  评论(0编辑  收藏  举报