欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

性能分析工具Systrace的使用及說明

 更新時(shí)間:2023年03月03日 10:40:54   作者:卜大爺  
這篇文章主要介紹了性能分析工具Systrace的使用及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Systrace介紹

Systrace 是Android平臺(tái)提供的一款工具,用于記錄短期內(nèi)的設(shè)備活動(dòng)。該工具會(huì)生成一份報(bào)告,其中匯總了Android內(nèi)核中的數(shù)據(jù),例如CPU調(diào)度程序、磁盤活動(dòng)和應(yīng)用線程。

這份報(bào)告可幫助我們了解如何以最佳方式改善應(yīng)用或游戲的性能。

Systrace 工具用于顯示整個(gè)設(shè)備在做些什么,不過也可用于識(shí)別應(yīng)用中的卡頓。Systrace 的系統(tǒng)開銷非常小,因此你可以在插樁測(cè)試期間體驗(yàn)實(shí)際卡頓情況。

Systrace報(bào)告示例:

這份報(bào)告提供了 Android 設(shè)備在給定時(shí)間段內(nèi)的系統(tǒng)進(jìn)程的總體情況,還會(huì)檢查所捕獲的跟蹤信息,以突出顯示它所觀察到的問題(例如界面卡頓或耗電量高)。

Systrace使用方法詳解

要想使用Systrace分析性能,我們首先需要找到Systrace工具,以及使用該工具生成一份.html的報(bào)告文件。

使用命令行捕獲Systreace報(bào)告文件

systrace命令

systrace命令會(huì)調(diào)用Systrace工具,以收集和檢查設(shè)備上在系統(tǒng)一級(jí)運(yùn)行的所有進(jìn)程的時(shí)間信息。

systrace命令是一個(gè)Python腳本,所以需要進(jìn)行如下準(zhǔn)備:

  • Android Studio下載并安裝最新的Android SDK Tools。
  • 安裝Python并將其添加到工作站的執(zhí)行路徑中(注意,這里要求Python2.7版本)。
  • 使用USB調(diào)試連接將搭載Android 4.3(API 級(jí)別 18)或更高版本的設(shè)備連接到開發(fā)系統(tǒng)。

systrace 命令在 Android SDK Tools 工具包中提供,位于 android-sdk/platform-tools/systrace/。

例如,作者電腦上sstrace位置為:/Users/apple/Library/Android/sdk/platform-tools/systrace。

命令語法

要為應(yīng)用生成HTML報(bào)告,我們需要使用以下語法從命令行運(yùn)行systrace:

python systrace.py [options] [categories]

命令和命令選項(xiàng)

示例1:

python ./systrace.py -t 5 -o mynewtrace.html
  • mynewtrace.html是最終的生成產(chǎn)物。
  • 5代表捕獲5s的數(shù)據(jù)。

示例2:

python systrace.py -o mynewtrace.html sched freq idle am wm gfx view \
        binder_driver hal dalvik camera input res

mynewtrace.html之后的參數(shù),表示類別列表。

提示:如果要在跟蹤輸出中查看任務(wù)名稱,必須在命令參數(shù)中添加 sched 類別。

查看已連接設(shè)備支持的類別列表

命令如下:

python systrace.py --list-categories

示例:

打開System報(bào)告

通過以上操作,會(huì)生成一個(gè)HTML文件,我們可以使用chrome瀏覽器,地址欄輸入chrome://tracing/ 來查看報(bào)告。

界面如下(點(diǎn)擊Load按鈕加載HTML文件即可):

查看報(bào)告元素

Systrace 會(huì)生成包含多個(gè)部分的輸出 HTML 文件。該報(bào)告列出了每個(gè)進(jìn)程的線程。如果給定線程會(huì)渲染界面幀,該報(bào)告還會(huì)沿時(shí)間軸指明所渲染的幀。當(dāng)您在報(bào)告中從左向右移動(dòng)時(shí),時(shí)間會(huì)向前推移。

報(bào)告從上到下包含以下幾個(gè)部分。

