一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

3天內不再提示

OpenHarmony上使用火焰圖

OpenHarmony技術社區(qū) ? 來源:OST開源開發(fā)者 ? 2023-04-17 10:18 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

性能問題分析方式

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

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

#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);
}

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

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

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

③通過查看文本 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);
}

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

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

優(yōu)化打點

把 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();
}
}
函數(shù)開始,創(chuàng)建 XTrace 對象時,構造函數(shù)調用 StartTrace。函數(shù)結束或離開作用域,棧中的對象會自動釋放,析構函數(shù)調用 FinishTrace。 當然這種方式也可以用于時間差打點。

可視化看 log

鏈接如下:

https://ui.perfetto.dev

這個網(wǎng)站需要科學方法訪問,首次訪問后有了緩存,后續(xù)就可以離線訪問了。

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

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

基本操作:

鍵盤 w,s:時間軸縮放

鍵盤 a,d:左右移動

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

OpenHarmony 對bytrace 的集成

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

下面是我整理的已經(jīng)集成 bytrace 的模塊:

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

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

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

其他

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

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

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

審核編輯:湯梓紅

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

    關注

    117

    文章

    3826

    瀏覽量

    82960
  • 開發(fā)板
    +關注

    關注

    25

    文章

    5675

    瀏覽量

    104566
  • 代碼
    +關注

    關注

    30

    文章

    4900

    瀏覽量

    70690
  • 編輯器
    +關注

    關注

    1

    文章

    822

    瀏覽量

    32023
  • OpenHarmony
    +關注

    關注

    29

    文章

    3851

    瀏覽量

    18583

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    火焰探測電路

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

    honeywell火焰探測器

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

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

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

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

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

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

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

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

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

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

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

    一種基于網(wǎng)絡攝像機的火焰識別方法

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

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

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

    火焰傳感器電路

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

    隧道專用火焰探測器的技術參數(shù)

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

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

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

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

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

    OpenHarmony生態(tài)論壇:支付終端在OpenHarmony的安全框架

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

    OpenHarmony生態(tài)論壇:UROVO在OpenHarmony的規(guī)劃和實踐

    OpenHarmony生態(tài)論壇:UROVO在OpenHarmony的規(guī)劃和實踐
    的頭像 發(fā)表于 04-25 17:33 ?1515次閱讀
    <b class='flag-5'>OpenHarmony</b>生態(tài)論壇:UROVO在<b class='flag-5'>OpenHarmony</b><b class='flag-5'>上</b>的規(guī)劃和實踐