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

在OpenHarmony中使用Bytrace

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

??想了解更多關(guān)于開源的內(nèi)容,請訪問:??

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

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

一、性能問題分析方式

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

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

#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,對于大型項目來說,要經(jīng)過大量的【編譯,執(zhí)行驗證,添加代碼】迭代,消耗大量時間。

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

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

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

參數(shù)說明:

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

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

到目前為止,看起來跟加入時間差代碼的方式差不多,還是打點看log,接著往下看。

三、優(yōu)化打點

把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();
}
}

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

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

四,可視化看log

https://ui.perfetto.dev

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

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

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

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

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

五、OpenHarmony對bytrace的集成

我們在OpenHarmony使用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

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

六、其他

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

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

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

??想了解更多關(guān)于開源的內(nèi)容,請訪問:??

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

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

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

2022-01-26 15:07:04

bytrace工具OpenHarmon

2023-08-25 09:17:38

2009-06-25 16:49:24

Hibernate

2013-12-13 17:21:14

Lua腳本語言

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-23 19:26:18

Linuxcat 命令

2023-07-04 16:36:03

Linuxcd 命令

2021-03-22 08:45:30

異步編程Java

2009-06-16 09:06:37

JavaMailJSP

2023-11-27 19:39:46

Goprotobuf

2018-03-26 14:25:55

KubernetesSkaffold命令

2012-04-19 12:58:26

TitaniumJSS

2013-05-14 10:13:06

WindowsLinux操作系統(tǒng)

2022-06-23 09:47:50

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

2023-08-12 15:05:26

Linuxcp 命令

2009-06-10 09:58:32

Oracle sequHibernate

2009-06-15 14:28:00

NetBeansJavafx
點贊
收藏

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