用戶互動(dòng)

第一部分包含表示應(yīng)用或游戲中的具體用戶互動(dòng)(例如點(diǎn)按設(shè)備屏幕)的條形圖。這些互動(dòng)可用作有用的時(shí)間標(biāo)記。

CPU 活動(dòng)

下一部分顯示了表示每個(gè) CPU 中的線程活動(dòng)的條形圖。這些條形會(huì)顯示所有應(yīng)用(包括你的應(yīng)用或游戲)中的 CPU 活動(dòng)。

CPU 活動(dòng)部分可以展開,展開后您就可以查看每個(gè) CPU 的時(shí)鐘頻率。

圖 1 展示了一個(gè)收起后的 CPU 活動(dòng)部分示例,圖 2 展示了顯示時(shí)鐘頻率的展開后版本:

系統(tǒng)事件

此部分中的直方圖會(huì)顯示特定的系統(tǒng)級(jí)事件,例如特定對(duì)象的紋理計(jì)數(shù)和總大小。

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

描繪 Surface Flinger 進(jìn)程(包括 VSync 事件和界面線程交換工作)的其他直方圖,如圖所示:

顯示幀

描繪了一條多色線條,后面是成堆的條形。這些形狀表示已創(chuàng)建的特定線程的狀態(tài)和幀堆棧。

堆棧的每個(gè)層級(jí)代表對(duì) beginSection() 的一次調(diào)用,或您為應(yīng)用或游戲定義的自定義跟蹤事件的開頭。

每個(gè)條形堆上方的多色線條表示特定線程隨時(shí)間變化的一組狀態(tài)。每段線條可以包含以下顏色之一:

  • 綠色:正在運(yùn)行
  • 線程正在完成與某個(gè)進(jìn)程相關(guān)的工作或正在響應(yīng)中斷。
  • 藍(lán)色:可運(yùn)行
  • 線程可以運(yùn)行但目前未進(jìn)行調(diào)度。
  • 白色:休眠
  • 線程沒有可執(zhí)行的任務(wù),可能是因?yàn)榫€程在遇到斥鎖定時(shí)被阻止。
  • 橙色:不可中斷的休眠
  • 線程在遇到 I/O 操作時(shí)被阻止或正在等待磁盤操作完成。
  • 紫色:可中斷的休眠
  • 線程在遇到另一項(xiàng)內(nèi)核操作(通常是內(nèi)存管理)時(shí)被阻止。

注意:在Systrace報(bào)告中,你可以點(diǎn)擊該線條以確定該線程在給定時(shí)間由哪個(gè)CPU控制。

鍵盤快捷鍵

下表列出了查看 Systrace 報(bào)告時(shí)可以使用的鍵盤快捷鍵:

使用工具幫助定位性能問題

瀏覽 Systrace 報(bào)告時(shí),您可以通過執(zhí)行以下一項(xiàng)或多項(xiàng)操作來更輕松地識(shí)別性能問題:

  • 通過在時(shí)間間隔周圍繪制一個(gè)矩形來選擇所需的時(shí)間間隔。
  • 使用標(biāo)尺工具標(biāo)記或突出顯示問題區(qū)域。
  • 依次點(diǎn)擊 View Options > Highlight VSync,以顯示每項(xiàng)顯示屏刷新操作。
  • 如果覺得頁(yè)面中的信息太多了,想要篩選,可以點(diǎn)擊Processes菜單,在彈出列表中進(jìn)行篩選。

檢查界面幀和提醒

如圖所示,Systrace 報(bào)告列出了渲染界面幀的每個(gè)進(jìn)程,并指明了沿時(shí)間軸渲染的每個(gè)幀。在 16.6 毫秒內(nèi)渲染的必須保持每秒 60 幀穩(wěn)定幀速率的幀會(huì)以綠色圓圈表示。渲染時(shí)間超過 16.6 毫秒的幀會(huì)以黃色或紅色幀圓圈表示。

