面試官問我:Android APP中如何測試FPS?看我如何分析京東,拼多多App的FPS

記得看文章三部曲,點贊,評論,轉發。 微信搜索【程序員小安】關注還在移動開發領域苟活的大齡程序員,「面試系列」文章將在公衆號同步發佈。java

1.前言

經過面試官問我:Andriod中子線程爲何不能更新UI?成功斬獲offer的天才少年_逐漸膨脹,今天準備準備去大廠試一下。android

2.正文

天才少年_來到一家大廠等待面試,上家公司萌妹子面試官讓我久久不能忘記,不知道今天的面試官是什麼樣子。
一個眼睛更大更亮,超級可愛的小姐姐,站在我面前,居然比昨天的面試官更蠢萌,今天看天才少年如何把她帶回家,什麼鬼,是把offer帶回家。程序員

在這裏插入圖片描述

小夥子,據說你是來面試的,我是今天的面試官,你先介紹一下你本身吧。面試

我叫【天才少年_】,男,30未婚,家裏有車有房,個人優勢是英俊瀟灑,個人座右銘是:既往不糾結,縱情向前看,繼續努力。shell

額,你這介紹,怎麼感受是來相親的。微信

果真面試官已經被我英俊的外表深深吸引,不能自拔,嗯,萌萌的外表都是不太聰明的樣子,今天面試有但願啦,我心中一陣暗喜。
臥槽,連開場語都是如出一轍。(實際是我懶,直接從上篇抄過來的)markdown

你好,跟我說下Android APP中如何測試FPS?app

嘿嘿,還好我有準備,看我如何裝逼。 oop

在這裏插入圖片描述
1)硬件準備:
1.Android手機一部(個人是小米Redmi Note3)
2.待測試APP
3.安裝有Android開發環境的電腦一臺。

2)測試步驟:
1.Android手機經過USB鏈接電腦。
2.打開手機「設置」-「更多設置」-「開發者選項」-「GPU呈現模式分析」,選中「在adb shell dumpsys gfinfo」中,如圖所示:
部分手機可能路徑不一樣,下圖爲個人手機的路徑截圖。 post

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
3.打開app到你須要測試的界面
4.在pc端,打開命令行界面,路徑切換到本地Android SDK的platform-tools目錄,以下圖:
在這裏插入圖片描述
5.在命令行中繼續輸入「adb shell dumpsys gfxinfo 須要測試的app包名」 >須要保存結果的文檔路徑,如圖所示:
在這裏插入圖片描述
6.打開D:\test.text文檔的內容,如圖所示:

com.victor.intercitycarpool/com.victor.intercitycarpool.ui.account.RegisterOneActivity/android.view.ViewRootImpl@176c16e7 (visibility=0)
	Draw	Prepare	Process	Execute
	0.00	0.75	77.86	2.69
	0.00	0.61	4.52	1.65
	0.00	0.30	84.77	2.03
	0.00	0.18	3.52	2.98
	0.00	0.32	3.08	2.52
	0.00	0.46	3.05	2.22
	0.00	0.14	3.06	2.09
	0.00	0.14	3.28	2.32
	0.00	0.26	4.18	2.33
	0.00	0.15	8.69	14.54
	0.00	0.15	4.87	3.21
	0.00	0.21	9.58	6.59
	0.00	1.49	26.28	3.37
	0.00	0.21	6.55	4.59
	0.00	2.54	3.81	15.24
	0.00	0.20	5.22	2.00
	0.00	7.30	4.48	8.07
	0.00	0.79	11.45	6.47
	0.00	0.20	4.49	2.14
	0.00	0.72	3.29	2.78
	0.00	1.36	4.14	1.83
	0.00	0.38	2.83	2.17
	0.00	0.46	3.49	4.52
	0.00	0.61	3.68	2.25
	0.00	0.37	2.85	2.89
	0.00	0.63	3.92	2.37
	0.00	0.47	3.28	2.00
	0.00	0.42	3.33	2.10
	0.00	0.33	2.49	2.27
	0.00	0.14	2.79	2.35
	0.00	0.13	2.73	2.49
	0.00	0.21	3.11	2.26
	0.00	0.13	3.60	2.25
	0.00	0.13	2.61	2.33
	0.00	0.13	2.54	2.36
	0.00	0.22	4.20	2.59
	0.00	0.13	2.80	2.26
	0.00	0.14	2.72	2.27
	0.00	0.13	2.76	2.22
	0.00	0.22	3.47	2.27
	0.00	0.14	2.76	2.35
	0.00	0.11	2.28	2.09
	0.00	0.11	2.28	1.87
	0.00	0.21	2.62	2.37
	0.00	0.12	2.16	2.26
	0.00	0.11	2.05	1.89
	0.00	0.10	2.00	1.81
	0.00	0.16	1.89	2.72
	0.00	0.11	2.96	2.68
	0.00	0.27	5.19	1.86
	0.00	0.16	3.06	3.42
	0.00	0.38	3.16	4.50
	0.00	0.36	86.55	2.64
	0.00	0.22	4.75	4.48
	0.00	0.22	4.03	2.76
	0.00	0.16	4.36	3.84
	0.00	0.15	3.53	2.40
	0.00	0.15	3.44	3.42
	0.00	0.31	5.62	2.18
	0.00	0.16	37.08	2.01
	0.00	0.16	3.81	2.70
	0.00	0.21	3.49	2.51
	0.00	0.15	3.74	2.48
	0.00	0.15	3.39	2.26
	0.00	0.24	4.75	2.45
	0.00	0.15	3.50	2.31
	0.00	0.15	3.80	6.01
	0.00	0.31	3.81	2.15
	0.00	0.89	9.96	1.83
	0.00	0.18	19.71	2.27
	0.00	0.30	36.29	2.05
