编辑
2025-01-22
记录知识
0
请注意,本文编写于 156 天前,最后修改于 59 天前,其中某些信息可能已经过时。

目录

一、Openharmony图形栈
二、代码修改
2.1 BUILD.gn
2.2 hello_composer.cpp
2.3 bundle.json
三、编译
四、测试
五、参考链接

openharmony的hdi层有一个测试程序,可以在系统没有起来的时候,测试使用hdi接口是否能够正常调用屏幕并让其正常显示,这个测试程序是hello_composer,本文章给出操作方法,将hello_composer编译出来,安装进操作系统来测试

一、Openharmony图形栈

openharmony提供了rosen图形框架,框架的实现如下图所示

image.png 在SDK的目录foundation/graphic/graphic_2d/rosen/samples/composer上,存在hello_compose测试程序,可以将其编译出来测试rosen图形框架是否正常运行。从而排除display栈的相关问题。主要操作如下

二、代码修改

2.1 BUILD.gn

对于BUILD.gn,需要将hello_composer的编译依赖配置更新,如下是补丁

diff --git a/rosen/samples/composer/BUILD.gn b/rosen/samples/composer/BUILD.gn index df741b676..4d7d59a1d 100644 --- a/rosen/samples/composer/BUILD.gn +++ b/rosen/samples/composer/BUILD.gn @@ -20,6 +20,7 @@ config("hello_composer_config") { cflags = [ "-Wall", "-Werror", + "-Wno-unused-but-set-variable", "-g3", ] } @@ -55,6 +56,7 @@ ohos_executable("hello_composer") { ] external_deps = [ + "c_utils:utils", "eventhandler:libeventhandler", "hilog:libhilog", ]

2.2 hello_composer.cpp

hello_composer.cpp源码在openharmony4.0上存在接口异常,需要修改,如下是补丁

diff --git a/rosen/samples/composer/hello_composer.cpp b/rosen/samples/composer/hello_composer.cpp index a907af7db..c64274f1f 100644 --- a/rosen/samples/composer/hello_composer.cpp +++ b/rosen/samples/composer/hello_composer.cpp @@ -74,7 +74,7 @@ void HelloComposer::Run(const std::vector<std::string> &runArgs) sleep(1); std::shared_ptr<OHOS::AppExecFwk::EventRunner> runner = OHOS::AppExecFwk::EventRunner::Create(false); mainThreadHandler_ = std::make_shared<OHOS::AppExecFwk::EventHandler>(runner); - g_receiver = new VSyncReceiver(vsyncConnection, mainThreadHandler_); + g_receiver = new VSyncReceiver(vsyncConnection, nullptr, mainThreadHandler_); g_receiver->Init(); mainThreadHandler_->PostTask(std::bind(&HelloComposer::RequestSync, this)); runner->Run();

2.3 bundle.json

添加hello_composer的编译配置

diff --git a/bundle.json b/bundle.json index f82b846d0..6c1ae5eef 100755 --- a/bundle.json +++ b/bundle.json @@ -96,6 +96,7 @@ "//foundation/graphic/graphic_2d/rosen/modules/composer:libcomposer", "//foundation/graphic/graphic_2d/rosen/modules/composer/native_vsync:libnative_vsync", "//foundation/graphic/graphic_2d/rosen/modules/2d_graphics:2d_graphics", + "//foundation/graphic/graphic_2d/rosen/samples/composer:hello_composer", "//foundation/graphic/graphic_2d/rosen/modules/effect/effectChain:libeffectchain", "//foundation/graphic/graphic_2d/rosen/modules/effect/color_picker:color_picker", "//foundation/graphic/graphic_2d/rosen/modules/effect/skia_effectChain:skeffectchain",

三、编译

对于hello_composer可以第一次修改需要更新build.args,所以需要如下命令编译

./build.sh --product-name dayu210 --ccache -T hello_composer

如果第一次编译通过之后,可以通过--fast-rebuild跳过gn阶段,从而提升编译速度

./build.sh --product-name dayu210 --ccache -T hello_composer --fast-rebuild

当然,也可以通过ninja直接编译,如下命令

prebuilts/build-tools/linux-x86/bin/ninja -w dupbuild=warn -C out/rk3588/ hello_composer

编译通过之后,二进制存放在如下位置

out/rk3588/graphic/graphic_2d/hello_composer

四、测试

对于二进制,我们可以两种方法进行推送到机器测试,一个是利用hdc,一个是打包到vendor,如下

第一个方法是使用hdc命令,则如下

hdc -t 9b01005932503033320045da20422900 file send hello_composer /data/

这里connectkey是自己的设备的key,可以如下查询得知

hdc list targets

第二个方法是打包到vendor分区,如下

mount vendor.img vendor cp out/rk3588/graphic/graphic_2d/hello_composer vendor/bin/ umount vendor

此时烧录vendor.img即可

如下运行即可测试hdi是否正常

./hello_composer

如果正常,则出现如下图片

image.png

五、参考链接

OpenHarmony图形HDI基础适配及点屏:

https://forums.openharmony.cn/forum.php?mod=viewthread&tid=807

解决hello_composer编译失败问题:

https://gitee.com/openharmony/graphic_graphic_2d/pulls/7838/files