最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

性能分析工具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)顯示屏刷新操作。
  • 如果覺得頁面中的信息太多了,想要篩選,可以點(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)簽頁可以查看此工具在你的跟蹤記錄中發(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)很長時(shí)間導(dǎo)致的,這時(shí)我們需要更多的信息來進(jìn)行判斷。

如何做呢?

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

定義自定義事件

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)文章

  • Flutter進(jìn)階之實(shí)現(xiàn)動(dòng)畫效果(八)

    Flutter進(jìn)階之實(shí)現(xiàn)動(dòng)畫效果(八)

    這篇文章主要為大家詳細(xì)介紹了Flutter進(jìn)階之實(shí)現(xiàn)動(dòng)畫效果的第八篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Android 應(yīng)用中插入廣告的實(shí)例

    Android 應(yīng)用中插入廣告的實(shí)例

    本文主要介紹Android應(yīng)用中插入廣告,這里提供了詳細(xì)的資料及實(shí)現(xiàn)示例代碼,有興趣的小伙伴可以參考下
    2016-08-08
  • Android中判斷當(dāng)前API的版本號(hào)方法

    Android中判斷當(dāng)前API的版本號(hào)方法

    下面小編就為大家分享一篇Android中判斷當(dāng)前API的版本號(hào)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • 詳解Flutter中的數(shù)據(jù)傳遞

    詳解Flutter中的數(shù)據(jù)傳遞

    這篇文章主要介紹了Flutter中的數(shù)據(jù)傳遞的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用Flutter,感興趣的朋友可以了解下
    2021-04-04
  • Android實(shí)現(xiàn)QQ手機(jī)管家懸浮小火箭效果

    Android實(shí)現(xiàn)QQ手機(jī)管家懸浮小火箭效果

    這篇文章主要介紹了Android實(shí)現(xiàn)QQ手機(jī)管家懸浮小火箭效果,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • Android實(shí)現(xiàn)淘寶選中商品尺寸的按鈕組實(shí)例

    Android實(shí)現(xiàn)淘寶選中商品尺寸的按鈕組實(shí)例

    這篇文章介紹的是仿淘寶中的選中商品不同尺寸,比如衣服有L、M、XL等等的款式。這時(shí)候我們就需要一個(gè)button組來進(jìn)行了,當(dāng)時(shí)這個(gè)時(shí)候里面的尺寸可能有很多,那怎么辦呢?這里我們就肯定要做個(gè)自適應(yīng)的按鈕組了,要不然弄出來也沒用。
    2016-08-08
  • Android實(shí)現(xiàn)帶有刪除按鈕的EditText示例代碼

    Android實(shí)現(xiàn)帶有刪除按鈕的EditText示例代碼

    本文給大家介紹一個(gè)很實(shí)用的小控件,就是在Android系統(tǒng)的輸入框右邊加入一個(gè)小圖標(biāo),點(diǎn)擊小圖標(biāo)可以清除輸入框里面的內(nèi)容,IOS上面直接設(shè)置某個(gè)屬性就可以實(shí)現(xiàn)這一功能,但是Android原生EditText不具備此功能,所以要想實(shí)現(xiàn)這一功能我們需要重寫EditText。下面來看看吧。
    2016-12-12
  • Android SharedPreferences實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)功能

    Android SharedPreferences實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)功能

    這篇文章主要為大家詳細(xì)介紹了Android SharedPreferences實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Android 動(dòng)畫之TranslateAnimation應(yīng)用詳解

    Android 動(dòng)畫之TranslateAnimation應(yīng)用詳解

    本節(jié)講解TranslateAnimation動(dòng)畫,TranslateAnimation比較常用,比如QQ,網(wǎng)易新聞菜單條的動(dòng)畫,就可以用TranslateAnimation實(shí)現(xiàn),本文將詳細(xì)介紹通過TranslateAnimation 來定義動(dòng)畫,需要的朋友可以參考下
    2012-12-12
  • Android Flutter圖片處理之高斯模糊的實(shí)現(xiàn)

    Android Flutter圖片處理之高斯模糊的實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了如何利用Android Flutter實(shí)現(xiàn)高斯模糊效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08

最新評(píng)論

邛崃市| 揭西县| 芒康县| 东乡族自治县| 高密市| 恩平市| 林西县| 文昌市| 东城区| 靖宇县| 龙里县| 宝应县| 聂拉木县| 来安县| 惠东县| 四会市| 华容县| 黑河市| 芦山县| 竹山县| 舟山市| 镇江市| 南昌市| 乐亭县| 衡阳县| 民乐县| 郯城县| 内江市| 图片| 英山县| 明溪县| 富平县| 河源市| 桐柏县| 青铜峡市| 清水县| 大冶市| 三穗县| 肥东县| 营山县| 灌阳县|