1.首先新建項(xiàng)目-打開protect-profile
左側(cè) 數(shù)值代表的fpsfps:我們知道任何屏幕總是有一個(gè)刷新率盾饮,比如iphone推薦的刷新率是60Hz,也就是說GPU每秒鐘刷新屏幕60次丐谋,因此兩次刷新之間的間隔為16.67ms。這段時(shí)間內(nèi)屏幕內(nèi)容保持不變号俐,稱為一幀(frame)定庵,fps表示frames per second,也就是每秒鐘顯示多少幀畫面猪落。對于靜止不變的內(nèi)容,我們不需要考慮它的刷新率蓝仲,但在執(zhí)行動(dòng)畫或滑動(dòng)時(shí)官疲,fps的值直接反映出滑動(dòng)的流暢程度。
fps 為0時(shí)垢夹,表示屏幕未動(dòng)维费! 一般fps<30 就有明顯的卡頓 ,蘋果官方給的標(biāo)準(zhǔn)值為fps為60而晒!
一般影響fps的因素(掉幀):1.阻塞主線程阅畴,這就是官方為啥認(rèn)定刷新UI必須在主線程的原因
2.原因較多,但是大部分原因是在于離屏渲染诈胜,渲染耗損過高.
頂部的震動(dòng)條就是動(dòng)態(tài)圖冯事!
右側(cè):color blended layers 顏色混合層
color hits green and missed red綠色和紅色的顏色
flash update regionsFlash更新區(qū)
1、Color Blended Layers
(1)缓熟、圖層混合
首先我們要明白像素的概念够滑,屏幕上每一個(gè)點(diǎn)都是一個(gè)像素吕世,像素有R、G况毅、B三種顏色構(gòu)成(有時(shí)候還帶有alpha值)。如果某一塊區(qū)域上覆蓋了多個(gè)layer,最后的顯示效果受到這些layer的共同影響么鹤。舉個(gè)例子味廊,上層是藍(lán)色(RGB=0,0,1),透明度為50%,下層是紅色(RGB=1,0,0)余佛。那么最終的顯示效果是紫色(RGB=0.5,0,0.5)衙熔。這種顏色的混合(blending)需要消耗一定的GPU資源,因?yàn)閷?shí)際上可能不止只有兩層红氯。如果只想顯示最上層的藍(lán)色痢甘,可以把它的透明度設(shè)置為100%,這樣GPU會(huì)忽略下面所有的layer塞栅,從而節(jié)約了很多不必要的運(yùn)算放椰。
(2)、調(diào)試Color Blended Layers
第一個(gè)調(diào)試選項(xiàng)”Color Blended Layers”正是用于檢測哪里發(fā)生了圖層混合砾医,并用紅色標(biāo)記出來如蚜。因此我們需要盡可能減少看到的紅色區(qū)域。一旦發(fā)現(xiàn)應(yīng)該想法設(shè)法消除它错邦。開始調(diào)試后勾選這個(gè)選項(xiàng)撬呢,我們在手機(jī)上可以看到如下的場景:
2、Color Hits Green and Misses Red
(1)讨勤、光柵化
? ? ? ?光柵化是將一個(gè)layer預(yù)先渲染成位圖(bitmap)晨另,然后加入緩存中。如果對于陰影效果這樣比較消耗資源的靜態(tài)內(nèi)容進(jìn)行緩存刨晴,可以得到一定幅度的性能提升路翻。demo中的這一行代碼表示將label的layer光柵化:
label.layer.shouldRasterize = YES;
(2)、調(diào)試Color Hits Green and Misses Red
它表示如果命中緩存則顯示為綠色蝶桶,否則顯示為紅色掉冶,顯然綠色越多越好,紅色越少越好恢共。
注意:光柵化的核心在于緩存的思想璧亚。我們自己動(dòng)手把玩一下,可以發(fā)現(xiàn)以下幾個(gè)有意思的現(xiàn)象:
上下微小幅度滑動(dòng)時(shí)透硝,一直是綠色上下較大幅度滑動(dòng)疯搅,新出現(xiàn)的label一開始是紅色,隨后變成綠色如果靜止一秒鐘甜攀,剛開始滑動(dòng)時(shí)會(huì)變紅琐馆。
這是因?yàn)閘ayer進(jìn)行光柵化后渲染成位圖放在緩存中。當(dāng)屏幕出現(xiàn)滑動(dòng)時(shí)谁撼,我們直接從緩存中讀取而不必渲染,所以會(huì)看到綠色喊巍。當(dāng)新的label出現(xiàn)時(shí)箍鼓,緩存中沒有個(gè)這個(gè)label的位圖,所以會(huì)變成紅色何暮。第三點(diǎn)比較關(guān)鍵铐殃,緩存中的對象有效期只有100ms富腊,即如果在0.1s內(nèi)沒有被使用就會(huì)自動(dòng)從緩存中清理出去。這就是為什么停留一會(huì)兒再滑動(dòng)就會(huì)看到紅色赘被。
光柵化的緩存機(jī)制是一把雙刃劍帘腹,先寫入緩存再讀取有可能消耗較多的時(shí)間。因此光柵化僅適用于較復(fù)雜的阳欲、靜態(tài)的效果球化。通過Instrument的調(diào)試發(fā)現(xiàn),這里使用光柵化經(jīng)常出現(xiàn)未命中緩存的情況赴蝇,如果沒有特殊需要?jiǎng)t可以關(guān)閉光柵化巢掺,所以我們做的第二個(gè)優(yōu)化是注釋掉下面這行代碼
//? ? label.layer.shouldRasterize = true
3、Color Copied Images
(1)考余、顏色格式
像素在內(nèi)存中的布局和它在磁盤中的存儲(chǔ)方式并不相同轧苫。考慮一種簡單的情況:每個(gè)像素有R身冬、G、B和alpha四個(gè)值滚躯,每個(gè)值占用1字節(jié)樱哼,因此每個(gè)像素占用4字節(jié)的內(nèi)存空間搅幅。一張1920*1080的照片(iPhone6 Plus的分辨率)一共有2,073,600個(gè)像素呼胚,因此占用了超過8Mb的內(nèi)存。但是一張同樣分辨率的PNG格式或JPEG格式的圖片一般情況下不會(huì)有這么大沪编。這是因?yàn)镴PEG將像素?cái)?shù)據(jù)進(jìn)行了一種非常復(fù)雜且可逆的轉(zhuǎn)化年扩。
CPU主要處理兩件事:
(1)把圖片從PNG或JPEG等格式中解壓出來,得到像素?cái)?shù)據(jù)
(2)如果GPU不支持這種顏色各式相嵌,CPU需要進(jìn)行格式轉(zhuǎn)換
(2)况脆、調(diào)試Color Copied Images
第三個(gè)選項(xiàng)“Color Copied Images”就用來檢測這種實(shí)時(shí)的格式轉(zhuǎn)化格了,如果有則會(huì)將圖片標(biāo)記為藍(lán)色。