Ⅰ 如何測量android應用的幀率FPS
你可以選擇使用軟體或者是使用系統來測試。下面來說明Android自帶幀率測試:
打開Android設備的「設置」->"開發者選項"
如果沒有開發者選項請電擊應用程序-設定-關於設備-連續點擊內部版本號(直至開發者選項出現)-返回上層菜單即可調出開發者選項後,即可查看到USB調試選項。
打開開發者選項後勾選「GPU顯示配置文件」後選擇「以列的形式顯示於屏幕」這樣可以直觀的看出每個時間點的幀數大小。
當然也可以選擇顯示於adb shell mpsys gfxinfo來使用命令行輸入:adb shell mpsys gfxinfo "你自己的應用名字" > fps.txt 如下圖:
打開生成的fps.txt,找到Profile data in ms這部分數據後就可以使用Excel轉換為圖片直觀顯示了。
Ⅱ 如何測量Android應用的幀率FPS
方法如下:
1.打開網路瀏覽器,在輸入欄里輸入gltools,並點擊下載安裝。
Ⅲ android幀的繪制過程以及fps的獲取
幀的渲染過程中一些關鍵組件的流程圖
任何可以產生圖形信息的組件都統稱為圖像的生產者,比如OpenGL ES, Canvas 2D, 和 媒體解碼器等。
SurfaceFlinger是最常見的圖像消費者,Window Manager將圖形信息收集起來提供給SurfaceFlinger,SurfaceFlinger接受後經過合成再把圖形信息傳遞給顯示器。同時,SurfaceFlinger也是唯一一個能夠改變顯示器內容的服務。SurfaceFlinger使用OpenGL和Hardware Composer來生成surface.
某些OpenGL ES 應用同樣也能夠充當圖像消費者,比如相機可以直接使用相機的預覽界面圖像流,一些非GL應用也可以是消費者,比如ImageReader 類。
Window Manager是一個用於控制window的系統服務,包含一系列的View。每個Window都會有一個surface,Window Manager會監視window的許多信息,比如生命周期、輸入和焦點事件、屏幕方向、轉換、動畫、位置、轉換、z-order等,然後將這些信息(統稱window metadata)發送給SurfaceFlinger,這樣,SurfaceFlinger就能將window metadata合成為顯示器上的surface。
為硬體抽象層(HAL)的子系統。SurfaceFlinger可以將某些合成工作委託給Hardware Composer,從而減輕OpenGL和GPU的工作。此時,SurfaceFlinger扮演的是另一個OpenGL ES客戶端,當SurfaceFlinger將一個緩沖區或兩個緩沖區合成到第三個緩沖區時,它使用的是OpenGL ES。這種方式會比GPU更為高效。
一般應用開發都要將UI數據使用Activity這個載體去展示,典型的Activity顯示流程為:
一般app而言,在任何屏幕上起碼有三個layer:
那麼android是如何使用這兩種合成機制的呢?這里就是Hardware Composer的功勞。處理流程為:
借用google一張圖說明,可以將上面講的很多概念展現,很清晰。地址位於 https://source.android.com/devices/graphics/
即 Frame Rate,單位 fps,是指 gpu 生成幀的速率,如 33 fps,60fps,越高越好。
但是對於快速變化的游戲而言,你的FPS很難一直保持同樣的數值,他會隨著你所看到的顯示卡所要描畫的畫面的復雜程度而變化。
安卓系統中有 2 種 VSync 信號:
如上圖,CPU/GPU 向 Buffer 中生成圖像,屏幕從 Buffer 中取圖像、刷新後顯示。這是一個典型的生產者——消費者模型。理想的情況是幀率和刷新頻率相等,每繪制一幀,屏幕顯示一幀。而實際情況是,二者之間沒有必然的大小關系,如果沒有鎖來控制同步,很容易出現問題。
所謂」撕裂」就是一種畫面分離的現象,這樣得到的畫像雖然相似但是上半部和下半部確實明顯的不同。這種情況是由於幀繪制的頻率和屏幕顯示頻率不同步導致的,比如顯示器的刷新率是75Hz,而某個游戲的FPS是100. 這就意味著顯示器每秒更新75次畫面,而顯示卡每秒更新100次,比你的顯示器快33%。
兩個緩存區分別為 Back Buffer 和 Frame Buffer。GPU 向 Back Buffer 中寫數據,屏幕從 Frame Buffer 中讀數據。VSync 信號負責調度從 Back Buffer 到 Frame Buffer 的復制操作,可認為該復制操作在瞬間完成。
雙緩沖的模型下,工作流程這樣的:
應用和SurfaceFlinger的渲染迴路必須同步到硬體的VSYNC,在一個VSYNC事件中,顯示器將顯示第N幀,SurfaceFlinger合成第N+1幀,app合成第N+2幀。
使用VSYNC同步可以保證延遲的一致性,減少了app和SurfaceFlinger的錯誤,以及顯示在各個階段之間的偏移。然而,前提是app和SurfaceFlinger每幀時間的變化並不大。因此,從輸入到顯示的延遲至少有兩幀。
為了解決這個問題,您可以使用VSYNC偏移量來減少輸入到顯示的延遲,其方法為將app和SurfaceFlinger的合成信號與硬體的VSYNC關聯起來。因為通常app的合成耗時是小於兩幀的(33ms左右)。
VSYNC偏移信號細分為以下3種,它們都保持相同的周期和偏移向量:
注意,當 VSync 信號發出時,如果 GPU/CPU 正在生產幀數據,此時不會發生復制操作。屏幕進入下一個刷新周期時,從 Frame Buffer 中取出的是「老」數據,而非正在產生的幀數據,即兩個刷新周期顯示的是同一幀數據。這是我們稱發生了「掉幀」(Dropped Frame,Skipped Frame,Jank)現象。
第一列t1: when the app started to draw (開始繪制圖像的瞬時時間)
第二列t2: the vsync immediately preceding SF submitting the frame to the h/w (VSYNC信令將軟體SF幀傳遞給硬體HW之前的垂直同步時間),也就是對應上面所說的軟體Vsync
第三列t3: timestamp immediately after SF submitted that frame to the h/w (SF將幀傳遞給HW的瞬時時間,及完成繪制的瞬時時間)
每mpsys SurfaceFlinger一次計算匯總出一個fps,計算規則為:
frame的總數N:127行中的非0行數
繪制的時間T:設t=當前行t2 - 上一行的t2,求出所有行的和∑t
fps=N/T (要注意時間轉化為秒)
一次mpsys SurfaceFlinger會輸出127幀的信息,但是這127幀可能是這個樣子:
如果t3-t1>16.7ms,則認為發生一次卡頓
設目標fps為target_fps,目標每幀耗時為target_ftime=1000/target_fps
從以下幾個維度衡量流暢度:
參考文章:
http://windrunnerlihuan.com/2017/05/21/VSync%E4%BF%A1%E5%8F%B7/
Ⅳ 安卓手機怎麼調幀數,有什麼軟體可以調
高端機基本上自帶刷新率調節的功能;中低端機需要ROOT之後才能調,但現在的手機基本上小白是ROOT不了的,能在網路問這種問題,我猜你也不是個大神,所以這個問題基本無解。
現在主流安卓手機屏幕的幀數基本上都是60幀,一些高端旗艦機屏幕的幀數可以達到120幀,比如RealMe真我Q3、OPPO FindX2、IQOO Neo3等。
我感覺現在調手機幀數沒什麼意義,因為你往低了調,屬於自找難受;往高了調,硬體又不支持,所以沒必要。
FPS是圖像領域中的定義,是指畫面每秒傳輸幀數,通俗來講就是指動畫或視頻的畫面數。
FPS是測量用於保存、顯示動態視頻的信息數量。每秒鍾幀數越多,所顯示的動作就會越流暢。通常,要避免動作不流暢的最低是30。
FPS也可以理解為我們常說的「刷新率(單位為Hz)」,例如我們常在游戲里說的「FPS值」。我們在裝機選購顯卡和顯示器的時候,都會注意到「刷新率」。
一般我們設置預設刷新率都在75Hz(即75幀/秒)以上。例如:75Hz的刷新率刷也就是指屏幕一秒內只掃描75次,即75幀/秒。
而當刷新率太低時我們肉眼都能感覺到屏幕的閃爍,不連貫,對圖像顯示效果和視覺感官產生不好的影響。
電影以每秒24張畫面的速度播放,也就是一秒鍾內在屏幕上連續投射出24張靜止畫面。
有關動畫播放速度的單位是fps,其中的f就是英文單詞Frame(畫面、幀),p就是Per(每),s就是Second(秒)。用中文表達就是多少幀每秒,或每秒多少幀。電影是24fps,通常簡稱為24幀。
Ⅳ 安卓手機怎麼顯示游戲幀數
第一步:在手機桌面中點開【設置】,如圖所示
第二步:下拉屏幕到底部,點開【關於手機】,如圖所示
第三步:在版本號中連續點擊五次以上開啟【開發者選項】,如圖所示
第四步:返回到設置桌面,點開【輔助功能】,然後點開【開發者選項】,如圖所示
第五步:新頁面中下拉屏幕到底部,點開【性能優化】,如圖所示
第六步:新頁面中點開【性能監視器】,如圖所示
第七步:點擊【顯示性能監視器】和【顯示FPS信息】兩項按鈕【開啟】,就可以顯示當前幀率了
經驗內容僅供參考,如果您需解決具體問題(尤其法律、醫學等領域),建議您詳細咨詢相關領域專業人士。
Ⅵ 安卓手機幀率顯示
Android 設備都使用FPS Meter 來顯示幀率。
它能通過懸浮的形式顯示游戲實時幀數、最高幀數、最低幀數以及平均幀數(最近一分鍾內)等信息,使用它需要手機獲取 Root 許可權.
特別需要注意的是,使用 FPS Meter 需要在開發者選項中打開 " 停用 HW 疊加層 " .
Ⅶ 如何測量Android應用的幀率FPS
可以選擇使用軟體或者是使用系統來測試。下面來說明Android自帶幀率測試:
1、打開Android設備的「設置」->"開發者選項"
2、如果沒有開發者選項請電擊應用程序-設定-關於設備-連續點擊內部版本號(直至開發者選項出現)-返回上層菜單即可調出開發者選項後,即可查看到USB調試選項。
3、打開開發者選項後勾選「GPU顯示配置文件」後選擇「以列的形式顯示於屏幕」這樣可以直觀的看出每個時間點的幀數大小。
4、當然也可以選擇顯示於adb shell mpsys gfxinfo來使用命令行輸入:adb shell mpsys gfxinfo "你自己的應用名字" > fps.txt 如下圖:
5、打開生成的fps.txt,找到Profile data in ms這部分數據後就可以使用Excel轉換為圖片直觀顯示了。
Ⅷ 查看Android APP 幀數FPS的方法
查看AndroidAPP幀數FPS的方法
FPS(每秒傳輸幀數(FramesPerSecond)
1.電腦安裝adb(AndroidDebugBridge)工具安裝包鏈接地址(鏈接:https://pan..com/s/1YLGiSsXNwnV6b6DyN-RLLg
提取碼:13a8)安裝後配置環境變數
2.打開手機"設置"-"開發者選項"-GPU呈現模式分析選擇為"在adbshellmpsysgfxinfo中"
Draw:表示在Java中創建顯示列表部分中,OnDraw()方法佔用的時間。
Process:表示渲染引擎執行顯示列表所花的時間,view越多,時間就越長
Execute:表示把一幀數據發送到屏幕上排版顯示實際花費的時間。
Draw+Process+Execute=完整顯示一幀
Ⅸ 如何測量Android應用的幀率FPS
通過 [設置]->[開發者選項]->[GPU呈現模式分析] ->[在屏幕上顯示為條形圖] 進行直觀的取樣,截圖如下:
繪制過程中的不同顏色具有不同的含義,詳細解釋請移步>> 官網查看更多。
那麼是不是說我只需要打開界面去數一下超過綠色閾值的柱狀圖有多少就可以觀察我們應用的流暢度了?然而並沒有,因為這個方式獲取到的渲染時間只是UI主線程上的繪制行為,目前我所接手的項目,採用的方式是捕捉相機的數據然後放到GPU中去進行繪制,有單獨的繪制線程,單獨的視圖,所以這個方案並不適合我手上的項目。