日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android性能优化–Systrace工具,移动网页开发工具

發(fā)布時間:2024/3/26 Android 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android性能优化–Systrace工具,移动网页开发工具 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

| –walt | WALT trace options | 測量手機(jī)和計算機(jī)上物理傳感器和輸出的延遲 |

獲取報告

無時間限制,需要enter鍵開始

./systrace.py -o trace.html sched freq idle am wm gfx view binder_driver hal dalvik camera input res

加時間參數(shù)

./systrace.py -o trace.html -t 12 sched freq idle am wm gfx view binder_driver hal dalvik camera input res

完成后使用chrome打開得到的文件即可

獲取報告的命令執(zhí)行,file路徑為報告文件路徑

Android9以上版本也可以通過開發(fā)者模式獲取

次方式不推薦使用

打開系統(tǒng)跟蹤

開啟記錄

停止記錄

分享記錄文件

通過消息或通過ADB共享跟蹤時,報告本身駐留在.ctrace文件中。使用此文件,可以生成跟蹤的HTML報告。為此,請?jiān)诮K端窗口中運(yùn)行以下命令:

cd / path-to-traces-on-my-dev-machine && \

systrace –from-file trace-file-name .ctrace

但是需要systrace命令行程序

報告分析

====

Systrace生成包含一系列部分的輸出HTML文件。該報告列出了每個進(jìn)程的線程。如果給定線程呈現(xiàn)UI幀,則報告還指示沿時間線的呈現(xiàn)幀。當(dāng)在報告中從左向右移動時,時間會向前傳遞。

報告從上到下包含以下部分

  • UI交互活動

第一部分包含表示應(yīng)用或游戲中特定用戶交互的條形圖,例如點(diǎn)擊設(shè)備屏幕。這些相互作用充當(dāng)有用的時間標(biāo)記

UI交互活動

  • CPU活動

顯示了表示每個CPU中的線程活動的條形圖。條形圖顯示所有應(yīng)用程序(包括您的應(yīng)用程序或游戲)的CPU活動。

折疊的CPU活動部分的示例

折疊圖

CPU活動部分是可擴(kuò)展的,允許您查看每個CPU的時鐘頻率

CPU活動(展開視圖),顯示Systrace報告中的CPU時鐘頻率

  • 系統(tǒng)事件

直方圖顯示特定的系統(tǒng)級事件,例如紋理計數(shù)和特定對象的總大小。

系統(tǒng)級事件

值得仔細(xì)檢查的直方圖是標(biāo)記為SurfaceView的直方圖。計數(shù)表示已傳遞到顯示管道并等待在設(shè)備屏幕上顯示的組合幀緩沖區(qū)的數(shù)量。由于大多數(shù)設(shè)備都是雙緩沖或三緩沖,因此該計數(shù)幾乎總是0,1或2。

描述Surface Flinger過程的其他直方圖,包括VSync事件和UI線程交換工作,如下圖

Systrace報告中的Surface Flinger示例圖

  • 顯示框架

顯示框架

這一部分,通常是報告中最多的部分,描繪了一條彩色線條,后面是成堆的條形圖。這些形狀表示已創(chuàng)建的特定線程的狀態(tài)和幀堆棧。

UI線程或應(yīng)用程序或游戲通常運(yùn)行的主線程始終顯示為第一個線程。

幀堆棧信息

每堆條形圖上方的多色線表示特定線程隨時間變化的狀態(tài)集。該行的每個部分可以包含以下顏色之一:

綠色:Running

線程正在完成與進(jìn)程相關(guān)的工作或正在響應(yīng)中斷。

藍(lán)色:Runnable

線程可以運(yùn)行但當(dāng)前沒有安排。

白色:Sleeping

線程沒有工作要做,可能是因?yàn)榫€程在互斥鎖上被阻塞。

橙色:Uninterruptable sleep(不間斷的睡眠)

線程在I / O上被阻塞或等待磁盤操作完成。

紫色:Interruptable sleep(可以中斷睡眠)

線程在另一個內(nèi)核操作(通常是內(nèi)存管理)上被阻塞。

  • 報告分析操作快捷鍵

| key | 描述 |

| — | — |

| W | 放大時間軸 |

| A | 在跟蹤時間線上左移 |

| S | 縮小時間軸 |

| D | 在跟蹤時間軸上向右平移 |

| E | 將跟蹤時間軸置于當(dāng)前鼠標(biāo)位置的中心 |

