成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

在OpenHarmony中使用Bytrace

系統 OpenHarmony
我們在OpenHarmony使用Bytrace,除了以上的便利以外,最重要的是OpenHarmony的代碼中已經大量使用了bytrace,下面是我整理的已經集成bytrace的模塊。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

一、性能問題分析方式

一般來說,我們發現程序卡頓,排除其他程序問題和硬件問題,那一定是自身程序中某個位置運行時,消耗的時間過長導致,要找到耗時的代碼段,才能有針對性的進行優化,那第一個問題就是如何找到耗時的代碼段。

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

#include <sys/time.h>
uint64_t GetTimeStampUS()
{
struct timeval tv;
gettimeofday(&tv, NULL);
return tv.tv_sec * 1000000 + tv.tv_usec;
}
.....
void FuncA()
{
uint64_t t1 = GetTimeStampUS();
FuncB();
uint64_t t2 = GetTimeStampUS();
FuncC();
uint64_t t3 = GetTimeStampUS();
printf("FuncB cost : %llu,FuncC cost : %llu\n",t2-t1,t3-t2);
}

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

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

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

3,通過查看文本log方式分析,不直觀。

下面我們看看如何使用bytrace來分析問題。

二、在OpenHarmony中使用Bytrace

1、在BUILD.gn中添加對bytrace的依賴。

external_deps = [
"bytrace_standard:bytrace_core",
]

2、添加頭文件

#include <bytrace.h>

3、添加打點代碼

void FuncA() {
StartTrace(BYTRACE_TAG_GRAPHIC_AGP, "funcB");
funcB();
FinishTrace(BYTRACE_TAG_GRAPHIC_AGP);
}

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

hdc shell bytrace -t 10 -b 8192 graphic > ~/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 <string>
#include "bytrace.h"

class XTrace
{
public:
XTrace(std::string fname);
~XTrace();
};

xtrace.cpp:

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

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

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

void FuncB(){
XTrace trace1(__func__);
}