View hierarchy:

 com.victor.intercitycarpool/com.victor.intercitycarpool.ui.account.RegisterOneActivity/android.view.ViewRootImpl@176c16e7
  24 views, 31.83 kB of display lists
複製代碼

贈送一個知識點:
Draw: 建立顯示列表(display lists,記錄全部view對象的繪製指令)的時間開銷。
Process: 執行顯示列表中繪製指令的時間。UI視窗中的View數量越多,須要執行的繪畫命令就越多。
Execute : 將一幀圖像交給合成器compostior的時間。這部分佔用的時間一般比較少 而prepare在一些舊adb版本中是算在process上,就是指從建立顯示列表到執行顯示列表的這一段準備時間的開銷
Draw + Prepare+Process + Execute = 完整顯示一幀 ,這個時間要小於16ms才能保證每秒60幀,即fps爲60,纔不會出現卡頓。

7.純數字看着不直觀,上才藝
把數據導入到excel表格中,生成折線圖:

在這裏插入圖片描述
額,上錯圖了,應該是下面這張:
在這裏插入圖片描述
上面說到,完整顯示一幀 ,這個時間要小於16ms才能保證fps爲60。
顯示一幀的時間<16ms,則顯示流暢
16ms<顯示一幀的時間<20ms,則會有輕微不流暢
顯示一幀的時間>20ms,則會出現明顯的卡頓,須要優化。

可見,我測試的APP的顯示一幀的時間基本都是小於10,暫時不須要優化,天才寫的代碼果真沒有問題。

那有看過主流APP的fps是多少嗎?好比淘寶,京東,拼多多

固然看過啊,大廠主app是我學習的方向標。

在這裏插入圖片描述
京東商品詳情頁(ProductDetailActivity):顯示一幀的時間基本都在16ms如下,偶爾會有一些超過16ms,總體上看頁面仍是比較流暢的。
在這裏插入圖片描述
拼多多商品詳情頁(com.xunmeng.pinduoduo.activity.NewPageActivity):顯示一幀的時間都在16ms如下,能夠看出拼多多對性能把控得很是不錯,聽說他們對包體積也扣得很是細,因爲面試官沒有問,這邊不展開討論,否則把我留到天黑,面試官可能有危險,嘿嘿。(後面會介紹縮包的方法)
在這裏插入圖片描述
淘寶:比較尷尬,安裝不上:(手機型號:Redmi Note3 Android系統版本:5.0.2)應用市場是說明支持Android 4.0.2及以上;因此這邊暫時不分析了。
在這裏插入圖片描述

小夥子分析得很不錯,只是今天有點晚了,TraceView的使用我尚未來得及問,我們明天繼續。

其實我不介意晚上單獨面試的,嘿嘿。 未完待續~~

在這裏插入圖片描述


微信搜索【程序員小安】「面試系列(java&andriod)」文章將在公衆號同步發佈。

在這裏插入圖片描述
相關文章
相關標籤/搜索