偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

在OpenHarmony中使用Bytrace

系統(tǒng) OpenHarmony
我們?cè)贠penHarmony使用Bytrace,除了以上的便利以外,最重要的是OpenHarmony的代碼中已經(jīng)大量使用了bytrace,下面是我整理的已經(jīng)集成bytrace的模塊。

??想了解更多關(guān)于開(kāi)源的內(nèi)容,請(qǐng)?jiān)L問(wèn):??

??51CTO 開(kāi)源基礎(chǔ)軟件社區(qū)??

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

一、性能問(wèn)題分析方式

一般來(lái)說(shuō),我們發(fā)現(xiàn)程序卡頓,排除其他程序問(wèn)題和硬件問(wèn)題,那一定是自身程序中某個(gè)位置運(yùn)行時(shí),消耗的時(shí)間過(guò)長(zhǎng)導(dǎo)致,要找到耗時(shí)的代碼段,才能有針對(duì)性的進(jìn)行優(yōu)化,那第一個(gè)問(wèn)題就是如何找到耗時(shí)的代碼段。

首先我們能想到,在程序中可能存在問(wèn)題的地方,加入計(jì)算時(shí)間差的代碼,然后不斷縮小范圍,找到最終耗時(shí)的點(diǎn)

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

這種方式最終也能解決問(wèn)題,但是會(huì)有一些缺點(diǎn):

1,對(duì)于大型項(xiàng)目來(lái)說(shuō),要經(jīng)過(guò)大量的【編譯,執(zhí)行驗(yàn)證,添加代碼】迭代,消耗大量時(shí)間。

2,排查到問(wèn)題后,需要把測(cè)試代碼刪除,下次排查時(shí)又要重新添加代碼。

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

下面我們看看如何使用bytrace來(lái)分析問(wèn)題。

二、在OpenHarmony中使用Bytrace

1、在BUILD.gn中添加對(duì)bytrace的依賴。

external_deps = [
"bytrace_standard:bytrace_core",
]

2、添加頭文件

#include <bytrace.h>

3、添加打點(diǎn)代碼

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

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

hdc shell bytrace -t 10 -b 8192 graphic > ~/logs/log.ftrace

參數(shù)說(shuō)明:

  • -t 10 : 從運(yùn)行命令行開(kāi)始,抓取10秒時(shí)間(非必要參數(shù),默認(rèn)5秒)。
  • -b 8192 : 使用8192kb(8M)內(nèi)存來(lái)緩存數(shù)據(jù)(非必要參數(shù),默認(rèn)2048kb)。
  • graphic : 抓取graphic類型的trace,對(duì)應(yīng)上面代碼中的BYTRACE_TAG_GRAPHIC_AGP。

最后把抓取的結(jié)果保存到log.ftrace這個(gè)文件中(文件后綴名非限定,txt也行),通過(guò)文本編輯器打開(kāi)查看。

到目前為止,看起來(lái)跟加入時(shí)間差代碼的方式差不多,還是打點(diǎn)看log,接著往下看。

三、優(yōu)化打點(diǎn)

把bytrace的打點(diǎn)代碼封裝起來(lái),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);
}

這樣我們用起來(lái)就更方便了:

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

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

函數(shù)開(kāi)始,創(chuàng)建XTrace對(duì)象時(shí),構(gòu)造函數(shù)調(diào)用StartTrace。函數(shù)結(jié)束或離開(kāi)作用域,棧中的對(duì)象會(huì)自動(dòng)釋放,析構(gòu)函數(shù)調(diào)用FinishTrace。

當(dāng)然這種方式也可以用于時(shí)間差打點(diǎn)。

四,可視化看log

https://ui.perfetto.dev

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

在OpenHarmony中使用Bytrace-開(kāi)源基礎(chǔ)軟件社區(qū)

我這邊把網(wǎng)頁(yè)保存下來(lái)了,在本地開(kāi)web服務(wù),通過(guò)127.0.0.1也可以使用,首先點(diǎn)擊左上角Open trace file打開(kāi)log.ftrace,右邊會(huì)顯示出函數(shù)調(diào)用的火焰圖,點(diǎn)擊其中一個(gè)函數(shù),在下方可以看到準(zhǔn)確的執(zhí)行時(shí)間,基本操作:

  • 鍵盤(pán)w,s:時(shí)間軸縮放
  • 鍵盤(pán)a,d:左右移動(dòng)

可視化看時(shí)間軸就非常直觀了,橫條越長(zhǎng),消耗時(shí)間越多。

五、OpenHarmony對(duì)bytrace的集成

我們?cè)贠penHarmony使用bytrace,除了以上的便利以外,最重要的是OpenHarmony的代碼中已經(jīng)大量使用了bytrace,下面是我整理的已經(jīng)集成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

對(duì)于以上模塊的性能問(wèn)題,我們就能直接使用對(duì)應(yīng)tag來(lái)抓取。

六、其他

對(duì)于一個(gè)較大的模塊代碼,我們需要理解他的執(zhí)行流程,函數(shù)調(diào)用關(guān)系,會(huì)比較頭疼,所以我編寫(xiě)了一個(gè)腳本,掃描所有的.cpp文件,在所有函數(shù)開(kāi)頭自動(dòng)添加X(jué)Trace xxx(__func__)。

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

第四點(diǎn)中的圖,是我對(duì)foundation/ace/ace_engine/frameworks這個(gè)目錄下2000個(gè)左右cpp文件中的函數(shù)全部添加X(jué)Trace后,得到的應(yīng)用啟動(dòng)流程火焰圖。

??想了解更多關(guān)于開(kāi)源的內(nèi)容,請(qǐng)?jiān)L問(wèn):??

??51CTO 開(kāi)源基礎(chǔ)軟件社區(qū)??

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

責(zé)任編輯:jianghua 來(lái)源: 51CTO 開(kāi)源基礎(chǔ)軟件社區(qū)
相關(guān)推薦

2022-01-26 15:07:04

bytrace工具OpenHarmon

2023-08-25 09:17:38

2013-12-13 17:21:14

Lua腳本語(yǔ)言

2009-06-25 16:49:24

Hibernate

2023-11-17 12:04:39

GORM并發(fā)

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 命令

2021-03-22 08:45:30

異步編程Java

2023-08-12 15:05:26

Linuxcp 命令

2012-04-19 12:58:26

TitaniumJSS

2023-11-27 19:39:46

Goprotobuf

2009-06-16 09:06:37

JavaMailJSP

2018-03-26 14:25:55

KubernetesSkaffold命令

2013-05-14 10:13:06

WindowsLinux操作系統(tǒng)

2022-06-23 09:47:50

混沌工程系統(tǒng)Kubernetes

2010-04-21 17:50:59

共享庫(kù)bada

2012-04-11 10:39:32

Eclipse
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)