问题是这样的:Linux驱动中设置不同分辨率(其中一个分辨率为1280*720),系统正常启动后,SystemUI崩溃了,错误的打印如下:

E/AndroidRuntime( 1404): FATAL EXCEPTION: main
E/AndroidRuntime( 1404): java.lang.RuntimeException: createWindowSurface failed EGL_BAD_ALLOC
E/AndroidRuntime( 1404):        at com.android.systemui.ImageWallpaper$DrawableEngine.initGL(ImageWallpaper.java:687)
E/AndroidRuntime( 1404):        at com.android.systemui.ImageWallpaper$DrawableEngine.drawWallpaperWithOpenGL(ImageWallpaper.java:466)
E/AndroidRuntime( 1404):        at com.android.systemui.ImageWallpaper$DrawableEngine.drawFrameLocked(ImageWallpaper.java:395)
E/AndroidRuntime( 1404):        at com.android.systemui.ImageWallpaper$DrawableEngine.onSurfaceChanged(ImageWallpaper.java:298)
E/AndroidRuntime( 1404):        at android.service.wallpaper.WallpaperService$Engine.updateSurface(WallpaperService.java:698)
E/AndroidRuntime( 1404):        at android.service.wallpaper.WallpaperService$Engine.attach(WallpaperService.java:786)
E/AndroidRuntime( 1404):        at android.service.wallpaper.WallpaperService$IWallpaperEngineWrapper.executeMessage


感性的理解是systemui.ImageWallpaper崩溃了,原因貌似是初始化OpenGL或者调用OpenGL出了问题。既然是设定分辨率造成的,那么大概会跟Framebuffer相关了,具体原因不详,只能说OpenGL调用出了问题。

困难:应用程序崩溃是由底层变化引起的(其他层出错也可能),这就比较郁闷了,又得从架构的角度出发分析问题。一层层追踪Bug真的感觉像当侦探有木有!!

            1.我不了解现实架构中的OpenGL相关是实现,以及数据传递流程。

            2.得不到上游厂商瑞芯微的支持,这应该是架构上的问题吧(也要先考虑是不是同事们修改造成的)

技术路线: 1.直接问题解决法,针对问题找到直接原因,或者找到直接解决方法,用某些机制屏蔽掉bug。

                         由于问题出现太久,原因和解决方案都没找到,这条路感觉是死路,还打消工作积极性。

                      2.重新研究显示架构中的OpenGL流程,从流程中追踪Bug的源头。需要查阅资料、熟悉OpenGL编程,权当是学习吧。

                         问题和学习相伴而行,才能成长快。 麻烦的是需要消耗时间,毕竟还是菜鸟!

具体方法:先考虑是否修改过框架,造成了Bug。否则

                    1.架构重新研究

                    2.OpenGL相关的应用接口研究

                    3.OpenGL的上下流程

                    4.直接分析Bug

====================================================================================

问题正在研究中,祝我好运!!

====================================================================================

Logo

更多推荐