做性能分析的時(shí)候,很多人都有過(guò)這樣的經(jīng)歷:掉幀找到了,CPU熱點(diǎn)也看了,函數(shù)堆棧也翻了,卻還是說(shuō)不清這一幀為什么會(huì)卡。分析一圈才發(fā)現(xiàn),真正的問(wèn)題可能并不在MainThread,而是在另一個(gè)線程。
Timeline做的,就是把線程執(zhí)行、函數(shù)耗時(shí)、調(diào)用堆棧等信息放到同一條時(shí)間軸上,讓原本分散的信息重新串聯(lián)起來(lái),幫助大家更快看清這一幀到底發(fā)生了什么。
![]()
CPU告訴你哪里慢,Timeline告訴你為什么慢
很多人第一次使用Timeline時(shí)都會(huì)有一個(gè)疑問(wèn):它和CPU分析是不是重復(fù)了?其實(shí),兩者解決的是不同的問(wèn)題。
CPU分析負(fù)責(zé)快速找到性能熱點(diǎn),告訴你哪里慢了;Timeline則把線程執(zhí)行、函數(shù)調(diào)用和時(shí)間關(guān)系放到同一個(gè)時(shí)間維度里,幫助回答另一個(gè)問(wèn)題——為什么慢了。
![]()
例如CPU數(shù)據(jù)顯示某一幀耗時(shí)很高,僅憑CPU分析,很難判斷到底是后臺(tái)線程一直在加載資源,還是MainThread在等待某個(gè)異步任務(wù)完成。而在Timeline里,整個(gè)執(zhí)行過(guò)程都會(huì)按照時(shí)間順序展示出來(lái),誰(shuí)先執(zhí)行、誰(shuí)持續(xù)時(shí)間最長(zhǎng)、線程之間有沒(méi)有等待關(guān)系,都能夠直接看到。對(duì)于異步加載、多線程協(xié)作、偶發(fā)卡頓這類問(wèn)題,兩者配合使用,會(huì)更容易把問(wèn)題定位清楚。
以前排查卡頓:純靠人工“拼現(xiàn)場(chǎng)”
以前調(diào)過(guò)卡頓的同學(xué)應(yīng)該都有體會(huì),流程基本都很痛苦:先抓到哪一幀卡了,然后跳去瞅瞅CPU;瞅著像線程問(wèn)題,又得去翻線程數(shù)據(jù);要是懷疑資源沒(méi)加載好,還要再開一個(gè)資源分析頁(yè)面。最后,還得把函數(shù)堆棧和運(yùn)行日志扯過(guò)來(lái)一起對(duì)。一幀卡頓到底咋回事,全靠你自己在腦子里“拼圖”。說(shuō)實(shí)話,那會(huì)兒最耗時(shí)間的根本不是分析問(wèn)題,而是在各種工具、頁(yè)面之間來(lái)回切換,人都要切麻了。
Timeline的解法:從“盲盒抽樣”到“逐幀全景”
Timeline最大的改變,就是把這些碎成一地的線索全拉到了同一條時(shí)間軸上。本次核心升級(jí):真正實(shí)現(xiàn)“逐幀”分析!以前調(diào)優(yōu)時(shí),咱們只能在卡頓幀的前后三幀里“抽樣”瞅一眼Timeline,如果卡頓發(fā)生在范圍之外,線索斷了就只能干瞪眼。
而現(xiàn)在,我們實(shí)現(xiàn)了全階段的逐幀Timeline支持!不管是哪一幀,你想看哪就能看哪,性能分析的連續(xù)性得到了質(zhì)的飛躍。現(xiàn)在你一眼望過(guò)去,MainThread、RenderThread、LoadingThread全在上面。誰(shuí)先動(dòng)的、跑了多久、誰(shuí)在等誰(shuí),全都能和你想看的任意一幀精準(zhǔn)對(duì)上,線索一下子就串起來(lái)了。
![]()
當(dāng)然,如果項(xiàng)目里線程實(shí)在太多,密密麻麻幾十條線看過(guò)去確實(shí)腦仁疼。不過(guò)問(wèn)題不大,你完全可以把不相干的先藏起來(lái),只盯著主線程看,或者只看特定的后臺(tái)線程。耗時(shí)到底卡在哪個(gè)線程、是不是哪個(gè)子線程把主線程給帶溝里去了,一眼就能揪出來(lái)。
往下深挖:怎么從宏觀秒變微觀?
鎖定了異常的大概范圍后,接下來(lái)的操作就順手多了。鼠標(biāo)直接框一下就能放大,想看哪個(gè)節(jié)點(diǎn)直接點(diǎn)開看堆棧,一路順藤摸瓜就能摸到具體的代碼行。配合鍵盤鼠標(biāo)縮放和恢復(fù),不管是看整體流程還是死磕局部細(xì)節(jié),節(jié)奏都不會(huì)斷。
![]()
要是堆棧太深、節(jié)點(diǎn)太多,還有一個(gè)很省心的小功能:直接把占比不到 1% 的細(xì)碎節(jié)點(diǎn)過(guò)濾掉。把這些背景噪音一藏,剩下的就是真正的大頭,性能瓶頸自然就藏不住了。
OpenAPI同步更新
![]()
除了Timeline,本次UWA OpenAPI也同步更新了一批接口,新增了快照幀2.0、運(yùn)行日志、報(bào)告統(tǒng)計(jì)數(shù)據(jù)等能力,并完善了資源管理相關(guān)OpenAPI,支持獲取資源調(diào)用數(shù)據(jù)及曲線,方便團(tuán)隊(duì)接入AI Agent、BI或自研平臺(tái),進(jìn)一步提升性能分析自動(dòng)化能力。
聊聊心里話:工具升級(jí)到底在升什么?
說(shuō)到底,不管是開發(fā)、測(cè)試還是做優(yōu)化的同學(xué),大家的時(shí)間都很寶貴。我們實(shí)在不該把精力浪費(fèi)在“找數(shù)據(jù)、拼現(xiàn)場(chǎng)”這種體力活上,而是得把好鋼用在刀刃上,去琢磨怎么解決問(wèn)題。很多時(shí)候,我們查問(wèn)題變快了,并不是因?yàn)槭掷锏闹笜?biāo)變多了,而僅僅是因?yàn)椋覀兘K于能把這些數(shù)據(jù)舒舒服服地放在一起看了。
最后說(shuō)兩句:
工具的價(jià)值,不僅在于它能算得多快,更在于它能不能真的融入團(tuán)隊(duì)的日常流轉(zhuǎn)中,幫大家準(zhǔn)時(shí)下班。
我們深知,在項(xiàng)目期引入或者嘗試一個(gè)新工具是有成本的。為了讓大家能毫無(wú)負(fù)擔(dān)地驗(yàn)證這波更新的療效,我們特別開放了「兩周 GOT Online 免費(fèi)試用通道」,并且會(huì)提供專屬的性能專家診斷名額。
不管你們現(xiàn)在卡在什么性能瓶頸上,聯(lián)系我們的商務(wù)同學(xué),UWA 的技術(shù)專家會(huì)一對(duì)一陪著你們跑通測(cè)試,直擊問(wèn)題。
[掃描下方二維碼],直接申請(qǐng)兩周免費(fèi)試用與專家診斷。或者直接登錄 UWA 官網(wǎng),升級(jí)新版 SDK 感受一下一鍵導(dǎo)出的暢快吧!
關(guān)于UWA
UWA是一家創(chuàng)業(yè)十年的高新技術(shù)企業(yè),作為游戲行業(yè)的深耕者,UWA始終專注于為使用Unity、Unreal引擎的開發(fā)者提供豐富的優(yōu)化產(chǎn)品,幫助開發(fā)者高效解決開發(fā)問(wèn)題、定位性能瓶頸、提供解決方案,已支持超過(guò)一萬(wàn)款游戲項(xiàng)目。還打造了技術(shù)博客、問(wèn)答、開源庫(kù)、學(xué)堂等社區(qū)產(chǎn)品,為開發(fā)者提供便利和高效的支持。線上培訓(xùn)和線下教育的新業(yè)務(wù),滿足行業(yè)對(duì)人才培育的需求。
![]()
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.