openharmony的hdi层有一个测试程序,可以在系统没有起来的时候,测试使用hdi接口是否能够正常调用屏幕并让其正常显示,这个测试程序是hello_composer,本文章给出操作方法,将hello_composer编译出来,安装进操作系统来测试
openharmony提供了rosen图形框架,框架的实现如下图所示
在SDK的目录foundation/graphic/graphic_2d/rosen/samples/composer上,存在hello_compose测试程序,可以将其编译出来测试rosen图形框架是否正常运行。从而排除display栈的相关问题。主要操作如下
对于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", ]
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();
添加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
如果正常,则出现如下图片
OpenHarmony图形HDI基础适配及点屏:
https://forums.openharmony.cn/forum.php?mod=viewthread&tid=807
解决hello_composer编译失败问题:
https://gitee.com/openharmony/graphic_graphic_2d/pulls/7838/files