| M | 選中當(dāng)前幀 |

| 1 | 將當(dāng)前活動的選擇模型更改為“選擇”模式。對應(yīng)于鼠標(biāo)選擇器工具欄中顯示的第一個按鈕 |

| 2 | 將當(dāng)前活動的選擇模型更改為“平移”模式。對應(yīng)于鼠標(biāo)選擇器工具欄中顯示的第二個按鈕 |

| 3 | 將當(dāng)前活動的選擇模型更改為“縮放”模式。對應(yīng)于鼠標(biāo)選擇器工具欄中顯示的第3個按鈕 |

| 4 | 將當(dāng)前活動的選擇模型更改為“計時”模式。對應(yīng)于鼠標(biāo)選擇器工具欄中顯示的第4個按鈕 |

| G | 在當(dāng)前所選任務(wù)的開頭顯示網(wǎng)格 |

| Shift + G | 在當(dāng)前所選任務(wù)的末尾顯示網(wǎng)格 |

| 左鍵 | 在當(dāng)前選定的時間軸上選擇上一個事件 |

| 右鍵 | 選擇當(dāng)前所選時間軸上的下一個事件 |

自定義systrace數(shù)據(jù)獲取

===============

以上數(shù)據(jù)默認(rèn)僅在系統(tǒng)級別向顯示有關(guān)進(jìn)程的信息,因此有時很難知道應(yīng)用程序或游戲的哪些方法在給定時間相對于系統(tǒng)事件執(zhí)行。

Android平臺提供了一個trace API,可以使用它來標(biāo)記特定的代碼段。如果捕獲應(yīng)用程序“debug”版本的新系統(tǒng)跟蹤并包含該-a選項(xiàng),如下面的代碼段所示,這些自定義事件將顯示在Systrace報告中:

python systrace.py -a com.zerone.qrcode -b 16384 -o my_systrace_report.html sched freq idle am wm gfx view binder_driver hal dalvik camera input res

java 層code

堆棧的每個級別代表為應(yīng)用或游戲定義beginSection()的自定義跟蹤事件的調(diào)用或開始

  • Trace.beginSection(String sectionName)和?Trace.endSection()需要成對出現(xiàn)
  • 為保證每個?Trace.beginSection(String sectionName)?都會有對應(yīng)的?Trace.endSection(),建議使用?try {……} finally {……}
  • 如果在?Trace.endSection()之前有多個?Trace.beginSection(String sectionName),Trace.endSection()會匹配離它最近的一個未匹配過的?Trace.beginSection(String sectionName)
  • Trace.beginSection(String sectionName)和?Trace.endSection()需要在同一線程中

public class MyAdapter extends RecyclerView.Adapter {

@Override

public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

Trace.beginSection(“MyAdapter.onCreateViewHolder”);

MyViewHolder myViewHolder;

try {

myViewHolder = MyViewHolder.newInstance(parent);

} finally {

//在try和catch語句中,總是在a中調(diào)用“endSection()”

//“終于”阻止。這樣,即使在a時也調(diào)用該方法

//發(fā)生異常。

Trace.endSection();

}

return myViewHolder;

}

@Override

public void onBindViewHolder(MyViewHolder holder, int position) {

Trace.beginSection(“MyAdapter.onBindViewHolder”);

try {

try {

Trace.beginSection(“MyAdapter.queryDatabase”);

RowItem rowItem = queryDatabase(position);

dataset.add(rowItem);

} finally {

Trace.endSection();

}

holder.bind(dataset.get(position));

} finally {

Trace.endSection();

}

}

}

Native層code

Android 6.0(API級別23)及更高版本支持native trace API,trace.h將跟蹤事件寫入系統(tǒng)緩沖區(qū),然后使用Systrace進(jìn)行分析。此API的常見用例包括觀察特定代碼塊執(zhí)行的時間以及將代碼塊與不良系統(tǒng)行為相關(guān)聯(lián)的時間。

要定義應(yīng)用或游戲中本機(jī)代碼中發(fā)生的自定義事件,請完成以下步驟:

1、定義用于捕獲游戲中自定義事件的ATrace函數(shù)的函數(shù)指針,如以下代碼段所示:

#include <android/trace.h>

#include <dlfcn.h>

總結(jié)

以上是生活随笔為你收集整理的Android性能优化–Systrace工具,移动网页开发工具的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。