近期很多开发者反馈OpenHarmony三方库Imageknife有性能问题:连续拖动很多张图片时,界面有明显的卡顿现象。
因为对这个三方库的源码并不了解,因此需要了解目前Imageknife渲染花费了多少时间,最初想的是只有通过hilog打印日志看执行时间,后来一搜发现DevEcoStudio中已经集成了Trace的功能,便于查看指定代码的内存,CPU,功耗等信息,特此记录下。国庆节后来计划来优化Imageknife。
当前DevEcoStudio下面tab栏目有"Profile",据说下个版本改成了"Insight"。可以记录一段时间,并查看trace代码中的时间以及并行情况。
- import hiTraceMeter from '@ohos.hiTraceMeter';
-
- hiTraceMeter.startTrace("taskName", 1);
- await sleep(3000);//待测试代码
- hiTraceMeter.finishTrace("taskName", 1);
首先要在c++模块链接trace的库:在CmakeList中加入“target_link_libraries(entry PUBLIC libhitrace_ndk.z.so)”
- OH_HiTrace_StartAsyncTrace("test",2);
-
- std::this_thread::sleep_for(std::chrono::seconds(1)); // 待测试代码
-
- OH_HiTrace_FinishAsyncTrace("test", 2);
ok , 现在已经知道如何在代码中加trace,并通过DevecoStudio中查看代码执行时间了。目前看Imakeknife的性能问题,主要在于大部分的图片请求和解码都是在UI进程中完成的,且是串行的。节后再看看,是否能把这块的操作通过taskpool或者native的线程方式,通过线程并发执行且不阻塞UI线程搞定。