本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,特別涉及一種動(dòng)畫顯示流暢度的監(jiān)控方法、裝置及其設(shè)備。
背景技術(shù):
終端設(shè)備的動(dòng)畫顯示的流暢度,受到終端設(shè)備的cpu的運(yùn)行頻率、內(nèi)存的大小、顯存的大小和硬盤的轉(zhuǎn)速等的限制,因而終端設(shè)備的動(dòng)畫顯示的流暢度作為衡量終端設(shè)備的性能的重要指標(biāo)之一被廣泛使用。
相關(guān)技術(shù)中,為了獲知?jiǎng)赢嬶@示的流暢度,開發(fā)出對(duì)終端設(shè)備的動(dòng)畫顯示的流暢度進(jìn)行測試的性能分析工具,但是這些性能分析工具的監(jiān)控粒度較大,監(jiān)控的靈活性和精準(zhǔn)度較低,且占用內(nèi)存較大,從而導(dǎo)致易用性較差。
比如,對(duì)于已經(jīng)開發(fā)出的性能分析工具wpt(windowsperformancetoolkit,xperfwindows性能工具包),其可以通過win32k的provider來捕獲uidelay從而獲得到界面卡頓,以及相關(guān)的堆棧數(shù)據(jù)。然而,對(duì)于wpt監(jiān)控存在一些缺陷,其一是其監(jiān)控只能監(jiān)控界面卡頓100ms以上的情況,監(jiān)控粒度較大,對(duì)于100ms以內(nèi)的掉幀情況是無法監(jiān)控到的;其二是由于wpt組件模塊較大,對(duì)于外網(wǎng)用戶監(jiān)控的話,使用該模塊會(huì)拖慢系統(tǒng)運(yùn)行速度。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供一種動(dòng)畫顯示流暢度的監(jiān)控方法、裝置及設(shè)備,以解決現(xiàn)有技術(shù)中,對(duì)衡量終端設(shè)備性能指標(biāo)之一的動(dòng)畫顯示流暢度進(jìn)行監(jiān)控時(shí),現(xiàn)有的性能測試工具監(jiān)控粒度較大,對(duì)于一些持續(xù)時(shí)間相對(duì)較短的卡頓現(xiàn)象無法監(jiān)控到,且該獨(dú)立的測試工具占用內(nèi)存較大,拖慢了系統(tǒng)的運(yùn)行速度的技術(shù)問題。
本發(fā)明實(shí)施例提供一種動(dòng)畫顯示流暢度的監(jiān)控方法,包括以下步驟:根據(jù)終端設(shè)備的屏幕刷新頻率獲取數(shù)據(jù)幀的屏幕刷新時(shí)間;獲取屏幕監(jiān)控范圍內(nèi)每幀數(shù)據(jù)的界面更新時(shí)間;根據(jù)預(yù)設(shè)的流暢度測試算法對(duì)所述屏幕刷新時(shí)間和所述每幀數(shù)據(jù)的界面更新時(shí)間進(jìn)行計(jì)算處理,獲取每幀數(shù)據(jù)的測試結(jié)果;根據(jù)與所述流暢度測試算法對(duì)應(yīng)的性能指標(biāo)分析每幀數(shù)據(jù)的測試結(jié)果,確定所述屏幕監(jiān)控范圍內(nèi)的動(dòng)畫顯示流暢度是否滿足測試指標(biāo)。
本發(fā)明另一實(shí)施例提供動(dòng)畫顯示流暢度的監(jiān)控裝置,包括:第一獲取模塊,用于根據(jù)終端設(shè)備的屏幕刷新頻率獲取數(shù)據(jù)幀的屏幕刷新時(shí)間;第二獲取模塊,用于獲取屏幕監(jiān)控范圍內(nèi)每幀數(shù)據(jù)的界面更新時(shí)間;第三獲取模塊,用于根據(jù)預(yù)設(shè)的流暢度測試算法對(duì)所述屏幕刷新時(shí)間和所述每幀數(shù)據(jù)的界面更新時(shí)間進(jìn)行計(jì)算處理,獲取每幀數(shù)據(jù)的測試結(jié)果;第一確定模塊,用于根據(jù)與所述流暢度測試算法對(duì)應(yīng)的性能指標(biāo)分析每幀數(shù)據(jù)的測試結(jié)果,確定所述屏幕監(jiān)控范圍內(nèi)的動(dòng)畫顯示流暢度是否滿足測試指標(biāo)。
本發(fā)明再一實(shí)施例提供一種終端設(shè)備,包括:存儲(chǔ)器、處理器及存儲(chǔ)在所述存儲(chǔ)器上并可在所述處理器上運(yùn)行的計(jì)算機(jī)程序,其特征在于,所述處理器執(zhí)行所述計(jì)算機(jī)程序時(shí),實(shí)現(xiàn)本發(fā)明第一方面實(shí)施例所述的動(dòng)畫顯示流暢度的監(jiān)控方法。
本發(fā)明還一實(shí)施例提供一種存儲(chǔ)介質(zhì),用于存儲(chǔ)應(yīng)用程序,所述應(yīng)用程序用于執(zhí)行本發(fā)明第一方面實(shí)施例所述的動(dòng)畫顯示流暢度的監(jiān)控方法。
本發(fā)明實(shí)施例提供的技術(shù)方案可以包括以下有益效果:
根據(jù)終端設(shè)備的屏幕刷新頻率獲取數(shù)據(jù)幀的屏幕刷新時(shí)間,獲取屏幕監(jiān)控范圍內(nèi)每幀數(shù)據(jù)的界面更新時(shí)間,根據(jù)預(yù)設(shè)的流暢度測試算法對(duì)屏幕刷新時(shí)間和每幀數(shù)據(jù)的界面更新時(shí)間進(jìn)行計(jì)算處理,獲取每幀數(shù)據(jù)的測試結(jié)果,根據(jù)與流暢度測試算法對(duì)應(yīng)的性能指標(biāo)分析每幀數(shù)據(jù)的測試結(jié)果,確定屏幕監(jiān)控范圍內(nèi)的動(dòng)畫顯示流暢度是否滿足測試指標(biāo)。由此,提高了動(dòng)畫顯示流暢度的監(jiān)控精度和易用性,拓展了動(dòng)畫顯示流暢度監(jiān)控的多樣性。
本發(fā)明附加的方面和優(yōu)點(diǎn)將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過本發(fā)明的實(shí)踐了解到。
附圖說明
本發(fā)明上述的和/或附加的方面和優(yōu)點(diǎn)從下面結(jié)合附圖對(duì)實(shí)施例的描述中將變得明顯和容易理解,其中,
圖1(a)是根據(jù)本發(fā)明一個(gè)實(shí)施例的電腦管家中殺毒進(jìn)度指示動(dòng)畫顯示示意圖;
圖1(b)是根據(jù)本發(fā)明一個(gè)實(shí)施例的聊天應(yīng)用程序中好友列表動(dòng)畫顯示示意圖;
圖2是根據(jù)本發(fā)明一個(gè)實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控方法的流程圖;
圖3(a)是根據(jù)現(xiàn)有技術(shù)的屏幕刷新頻率顯示的界面示意圖;
圖3(b)是根據(jù)現(xiàn)有技術(shù)的包含多個(gè)可選屏幕刷新頻率的界面示意圖;
圖3(c)是根據(jù)現(xiàn)有技術(shù)的修改后的屏幕刷新頻率顯示的界面示意圖;
圖4(a)是根據(jù)現(xiàn)有技術(shù)的語音搜索模式下的智能手機(jī)的界面示意圖;
圖4(b)是根據(jù)現(xiàn)有技術(shù)中在智能手機(jī)界面上顯示屏幕刷新頻率顯示的界面示意圖;
圖5(a)是根據(jù)本發(fā)明一個(gè)實(shí)施例的包含確定的監(jiān)控應(yīng)用程序范圍的界面示意圖;
圖5(b)是根據(jù)本發(fā)明另一個(gè)實(shí)施例的包含確定的監(jiān)控應(yīng)用程序范圍的界面示意圖;
圖6(a)是根據(jù)本發(fā)明一個(gè)實(shí)施例的針對(duì)電腦管家的動(dòng)畫顯示監(jiān)控情況的界面示意圖;
圖6(b)是根據(jù)本發(fā)明一個(gè)實(shí)施例的屏幕監(jiān)控范圍確定示意圖;
圖7是根據(jù)本發(fā)明另一個(gè)實(shí)施例的屏幕監(jiān)控范圍確定示意圖;
圖8是根據(jù)本發(fā)明一個(gè)實(shí)施例的某個(gè)時(shí)間段數(shù)據(jù)幀的時(shí)間對(duì)應(yīng)關(guān)系圖;
圖9是根據(jù)本發(fā)明另一個(gè)實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控方法的流程圖;
圖10是根據(jù)本發(fā)明又一個(gè)實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控方法的流程圖;
圖11是根據(jù)本發(fā)明再一個(gè)實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控方法的流程圖;
圖12是根據(jù)本發(fā)明一個(gè)應(yīng)用場景下的動(dòng)畫顯示流暢度的監(jiān)控方法的流程圖;
圖13是根據(jù)本發(fā)明第一個(gè)實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控裝置的結(jié)構(gòu)示意圖;
圖14是根據(jù)本發(fā)明第二個(gè)實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控裝置的結(jié)構(gòu)示意圖;
圖15是根據(jù)本發(fā)明第三個(gè)實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控裝置的結(jié)構(gòu)示意圖;
圖16是根據(jù)本發(fā)明第四個(gè)實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控裝置的結(jié)構(gòu)示意圖;
圖17是根據(jù)本發(fā)明第五個(gè)實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控裝置的結(jié)構(gòu)示意圖;
圖18是根據(jù)本發(fā)明第六個(gè)實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控裝置的結(jié)構(gòu)示意圖;
圖19是根據(jù)本發(fā)明第七個(gè)實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控裝置的結(jié)構(gòu)示意圖;以及
圖20是根據(jù)本發(fā)明一個(gè)實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控方法的交互流程示意圖。
具體實(shí)施方式
下面詳細(xì)描述本發(fā)明的實(shí)施例,所述實(shí)施例的示例在附圖中示出,其中自始至終相同或類似的標(biāo)號(hào)表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實(shí)施例是示例性的,旨在用于解釋本發(fā)明,而不能理解為對(duì)本發(fā)明的限制。
下面參考附圖描述本發(fā)明實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控方法、裝置及其設(shè)備。
由于現(xiàn)有技術(shù)中,對(duì)衡量終端設(shè)備性能指標(biāo)之一的動(dòng)畫顯示流暢度進(jìn)行監(jiān)控時(shí),現(xiàn)有的性能測試工具監(jiān)控粒度較大,對(duì)于一些持續(xù)時(shí)間相對(duì)較短的卡頓現(xiàn)象無法監(jiān)控到,且該獨(dú)立的測試工具占用內(nèi)存較大,拖慢了系統(tǒng)的運(yùn)行速度。
為了解決上述問題,本發(fā)明實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控方法中,流暢度監(jiān)控細(xì)化到任意時(shí)長,大大提高了監(jiān)控的精細(xì)度,為終端設(shè)備的性能評(píng)估的可靠性帶來重大意義,并且,本發(fā)明實(shí)施例中提供的動(dòng)畫顯示流暢度的監(jiān)控方法,可以合入到項(xiàng)目工程中實(shí)施,有效降低了測試時(shí)的占用內(nèi)存,避免了對(duì)系統(tǒng)運(yùn)行速度帶來的負(fù)面影響。
其中,需要說明的是,本發(fā)明實(shí)施例中的動(dòng)畫并不僅僅表示狹義上的視頻動(dòng)畫,它還包括應(yīng)用中的各種可動(dòng)態(tài)顯示的元素,比如,對(duì)于電腦管家應(yīng)用程序,動(dòng)畫可以包括如圖1(a)所示的殺毒進(jìn)度指示動(dòng)畫,又比如,如圖1(b)所示,在聊天應(yīng)用程序中,如圖1(b)左圖所示可知,用戶往上滑動(dòng)好友列表,則如圖1(b)右圖所示,可控制列表向上滑動(dòng)出新的好友列表的界面,即可上下滑動(dòng)顯示的好友列表,也是本發(fā)明實(shí)施例中所描述的動(dòng)畫。
下面參考附圖和具體的實(shí)施例,對(duì)本發(fā)明實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控方法進(jìn)行具體描述。
圖2是根據(jù)本發(fā)明一個(gè)實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控方法的流程圖,如圖2所示,該動(dòng)畫顯示流暢度的監(jiān)控方法包括:
s101,根據(jù)終端設(shè)備的屏幕刷新頻率獲取數(shù)據(jù)幀的屏幕刷新時(shí)間。
其中,本發(fā)明實(shí)施例的終端設(shè)備可以是具有顯示屏幕的手機(jī)、平板電腦、個(gè)人數(shù)字助理、穿戴式設(shè)備等具有各種操作系統(tǒng)的硬件設(shè)備,該穿戴式設(shè)備可以是智能手環(huán)、智能手表、智能眼鏡等。在此不作限制。
應(yīng)當(dāng)理解的是,終端設(shè)備的屏幕刷新頻率受到支持顯示屏幕顯示的硬件的限制,比如,對(duì)于使用crt進(jìn)行顯示的屏幕而言,屏幕上顯示的動(dòng)畫由于是由一個(gè)個(gè)電子束擊打而發(fā)光的熒光點(diǎn)組成的,由于熒光粉受到電子束擊打后發(fā)光的時(shí)間很短,因而,電子束必須不斷擊打熒光粉使其持續(xù)發(fā)光。也就是說,該顯示屏幕的屏幕刷新頻率受到熒光粉發(fā)光時(shí)間的限制。
因此,終端設(shè)備的支持屏幕顯示動(dòng)畫的硬件不同,其屏幕刷新顯示頻率不同,這種刷新顯示頻率一般由終端設(shè)備的生產(chǎn)廠家在設(shè)備生產(chǎn)時(shí)標(biāo)定好。
舉例而言,當(dāng)終端設(shè)備是個(gè)人電腦時(shí),如圖3(a)所示,可以找到監(jiān)視器菜單后,在監(jiān)視器設(shè)置的選項(xiàng)下獲知屏幕刷新頻率為60hz。
需要強(qiáng)調(diào)的是,獲知終端設(shè)備的屏幕刷新頻率的方式受到終端設(shè)備支持的功能的限制,因而,除了上述描述的方式外,還可存在其他方式獲取終端設(shè)備的屏幕刷新頻率。
比如,如圖4(a)所示,當(dāng)終端設(shè)備為支持語音搜索功能的智能手機(jī)時(shí),如果在語音搜索模式下,接收到用戶的語音搜索指令“屏幕數(shù)顯頻率是多少”,則可自動(dòng)識(shí)別該語音指令,并且獲知如圖4(b)示出的屏幕刷新頻率。
另外,由于在實(shí)際執(zhí)行過程中,屏幕刷新頻率越低,圖像閃爍和抖動(dòng)的就越厲害,眼睛疲勞得就越快,有時(shí)會(huì)引起眼睛酸痛,頭暈?zāi)垦5劝Y狀。因?yàn)?0hz正好與日光燈的刷新頻率相近,所以當(dāng)顯示器處于60hz的刷新頻率時(shí)可能會(huì)使得某些用戶難受的頻閃效應(yīng),因而,為了滿足某些用戶的個(gè)性化需求,一些終端設(shè)備提供了多個(gè)可選擇的屏幕刷新頻率。
舉例而言,繼續(xù)參照?qǐng)D3(a),用戶可點(diǎn)擊屏幕刷新頻率顯示框后的下拉菜單觸發(fā)按鍵,并在如圖3(b)所示的下拉菜單中選擇其需要的屏幕刷新頻率,比如選中75hz,則如圖3(c)所示,當(dāng)前的屏幕刷新頻率被更改為75hz。
在獲取終端設(shè)備的屏幕刷新頻率后,根據(jù)終端設(shè)備的屏幕刷新頻率獲取數(shù)據(jù)幀的屏幕刷新時(shí)間,該屏幕刷新時(shí)間對(duì)應(yīng)于每幀動(dòng)畫的顯示時(shí)長,從而,每到一個(gè)屏幕刷新時(shí)間就顯示下一幀的動(dòng)畫中的數(shù)據(jù)幀,通過不斷刷新顯示的數(shù)據(jù)幀形成動(dòng)畫效果。
其中,需要說明的是,在不同的應(yīng)用場景下,根據(jù)終端設(shè)備的屏幕刷新頻率獲取數(shù)據(jù)幀的屏幕刷新時(shí)間的方式不同,示例說明如下:
第一種示例,在獲取終端設(shè)備的屏幕刷新頻率后,由于屏幕刷新頻率為每秒鐘屏幕刷新的次數(shù),因而,可根據(jù)公式屏幕刷新時(shí)間=1/屏幕刷新頻率,計(jì)算獲得屏幕刷新時(shí)間。
在本示例中,舉例而言,如果獲知的屏幕刷新頻率為60hz,則獲得的屏幕刷新時(shí)間為1/60,合計(jì)16.66ms。
其中,本實(shí)施例的計(jì)算過程可以由用戶自行計(jì)算完成后在相關(guān)界面輸入,也可由系統(tǒng)自行計(jì)算。
第二種示例,由于屏幕刷新頻率的可選擇個(gè)數(shù)有限,因而可預(yù)先存儲(chǔ)屏幕刷新與屏幕刷新時(shí)間的對(duì)應(yīng)關(guān)系,從而,在獲取屏幕刷新頻率后,查詢上述對(duì)應(yīng)關(guān)系,獲取對(duì)應(yīng)的屏幕刷新時(shí)間。
在本示例中,可由用戶手動(dòng)在相關(guān)界面輸入屏幕刷新頻率以獲取反饋的屏幕刷新時(shí)間,也可由系統(tǒng)自行獲知。
需要強(qiáng)調(diào)的是,上述實(shí)施例公開的將屏幕刷新頻率在終端設(shè)備上直觀的顯示給用戶,是為了描述的清楚,然而,在實(shí)際操作過程中,如果上述獲取屏幕刷新時(shí)間是由系統(tǒng)自行完成的,可以不在終端設(shè)備上顯示屏幕刷新頻率。
s102,獲取屏幕監(jiān)控范圍內(nèi)每幀數(shù)據(jù)的界面更新時(shí)間。
由于在實(shí)際應(yīng)用中,終端設(shè)備的屏幕上顯示的包含動(dòng)畫的應(yīng)用數(shù)量可能有多個(gè),甚至一個(gè)應(yīng)用包含的動(dòng)畫就有多個(gè),而用戶可能只希望監(jiān)控其中部分應(yīng)用的動(dòng)畫,或者一個(gè)應(yīng)用中的部分動(dòng)畫,因而,在本發(fā)明的實(shí)施例中,針對(duì)屏幕監(jiān)控范圍進(jìn)行動(dòng)畫顯示的流暢度的監(jiān)控。
其中,在實(shí)際應(yīng)用中,該屏幕監(jiān)控范圍的確定方式,隨著具體應(yīng)用場景的不同而不同。
作為一種可能的實(shí)現(xiàn)方式,該屏幕監(jiān)控范圍可以是用戶自定義設(shè)置監(jiān)控應(yīng)用程序范圍。
其中,在該實(shí)例中的一些應(yīng)用場景下,用戶可以通過實(shí)施一個(gè)閉合的觸摸軌跡圈定應(yīng)用程序的范圍,從而,系統(tǒng)通過軌跡識(shí)別確定出該軌跡內(nèi)所包含的應(yīng)用程序范圍。其中,該應(yīng)用程序的范圍可以是一個(gè)應(yīng)用程序內(nèi)的范圍,也可以是多個(gè)應(yīng)用程序范圍。
即如果用戶實(shí)施的一個(gè)閉合的觸摸軌跡是1,則如圖5(a)所示,識(shí)別出的自定義設(shè)置的監(jiān)控的應(yīng)用程序范圍是針對(duì)應(yīng)用程序a的部分區(qū)域。
如果用戶實(shí)施的一個(gè)閉合的觸摸軌跡是2,則如圖5(b)所示,識(shí)別出的自定義設(shè)置的監(jiān)控的應(yīng)用程序范圍是針對(duì)應(yīng)用程序a的部分區(qū)域,和應(yīng)用程序b的全部區(qū)域。
或者,在該實(shí)施例的一些應(yīng)用場景下,如圖6(a)所示,可以在針對(duì)電腦管家的相關(guān)界面中輸入應(yīng)用程序范圍,比如輸入如圖6(a)所示的應(yīng)用程序的長和寬,從而如圖6(b)所示,系統(tǒng)可通過坐標(biāo)識(shí)別,識(shí)別出當(dāng)前屏幕中顯示的應(yīng)用程序的左上角的頂點(diǎn),并且以該頂點(diǎn)的坐標(biāo)為原點(diǎn),根據(jù)應(yīng)用程序的顯示展開方向和用戶輸入的應(yīng)用程序的長和寬確定出應(yīng)用程序范圍。
當(dāng)然,在本實(shí)施例中,如果當(dāng)前終端設(shè)備的屏幕中顯示的應(yīng)用程序?yàn)槎鄠€(gè),則在輸入如圖7所示,終端設(shè)備可以顯示屏幕的一個(gè)邊界點(diǎn)為原點(diǎn),識(shí)別出對(duì)應(yīng)的長和寬范圍內(nèi)的包含的應(yīng)用程序范圍。
作為另一種可能的實(shí)現(xiàn)方式,該屏幕監(jiān)控范圍可以通過獲取當(dāng)前監(jiān)控的應(yīng)用程度顯示的窗口范圍,即如圖6(b)所示,在當(dāng)前窗口顯示的為電腦管家應(yīng)用程序時(shí),則自動(dòng)定位并識(shí)別出該應(yīng)用程序顯示的窗口范圍為屏幕的監(jiān)控范圍。
進(jìn)一步地,在獲取屏幕監(jiān)控范圍后,獲取屏幕監(jiān)控范圍內(nèi)每幀數(shù)據(jù)的界面更新時(shí)間,以便于后續(xù)根據(jù)該每一幀數(shù)據(jù)的界面的更新時(shí)間判斷動(dòng)畫顯示的流暢度。
也就是說,在終端設(shè)備顯示動(dòng)畫的過程中,雖然其根據(jù)屏幕刷新頻率刷新數(shù)據(jù)幀,但是,是否在屏幕刷新頻率對(duì)應(yīng)的屏幕刷新時(shí)間內(nèi),成功刷新并顯示出下一幀數(shù)據(jù)幀,以使得動(dòng)畫連續(xù)播放,還受到屏幕監(jiān)控范圍內(nèi)每幀數(shù)據(jù)的繪制時(shí)間,以及每幀數(shù)據(jù)與上一幀數(shù)據(jù)之間的間隔時(shí)間的影響,該屏幕監(jiān)控范圍內(nèi)每幀數(shù)據(jù)的繪制時(shí)間,以及每幀數(shù)據(jù)與上一幀數(shù)據(jù)之間的間隔時(shí)間通過本實(shí)施例中的界面更新時(shí)間體現(xiàn)。
具體而言,如圖8所示,終端設(shè)備當(dāng)前顯示的數(shù)據(jù)幀為圖中標(biāo)注的第一幀時(shí),下一幀待顯示的數(shù)據(jù)幀為圖8中顯示的第二幀,該第二幀的繪制耗時(shí)為ft,第一幀到第二幀的顯示間隔是it,該it的大小與cpu的處理效率等相關(guān),由此,第一幀到第二幀的實(shí)際耗時(shí)即界面更新時(shí)間為t=it+ft,無論是該第二幀的繪制耗時(shí)ft過長,還是第一幀到第二幀的顯示間隔時(shí)間it過長,都可能導(dǎo)致界面更新時(shí)間t大于屏幕刷新頻率,在屏幕的再次刷新到達(dá)時(shí),無法成功顯示出下一個(gè)數(shù)據(jù)幀,從而導(dǎo)致動(dòng)畫的播放出現(xiàn)卡頓。
s103,根據(jù)預(yù)設(shè)的流暢度測試算法對(duì)屏幕刷新時(shí)間和每幀數(shù)據(jù)的界面更新時(shí)間進(jìn)行計(jì)算處理,獲取每幀數(shù)據(jù)的測試結(jié)果。
具體而言,在獲取界面更新時(shí)間后,根據(jù)預(yù)設(shè)的流暢度測試算法計(jì)算界面更新時(shí)間和屏幕刷新時(shí)間的相差情況,該相差情況即為每幀數(shù)據(jù)的測試結(jié)果,其中,測試結(jié)果的表現(xiàn)形式與預(yù)設(shè)流暢度算法相關(guān)。
需要說明的是,根據(jù)具體應(yīng)用場景的不同,上述預(yù)設(shè)的流暢度測試算法可以是能體現(xiàn)出每幀數(shù)據(jù)的更新時(shí)間和屏幕刷新時(shí)間的相差情況的不同的算法,下面舉例說明。
第一種示例,該預(yù)設(shè)的流暢度算法可以是對(duì)每幀數(shù)據(jù)的更新時(shí)間和屏幕刷新時(shí)間進(jìn)行相減的減法算法。
具體而言,可以在獲知每幀數(shù)據(jù)的更新時(shí)間后,與屏幕刷新時(shí)間相減,從而將得到的每幀數(shù)據(jù)的更新時(shí)間和屏幕刷新時(shí)間相減的時(shí)間差值作為測試結(jié)果。
在本示例中,每幀數(shù)據(jù)的更新時(shí)間和屏幕刷新時(shí)間的相差情況可以直接體現(xiàn),即如果相減結(jié)果大于0,則每幀數(shù)據(jù)的更新時(shí)間大于屏幕刷新時(shí)間,相減結(jié)果越大,每幀數(shù)據(jù)的更新時(shí)間越大于屏幕刷新時(shí)間,該幀數(shù)據(jù)越卡頓,如果不大于0,則每幀數(shù)據(jù)的更新時(shí)間不大于屏幕刷新時(shí)間。
第二種示例,該預(yù)設(shè)的流暢度算法可以是對(duì)每幀數(shù)據(jù)的更新時(shí)間和屏幕刷新時(shí)間進(jìn)行相除的比值算法。
具體而言,可以在獲知每幀數(shù)據(jù)的更新時(shí)間后,與屏幕刷新時(shí)間相除,從而將得到的每幀數(shù)據(jù)的更新時(shí)間和屏幕刷新時(shí)間,相除獲得的占用的幀的數(shù)目結(jié)果作為測試結(jié)果。
舉例而言,如果獲知一個(gè)數(shù)據(jù)幀的更新時(shí)間為130ms,屏幕刷新時(shí)間位20ms,則測試結(jié)果為130/20=6.5幀。
在本示例中,每幀數(shù)據(jù)的更新時(shí)間和屏幕刷新時(shí)間的相差情況可以間接體現(xiàn),即如果相除結(jié)果大于1,則每幀數(shù)據(jù)的更新時(shí)間大于屏幕刷新時(shí)間,相除結(jié)果越大,每幀數(shù)據(jù)的更新時(shí)間越大于屏幕刷新時(shí)間,該幀數(shù)據(jù)越卡頓,如果不大于1,則每幀數(shù)據(jù)的更新時(shí)間不大于屏幕刷新時(shí)間。
s104,根據(jù)與流暢度測試算法對(duì)應(yīng)的性能指標(biāo)分析每幀數(shù)據(jù)的測試結(jié)果,確定屏幕監(jiān)控范圍內(nèi)的動(dòng)畫顯示流暢度是否滿足測試指標(biāo)。
可以理解,步驟s103中獲得的測試結(jié)果,都可以間接或者直接的反映出每一幀數(shù)據(jù)幀顯示的流暢度,而每一幀數(shù)據(jù)幀的流暢度與整個(gè)動(dòng)畫的顯示流暢度息息相關(guān)。
具體而言,在本發(fā)明的實(shí)施例中,預(yù)設(shè)與流暢度測試算法對(duì)應(yīng)的性能指標(biāo)分析,并根據(jù)該與流暢度測試算法對(duì)應(yīng)的性能指標(biāo)分析每幀數(shù)據(jù)的測試結(jié)果,以結(jié)合每幀數(shù)據(jù)的測試結(jié)果,綜合確定屏幕監(jiān)控范圍內(nèi)的動(dòng)畫顯示流暢度是否滿足測試指標(biāo)。其中,上述性能分析指標(biāo)用于將每幀數(shù)據(jù)的測試結(jié)果量化為與測試指標(biāo)對(duì)應(yīng)的量化值。
其中,上述測試指標(biāo)用以指示監(jiān)控動(dòng)畫是否流暢,該測試指標(biāo)與測試算法對(duì)應(yīng)的性能指標(biāo)相關(guān),該測試指標(biāo)可由用戶根據(jù)需要自行設(shè)定,也可由用戶自行標(biāo)定,從而,在具體實(shí)施過程中,可以通過設(shè)置測試指標(biāo),靈活控制監(jiān)控的粒度,避免了現(xiàn)有技術(shù)中監(jiān)控粒度有限的缺點(diǎn),比如,在一些應(yīng)用場景下,可以通過將測試指標(biāo)的粒度設(shè)置為10ms,從而可根據(jù)步驟s103獲取的測試結(jié)果,監(jiān)控到所有界面更新時(shí)間和屏幕刷新時(shí)間的差值大于10ms的數(shù)據(jù)幀,大大提高了動(dòng)畫顯示的流暢度的測試精度。
為了更加清楚的說明步驟s104,下面進(jìn)行舉例。
第一種示例,如果預(yù)設(shè)的流暢度測試算法是對(duì)每幀數(shù)據(jù)的更新時(shí)間和屏幕刷新時(shí)間進(jìn)行相減的差值運(yùn)算,則對(duì)應(yīng)的性能分析指標(biāo)對(duì)應(yīng)于相減得到的時(shí)間差值的具體分布情況。
其中,在本示例中,對(duì)應(yīng)于相減得到的時(shí)間差值的具體分布情況的性能分析指標(biāo),根據(jù)應(yīng)用場景的不同而不同。
作為一種可能的實(shí)現(xiàn)方式,該性能分析指標(biāo)對(duì)應(yīng)于每幀數(shù)據(jù)的更新時(shí)間和屏幕刷新時(shí)間進(jìn)行相減得到的時(shí)間差值,在預(yù)設(shè)的時(shí)間差值的分布區(qū)間內(nèi)的數(shù)據(jù)幀的數(shù)量。
如果預(yù)設(shè)的時(shí)間差值的分布區(qū)間是小于等于0的區(qū)間,大于0到等于30的區(qū)間,大于30到等于50的區(qū)間,大于50的區(qū)間,將獲得的每個(gè)數(shù)據(jù)幀的時(shí)間差值與上述分布區(qū)間比對(duì),獲取的小于等于0的區(qū)間內(nèi)的數(shù)據(jù)幀的數(shù)量是50個(gè),大于0到等于30的區(qū)間內(nèi)的數(shù)據(jù)幀的數(shù)量是20個(gè),大于30到等于50的區(qū)間內(nèi)的數(shù)據(jù)幀的數(shù)量是20個(gè),大于50的區(qū)間內(nèi)的數(shù)據(jù)幀的數(shù)量是10個(gè)。
在本示例中,如果測試指標(biāo)為屬于小于等于0區(qū)間內(nèi)的數(shù)據(jù)幀數(shù)目不小于50%,則根據(jù)上述數(shù)據(jù)計(jì)算確定該動(dòng)畫顯示的流暢度滿足測試指標(biāo)。
如果測試指標(biāo)為小于等于0區(qū)間內(nèi)的數(shù)據(jù)幀的數(shù)目不小于50%,且在大于50的區(qū)間內(nèi)的數(shù)據(jù)幀的數(shù)目小于5%,則根據(jù)上述數(shù)據(jù)計(jì)算確定當(dāng)前動(dòng)畫顯示的流暢度不滿足測試指標(biāo)。
如果預(yù)先針對(duì)每個(gè)區(qū)間與顯示流暢度的關(guān)系設(shè)置不同的權(quán)重值,比如針對(duì)小于等于0區(qū)間、于0到等于30的區(qū)間,大于30到等于50的區(qū)間,大于50的區(qū)間設(shè)置的權(quán)重值分別為0.5,0.3,0.2,0.1,測試指標(biāo)為權(quán)重值大于30,則由于得到的權(quán)重值為31大于30,從而判斷當(dāng)前動(dòng)畫顯示的流暢度滿足測試指標(biāo)。
作為另一種可能的實(shí)現(xiàn)方式,如果該性能分析指標(biāo)對(duì)應(yīng)于相減得到的時(shí)間差值組成的分布曲線的斜率。
則在本示例中,如果測試指標(biāo)為分布曲線的斜率為正的持續(xù)時(shí)間長度不超過t,則計(jì)算由每個(gè)數(shù)據(jù)幀的時(shí)減差值組成的曲線的斜率,并統(tǒng)計(jì)斜率為正的時(shí)間長度是否超過t,如果超過,則認(rèn)為屏幕監(jiān)控范圍內(nèi)的動(dòng)畫顯示流暢度不滿足測試指標(biāo),如果不超過,則認(rèn)為屏幕監(jiān)控范圍內(nèi)的動(dòng)畫顯示流暢度滿足測試指標(biāo)。
第二種示例,如果流暢度測試算法是對(duì)每幀數(shù)據(jù)的更新時(shí)間和屏幕刷新時(shí)間進(jìn)行相比的除法的算法,則對(duì)應(yīng)的性能分析指標(biāo)對(duì)應(yīng)于相除得到的占用幀數(shù)在分布情況。
其中,該示例下的根據(jù)與流暢度測試算法對(duì)應(yīng)的性能指標(biāo)分析每幀數(shù)據(jù)的測試結(jié)果,確定屏幕監(jiān)控范圍內(nèi)的動(dòng)畫顯示流暢度是否滿足測試指標(biāo)的處理原理,與如果流暢度測試算法是對(duì)每幀數(shù)據(jù)的更新時(shí)間和屏幕刷新時(shí)間進(jìn)行相減的算法下的處理原理類似,在此不再贅述。
由此,本發(fā)明實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控方法,根據(jù)屏幕刷新時(shí)間和每幀數(shù)據(jù)的界面更新時(shí)間判定動(dòng)畫顯示的流暢度,監(jiān)控的粒度可根據(jù)需要設(shè)置為任意值,可大大提高監(jiān)控的精確度,且上述監(jiān)控方法不依賴于集成的模塊,在實(shí)際操作過程中,可將相關(guān)執(zhí)行代碼合入到項(xiàng)目工程中,大大降低了對(duì)內(nèi)存的占用,易用性較高。
綜上所述,本發(fā)明實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控方法,根據(jù)終端設(shè)備的屏幕刷新頻率獲取數(shù)據(jù)幀的屏幕刷新時(shí)間,獲取屏幕監(jiān)控范圍內(nèi)每幀數(shù)據(jù)的界面更新時(shí)間,根據(jù)預(yù)設(shè)的流暢度測試算法對(duì)屏幕刷新時(shí)間和每幀數(shù)據(jù)的界面更新時(shí)間進(jìn)行計(jì)算處理,獲取每幀數(shù)據(jù)的測試結(jié)果,根據(jù)與流暢度測試算法對(duì)應(yīng)的性能指標(biāo)分析每幀數(shù)據(jù)的測試結(jié)果,確定屏幕監(jiān)控范圍內(nèi)的動(dòng)畫顯示流暢度是否滿足測試指標(biāo)。由此,提高了動(dòng)畫顯示流暢度的監(jiān)控精度和易用性,拓展了動(dòng)畫顯示流暢度監(jiān)控的多樣性。
基于以上描述,還應(yīng)當(dāng)理解的是,在不同的應(yīng)用場景下,獲取屏幕監(jiān)控范圍內(nèi)每幀數(shù)據(jù)的界面更新時(shí)間的方式不同,因此,為了更加清楚的描述上述步驟s102中,如何獲取屏幕監(jiān)控范圍內(nèi)每幀數(shù)據(jù)的界面更新時(shí)間,下面分別結(jié)合不同的實(shí)施例進(jìn)行說明。
圖9是根據(jù)本發(fā)明另一個(gè)實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控方法的流程圖,如圖9所示,步驟s102可包括:
s201,獲取屏幕監(jiān)控范圍內(nèi)每幀數(shù)據(jù)的繪制時(shí)間,以及每幀數(shù)據(jù)與上一幀數(shù)據(jù)之間的間隔時(shí)間。
s202,對(duì)每幀數(shù)據(jù)的繪制時(shí)間以及與上一幀數(shù)據(jù)之間的間隔時(shí)間進(jìn)行求和處理,獲取每幀數(shù)據(jù)的界面更新時(shí)間。
具體地,繼續(xù)參見圖8,每幀的界面更新時(shí)間t包括屏幕監(jiān)控范圍內(nèi)每幀數(shù)據(jù)的繪制時(shí)間ft,以及每幀數(shù)據(jù)與上一幀數(shù)據(jù)之間的間隔時(shí)間it,因而,可對(duì)每幀數(shù)據(jù)的繪制時(shí)間以及與上一幀數(shù)據(jù)之間的間隔時(shí)間進(jìn)行求和處理,獲取每幀數(shù)據(jù)的界面更新時(shí)間。
需要說明的是,在不同的應(yīng)用場景下,獲取屏幕監(jiān)控范圍內(nèi)每幀數(shù)據(jù)的繪制時(shí)間,以及每幀數(shù)據(jù)與上一幀數(shù)據(jù)之間的間隔時(shí)間的方式不同,下面舉例說明。
作為一種可能的實(shí)現(xiàn)方式,由于每一幀的數(shù)據(jù)幀在繪制的開始和結(jié)束都會(huì)觸發(fā)相應(yīng)的繪制事件函數(shù),因而,可以通過監(jiān)聽繪制事件函數(shù)的調(diào)用情況獲知屏幕監(jiān)控范圍內(nèi)每幀數(shù)據(jù)的繪制時(shí)間,以及每幀數(shù)據(jù)與上一幀數(shù)據(jù)之間的間隔時(shí)間。
在本示例中,當(dāng)系統(tǒng)在屏幕監(jiān)控范圍內(nèi)開始繪制數(shù)據(jù)幀時(shí)調(diào)用開始繪制函數(shù),通過與開始繪制函數(shù)對(duì)應(yīng)的鉤子函數(shù)讀取數(shù)據(jù)幀的開始繪制時(shí)間,并且,當(dāng)系統(tǒng)在屏幕監(jiān)控范圍內(nèi)結(jié)束繪制數(shù)據(jù)幀時(shí)調(diào)用結(jié)束繪制函數(shù),通過與結(jié)束繪制函數(shù)對(duì)應(yīng)的鉤子函數(shù)讀取數(shù)據(jù)幀的結(jié)束繪制時(shí)間。
進(jìn)而,根據(jù)數(shù)據(jù)幀的開始繪制時(shí)間和結(jié)束繪制時(shí)間計(jì)算數(shù)據(jù)幀的繪制時(shí)間,比如,將結(jié)束繪制時(shí)間減去開始繪制時(shí)間獲知數(shù)據(jù)幀的繪制時(shí)間。
根據(jù)數(shù)據(jù)幀的開始繪制時(shí)間和預(yù)存的上一幀數(shù)據(jù)的結(jié)束繪制時(shí)間計(jì)算數(shù)據(jù)幀與上一幀數(shù)據(jù)之間的間隔時(shí)間,比如將數(shù)據(jù)幀的開始繪制時(shí)間減去預(yù)存的上一幀數(shù)據(jù)的結(jié)束繪制時(shí)間,以得到數(shù)據(jù)幀與上一幀數(shù)據(jù)之間的間隔時(shí)間。
舉例而言,當(dāng)鉤子函數(shù)為hook函數(shù),開始繪制函數(shù)為beginpaint函數(shù),結(jié)束繪制函數(shù)為endpaint函數(shù)時(shí),先對(duì)系統(tǒng)函數(shù)beginpaint和endpaint進(jìn)行hook,hook后系統(tǒng)調(diào)用這兩個(gè)函數(shù)時(shí)候就會(huì)調(diào)用到指定的mine_beginpaint以及mine_endpaint,進(jìn)而,在屏幕監(jiān)控范圍內(nèi)的數(shù)據(jù)幀繪制時(shí),在mine_beginpaint和mine_endpaint中分別記錄該幀開始和結(jié)束時(shí)間,根據(jù)mine_beginpaint記錄的時(shí)間和mine_endpaint記錄的時(shí)間計(jì)算數(shù)據(jù)幀的繪制時(shí)間,進(jìn)而,數(shù)據(jù)幀的開始繪制時(shí)間和預(yù)存的mine_endpaint記錄的上一幀數(shù)據(jù)的結(jié)束繪制時(shí)間計(jì)算數(shù)據(jù)幀與上一幀數(shù)據(jù)之間的間隔時(shí)間。
另外,需要強(qiáng)調(diào)的是,在實(shí)際應(yīng)用中,對(duì)于有一些動(dòng)畫的“卡頓”,可能是提供功能服務(wù)的過程中由于用戶的無操作而導(dǎo)致的“偽卡頓”,比如,對(duì)于如圖1(b)所示的聊天應(yīng)用程序,如果用戶不下拉好友列表,則好友列表不會(huì)發(fā)生滑動(dòng)進(jìn)行界面的刷新等。因此,為了保證流暢度判定的準(zhǔn)確性,在本發(fā)明的實(shí)施例中,設(shè)置一數(shù)據(jù)幀之間的最大間隔時(shí)間,比如設(shè)置為250ms,一旦數(shù)據(jù)幀之間的間隔大于該最大間隔時(shí)間,則認(rèn)為當(dāng)前顯示的數(shù)據(jù)幀和上一個(gè)數(shù)據(jù)幀不屬于連續(xù)的數(shù)據(jù)幀,從而以當(dāng)前顯示的數(shù)據(jù)幀為起始幀進(jìn)行流暢度的監(jiān)控。
具體而言,判斷每幀數(shù)據(jù)與上一幀數(shù)據(jù)之間的間隔時(shí)間是否大于預(yù)設(shè)的第一門限值,該預(yù)設(shè)的第一門限值相對(duì)于正常的數(shù)據(jù)幀卡頓消耗時(shí)間較大,若檢測獲知間隔時(shí)間大于第一門限值,則將間隔時(shí)間置零,從而以當(dāng)前顯示的數(shù)據(jù)幀為起始幀進(jìn)行流暢度的監(jiān)控。
圖10是根據(jù)本發(fā)明又一個(gè)實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控方法的流程圖,如圖10所示,步驟s102可包括:
s301,當(dāng)系統(tǒng)接收數(shù)據(jù)幀的顯示驅(qū)動(dòng)信號(hào)時(shí)調(diào)用圖像顯示函數(shù),通過與圖像顯示函數(shù)對(duì)應(yīng)的鉤子函數(shù)讀取數(shù)據(jù)幀的界面顯示時(shí)間。
s302,根據(jù)數(shù)據(jù)幀的界面顯示時(shí)間與預(yù)存的上一幀數(shù)據(jù)的界面顯示時(shí)間,獲取數(shù)據(jù)幀的界面更新時(shí)間。
具體地,由于終端設(shè)備的所有的數(shù)據(jù)幀的顯示輸出都需要調(diào)用圖像顯示函數(shù),因而,在本發(fā)明的實(shí)施例中,當(dāng)系統(tǒng)接收數(shù)據(jù)幀的顯示驅(qū)動(dòng)信號(hào)時(shí)調(diào)用圖像顯示函數(shù),通過與圖像顯示函數(shù)對(duì)應(yīng)的鉤子函數(shù)讀取數(shù)據(jù)幀的界面顯示時(shí)間,并根據(jù)數(shù)據(jù)幀的界面顯示時(shí)間與預(yù)存的上一幀數(shù)據(jù)的界面顯示時(shí)間,獲取數(shù)據(jù)幀的界面更新時(shí)間。
作為一種可能的實(shí)現(xiàn)方式,由于終端設(shè)備的所有的圖像顯示輸出都是由時(shí)鐘驅(qū)動(dòng)的,這個(gè)驅(qū)動(dòng)信號(hào)稱為vsync,vsync一般由硬件產(chǎn)生,當(dāng)然,如果軟件的記錄準(zhǔn)確率較高時(shí),也可以由軟件產(chǎn)生vsync,因此,可以通過鉤子函數(shù)監(jiān)控驅(qū)動(dòng)信號(hào)vsync對(duì)應(yīng)的圖像顯示函數(shù)獲取屏幕監(jiān)控范圍內(nèi)每幀數(shù)據(jù)的繪制時(shí)間,以及每幀數(shù)據(jù)與上一幀數(shù)據(jù)之間的間隔時(shí)間。
舉例而言,如果終端設(shè)備的操作系統(tǒng)是android系統(tǒng),則由于該android系統(tǒng)下vsync來自于hwcomposer,當(dāng)vsync信號(hào)到達(dá)時(shí),choreographer.doframe()函數(shù)被調(diào)用,就可以使用鉤子函數(shù)監(jiān)控該函數(shù),統(tǒng)計(jì)每次時(shí)間的間隔就可以得到數(shù)據(jù)幀顯示的時(shí)間間隔,即每幀數(shù)據(jù)的界面更新時(shí)間。
同樣的,在實(shí)際應(yīng)用中,對(duì)于有一些動(dòng)畫的“卡頓”,可能是提供功能服務(wù)的過程中由于用戶的無操作而導(dǎo)致的“偽卡頓”。因此,為了保證流暢度判定的準(zhǔn)確性,在本發(fā)明的實(shí)施例中,如果界面更新時(shí)間較大,則將根據(jù)當(dāng)前數(shù)據(jù)幀與預(yù)存的上一幀數(shù)據(jù)幀的界面顯示時(shí)間獲取的數(shù)據(jù)幀的界面更新時(shí)間進(jìn)行修改,通過將其修改為一個(gè)較小的時(shí)間,以將其確定為一個(gè)流暢度較優(yōu)的起始幀。
具體而言,判斷數(shù)據(jù)幀的界面更新時(shí)間是否大于預(yù)設(shè)的第二門限值,其中,預(yù)設(shè)的第二門限值相對(duì)于正常的數(shù)據(jù)幀卡頓消耗時(shí)間較大,進(jìn)而,若檢測獲知界面更新時(shí)間大于第二門限值,則將界面更新時(shí)間修改為預(yù)設(shè)時(shí)間,其中,所述預(yù)設(shè)時(shí)間小于等于屏幕刷新時(shí)間。
綜上所述,本發(fā)明實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控方法,根據(jù)具體應(yīng)用場景的需要,靈活的選取獲取屏幕監(jiān)控范圍內(nèi)每幀數(shù)據(jù)的界面更新時(shí)間的方式,提高了本發(fā)明實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控方法的實(shí)用性和可靠性。
基于以上實(shí)施例,為了提高用戶的使用體驗(yàn),在確定屏幕監(jiān)控范圍內(nèi)的動(dòng)畫顯示流暢度是否滿足測試指標(biāo)之后,還可對(duì)發(fā)生卡頓的原因進(jìn)行分析確定,以便于及時(shí)對(duì)發(fā)生卡頓的位置進(jìn)行處理,恢復(fù)系統(tǒng)的正常運(yùn)行。
為了描述的更加清楚,下面結(jié)合整個(gè)動(dòng)畫顯示流暢度的監(jiān)控方法的處理流程,說明確定屏幕監(jiān)控范圍內(nèi)動(dòng)畫顯示的卡頓原因的實(shí)施時(shí)機(jī)和實(shí)施方式。其中,在本示例中,根據(jù)預(yù)設(shè)的流暢度測試算法對(duì)屏幕刷新時(shí)間和每幀數(shù)據(jù)的界面更新時(shí)間進(jìn)行計(jì)算處理,獲取每幀數(shù)據(jù)的測試結(jié)果的方式,為步驟s104中描述的第二種示例中的方式。
圖11是根據(jù)本發(fā)明再一個(gè)實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控方法的流程圖,如圖11所示,該動(dòng)畫顯示流暢度的監(jiān)控方法包括:
s401,根據(jù)終端設(shè)備的屏幕刷新頻率獲取數(shù)據(jù)幀的屏幕刷新時(shí)間。
s402,獲取屏幕監(jiān)控范圍內(nèi)每幀數(shù)據(jù)的界面更新時(shí)間。
s403,計(jì)算每幀數(shù)據(jù)的界面更新時(shí)間與屏幕刷新時(shí)間的比值,獲取每幀數(shù)據(jù)界面更新所占用的幀數(shù)。
在本實(shí)施例中,將每幀數(shù)據(jù)的界面更新時(shí)間與屏幕刷新時(shí)間的比值作為每幀數(shù)據(jù)的測試結(jié)果。
舉例而言,如果50hz的屏幕刷新頻率下,每幀屏幕刷新時(shí)間為20ms,如果該幀數(shù)據(jù)的界面更新時(shí)間是130ms,那么計(jì)算每幀數(shù)據(jù)的界面更新時(shí)間與屏幕刷新時(shí)間的比值為130/20=6.5,即獲取的每幀數(shù)據(jù)界面更新所占用的幀數(shù)是6.5幀。
s404,將每幀數(shù)據(jù)界面更新所占用的幀數(shù)與預(yù)設(shè)的幀數(shù)分布區(qū)間進(jìn)行比對(duì),獲取各幀數(shù)分布區(qū)間對(duì)應(yīng)的數(shù)據(jù)幀數(shù)量,以根據(jù)數(shù)據(jù)幀數(shù)量確定屏幕監(jiān)控范圍內(nèi)的動(dòng)畫顯示流暢度是否滿足測試指標(biāo)。
舉例而言,繼續(xù)參照如圖6(a)所示的針對(duì)電腦管家應(yīng)用程序的動(dòng)畫顯示流暢度監(jiān)控的情況,如果預(yù)設(shè)的幀數(shù)的分布區(qū)間為小于一幀的區(qū)間,大于1幀到等于2幀的區(qū)間,大于2幀到等于4幀的區(qū)間,大于4幀到等于8幀的區(qū)間,大于8幀到等于15幀的區(qū)間,大于15幀的區(qū)間。則如果獲取的一幀數(shù)據(jù)幀的界面更新所占用的幀數(shù)為6.5幀,則與預(yù)設(shè)的幀數(shù)分布區(qū)間進(jìn)行比對(duì),發(fā)現(xiàn)6.5幀屬于大于4幀到等于8幀的區(qū)間,從而對(duì)該區(qū)間對(duì)應(yīng)的數(shù)據(jù)幀的數(shù)量加1。
進(jìn)而,由于數(shù)據(jù)幀的界面更新所占用的幀數(shù)越多,實(shí)際刷新到該數(shù)據(jù)幀所需的耗時(shí)越長,動(dòng)畫越卡頓,因而,預(yù)先設(shè)置指標(biāo)值對(duì)應(yīng)的幀數(shù)分布區(qū)間來衡量動(dòng)畫的流暢度。
從而,將各幀數(shù)分布區(qū)間對(duì)應(yīng)的數(shù)據(jù)幀數(shù)量與對(duì)應(yīng)設(shè)置的指標(biāo)值進(jìn)行比較,若檢測到數(shù)據(jù)幀數(shù)量不滿足對(duì)應(yīng)設(shè)置的指標(biāo)值的幀數(shù)分布區(qū)間,則確定屏幕監(jiān)控范圍內(nèi)的動(dòng)畫顯示流暢度不滿足測試指標(biāo),若檢測到數(shù)據(jù)幀數(shù)量都滿足對(duì)應(yīng)設(shè)置的指標(biāo)值的幀數(shù)分布區(qū)間,則確定屏幕監(jiān)控范圍內(nèi)的動(dòng)畫顯示流暢度滿足測試指標(biāo)。
舉例而言,如果設(shè)置的數(shù)據(jù)幀的數(shù)量對(duì)應(yīng)的指標(biāo)值的幀數(shù)分布區(qū)間,為大于1幀到等于2幀的區(qū)間和大于2幀到等于4幀的區(qū)間的數(shù)據(jù)幀的數(shù)量不超過60,則可根據(jù)動(dòng)畫中的數(shù)據(jù)幀在大于1幀到等于2幀的區(qū)間和大于2幀到等于4幀的區(qū)間的數(shù)據(jù)幀的數(shù)量于60相比,如果大于則認(rèn)為動(dòng)畫的顯示的流暢度不滿足測試指標(biāo)。
s405,若確定屏幕監(jiān)控范圍內(nèi)的動(dòng)畫顯示流暢度不滿足測試指標(biāo),則查看主線程的堆棧信息,確定屏幕監(jiān)控范圍內(nèi)動(dòng)畫顯示的卡頓原因。
具體地,因?yàn)橐话憬缑骘@示和渲染線程都是主線程,主線程堵塞就會(huì)導(dǎo)致界面卡死,從而,一旦監(jiān)控有較長的卡頓即確定屏幕監(jiān)控范圍內(nèi)的動(dòng)畫顯示流暢度不滿足測試指標(biāo),就可以在相應(yīng)的界面輸入調(diào)用代碼等以采集并查看主線程的堆棧信息,根據(jù)該堆棧信息確定屏幕監(jiān)控范圍內(nèi)動(dòng)畫顯示的卡頓究竟是何種操作業(yè)務(wù)造成的。
進(jìn)而,在確定卡頓原因后,采取相應(yīng)的措施進(jìn)行處理,比如釋放主線程等,以恢復(fù)能夠的正常運(yùn)行。或者,可根據(jù)卡頓原因進(jìn)行總結(jié),排除造成卡頓的隱患,比如如果卡頓原因基本是界面的渲染進(jìn)程造成的,經(jīng)過對(duì)該卡頓原因進(jìn)行總結(jié),獲知該卡頓原因主要是顯示內(nèi)存有限,從而,對(duì)顯示內(nèi)存進(jìn)行擴(kuò)展,清除不必要的內(nèi)存占用,避免下一次卡頓的發(fā)生。
為了使得本領(lǐng)域的技術(shù)人員能夠更加清楚的了解本發(fā)明的特點(diǎn),下面可將本發(fā)明實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控方法應(yīng)用到具體的應(yīng)用場景中進(jìn)行描述。
其中,在該應(yīng)用場景下,通過使用鉤子函數(shù)分別hook函數(shù),開始繪制函數(shù)beginpaint函數(shù)和結(jié)束繪制函數(shù)為endpaint函數(shù),獲知在屏幕監(jiān)控范圍內(nèi)的數(shù)據(jù)幀繪制時(shí),屏幕監(jiān)控范圍內(nèi)的開始繪制時(shí)間bt和結(jié)束繪制時(shí)間et,預(yù)設(shè)的第一門限值是200ms。
具體而言,如圖12所示,獲取當(dāng)前設(shè)置的終端設(shè)備的屏幕刷新頻率f(s501),進(jìn)而根據(jù)公式spf=1000/f計(jì)算出每幀數(shù)據(jù)的屏幕刷新時(shí)間(s502)。
由于系統(tǒng)在繪制圖片時(shí)會(huì)調(diào)用beginpaint函數(shù)和beginpaint函數(shù),因而,hookbeginpaint函數(shù)到自定義的mine_beginpaint函數(shù)中,并hookendpaint函數(shù)到自定義的mine_endpaint函數(shù)中(s503)。
進(jìn)而,獲取設(shè)定的屏幕監(jiān)控范圍(s504),在mine_beginpaint函數(shù)中讀取數(shù)據(jù)幀的開始繪制時(shí)間bt,在mine_endpaint函數(shù)中讀取數(shù)據(jù)幀的結(jié)束繪制時(shí)間et(s505)。在獲取bt和et后,判斷繪制的數(shù)據(jù)幀所在區(qū)域是否與屏幕監(jiān)控區(qū)域是否有交集(s506),如果沒有交集,則證明該bt和et并不對(duì)應(yīng)于監(jiān)控的動(dòng)畫,則返回步驟s505之前,再次獲取bt和et,如果有交集,則根據(jù)公式ft=et-bt計(jì)算數(shù)據(jù)幀的繪制時(shí)間(s507),并存儲(chǔ)當(dāng)前數(shù)據(jù)幀的結(jié)束時(shí)間lt(lt=et)(s508)。
判斷每幀數(shù)據(jù)與上一幀數(shù)據(jù)之間的間隔時(shí)間it=bt-lt是否大于200,若檢測獲知間隔時(shí)間大于200,則通過將間隔時(shí)間bt-lt置零(s509)。此時(shí),繪制每幀數(shù)據(jù)幀的界面更新時(shí)間t=it+ft(s510),根據(jù)公式f=t/sft獲取每幀數(shù)據(jù)占用的幀數(shù),以根據(jù)每幀數(shù)據(jù)占用的幀數(shù)的分布情況和測試指標(biāo)對(duì)應(yīng)的指標(biāo)值的比較,監(jiān)控動(dòng)畫的顯示的流暢度(s511)。
綜上所述,本發(fā)明實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控方法,確定屏幕監(jiān)控范圍內(nèi)的動(dòng)畫顯示流暢度不滿足測試指標(biāo)后,查看主線程的堆棧信息,確定屏幕監(jiān)控范圍內(nèi)動(dòng)畫顯示的卡頓原因。以便于在獲知卡頓原因后,進(jìn)行相應(yīng)的操作處理,以排除造成卡頓的隱患,快速恢復(fù)系統(tǒng)的正常運(yùn)行,提升了用戶的使用體驗(yàn)。
與上述幾種實(shí)施例提供的動(dòng)畫顯示流暢度的監(jiān)控方法相對(duì)應(yīng),本發(fā)明的一種實(shí)施例還提供一種動(dòng)畫顯示流暢度的監(jiān)控裝置,由于本發(fā)明實(shí)施例提供的動(dòng)畫顯示流暢度的監(jiān)控裝置與上述幾種實(shí)施例提供的動(dòng)畫顯示流暢度的監(jiān)控方法相對(duì)應(yīng),因此在前述動(dòng)畫顯示流暢度的監(jiān)控方法的實(shí)施方式也適用于本實(shí)施例提供的動(dòng)畫顯示流暢度的監(jiān)控裝置,在本實(shí)施例中不再詳細(xì)描述。
圖13是根據(jù)本發(fā)明第一個(gè)實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控裝置的結(jié)構(gòu)示意圖,如圖13所示,該動(dòng)畫顯示流暢度的監(jiān)控裝置包括:第一獲取模塊110、第二獲取模塊120、第三獲取模塊130和第一確定模塊140。
其中,第一獲取模塊110,用于根據(jù)終端設(shè)備的屏幕刷新頻率獲取數(shù)據(jù)幀的屏幕刷新時(shí)間。
需要強(qiáng)調(diào)的是,第一獲取模塊110獲知終端設(shè)備的屏幕刷新頻率的方式受到終端設(shè)備支持的功能的限制,可以通過手動(dòng)查獲知,可以通過語音搜索獲知等。
其中,需要說明的是,在不同的應(yīng)用場景下,第一獲取模塊110根據(jù)終端設(shè)備的屏幕刷新頻率獲取數(shù)據(jù)幀的屏幕刷新時(shí)間的方式不同,示例說明如下:
第一種示例,在獲取終端設(shè)備的屏幕刷新頻率后,由于屏幕刷新頻率為每秒鐘屏幕刷新的次數(shù),因而,第一獲取模塊110可根據(jù)公式屏幕刷新時(shí)間=1/屏幕刷新頻率,計(jì)算獲得屏幕刷新時(shí)間。
其中,本實(shí)施例的計(jì)算過程可以由用戶自行計(jì)算完成后在相關(guān)界面輸入,也可由系統(tǒng)自行計(jì)算。
第二種示例,由于屏幕刷新頻率的可選擇個(gè)數(shù)有限,因而可預(yù)先存儲(chǔ)屏幕刷新與屏幕刷新時(shí)間的對(duì)應(yīng)關(guān)系,從而,在獲取屏幕刷新頻率后,第一獲取模塊110查詢上述對(duì)應(yīng)關(guān)系,獲取對(duì)應(yīng)的屏幕刷新時(shí)間。
在本示例中,可由用戶手動(dòng)在相關(guān)界面輸入屏幕刷新頻率以獲取反饋的屏幕刷新時(shí)間,也可由系統(tǒng)自行獲知。
第二獲取模塊120,用于獲取屏幕監(jiān)控范圍內(nèi)每幀數(shù)據(jù)的界面更新時(shí)間。
由于在實(shí)際應(yīng)用中,終端設(shè)備的屏幕上顯示的包含動(dòng)畫的應(yīng)用數(shù)量可能有多個(gè),甚至一個(gè)應(yīng)用包含的動(dòng)畫就有多個(gè),而用戶可能只希望監(jiān)控其中部分應(yīng)用的動(dòng)畫,或者一個(gè)應(yīng)用中的部分動(dòng)畫,因而,在本發(fā)明的實(shí)施例中,針對(duì)屏幕監(jiān)控范圍進(jìn)行動(dòng)畫顯示的流暢度的監(jiān)控。
其中,屏幕監(jiān)控范圍的獲取方式較為靈活,可以是自定義設(shè)置監(jiān)控的應(yīng)用程序范圍,或者,也可以是獲取的當(dāng)前監(jiān)控的應(yīng)用程序顯示的窗口范圍。
第三獲取模塊130,用于根據(jù)預(yù)設(shè)的流暢度測試算法對(duì)屏幕刷新時(shí)間和每幀數(shù)據(jù)的界面更新時(shí)間進(jìn)行計(jì)算處理,獲取每幀數(shù)據(jù)的測試結(jié)果。
具體而言,在獲取界面更新時(shí)間后,第三獲取模塊130根據(jù)預(yù)設(shè)的流暢度測試算法計(jì)算界面更新時(shí)間和屏幕刷新時(shí)間的相差情況,該相差情況即為每幀數(shù)據(jù)的測試結(jié)果,其中,測試結(jié)果的表現(xiàn)形式與預(yù)設(shè)流暢度算法相關(guān)。
需要說明的是,根據(jù)具體應(yīng)用場景的不同,上述預(yù)設(shè)的流暢度測試算法可以是能體現(xiàn)出每幀數(shù)據(jù)的更新時(shí)間和屏幕刷新時(shí)間的相差情況的不同的算法,具有應(yīng)用的靈活性。
第一確定模塊140,用于根據(jù)與流暢度測試算法對(duì)應(yīng)的性能指標(biāo)分析每幀數(shù)據(jù)的測試結(jié)果,確定屏幕監(jiān)控范圍內(nèi)的動(dòng)畫顯示流暢度是否滿足測試指標(biāo)。
可以理解,第三獲取模塊130獲得的測試結(jié)果,都可以間接或者直接的反映出每一幀數(shù)據(jù)幀顯示的流暢度,而每一幀數(shù)據(jù)幀的流暢度與整個(gè)動(dòng)畫的顯示流暢度息息相關(guān)。
具體而言,在本發(fā)明的實(shí)施例中,預(yù)設(shè)與流暢度測試算法對(duì)應(yīng)的性能指標(biāo)分析,第一確定模塊140根據(jù)該與流暢度測試算法對(duì)應(yīng)的性能指標(biāo)分析每幀數(shù)據(jù)的測試結(jié)果,以結(jié)合每幀數(shù)據(jù)的測試結(jié)果,綜合確定屏幕監(jiān)控范圍內(nèi)的動(dòng)畫顯示流暢度是否滿足測試指標(biāo)。
其中,上述性能分析指標(biāo)用于將每幀數(shù)據(jù)的測試結(jié)果量化為與測試指標(biāo)對(duì)應(yīng)的量化值。
其中,上述測試指標(biāo)用以指示監(jiān)控動(dòng)畫是否流暢,該測試指標(biāo)與測試算法對(duì)應(yīng)的性能指標(biāo)相關(guān),該測試指標(biāo)可由用戶根據(jù)需要自行設(shè)定,也可由用戶自行標(biāo)定,從而,在具體實(shí)施過程中,可以通過設(shè)置測試指標(biāo),靈活控制監(jiān)控的粒度,避免了現(xiàn)有技術(shù)中監(jiān)控粒度有限監(jiān)控不夠精確的缺點(diǎn)。
綜上所述,本發(fā)明實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控裝置,根據(jù)終端設(shè)備的屏幕刷新頻率獲取數(shù)據(jù)幀的屏幕刷新時(shí)間,獲取屏幕監(jiān)控范圍內(nèi)每幀數(shù)據(jù)的界面更新時(shí)間,根據(jù)預(yù)設(shè)的流暢度測試算法對(duì)屏幕刷新時(shí)間和每幀數(shù)據(jù)的界面更新時(shí)間進(jìn)行計(jì)算處理,獲取每幀數(shù)據(jù)的測試結(jié)果,根據(jù)與流暢度測試算法對(duì)應(yīng)的性能指標(biāo)分析每幀數(shù)據(jù)的測試結(jié)果,確定屏幕監(jiān)控范圍內(nèi)的動(dòng)畫顯示流暢度是否滿足測試指標(biāo)。由此,提高了動(dòng)畫顯示流暢度的監(jiān)控精度和易用性,拓展了動(dòng)畫顯示流暢度監(jiān)控的多樣性。
基于以上描述,還應(yīng)當(dāng)理解的是,在不同的應(yīng)用場景下,第二獲取模塊120獲取屏幕監(jiān)控范圍內(nèi)每幀數(shù)據(jù)的界面更新時(shí)間的方式不同,因此,為了更加清楚的描述上第二獲取模塊120如何獲取屏幕監(jiān)控范圍內(nèi)每幀數(shù)據(jù)的界面更新時(shí)間,下面分別結(jié)合不同的實(shí)施例進(jìn)行說明。
圖14是根據(jù)本發(fā)明第二個(gè)實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控裝置的結(jié)構(gòu)示意圖,如圖14所示,在如圖13所示的基礎(chǔ)上,該第二獲取模塊120包括第一獲取單元121和第二獲取單元122。
其中,第一獲取單元121,用于獲取屏幕監(jiān)控范圍內(nèi)每幀數(shù)據(jù)的繪制時(shí)間,以及每幀數(shù)據(jù)與上一幀數(shù)據(jù)之間的間隔時(shí)間。
第二獲取單元122,用于對(duì)每幀數(shù)據(jù)的繪制時(shí)間以及與上一幀數(shù)據(jù)之間的間隔時(shí)間進(jìn)行求和處理,獲取每幀數(shù)據(jù)的界面更新時(shí)間。
具體地,每幀的界面更新時(shí)間t包括屏幕監(jiān)控范圍內(nèi)每幀數(shù)據(jù)的繪制時(shí)間ft,以及每幀數(shù)據(jù)與上一幀數(shù)據(jù)之間的間隔時(shí)間it,因而,第二獲取模塊120可對(duì)每幀數(shù)據(jù)的繪制時(shí)間以及與上一幀數(shù)據(jù)之間的間隔時(shí)間進(jìn)行求和處理,獲取每幀數(shù)據(jù)的界面更新時(shí)間。
需要說明的是,在不同的應(yīng)用場景下,第一獲取單元121獲取屏幕監(jiān)控范圍內(nèi)每幀數(shù)據(jù)的繪制時(shí)間,以及每幀數(shù)據(jù)與上一幀數(shù)據(jù)之間的間隔時(shí)間的方式不同,下面舉例說明。
作為一種可能的實(shí)現(xiàn)方式,由于每一幀的數(shù)據(jù)幀在繪制的開始和結(jié)束都會(huì)觸發(fā)相應(yīng)的繪制事件函數(shù),因而,第一獲取單元121可以通過監(jiān)聽繪制事件函數(shù)的調(diào)用情況獲知屏幕監(jiān)控范圍內(nèi)每幀數(shù)據(jù)的繪制時(shí)間,以及每幀數(shù)據(jù)與上一幀數(shù)據(jù)之間的間隔時(shí)間。
具體而言,圖15是根據(jù)本發(fā)明第三個(gè)實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控裝置的結(jié)構(gòu)示意圖,如圖15所示,在如圖14所示的基礎(chǔ)上,第一獲取單元121包括讀取子單元1211和計(jì)算子單元1212。
讀取子單元1211,用于在系統(tǒng)在屏幕監(jiān)控范圍內(nèi)開始繪制數(shù)據(jù)幀時(shí)調(diào)用開始繪制函數(shù)時(shí),通過與開始繪制函數(shù)對(duì)應(yīng)的鉤子函數(shù)讀取所述數(shù)據(jù)幀的開始繪制時(shí)間。
讀取子單元1211,還用于在系統(tǒng)在屏幕監(jiān)控范圍內(nèi)結(jié)束繪制數(shù)據(jù)幀時(shí)調(diào)用結(jié)束繪制函數(shù)時(shí),通過與結(jié)束繪制函數(shù)對(duì)應(yīng)的鉤子函數(shù)讀取數(shù)據(jù)幀的結(jié)束繪制時(shí)間;
計(jì)算子單元1212,用于根據(jù)數(shù)據(jù)幀的開始繪制時(shí)間和結(jié)束繪制時(shí)間計(jì)算數(shù)據(jù)幀的繪制時(shí)間。
計(jì)算子單元1212,還用于根據(jù)數(shù)據(jù)幀的開始繪制時(shí)間和預(yù)存的上一幀數(shù)據(jù)的結(jié)束繪制時(shí)間計(jì)算數(shù)據(jù)幀與上一幀數(shù)據(jù)之間的間隔時(shí)間。
另外,在本發(fā)明的一個(gè)實(shí)施例中,為了避免卡頓是用戶無操作而造成的導(dǎo)致的誤判,還需要判斷每幀數(shù)據(jù)與上一幀數(shù)據(jù)之間的間隔時(shí)間是否大于預(yù)設(shè)的第一門限值,該預(yù)設(shè)的第一門限值相對(duì)于正常的數(shù)據(jù)幀卡頓消耗時(shí)間較大,若檢測獲知間隔時(shí)間大于第一門限值,則將間隔時(shí)間置零,從而以當(dāng)前顯示的數(shù)據(jù)幀為起始幀進(jìn)行流暢度的監(jiān)控。
圖16是根據(jù)本發(fā)明第四個(gè)實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控裝置的結(jié)構(gòu)示意圖,如圖16所示,在如圖13所示的基礎(chǔ)上,該第二獲取模塊120包括:讀取單元123和第三獲取單元124。
其中,讀取單元123,用于在系統(tǒng)接收數(shù)據(jù)幀的顯示驅(qū)動(dòng)信號(hào)時(shí)調(diào)用圖像顯示函數(shù)時(shí),通過與圖像顯示函數(shù)對(duì)應(yīng)的鉤子函數(shù)讀取數(shù)據(jù)幀的界面顯示時(shí)間。
第三獲取單元124,用于根據(jù)數(shù)據(jù)幀的界面顯示時(shí)間與預(yù)存的上一幀數(shù)據(jù)的界面顯示時(shí)間,獲取數(shù)據(jù)幀的界面更新時(shí)間。
具體地,由于終端設(shè)備的所有的數(shù)據(jù)幀的顯示輸出都需要調(diào)用圖像顯示函數(shù),因而,在本發(fā)明的實(shí)施例中,當(dāng)系統(tǒng)接收數(shù)據(jù)幀的顯示驅(qū)動(dòng)信號(hào)時(shí)調(diào)用圖像顯示函數(shù),讀取單元123通過與圖像顯示函數(shù)對(duì)應(yīng)的鉤子函數(shù)讀取數(shù)據(jù)幀的界面顯示時(shí)間,第三獲取單元124根據(jù)數(shù)據(jù)幀的界面顯示時(shí)間與預(yù)存的上一幀數(shù)據(jù)的界面顯示時(shí)間,獲取數(shù)據(jù)幀的界面更新時(shí)間。
同樣的,在實(shí)際應(yīng)用中,對(duì)于有一些動(dòng)畫的“卡頓”,可能是提供功能服務(wù)的過程中由于用戶的無操作而導(dǎo)致的“偽卡頓”。因此,為了保證流暢度判定的準(zhǔn)確性,在本發(fā)明的實(shí)施例中,如果界面更新時(shí)間較大,則將根據(jù)當(dāng)前數(shù)據(jù)幀與預(yù)存的上一幀數(shù)據(jù)幀的界面顯示時(shí)間獲取的數(shù)據(jù)幀的界面更新時(shí)間進(jìn)行修改,通過將其修改為一個(gè)較小的時(shí)間,以將其確定為一個(gè)流暢度較優(yōu)的起始幀。
綜上所述,本發(fā)明實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控則在,根據(jù)具體應(yīng)用場景的需要,靈活的選取獲取屏幕監(jiān)控范圍內(nèi)每幀數(shù)據(jù)的界面更新時(shí)間的方式,提高了本發(fā)明實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控方法的實(shí)用性和可靠性。
基于以上實(shí)施例,為了提高用戶的使用體驗(yàn),在確定屏幕監(jiān)控范圍內(nèi)的動(dòng)畫顯示流暢度是否滿足測試指標(biāo)之后,還可對(duì)發(fā)生卡頓的原因進(jìn)行分析確定,以便于及時(shí)對(duì)發(fā)生卡頓的位置進(jìn)行處理,恢復(fù)系統(tǒng)的正常運(yùn)行。
為了描述的更加清楚,下面結(jié)合第三獲取模塊130根據(jù)預(yù)設(shè)的流暢度測試算法對(duì)屏幕刷新時(shí)間和每幀數(shù)據(jù)的界面更新時(shí)間進(jìn)行計(jì)算處理,獲取每幀數(shù)據(jù)的測試結(jié)果的方式,為步驟s104中描述的第二種示例中的方式為例進(jìn)行說明。
圖17是根據(jù)本發(fā)明第五個(gè)實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控裝置的結(jié)構(gòu)示意圖,如圖17所示,在如圖13所示的基礎(chǔ)上,該第三獲取模塊130包括:第四獲取單元131和第五獲取單元132。
其中,第四獲取單元131,用于計(jì)算每幀數(shù)據(jù)的界面更新時(shí)間與屏幕刷新時(shí)間的比值,獲取每幀數(shù)據(jù)界面更新所占用的幀數(shù)。
第五獲取單元132,用于將每幀數(shù)據(jù)界面更新所占用的幀數(shù)與預(yù)設(shè)的幀數(shù)分布區(qū)間進(jìn)行比對(duì),獲取各幀數(shù)分布區(qū)間對(duì)應(yīng)的數(shù)據(jù)幀數(shù)量。
進(jìn)而,圖18是根據(jù)本發(fā)明第六個(gè)實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控裝置的結(jié)構(gòu)示意圖,如圖18所示,在如圖17所示的基礎(chǔ)上,第一確定模塊包括140包括比較單元141和確定單元142。
其中,比較單元141,用于將各幀數(shù)分布區(qū)間對(duì)應(yīng)的數(shù)據(jù)幀數(shù)量與對(duì)應(yīng)設(shè)置的指標(biāo)值進(jìn)行比較。
確定單元142,用于在檢測到數(shù)據(jù)幀數(shù)量不滿足對(duì)應(yīng)設(shè)置的指標(biāo)值的幀數(shù)分布區(qū)間時(shí),確定屏幕監(jiān)控范圍內(nèi)的動(dòng)畫顯示流暢度不滿足測試指標(biāo)。
確定單元142,還用于在檢測到數(shù)據(jù)幀數(shù)量都滿足對(duì)應(yīng)設(shè)置的指標(biāo)值的幀數(shù)分布區(qū)間時(shí),確定屏幕監(jiān)控范圍內(nèi)的動(dòng)畫顯示流暢度滿足測試指標(biāo)。
圖19是根據(jù)本發(fā)明第七個(gè)實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控裝置的結(jié)構(gòu)示意圖,如圖19所示,在如圖18所示的基礎(chǔ)上,還包括第二確定模塊150。
其中,第二確定模塊150用于在第一確定模塊140確定屏幕監(jiān)控范圍內(nèi)的動(dòng)畫顯示流暢度不滿足測試指標(biāo)時(shí),查看主線程的堆棧信息,確定屏幕監(jiān)控范圍內(nèi)動(dòng)畫顯示的卡頓原因。
具體地,因?yàn)橐话憬缑骘@示和渲染線程都是主線程,主線程堵塞就會(huì)導(dǎo)致界面卡死,從而,一旦監(jiān)控有較長的卡頓即確定屏幕監(jiān)控范圍內(nèi)的動(dòng)畫顯示流暢度不滿足測試指標(biāo),第二確定模塊150就可以在相應(yīng)的界面輸入調(diào)用代碼等以采集并查看主線程的堆棧信息,根據(jù)該堆棧信息確定屏幕監(jiān)控范圍內(nèi)動(dòng)畫顯示的卡頓究竟是何種操作業(yè)務(wù)造成的。
進(jìn)而,在確定卡頓原因后,采取相應(yīng)的措施進(jìn)行處理,比如釋放主線程等,以恢復(fù)能夠的正常運(yùn)行?;蛘撸筛鶕?jù)卡頓原因進(jìn)行總結(jié),排除造成卡頓的隱患,比如如果卡頓原因基本是界面的渲染進(jìn)程造成的,經(jīng)過對(duì)該卡頓原因進(jìn)行總結(jié),獲知該卡頓原因主要是顯示內(nèi)存有限,從而,對(duì)顯示內(nèi)存進(jìn)行擴(kuò)展,清除不必要的內(nèi)存占用,避免下一次卡頓的發(fā)生。
綜上所述,本發(fā)明實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控裝置,確定屏幕監(jiān)控范圍內(nèi)的動(dòng)畫顯示流暢度不滿足測試指標(biāo)后,查看主線程的堆棧信息,確定屏幕監(jiān)控范圍內(nèi)動(dòng)畫顯示的卡頓原因。以便于在獲知卡頓原因后,進(jìn)行相應(yīng)的操作處理,以排除造成卡頓的隱患,快速恢復(fù)系統(tǒng)的正常運(yùn)行,提升了用戶的使用體驗(yàn)。
為了實(shí)現(xiàn)上述實(shí)施例,本發(fā)明還提出了一種終端設(shè)備。圖20是根據(jù)本發(fā)明一個(gè)實(shí)施例的動(dòng)畫顯示流暢度的監(jiān)控方法的交互流程示意圖,該實(shí)施例以終端設(shè)備側(cè)從存儲(chǔ)器獲取動(dòng)畫顯示流暢度的監(jiān)控?cái)?shù)據(jù)為例進(jìn)行描述。在對(duì)終端設(shè)備側(cè)的動(dòng)畫顯示流暢度的監(jiān)控的過程為:根據(jù)用戶在終端設(shè)備中手動(dòng)查詢獲知的存儲(chǔ)器中存儲(chǔ)的終端設(shè)備的屏幕刷新頻率,或者,由處理器向網(wǎng)絡(luò)側(cè)服務(wù)器獲取的屏幕刷新頻率,進(jìn)而,終端設(shè)備的處理器根據(jù)終端設(shè)備的屏幕刷新頻率獲取數(shù)據(jù)幀的屏幕刷新時(shí)間,并且,處理器根據(jù)存儲(chǔ)在存儲(chǔ)器中的繪制數(shù)據(jù)幀的時(shí)間數(shù)據(jù),獲取屏幕監(jiān)控范圍內(nèi)每幀數(shù)據(jù)的界面更新時(shí)間。
進(jìn)而,處理器根據(jù)存儲(chǔ)器中預(yù)設(shè)的流暢度測試算法對(duì)屏幕刷新時(shí)間和每幀數(shù)據(jù)的界面更新時(shí)間進(jìn)行計(jì)算處理,獲取每幀數(shù)據(jù)的測試結(jié)果,并獲取存儲(chǔ)在存儲(chǔ)器中的測試指標(biāo),以便于根據(jù)與流暢度測試算法對(duì)應(yīng)的性能指標(biāo)分析每幀數(shù)據(jù)的測試結(jié)果,確定屏幕監(jiān)控范圍內(nèi)的動(dòng)畫顯示流暢度是否滿足測試指標(biāo)。
綜上所述,本發(fā)明實(shí)施例的終端設(shè)備,根據(jù)終端設(shè)備的屏幕刷新頻率獲取數(shù)據(jù)幀的屏幕刷新時(shí)間,獲取屏幕監(jiān)控范圍內(nèi)每幀數(shù)據(jù)的界面更新時(shí)間,根據(jù)預(yù)設(shè)的流暢度測試算法對(duì)屏幕刷新時(shí)間和每幀數(shù)據(jù)的界面更新時(shí)間進(jìn)行計(jì)算處理,獲取每幀數(shù)據(jù)的測試結(jié)果,根據(jù)與流暢度測試算法對(duì)應(yīng)的性能指標(biāo)分析每幀數(shù)據(jù)的測試結(jié)果,確定屏幕監(jiān)控范圍內(nèi)的動(dòng)畫顯示流暢度是否滿足測試指標(biāo)。由此,提高了動(dòng)畫顯示流暢度的監(jiān)控精度和易用性,拓展了動(dòng)畫顯示流暢度監(jiān)控的多樣性。
為了實(shí)現(xiàn)上述實(shí)施例,本發(fā)明還提出了一種存儲(chǔ)介質(zhì),用于存儲(chǔ)應(yīng)用程序,應(yīng)用程序用于執(zhí)行本發(fā)明任一項(xiàng)實(shí)施例所述的畫顯示流暢度的監(jiān)控方法。
在本發(fā)明的描述中,需要理解的是,術(shù)語“第一”、“第二”僅用于描述目的,而不能理解為指示或暗示相對(duì)重要性或者隱含指明所指示的技術(shù)特征的數(shù)量。由此,限定有“第一”、“第二”的特征可以明示或者隱含地包括一個(gè)或者更多個(gè)該特征。在本發(fā)明的描述中,“多個(gè)”的含義是兩個(gè)或兩個(gè)以上,除非另有明確具體的限定。
在本說明書的描述中,參考術(shù)語“一個(gè)實(shí)施例”、“一些實(shí)施例”、“示例”、“具體示例”、或“一些示例”等的描述意指結(jié)合該實(shí)施例或示例描述的具體特征或者特點(diǎn)包含于本發(fā)明的至少一個(gè)實(shí)施例或示例中。在本說明書中,對(duì)上述術(shù)語的示意性表述不必須針對(duì)的是相同的實(shí)施例或示例。而且,描述的具體特征或者特點(diǎn)可以在任一個(gè)或多個(gè)實(shí)施例或示例中以合適的方式結(jié)合。此外,在不相互矛盾的情況下,本領(lǐng)域的技術(shù)人員可以將本說明書中描述的不同實(shí)施例或示例以及不同實(shí)施例或示例的特征進(jìn)行結(jié)合和組合。
流程圖中或在此以其他方式描述的任何過程或方法描述可以被理解為,表示包括一個(gè)或更多個(gè)用于實(shí)現(xiàn)特定邏輯功能或過程的步驟的可執(zhí)行指令的代碼的模塊、片段或部分,并且本發(fā)明的優(yōu)選實(shí)施方式的范圍包括另外的實(shí)現(xiàn),其中可以不按所示出或討論的順序,包括根據(jù)所涉及的功能按基本同時(shí)的方式或按相反的順序,來執(zhí)行功能,這應(yīng)被本發(fā)明的實(shí)施例所屬技術(shù)領(lǐng)域的技術(shù)人員所理解。
在流程圖中表示或在此以其他方式描述的邏輯和/或步驟,例如,可以被認(rèn)為是用于實(shí)現(xiàn)邏輯功能的可執(zhí)行指令的定序列表,可以具體實(shí)現(xiàn)在任何計(jì)算機(jī)可讀介質(zhì)中,以供指令執(zhí)行系統(tǒng)、裝置或設(shè)備(如基于計(jì)算機(jī)的系統(tǒng)、包括處理器的系統(tǒng)或其他可以從指令執(zhí)行系統(tǒng)、裝置或設(shè)備取指令并執(zhí)行指令的系統(tǒng))使用,或結(jié)合這些指令執(zhí)行系統(tǒng)、裝置或設(shè)備而使用。就本說明書而言,"計(jì)算機(jī)可讀介質(zhì)"可以是任何可以包含、存儲(chǔ)、通信、傳播或傳輸程序以供指令執(zhí)行系統(tǒng)、裝置或設(shè)備或結(jié)合這些指令執(zhí)行系統(tǒng)、裝置或設(shè)備而使用的裝置。計(jì)算機(jī)可讀介質(zhì)的更具體的示例(非窮盡性列表)包括以下:具有一個(gè)或多個(gè)布線的電連接部(電子裝置),便攜式計(jì)算機(jī)盤盒(磁裝置),隨機(jī)存取存儲(chǔ)器(ram),只讀存儲(chǔ)器(rom),可擦除可編輯只讀存儲(chǔ)器(eprom或閃速存儲(chǔ)器),光纖裝置,以及便攜式光盤只讀存儲(chǔ)器(cdrom)。另外,計(jì)算機(jī)可讀介質(zhì)甚至可以是可在其上打印所述程序的紙或其他合適的介質(zhì),因?yàn)榭梢岳缤ㄟ^對(duì)紙或其他介質(zhì)進(jìn)行光學(xué)掃描,接著進(jìn)行編輯、解譯或必要時(shí)以其他合適方式進(jìn)行處理來以電子方式獲得所述程序,然后將其存儲(chǔ)在計(jì)算機(jī)存儲(chǔ)器中。
應(yīng)當(dāng)理解,本發(fā)明的各部分可以用硬件、軟件、固件或它們的組合來實(shí)現(xiàn)。在上述實(shí)施方式中,多個(gè)步驟或方法可以用存儲(chǔ)在存儲(chǔ)器中且由合適的指令執(zhí)行系統(tǒng)執(zhí)行的軟件或固件來實(shí)現(xiàn)。例如,如果用硬件來實(shí)現(xiàn),和在另一實(shí)施方式中一樣,可用本領(lǐng)域公知的下列技術(shù)中的任一項(xiàng)或他們的組合來實(shí)現(xiàn):具有用于對(duì)數(shù)據(jù)信號(hào)實(shí)現(xiàn)邏輯功能的邏輯門電路的離散邏輯電路,具有合適的組合邏輯門電路的專用集成電路,可編程門陣列(pga),現(xiàn)場可編程門陣列(fpga)等。
本技術(shù)領(lǐng)域的普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法攜帶的全部或部分步驟是可以通過程序來指令相關(guān)的硬件完成,所述的程序可以存儲(chǔ)于一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),包括方法實(shí)施例的步驟之一或其組合。
此外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理模塊中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)模塊中。上述集成的模塊既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能模塊的形式實(shí)現(xiàn)。所述集成的模塊如果以軟件功能模塊的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),也可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中。
上述提到的存儲(chǔ)介質(zhì)可以是只讀存儲(chǔ)器,磁盤或光盤等。盡管上面已經(jīng)示出和描述了本發(fā)明的實(shí)施例,可以理解的是,上述實(shí)施例是示例性的,不能理解為對(duì)本發(fā)明的限制,本領(lǐng)域的普通技術(shù)人員在本發(fā)明的范圍內(nèi)可以對(duì)上述實(shí)施例進(jìn)行變化、修改、替換和變型。