在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

OpenHarmony上使用火焰圖

OpenHarmony技術社區 ? 來源:OST開源開發者 ? 2023-04-17 10:18 ? 次閱讀

一般來說,我們發現程序卡頓,排除其他程序問題和硬件問題,那一定是自身程序中某個位置運行時,消耗的時間過長導致。

性能問題分析方式

要找到耗時的代碼段,才能有針對性的進行優化,那第一個問題就是如何找到耗時的代碼段。

首先我們能想到,在程序中可能存在問題的地方,加入計算時間差的代碼,然后不斷縮小范圍,找到最終耗時的點。

#include
uint64_tGetTimeStampUS()
{
structtimevaltv;
gettimeofday(&tv,NULL);
returntv.tv_sec*1000000+tv.tv_usec;
}
.....
voidFuncA()
{
uint64_tt1=GetTimeStampUS();
FuncB();
uint64_tt2=GetTimeStampUS();
FuncC();
uint64_tt3=GetTimeStampUS();
printf("FuncBcost:%llu,FuncCcost:%llu
",t2-t1,t3-t2);
}

這種方式最終也能解決問題,但是會有一些缺點:

①對于大型項目來說,要經過大量的【編譯,執行驗證,添加代碼】迭代,消耗大量時間。

②排查到問題后,需要把測試代碼刪除,下次排查時又要重新添加代碼。

③通過查看文本 log 方式分析,不直觀。 下面我們看看如何使用 bytrace 來分析問題。

OpenHarmony中使用 Bytrace

①在 BUILD.gn 中添加對 bytrace 的依賴:

external_deps=[
"bytrace_standard:bytrace_core",
]

②添加頭文件:

#include

③添加打點代碼:

voidFuncA(){
StartTrace(BYTRACE_TAG_GRAPHIC_AGP,"funcB");
funcB();
FinishTrace(BYTRACE_TAG_GRAPHIC_AGP);
}

代碼部分完成了,編譯更新到開發板,然后使用下面命令來抓取 log:

hdcshellbytrace-t10-b8192graphic>~/logs/log.ftrace
參數說明: -t 10:從運行命令行開始,抓取 10 秒時間(非必要參數,默認 5 秒) -b 8192:使用 8192kb(8M) 內存來緩存數據(非必要參數,默認 2048kb) graphic:抓取 graphic 類型的 trace,對應上面代碼中的 BYTRACE_TAG_GRAPHIC_AGP 最后把抓取的結果保存到 log.ftrace 這個文件中(文件后綴名非限定,txt 也行),通過文本編輯器打開查看。 到目前為止,看起來跟加入時間差代碼的方式差不多,還是打點看 log,接著往下看。

優化打點

把 bytrace 的打點代碼封裝起來,xtrace.h:

#include
#include"bytrace.h"

classXTrace
{
public:
XTrace(std::stringfname);
~XTrace();
};

xtrace.cpp:

XTrace::XTrace(std::stringfname)
{
StartTrace(BYTRACE_TAG_ZCAMERA,fname);
}

XTrace::~XTrace()
{
FinishTrace(BYTRACE_TAG_ZCAMERA);
}

這樣我們用起來就更方便了:

voidFuncB(){
XTracetrace1(__func__);
}

voidFuncA(){
{
XTracetrace1(__func__);
FuncB();
{
XTracetrace2(__func__);
FuncC();
}
}
函數開始,創建 XTrace 對象時,構造函數調用 StartTrace。函數結束或離開作用域,棧中的對象會自動釋放,析構函數調用 FinishTrace。 當然這種方式也可以用于時間差打點。

可視化看 log

鏈接如下:

https://ui.perfetto.dev

這個網站需要科學方法訪問,首次訪問后有了緩存,后續就可以離線訪問了。

36739296-dc25-11ed-bfe3-dac502259ad0.png

我這邊把網頁保存下來了,在本地開 web 服務,通過 127.0.0.1 也可以使用。 首先點擊左上角 Open trace file 打開 log.ftrace,右邊會顯示出函數調用的火焰圖,點擊其中一個函數,在下方可以看到準確的執行時間。

基本操作:

鍵盤 w,s:時間軸縮放

鍵盤 a,d:左右移動

可視化看時間軸就非常直觀了,橫條越長,消耗時間越多。

OpenHarmony 對bytrace 的集成

我們在 OpenHarmony 使用 bytrace,除了以上的便利以外,最重要的是 OpenHarmony 的代碼中已經大量使用了 bytrace。

下面是我整理的已經集成 bytrace 的模塊:

368b2b9a-dc25-11ed-bfe3-dac502259ad0.png

3698e0fa-dc25-11ed-bfe3-dac502259ad0.png

對于以上模塊的性能問題,我們就能直接使用對應 tag 來抓取。

其他

對于一個較大的模塊代碼,我們需要理解他的執行流程,函數調用關系,會比較頭疼。

所以我編寫了一個腳本,掃描所有的 .cpp 文件,在所有函數開頭自動添加:

XTracexxx(__func__);
在可視化界面分析 log,可以清晰的看到函數執行的,不同的線程,函數的調用棧,能快速的梳理代碼的執行流程。 第四點中的圖,是我對 foundation/ace/ace_engine/frameworks 這個目錄下 2000 個左右 cpp 文件中的函數全部添加 XTrace 后,得到的應用啟動流程火焰圖。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 程序
    +關注

    關注

    117

    文章

    3793

    瀏覽量

    81226
  • 開發板
    +關注

    關注

    25

    文章

    5096

    瀏覽量

    97821
  • 代碼
    +關注

    關注

    30

    文章

    4809

    瀏覽量

    68819
  • 編輯器
    +關注

    關注

    1

    文章

    806

    瀏覽量

    31231
  • OpenHarmony
    +關注

    關注

    25

    文章

    3731

    瀏覽量

    16436

原文標題:OpenHarmony上使用火焰圖

文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    火焰探測電路

    想要做一個滅火裝置,老師要我先找一個火焰探測器的電路,然后做PCB板子,有沒有探測火焰的電路
    發表于 11-04 20:20

    honeywell火焰探測器

    和工業的燃燒裝置的燃料燃燒火焰的監測。IRD 紅外光火焰探測器IRD 紅外光火焰探測器上海就瑞機械設備有限公司 銷售電話021-56467099*** (微信同號) 劉小姐,QQ24
    發表于 04-27 12:28

    基于單片機的防火報警系統_DS18B20測溫+火焰傳感器 相關資料下載

    摘要隨著現代家庭用火、用電量的增加,家庭火災發生的頻率越來越高。防火報警器也隨之被廣泛應用于各種場合。本文章所研究的無線多功能防火報警系統采用STC12C5A60S2為核心控制器,利用火焰傳感器
    發表于 07-01 08:23

    在stm32對于火焰模塊的應用分析 精選資料推薦

    在stm32對于火焰模塊的應用分析一.火焰模塊接線說明:+ 供電(3.3v) G 接地(GND)AO模擬輸入DO數字輸出以stm32f407舉例說明:AO接入:PF7DO接入:PA4(實際
    發表于 08-17 08:06

    火焰傳感器的工作原理是什么

    火焰傳感器的工作原理是什么?使用火焰傳感器有哪些注意事項?
    發表于 10-15 06:55

    在stm32火焰模塊有哪些應用呢

    什么是火焰模塊?在stm32火焰模塊有哪些應用呢?
    發表于 11-18 06:43

    Arduion UNO&Nano;火焰傳感器模塊

    說明:火焰傳感器(即紅外接收三極管)是一種對火焰特別敏感的傳感器。其利用紅外線對火焰的敏感特性,用特制的紅外線接收管來檢測火焰,然后將火焰
    發表于 04-25 16:38

    一種基于網絡攝像機的火焰識別方法

    介紹了一種基于網絡攝像機的火焰識別方法。該方法對基于MPEG4格式壓縮的流媒體進行處理,將分幀出的BMP圖像格式的文件送入圖像處理程序,利用火焰的色度特征和頻閃特征實現了
    發表于 05-25 21:51 ?47次下載

    用火焰噴涂塑料材料及性能

    塑料種類很多,根據塑料受熱的性能,可分為熱塑性塑料及熱固性塑料兩大類。火焰噴涂用塑料粉末一般由塑料原料加上改性材料制成,這些改性材料,包括各種填料、顏料、流平
    發表于 12-08 16:33 ?7次下載

    火焰傳感器電路

    火焰傳感器電路,用于探測火源的具體位置在哪里。
    發表于 05-20 11:47 ?45次下載

    隧道專用火焰探測器的技術參數

    火焰探測器廣泛應用于燃氣,隧道,化工,冶金,制藥等行業,探測器適用于汽油、煤油、柴油、航空汽油、液壓油、碳氫化合物:乙烯、聚乙烯、天 然氣、民用燃氣、液化石油氣、甲烷、乙烷、丙烷、氫氣、酒精、隧道等產生爆燃場所的火焰檢測。
    發表于 03-14 15:33 ?2000次閱讀

    火焰系列之使用火焰隱藏功能提高繪制精度

    我們可以看到,火焰顯示, func程序占用了近四分之一的CPU時間。但是由于我們把 func綁定在CPU0和1執行,根據小學數學我們應該可以計算出來 func最多占用 2/32=6.25%的時間。
    的頭像 發表于 06-23 10:15 ?2073次閱讀
    <b class='flag-5'>火焰</b><b class='flag-5'>圖</b>系列之使<b class='flag-5'>用火焰</b><b class='flag-5'>圖</b>隱藏功能提高繪制精度

    火焰:全局視野的Linux性能剖析

    CPU火焰圖中的每一個方框是一個函數,方框的長度,代表了它的執行時間,所以越寬的函數,執行越久。火焰的樓層每高一層,就是更深一級的函數被調用,最頂層的函數,是葉子函數。
    的頭像 發表于 06-28 09:44 ?2079次閱讀

    OpenHarmony生態論壇:支付終端在OpenHarmony的安全框架

    OpenHarmony生態論壇:支付終端在OpenHarmony的安全框架
    的頭像 發表于 04-25 17:29 ?1489次閱讀
    <b class='flag-5'>OpenHarmony</b>生態論壇:支付終端在<b class='flag-5'>OpenHarmony</b><b class='flag-5'>上</b>的安全框架

    OpenHarmony生態論壇:UROVO在OpenHarmony的規劃和實踐

    OpenHarmony生態論壇:UROVO在OpenHarmony的規劃和實踐
    的頭像 發表于 04-25 17:33 ?1369次閱讀
    <b class='flag-5'>OpenHarmony</b>生態論壇:UROVO在<b class='flag-5'>OpenHarmony</b><b class='flag-5'>上</b>的規劃和實踐
    主站蜘蛛池模板: 狠狠干狠狠干| 国产一级簧片| www在线视频在线播放| 成 人色 网 站999| 夜夜爱成人免费网站| 天天操天天爱天天干| 看草逼| 操日本美女视频| 中文字幕区| 老师叫我揉她内裤越快越好| 中文字幕人成不卡一区| 亚洲你懂得| 欧美性爽xxxⅹbbbb| 久久vs国产综合色大全| 丁香六月纪婷婷激情综合| 午夜免费福利网站| 久热国产精品视频| 五月天色网址| 男女互插小说| 网站免费黄| 鲁老汉精品视频在线观看| 成人免费视频一区| 色女仆影院| 日本一区三区二区三区四区| 青草视频在线观看国产| 四虎永久网址在线观看| 欧美色图 亚洲| 国产成在线人视频免费视频| 午夜大片网| 成人理伦| 韩国一区二区三区视频| 亚洲美女精品| 猛操网| 亚洲精品久久片久久| 国产精品无码永久免费888| 色噜噜狠狠大色综合| 四虎永久网址在线观看| 国产亚洲人成网站天堂岛| 天堂网在线www资源在线| 日韩亚洲人成在线综合日本| 在线色视频网站|