2020.3.10.遗留问题
1,GPA連不上手機,是需要root還是其它問題???
問題起源:定位GPU問題時,需要細致到填充率,CPU到GPU的傳輸帶寬問題(紋理帶寬,framebuffer帶寬問題等)
這里定位是否是紋理帶寬問題時就需要在游戲運行時動態更改所有紋理的尺寸,目前似乎只有GPA有這個功能,或者自己寫工具去HOOK到gles底層API實現。
?
經過實驗發現:還是root的問題,不root的手機,有些ADB命令執行不了。
試驗過程如下:
1,使用oppoR9S,這破手機無法ROOT,就不管ROOT了,操作:打開【開發者選項】和【USB調試】,然后打開使用GPA中的System Analyzer 2019 R3,看到設備號后,點擊 connect,提示不是user0,切換后還是這個錯誤提示,沒辦法了,換成System Analyzer 2014 R3后,點擊connect后,手機上彈出一個相應的System Analyzer安裝,確認后安裝失敗,被OPPOR9S給殺了吧。
2,沒辦法,換成紅米note7,再點擊connect后,提示無法執行什么O,沒有權限,這個權限是要ROOT才行的。
總之,想要對安卓手機使用GPA,就必須ROOT了
?
?
另外,參考鏈接:對于自家的App只要加一個debuggable=true就行了,對于別人家的……咳咳,我一開始以為用Xposed + enable-debugger Flag可以解決,后來發現ROOT的機子直接就能跑了?
?2016官方的演講?
2,systrace看不到unity的具體函數調用 ,只能看到UnityMain,原因是什么???如何看到??
這個好像要設置APK為debuggabble=true,但對應到unity是哪個選項?怎么設置?snapdraggon profiler也需要這個來開啟類似systrace的trace
TODO:需要熟悉安卓開發,以及UNITY底層是如何與安卓結合的(啟動)
一些歪方法:打包APK后,修改其中的debuggable配置項:https://www.jianshu.com/p/e3e6154db43a?https://www.jianshu.com/p/e3e6154db43a??https://www.cnblogs.com/qcloud1001/p/6650023.html
?
1,后來使用snapdragon profiler,發現可以找到并連接上手機,而且其中有各種gl statu override功能,包括了實時的【use small texture]功能,這就完全可以替代GPA了,
并且包含了systrace中的查看unity函數調用棧的功能
?
2,實驗證明:player settings選項中的 script debugging =?腳本中的EditorUserBuildSettings.allowDebugging?等價于 BuildOptions.AllowDebugging?最終都等價于android manifest中的 debuggable。
?
[MenuItem("testx/build")]public static void testx(){EditorUserBuildSettings.allowDebugging = true;var bdop = new BuildPlayerOptions();bdop.target = BuildTarget.Android;bdop.locationPathName = "Z:/unity/abcx.apk";bdop.options = BuildOptions.Development | BuildOptions.AllowDebugging;BuildPipeline.BuildPlayer(bdop);}?
只有開啟了 debuggable,在systrace和snapdragon profiler中才能看到unity的函數調用棧。其中systrace要注意的是:還要同時為enable Application Traces From:選擇你要trace的包名。
?
關于各種性能剖析工具:https://www.jianshu.com/p/0ef3e8315416
3,Unity能否針對不同檔次的機器采取不同的紋理壓縮格式?比如低端機采用高壓縮的ASTC12X12,而高端機采用ASTC4X4
似乎不行,一方面來說,低端機可能都不支持ASTC這種新的壓縮格式。
在Quality設置中,有可以設置紋理分辨率的,比如標簽為low的質量等級采用1/2圖片分辨率。
如何動態設置質量等級:
using UnityEngine;public class Example : MonoBehaviour {void OnGUI(){string[] names = QualitySettings.names;GUILayout.BeginVertical();for (int i = 0; i < names.Length; i++){if (GUILayout.Button(names[i])){QualitySettings.SetQualityLevel(i, true);}}GUILayout.EndVertical();} }4,垂直同步:
顯示器與顯卡:
雙緩沖:前后緩沖,即frontbuffer,backbuffer
顯卡-GPU,負責渲染圖形數據到前緩沖,然后交換前后緩的指針,然后繼續在前緩沖繪制,顯示器從后緩沖取數據顯示出來。
由于顯示器顯示畫面的過程是一行一行的,當一屏畫面畫到一半時,后緩沖指針被換成了前緩沖指針時,顯示器的一屏畫面就有一半是前一幀的,一半是的下一幀的,就出現了畫面撕裂。
畫面撕裂,不管顯示器的刷新率多高或多低都一樣出現畫面撕裂。
如何避免畫面撕裂:在顯示器完整的顯示完一屏畫面后,下一屏畫面顯示之前的這段時間內交換前后緩沖指針,這段時間就是vertical blanks,即垂直空白。
?
總結
以上是生活随笔為你收集整理的2020.3.10.遗留问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于U打包代码必须放到Editor目录下
- 下一篇: 学到了关于服务器磁盘阵列