點(diǎn)擊某個(gè)幀圓圈可將其突出顯示,并提供有關(guān)系統(tǒng)為渲染該幀所做工作的其他信息,包括提醒。此報(bào)告還會(huì)顯示系統(tǒng)在渲染該幀時(shí)執(zhí)行的方法。您可以調(diào)查這些方法以確定界面卡頓的可能原因。

如果所示,選擇有問題的幀后,跟蹤報(bào)告下方會(huì)顯示一條提醒,用于指明問題所在。

選擇運(yùn)行速度慢的幀后,您可能會(huì)在報(bào)告的底部窗格中看到一條提醒。

點(diǎn)擊窗口最右側(cè)的Alerts標(biāo)簽頁(yè)可以查看此工具在你的跟蹤記錄中發(fā)現(xiàn)的每條提醒以及設(shè)備觸發(fā)每條提醒的次數(shù),如下圖所示。Alerts 面板可幫助你了解跟蹤記錄中出現(xiàn)的問題以及這些問題導(dǎo)致出現(xiàn)卡頓的頻率。我們也可以將此面板視為要修正的錯(cuò)誤列表。通常情況下,只需對(duì)一個(gè)區(qū)域進(jìn)行細(xì)微改動(dòng)或改進(jìn)即可移除整組提醒。

Systrace的擴(kuò)展使用

Systrace(系統(tǒng)跟蹤)僅在系統(tǒng)級(jí)別顯示進(jìn)程的相關(guān)信息,這樣導(dǎo)致有時(shí)很難知道APP的哪些方法是在給定時(shí)間針對(duì)系統(tǒng)事件執(zhí)行的。

例如,我們?cè)诮鉀Q卡頓問題,當(dāng)查看系統(tǒng)跟蹤信息輸出后,你可能會(huì)懷疑應(yīng)用中的某些方法是導(dǎo)致卡頓的因素。例如,如果時(shí)間軸顯示某個(gè)幀的呈現(xiàn)速度較慢是因?yàn)?RecyclerView 花費(fèi)很長(zhǎng)時(shí)間導(dǎo)致的,這時(shí)我們需要更多的信息來進(jìn)行判斷。

如何做呢?

我們可以在相關(guān)代碼中添加跟蹤標(biāo)記(定義自定義事件),然后重新運(yùn)行 systrace 以獲取更多信息。在新的系統(tǒng)跟蹤信息中,時(shí)間軸會(huì)顯示應(yīng)用中的方法的調(diào)用時(shí)間和執(zhí)行時(shí)長(zhǎng)。

定義自定義事件

Android 平臺(tái)提供了一個(gè)跟蹤 API,可用于為特定的代碼段添加標(biāo)簽。如果您捕獲應(yīng)用的“調(diào)試”版本的新系統(tǒng)跟蹤并添加 -a 選項(xiàng)(如以下代碼段所示),這些自定義事件便會(huì)顯示在 Systrace 報(bào)告中:

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

必須提供 -a 選項(xiàng)才能跟蹤應(yīng)用;如果沒有此選項(xiàng),應(yīng)用的方法將不會(huì)顯示在 Systrace 報(bào)告中。

注意:該方法與使用 Debug 類不同,后者可幫助您通過生成 .trace 文件來檢查應(yīng)用 CPU 的詳細(xì)使用情況。

代碼中添加

在 Android 4.3(API 級(jí)別 18)及更高版本中,我們可以在代碼中使用 Trace 類來定義隨后會(huì)出現(xiàn)在 Perfetto 和 Systrace 報(bào)告中的自定義事件,如以下代碼段所示。

    public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {
        @Override
        public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            Trace.beginSection("MyAdapter.onCreateViewHolder");
            MyViewHolder myViewHolder;
            try {
                myViewHolder = MyViewHolder.newInstance(parent);
            } finally {
                // In try and catch statements, always call "endSection()" in a
                // "finally" block. That way, the method is invoked even when an
                // exception occurs.
                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();
            }
        }
    }
    

