最近公司出了一款分机,其他同事完成了 BSP的适配和CPU的图形渲染,接下来GPU的适配工作就交给了我;从接收任务到最终比较满意的交付断断续续的大概花了1个半月的时间,主要的工作量在如下两个方面:

1. 让开源图形库mesa3D跑起来,这个大概花了2周不到

2. openharmony4.0 release分支的图形框架同mesa3D配合的时候内存泄漏的解决,这个花了差不多一个半月时间,内存泄漏主要是如下两处导致

        1. 1 框架代码中有一个nativewindow 没有销毁(openharmony4.1release版本有修复)

                修改 foundation\arkui\aec_engine\frameworks\core\components_ng\render\adapter\rosen_render_surface.cpp 这个文件

                

        1. 2 mesa3d在使用openharmony图形框架提供的相关api时对nativewindow和nativewindowbuffer的引用计数没有正确的使用 (openharmony4.1release版本没有修复)

        由于Openharmony graphic  代码是通用的代码,无论是闭源的图形库还是开源的mesa3d库都会调用其中的 nativewindow和nativewindowbuffer相关的逻辑(这部分代码在foundation\graphic\graphic_2d\frameworks\surface\src\目录下),所以这部分的代码我们千万不要去修改,我们只需要修改开源图形库中的相关代码就可以了

具体修改如下两个文件

third_party\mesa3d\src\egl\drivers\dri2\platform_ohos.h

third_party\mesa3d\src\egl\drivers\dri2\platform_ohos.c

最后修复的结果如下:

1.1 修复了闭源图形库场景下,使用了xComponent的内存泄漏问题(其他窗口没有泄漏)

1.2 修复了开源图形库场景下,诸多窗口的内存泄漏问题(不仅仅是xComponent)

内存泄漏的问题,基本解决(还有部分内存泄漏,微乎其微,可以忽略),当前已经满足应用场景

如果大家有更好的修复方法欢迎交流,同时如果文中表达有错的地方欢迎指正

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