void FuncA(){
{
XTrace trace1(__func__);
FuncB();
{
XTrace trace2(__func__);
FuncC();
}
}

函數開始,創建XTrace對象時,構造函數調用StartTrace。函數結束或離開作用域,棧中的對象會自動釋放,析構函數調用FinishTrace。

當然這種方式也可以用于時間差打點。

四,可視化看log

https://ui.perfetto.dev

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

在OpenHarmony中使用Bytrace-開源基礎軟件社區

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

  • 鍵盤w,s:時間軸縮放
  • 鍵盤a,d:左右移動

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

五、OpenHarmony對bytrace的集成

我們在OpenHarmony使用bytrace,除了以上的便利以外,最重要的是OpenHarmony的代碼中已經大量使用了bytrace,下面是我整理的已經集成bytrace的模塊。

tag

define

description

ability

BYTRACE_TAG_ABILITY_MANAGER

Ability Manager

ace

BYTRACE_TAG_ACE

ACE development framework

app

BYTRACE_TAG_APP

APP Module

ark

BYTRACE_TAG_ARK

ARK Module

binder

Binder kernel Info

disk

Disk I/O

distributeddatamgr

BYTRACE_TAG_DISTRIBUTEDDATA

Distributed Data Manager

dsoftbus

BYTRACE_TAG_DSOFTBUS

Distributed Softbus

freq

CPU Frequency

graphic

BYTRACE_TAG_GRAPHIC_AGP

Graphic Module

i2c

I2C Events

idle

CPU Idle

irq

IRQ Events

mdfs

BYTRACE_TAG_MDFS

Mobile Distributed File System

memory

Memory

memreclaim

Kernel Memory Reclaim

misc

BYTRACE_TAG_MISC

Misc Module

mmc

eMMC commands

msdp

BYTRACE_TAG_MSDP

Multimodal Sensor Data Platform

multimodalinput

BYTRACE_TAG_MULTIMODALINPUT

Multimodal Input Module

notification

BYTRACE_TAG_NOTIFICATION

Notification Module

ohos

BYTRACE_TAG_OHOS

OpenHarmony

pagecache

Page cache

regulators

Voltage and Current Regulators

rpc

BYTRACE_TAG_RPC

RPC and IPC

sched

CPU Scheduling

sensors

BYTRACE_TAG_SENSORS

Sensors Module

sync

Synchronization

window

BYTRACE_TAG_WINDOW_MANAGER

Window Manager

workq

Kernel Workqueues

zaudio

BYTRACE_TAG_ZAUDIO

OpenHarmony Audio Module

zcamera

BYTRACE_TAG_ZCAMERA

OpenHarmony Camera Module

zimage

BYTRACE_TAG_ZIMAGE

OpenHarmony Image Module

zmedia

BYTRACE_TAG_ZMEDIA

OpenHarmony Media Module

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

六、其他

對于一個較大的模塊代碼,我們需要理解他的執行流程,函數調用關系,會比較頭疼,所以我編寫了一個腳本,掃描所有的.cpp文件,在所有函數開頭自動添加XTrace xxx(__func__)。

在可視化界面分析log,可以清晰的看到函數執行的,不同的線程,函數的調用棧,能快速的梳理代碼的執行流程。

第四點中的圖,是我對foundation/ace/ace_engine/frameworks這個目錄下2000個左右cpp文件中的函數全部添加XTrace后,得到的應用啟動流程火焰圖。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

責任編輯:jianghua 來源: 51CTO 開源基礎軟件社區
相關推薦

2022-01-26 15:07:04

bytrace工具OpenHarmon

2023-08-25 09:17:38

2013-12-13 17:21:14

Lua腳本語言

2023-11-17 12:04:39

GORM并發

2009-06-25 16:49:24

Hibernate

2021-03-22 08:45:30

異步編程Java

2023-08-12 15:05:26

Linuxcp 命令

2012-04-19 12:58:26

TitaniumJSS

2009-06-16 09:06:37

JavaMailJSP

2018-03-26 14:25:55

KubernetesSkaffold命令

2022-06-23 09:47:50

混沌工程系統Kubernetes

2023-11-27 19:39:46

Goprotobuf

2013-05-14 10:13:06

WindowsLinux操作系統

2011-06-15 10:08:01

Qt CVS

2017-04-05 13:17:26

LinuxShellvi

2010-04-29 17:51:40

Unix工具

2023-07-04 16:36:03

Linuxcd 命令

2023-07-23 19:26:18

Linuxcat 命令

2015-09-01 10:32:11

2015-09-01 14:29:33

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 看av片网站 | 日一日操一操 | 日韩欧美三级电影在线观看 | 99riav国产一区二区三区 | 91正在播放| 爱操av | 国产精品成av人在线视午夜片 | www.五月天婷婷.com | 精品久久久久香蕉网 | 国产一区999 | 99亚洲精品视频 | 网站国产 | 亚洲免费网址 | 一区二区三区四区视频 | 美女在线视频一区二区三区 | 日韩av中文 | 涩爱av一区二区三区 | 亚洲人成在线观看 | 殴美一级片 | 日韩av免费在线电影 | 国产福利二区 | 国产日韩欧美中文 | 91资源在线 | 97视频精品 | 国产成人福利在线 | 99精品久久久久久 | 91免费高清 | 国产欧美一级二级三级在线视频 | 日韩中文字幕久久 | 一区二区成人 | 欧美在线视频一区 | 日日操夜夜操天天操 | 国产精品一区二区三区免费观看 | 精品中文字幕视频 | 亚洲精品一区中文字幕乱码 | 国产精品国产三级国产aⅴ中文 | 国产在线观看免费 | 一本大道久久a久久精二百 欧洲一区二区三区 | 欧美精品电影一区 | 日韩在线成人 | 国产成人精品免高潮在线观看 |