注意:如果多次調(diào)用 beginSection(),調(diào)用 endSection() 只會(huì)結(jié)束最后調(diào)用的 beginSection() 方法。因此,對(duì)于嵌套調(diào)用(如以下代碼段中所示),請(qǐng)務(wù)必將每次對(duì) beginSection() 的調(diào)用與一次對(duì) endSection() 的調(diào)用正確匹配。

此外,我們不能在一個(gè)線程上調(diào)用 beginSection(),而在另一個(gè)線程上結(jié)束它;而是必須在同一個(gè)線程上調(diào)用這兩個(gè)方法。

總結(jié)

通過本文學(xué)習(xí)了:

  • 性能分析工具Systrace的介紹。
  • Systrace報(bào)告文件如何進(jìn)行采集。
  • 如何使用工具來查看Systrace報(bào)告文件。
  • 如何使用Systrace來分析性能問題。
  • Systrace工具的使用及使用技巧。
  • 如何添加和使用自定義事件。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 一起動(dòng)手編寫Android圖片加載框架

    一起動(dòng)手編寫Android圖片加載框架

    這篇文章主要和大家一起動(dòng)手編寫Android圖片加載框架,從內(nèi)部原理到具體實(shí)現(xiàn)來詳細(xì)介紹如何開發(fā)一個(gè)簡(jiǎn)潔而實(shí)用的Android圖片加載緩存框架,感興趣的小伙伴們可以參考一下
    2016-04-04
  • Android學(xué)習(xí)筆記之ListView復(fù)用機(jī)制詳解

    Android學(xué)習(xí)筆記之ListView復(fù)用機(jī)制詳解

    本篇文章主要介紹了Android學(xué)習(xí)筆記之ListView復(fù)用機(jī)制詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • Android自定義View實(shí)現(xiàn)數(shù)字密碼鎖

    Android自定義View實(shí)現(xiàn)數(shù)字密碼鎖

    這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)數(shù)字密碼鎖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • flutter布局約束原理深入解析

    flutter布局約束原理深入解析

    這篇文章主要為大家介紹了flutter布局約束原理深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Android權(quán)限詢問的實(shí)例詳解

    Android權(quán)限詢問的實(shí)例詳解

    這篇文章主要介紹了Android權(quán)限詢問,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • Android RecyclerView加載兩種布局的方法

    Android RecyclerView加載兩種布局的方法

    這篇文章主要為大家詳細(xì)介紹了Android RecyclerView加載兩種布局的方法,Adapter加載多套布局,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • sweet alert dialog 在android studio應(yīng)用問題說明詳解

    sweet alert dialog 在android studio應(yīng)用問題說明詳解

    這篇文章主要介紹了sweet alert dialog 在android studio應(yīng)用問題說明詳解的相關(guān)資料,本文圖文并茂介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09
  • 關(guān)于Android Studio封裝SDK的那些事兒

    關(guān)于Android Studio封裝SDK的那些事兒

    這篇文章主要給大家介紹了關(guān)于Android Studio封裝SDK的那些事兒,文中通過圖文以及示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • Android圖像處理之繪制圓形、三角形及扇形的頭像

    Android圖像處理之繪制圓形、三角形及扇形的頭像

    這篇文章主要給大家介紹了Android圖像處理之繪制圓形、三角形及扇形頭像的相關(guān)資料,文中給出了詳細(xì)的代碼示例,通過學(xué)會(huì)了文中的方法,就不局限于圓形頭像了,剛興趣的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。
    2017-04-04
  • Android布局之TableLayout表格布局

    Android布局之TableLayout表格布局

    Tablelayout類以行和列的形式對(duì)控件進(jìn)行管理,每一行為一個(gè)TableRow對(duì)象,或一個(gè)View控件。當(dāng)為TableRow對(duì)象時(shí),可在TableRow下添加子控件,默認(rèn)情況下,每個(gè)子控件占據(jù)一列。 當(dāng)為View時(shí),該View將獨(dú)占一行
    2015-12-12

最新評(píng)論