天天看點

Android Studio Profiler(Native Memory)

Android Studio Profiler的Native Memory功能,隻用跟蹤通過 C/C++ 配置設定器(包括原生 JNI 對象)進行的配置設定,不會跟蹤Java對象的配置設定。

由于需要作業系統的支援,隻能在Android 10及以上的手機上才能使用。下文使用Android Studio 4.2.1來說明該功能。

Allocation Tracking的方式有:None(不跟蹤Allocation)、Sampled(按統計學方法跟蹤部分Allocation)和Full(跟蹤所有Allocation)。

該選項隻影響實時Profiler時的資料擷取,Record native allocations不受該選項影響,會抓取所有符合門檻值的Native記憶體配置設定。

profiler配置

Android Studio Profiler(Native Memory)

注1:Native memory sampling interval (bytes)為抓取的最小記憶體size,大于等于該值将被memory profiler記錄

注2:勾選“Start this recording on startup”,并選擇“Native memroy activity(Requires API level >= 29)”,在launch profiler時,會自動開始Recorded Native Allocations

launch profiler

自動拉起手機上app,并開始profiler

Android Studio Profiler(Native Memory)

attach profiler

手動在手機上手動啟動app,如果app時debuggable的話,會看到該app的程序

Android Studio Profiler(Native Memory)

Table -- Arrange by allocation method視圖

Android Studio Profiler(Native Memory)

注1:Allocations Size,Deallocations Size,Remaining Size的機關為byte 

注2:!!!0000!開頭的是顯存相關的配置設定

Table -- Arrange by callstack視圖

Android Studio Profiler(Native Memory)

unknown  // 找不到函數符号

Android Studio Profiler(Native Memory)

注1:development、debuggame、debug的libUE4.so中本身會包含大量符号,可以直接在堆棧中看到很多函數的名稱

注2:test、shipping的libUE4.so在沒有debug so時,絕大多數函數會找不到符号,而顯示unknown

test、shipping的libUE4.so配置debug so的方法

方法①:本地打test、shipping包,然後使用Andriod Studio打開對應的ue4 Android工程,然後launch profiler或attach profiler

方法②:打開之前老的ue4 Android工程,将對應版本的debug libUE4.so拷貝到Intermediate\Android\arm64\gradle\app\src\main\jniLibs\arm64-v8a目錄中,然後attach profiler

Android Studio Profiler(Native Memory)

對于Profile APK方式,經過測試,即使配置了debug libUE4.so,test、shipping也找不到函數符号(需進一步研究)

Android Studio Profiler(Native Memory)

顯示調用圖(Call Chart)全貌

Android Studio Profiler(Native Memory)

① 一共有4個CallStack,棧頂函數分别為main、 __start_thread、unknown、ERROR 1

② 從上到下,形成一個層次結構的CallStack,上面的調用函數(Caller),下面為被調用函數(Callee),與調試器裡面看到的CallStack一樣

③ 滑鼠放在具體的色塊棧幀上,會有如下Tips資訊:

Android Studio Profiler(Native Memory)

焦點切到調用圖(Call Chart)上後,并将輸入法切為英文狀态

快捷操作

說明

充分展開後(左右方向),快捷操作是否失效

W

放大(左右方向)

Yes

S

縮小(左右方向)

A

水準滾動條左移

D

水準滾動條右移

滑鼠滾輪

垂直滾動條上下移

No

Ctrl+滑鼠滾輪

以滑鼠所在位置為中心,進行放大縮小(左右方向)

注1:充分展開後(左右方向),隻能通過滑鼠來拖動水準滾動條進行左右移動

注2:充分展開後(左右方向),快捷操作失效後,可通過将下拉框重新選一下“Total Remaining Size”來恢複成瀑布圖全貌

在左側清單欄的Natvie Sampled上右鍵,可将資料導出儲存到xxxxx.heapprofd檔案中

參考

使用記憶體性能分析器檢視應用的記憶體使用情況

Native Memory Profiling with Android Studio 4.1