欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種函數(shù)執(zhí)行時間的測試方法及裝置與流程

文檔序號:11590208閱讀:214來源:國知局

本發(fā)明屬于通信技術(shù)領(lǐng)域,尤其涉及一種函數(shù)執(zhí)行時間的測試方法及裝置。



背景技術(shù):

目前在對電子設(shè)備(如手機(jī)、平板電腦、電視等)的性能進(jìn)行測試時,需要定位當(dāng)前應(yīng)用程序(app,application)調(diào)用了哪些函數(shù)并且這些函數(shù)調(diào)用或占用中央處理器(cpu,centralprocessingunit)的執(zhí)行時間,幫助開發(fā)人員和測試人員能夠更快定位和查找到相應(yīng)的函數(shù)位置。

如,通過traceview(一種測試應(yīng)用程序性能的工具)進(jìn)行測試時,從抓取執(zhí)行的函數(shù)開始計算耗時,到抓取該進(jìn)程所有被執(zhí)行的函數(shù),得到的函數(shù)耗時數(shù)據(jù)在短時間內(nèi)3至5秒就可以達(dá)到8m(兆字節(jié)),從而造成系統(tǒng)內(nèi)存空間占用較大,系統(tǒng)資源浪費(fèi)。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明的目的在于提供一種函數(shù)執(zhí)行時間的測試方法及裝置,旨在減少函數(shù)耗時數(shù)據(jù)的內(nèi)存占用空間,降低系統(tǒng)資源浪費(fèi)。

為解決上述技術(shù)問題,本發(fā)明實(shí)施例提供以下技術(shù)方案:

第一方面,本發(fā)明提供一種函數(shù)執(zhí)行時間的測試方法,其中包括:

接收測試指令,并根據(jù)所述測試指令獲取函數(shù)跟蹤進(jìn)程,所述函數(shù)跟蹤進(jìn)程用于獲取待測試函數(shù)的時間測試參數(shù);

通過預(yù)設(shè)鉤子函數(shù)對所述函數(shù)跟蹤進(jìn)程進(jìn)行掛起,并觸發(fā)開啟跟蹤功能;

在開啟跟蹤功能后,確定待測試函數(shù)是否滿足預(yù)設(shè)條件;

當(dāng)確定所述待測試函數(shù)滿足預(yù)設(shè)條件時,返回所述函數(shù)跟蹤進(jìn)程,并測試出所述待測試函數(shù)的執(zhí)行時間。

第二方面,本發(fā)明一種函數(shù)執(zhí)行時間的測試裝置,其中包括:

接收單元,用于接收測試指令;

獲取單元,用于根據(jù)所述測試指令獲取函數(shù)跟蹤進(jìn)程,所述函數(shù)跟蹤進(jìn)程用于獲取待測試函數(shù)的時間測試參數(shù);

掛起單元,用于通過預(yù)設(shè)鉤子函數(shù)對所述函數(shù)跟蹤進(jìn)程進(jìn)行掛起,并觸發(fā)開啟跟蹤功能;

確定單元,用于在開啟跟蹤功能后,確定待測試函數(shù)是否滿足預(yù)設(shè)條件;

測試單元,用于當(dāng)確定所述待測試函數(shù)滿足預(yù)設(shè)條件時,返回所述函數(shù)跟蹤進(jìn)程,并測試出所述待測試函數(shù)的執(zhí)行時間。

相對于現(xiàn)有技術(shù),本實(shí)施例,在接收到測試指令后,可以先獲取函數(shù)跟蹤進(jìn)程,并通過預(yù)設(shè)鉤子函數(shù)對函數(shù)跟蹤進(jìn)程進(jìn)行掛起,其中函數(shù)跟蹤進(jìn)程用于獲取待測試函數(shù)的時間測試參數(shù),在掛起函數(shù)跟蹤進(jìn)程后開啟跟蹤功能,當(dāng)確定待測試函數(shù)滿足預(yù)設(shè)條件時,返回函數(shù)跟蹤進(jìn)程,并測試出待測試函數(shù)的執(zhí)行時間;由于利用鉤子對函數(shù)跟蹤進(jìn)程進(jìn)行掛起,改變了待測試函數(shù)的執(zhí)行路徑,且在開啟跟蹤功能后,先對待測試函數(shù)進(jìn)行判斷,滿足預(yù)設(shè)條件的函數(shù)才進(jìn)行測試和記錄函數(shù)耗時的邏輯,因此可以過濾掉一些無用的函數(shù)耗時數(shù)據(jù),大大的減少函數(shù)耗時數(shù)據(jù)的內(nèi)存占用空間,降低系統(tǒng)資源浪費(fèi)。

附圖說明

下面結(jié)合附圖,通過對本發(fā)明的具體實(shí)施方式詳細(xì)描述,將使本發(fā)明的技術(shù)方案及其它有益效果顯而易見。

圖1是本發(fā)明實(shí)施例提供的函數(shù)執(zhí)行時間的測試方法的流程示意圖;

圖2為本發(fā)明實(shí)施例提供的函數(shù)執(zhí)行時間的測試方法的另一流程示意圖;

圖3a為本發(fā)明實(shí)施例提供的函數(shù)執(zhí)行時間的測試裝置的結(jié)構(gòu)示意圖;

圖3b為本發(fā)明實(shí)施例提供的函數(shù)執(zhí)行時間的測試裝置的另一結(jié)構(gòu)示意圖;

圖4為本發(fā)明實(shí)施例提供的終端的結(jié)構(gòu)示意圖。

具體實(shí)施方式

請參照圖式,其中相同的組件符號代表相同的組件,本發(fā)明的原理是以實(shí)施在一適當(dāng)?shù)倪\(yùn)算環(huán)境中來舉例說明。以下的說明是基于所例示的本發(fā)明具體實(shí)施例,其不應(yīng)被視為限制本發(fā)明未在此詳述的其它具體實(shí)施例。

在以下的說明中,本發(fā)明的具體實(shí)施例將參考由一部或多部計算機(jī)所執(zhí)行的步驟及符號來說明,除非另有述明。因此,這些步驟及操作將有數(shù)次提到由計算機(jī)執(zhí)行,本文所指的計算機(jī)執(zhí)行包括了由代表了以一結(jié)構(gòu)化型式中的數(shù)據(jù)的電子信號的計算機(jī)處理單元的操作。此操作轉(zhuǎn)換該數(shù)據(jù)或?qū)⑵渚S持在該計算機(jī)的內(nèi)存系統(tǒng)中的位置處,其可重新配置或另外以本領(lǐng)域測試人員所熟知的方式來改變該計算機(jī)的運(yùn)作。該數(shù)據(jù)所維持的數(shù)據(jù)結(jié)構(gòu)為該內(nèi)存的實(shí)體位置,其具有由該數(shù)據(jù)格式所定義的特定特性。但是,本發(fā)明原理以上述文字來說明,其并不代表為一種限制,本領(lǐng)域測試人員將可了解到以下所述的多種步驟及操作亦可實(shí)施在硬件當(dāng)中。

本文所使用的術(shù)語「模塊」可看做為在該運(yùn)算系統(tǒng)上執(zhí)行的軟件對象。本文所述的不同組件、模塊、引擎及服務(wù)可看做為在該運(yùn)算系統(tǒng)上的實(shí)施對象。而本文所述的裝置及方法優(yōu)選的以軟件的方式進(jìn)行實(shí)施,當(dāng)然也可在硬件上進(jìn)行實(shí)施,均在本發(fā)明保護(hù)范圍之內(nèi)。

本發(fā)明實(shí)施例提供一種函數(shù)執(zhí)行時間的測試方法及裝置。

其中,該函數(shù)執(zhí)行時間的測試裝置具體可以集成在如手機(jī)、平板電腦、掌上電腦(pda,personaldigitalassistant)等終端中,也可以集成在服務(wù)器,如測試服務(wù)器中。

例如,在本實(shí)施例中,將從函數(shù)執(zhí)行時間的測試裝置的角度進(jìn)行描述,該函數(shù)執(zhí)行時間的測試裝置具體可以集成在終端等設(shè)備中。

一種函數(shù)執(zhí)行時間的測試方法,包括:接收測試指令,并根據(jù)該測試指令獲取函數(shù)跟蹤進(jìn)程,該函數(shù)跟蹤進(jìn)程用于獲取待測試函數(shù)的時間測試參數(shù);通過預(yù)設(shè)鉤子函數(shù)對函數(shù)跟蹤進(jìn)程進(jìn)行掛起,并觸發(fā)開啟跟蹤功能;在開啟跟蹤功能后,確定待測試函數(shù)是否滿足預(yù)設(shè)條件;當(dāng)確定待測試函數(shù)滿足預(yù)設(shè)條件時,返回函數(shù)跟蹤進(jìn)程,并測試出待測試函數(shù)的執(zhí)行時間。

請參閱圖1,圖1是本發(fā)明實(shí)施例提供的函數(shù)執(zhí)行時間的測試方法的流程示意圖。該方法可具體包括:

在步驟s101中,接收測試指令,并根據(jù)測試指令獲取函數(shù)跟蹤進(jìn)程,該函數(shù)跟蹤進(jìn)程用于獲取待測試函數(shù)的時間測試參數(shù)。

例如,具體可以接收用戶通過終端上的輸入控件發(fā)送的測試指令,或接收其他設(shè)備發(fā)送的測試指令;然后在接收到測試指令之后,獲取函數(shù)跟蹤進(jìn)程,其中,該函數(shù)跟蹤進(jìn)程可以從本地存儲空間中獲取。

本發(fā)明實(shí)施例中,該函數(shù)跟蹤進(jìn)程可理解為獲取待測試函數(shù)(即被執(zhí)行函數(shù))的入口,對待測試函數(shù)進(jìn)行跟蹤測試的函數(shù),主要用于獲取待測試函數(shù)的時間測試參數(shù),如獲取待測試函數(shù)所屬的線程、待測試函數(shù)方法的指針地址、待測試函數(shù)的執(zhí)行狀態(tài)(如在執(zhí)行中還是已經(jīng)執(zhí)行完畢),等等。

在某些實(shí)施方式中,“根據(jù)測試指令獲取函數(shù)跟蹤進(jìn)程”可以具體如下:

(11)在接收到測試指令時,確定操作系統(tǒng)版本信息。

比如,在接收到測試指令時,首先確定當(dāng)前測試平臺的操作系統(tǒng)版本信息,以安卓(android)系統(tǒng)平臺為例,先確定操作系統(tǒng)的版本信息,如android4.4、android5.0等等。

(12)根據(jù)該操作系統(tǒng)版本信息,獲取相應(yīng)的函數(shù)跟蹤進(jìn)程。

進(jìn)一步的,根據(jù)確定的操作系統(tǒng)的版本信息,獲取相應(yīng)的函數(shù)跟蹤進(jìn)程,比如,可具體的,目前android4.4及其以下的版本中,對應(yīng)的是dalvik模式,android4.4以上的版本中,對應(yīng)的是art模式,其中,dalvik以及art為用于android平臺的java虛擬機(jī)。

其中,dalvik模式相應(yīng)的函數(shù)跟蹤進(jìn)程為“dvmmethodtraceadd()”函數(shù),art模式相應(yīng)的函數(shù)跟蹤進(jìn)程為“l(fā)ogmethodtraceevent()”函數(shù)。

在步驟s102中,通過預(yù)設(shè)鉤子函數(shù)對函數(shù)跟蹤進(jìn)程進(jìn)行掛起,并觸發(fā)開啟跟蹤功能。

可以理解的是,目前在啟動跟蹤功能(trace功能)后,待測試函數(shù)在執(zhí)行時,一定會執(zhí)行函數(shù)跟蹤進(jìn)程,因此,本發(fā)明實(shí)施例,可以利用鉤子hook技術(shù)在初始化時將函數(shù)跟蹤進(jìn)程掛起(hook掉),hook后再開啟跟蹤功能。

本實(shí)施例中,此處掛起又可稱為鉤起,將函數(shù)跟蹤進(jìn)程掛起(hook掉)就是說暫不執(zhí)行函數(shù)跟蹤進(jìn)程的邏輯,其中,該預(yù)設(shè)鉤子函數(shù)可具體包括內(nèi)聯(lián)鉤子(inlinehook)函數(shù),inlinehook函數(shù)主要是指通過hook“接觸”到需要修改的函數(shù)(即函數(shù)跟蹤進(jìn)程)入口點(diǎn),在動態(tài)庫執(zhí)行內(nèi)部函數(shù)調(diào)用時,改變函數(shù)跳轉(zhuǎn)指令,使系統(tǒng)跳轉(zhuǎn)到自定義的外部函數(shù)上執(zhí)行。

比如,目前在啟動跟蹤功能后,待測試函數(shù)在執(zhí)行時,在dalvik機(jī)器上會執(zhí)行“dvmmethodtraceadd()”函數(shù),在art機(jī)器上會執(zhí)行“l(fā)ogmethodtraceevent()”函數(shù),因此該實(shí)施例中,在執(zhí)行函數(shù)跟蹤進(jìn)程前,先利用hook技術(shù)在初始化時將獲取到的“dvmmethodtraceadd()”函數(shù)或者“l(fā)ogmethodtraceevent()”函數(shù)hook掉。

在步驟s103中,在開啟跟蹤功能后,確定待測試函數(shù)是否滿足預(yù)設(shè)條件。

在某些實(shí)施方式中,“開啟跟蹤功能后,確定待測試函數(shù)是否滿足預(yù)設(shè)條件”的方式有很多,比如,可以具體包括:

(21)在開啟跟蹤功能后,獲取待測試函數(shù)的預(yù)設(shè)參數(shù)信息。

其中,待測試函數(shù)的預(yù)設(shè)參數(shù)信息可以具體為方法類(method)參數(shù),由此,“在開啟跟蹤功能后,獲取待測試函數(shù)的預(yù)設(shè)參數(shù)信息”可以具體為:在開啟跟蹤功能后,獲取待測試函數(shù)的方法類參數(shù)。

(22)根據(jù)預(yù)設(shè)參數(shù)信息,判斷待測試函數(shù)為系統(tǒng)函數(shù)或非系統(tǒng)函數(shù)。

例如,可以具體為根據(jù)該待測試函數(shù)的方法類參數(shù),判斷待測試函數(shù)為系統(tǒng)函數(shù)或非系統(tǒng)函數(shù)。

可以理解的是,在開啟跟蹤功能后自動跳轉(zhuǎn)到自定義函數(shù),即待測試函數(shù)中,并在自定義函數(shù)中增加處理邏輯,如判斷待測試函數(shù)為系統(tǒng)函數(shù)或非系統(tǒng)函數(shù)的判斷程序。

進(jìn)一步的,在某些實(shí)施方式中,函數(shù)執(zhí)行時間的測試裝置“根據(jù)該待測試函數(shù)的方法類參數(shù),判斷待測試函數(shù)為系統(tǒng)函數(shù)或非系統(tǒng)函數(shù)”的方式有很多,比如可具體包括:

22-1、在方法類參數(shù)的成員變量中,提取類地址指針變量的成員變量。

22-2、根據(jù)類地址指針變量的成員變量,確定類加載器變量的值。

其中,類地址指針(declaring_class_)變量為方法類(method)參數(shù)的成員變量之一,在獲取到類地址指針變量后,再提取類地址指針變量中的成員變量——類加載器(class_loader_)變量,并根據(jù)類加載器變量的值來判斷待測試函數(shù)為系統(tǒng)函數(shù)或非系統(tǒng)函數(shù)。

22-3、若確定類加載器變量的值為空,則判斷出待測試函數(shù)為系統(tǒng)函數(shù)。

22-4、若確定類加載器變量的值不為空,則判斷出待測試函數(shù)為非系統(tǒng)函數(shù)。

在一種實(shí)施方式中,如果確定類加載器變量的值為空,則可以確定該待測試函數(shù)為系統(tǒng)函數(shù),在另一種實(shí)施方式中,如果確定類加載器變量的值不為空,則可以確定出待測試函數(shù)為非系統(tǒng)函數(shù)。

本發(fā)明實(shí)施例中,把被執(zhí)行的待測試函數(shù)分為兩大類,系統(tǒng)函數(shù)與非系統(tǒng)函數(shù),其中此處系統(tǒng)函數(shù)實(shí)際上是區(qū)別于應(yīng)用上層函數(shù),指的是android程序運(yùn)行的過程中,所屬于linux核心層,系統(tǒng)運(yùn)行庫層、框架層的函數(shù),例如所屬類名以android.*,java.*,org.*等開頭的函數(shù);除外,將其他函數(shù)確定為非系統(tǒng)函數(shù)。

(23)若判斷出該待測試函數(shù)為非系統(tǒng)函數(shù),則確定待測試函數(shù)滿足預(yù)設(shè)條件。

(24)若判斷出該待測試函數(shù)為系統(tǒng)函數(shù),則確定待測試函數(shù)不滿足預(yù)設(shè)條件。

由于系統(tǒng)函數(shù)屬于業(yè)務(wù)側(cè)函數(shù),在開啟跟蹤trace功能后,生成的trace文件中,系統(tǒng)函數(shù)總數(shù)占比較大,并且對于分析性能(如卡頓問題)沒有幫助,因此本實(shí)施例中,如果在確定待測試函數(shù)為系統(tǒng)函數(shù)時,終止運(yùn)行測試和記錄函數(shù)耗時的邏輯,如果在確定待測試函數(shù)為非系統(tǒng)函數(shù)時,繼續(xù)運(yùn)行測試和記錄函數(shù)耗時的邏輯。

在步驟s104中,當(dāng)確定待測試函數(shù)滿足預(yù)設(shè)條件時,返回函數(shù)跟蹤進(jìn)程,并測試出該待測試函數(shù)的執(zhí)行時間。

可以理解的是,在一種實(shí)施方式中,函數(shù)執(zhí)行時間的測試裝置確定待測試函數(shù)滿足預(yù)設(shè)條件時,可以繼續(xù)運(yùn)行測試和記錄函數(shù)耗時的邏輯,例如,可具體包括:

(31)當(dāng)確定待測試函數(shù)滿足預(yù)設(shè)條件時,返回被掛起的函數(shù)跟蹤進(jìn)程,并在該函數(shù)跟蹤進(jìn)程中提取該待測試函數(shù)的時間測試參數(shù)。

(32)根據(jù)該時間測試參數(shù),測試待測試函數(shù)的執(zhí)行時間。

在確定待測試函數(shù)為非系統(tǒng)函數(shù)時,返回被掛起的函數(shù)跟蹤進(jìn)程,在該函數(shù)跟蹤進(jìn)程中提取該待測試函數(shù)的時間測試參數(shù),如待測試函數(shù)所屬的線程、待測試函數(shù)方法的指針地址、待測試函數(shù)的執(zhí)行狀態(tài)(如在執(zhí)行中還是已經(jīng)執(zhí)行完畢),并根據(jù)這些時間測試參數(shù)測試待測試函數(shù)的執(zhí)行時間,從而可以測試得到函數(shù)占用內(nèi)存、函數(shù)調(diào)用cpu的時間和占用cpu的執(zhí)行時間等各方面性能。

在另一種實(shí)施方式中,“確定待測試函數(shù)是否滿足預(yù)設(shè)條件”之后,還可以包括如下步驟:

當(dāng)確定待測試函數(shù)不滿足預(yù)設(shè)條件時,將該待測試函數(shù)進(jìn)行過濾,并終止測試待測試函數(shù)的執(zhí)行時間。

也就是說,在確定待測試函數(shù)為系統(tǒng)函數(shù)時,將系統(tǒng)函數(shù)這部分無用的函數(shù)耗時數(shù)據(jù)進(jìn)行過濾,不再往下執(zhí)行運(yùn)行測試和記錄函數(shù)耗時的邏輯,繼續(xù)進(jìn)行下一個待測試函數(shù)。

由上述可知,本實(shí)施例提供的函數(shù)執(zhí)行時間的測試方法,在接收到測試指令后,可以先獲取函數(shù)跟蹤進(jìn)程,并通過預(yù)設(shè)鉤子函數(shù)對函數(shù)跟蹤進(jìn)程進(jìn)行掛起,其中函數(shù)跟蹤進(jìn)程用于獲取待測試函數(shù)的時間測試參數(shù),在掛起函數(shù)跟蹤進(jìn)程后開啟跟蹤功能,當(dāng)確定待測試函數(shù)滿足預(yù)設(shè)條件時,返回函數(shù)跟蹤進(jìn)程,并測試出待測試函數(shù)的執(zhí)行時間;由于利用鉤子對函數(shù)跟蹤進(jìn)程進(jìn)行掛起,改變了待測試函數(shù)的執(zhí)行路徑,且在開啟跟蹤功能后,先對待測試函數(shù)進(jìn)行判斷,滿足預(yù)設(shè)條件的函數(shù)才進(jìn)行測試和記錄函數(shù)耗時的邏輯,因此可以過濾掉一些無用的函數(shù)耗時數(shù)據(jù),大大的減少函數(shù)耗時數(shù)據(jù)的內(nèi)存占用空間,降低系統(tǒng)資源浪費(fèi)。

根據(jù)上一實(shí)施例所描述的方法,以下將舉例作進(jìn)一步詳細(xì)說明。

首先,目前在對電子設(shè)備(如手機(jī)、平板電腦、電視等)的性能進(jìn)行分析時,會使用traceview工具去測試被執(zhí)行函數(shù)調(diào)用或占用中央處理器cpu的執(zhí)行時間,以幫助測試人員能夠更快定位到相應(yīng)的函數(shù)位置;其中,traceview工具是android平臺上性能測試與分析的工具,它通過圖形化的方式讓測試人員了解要跟蹤的函數(shù)的性能。但是由于在使用traceview工具的方案中,測試得到的函數(shù)耗時數(shù)據(jù),不僅數(shù)據(jù)量大,而且包含了很多無用的函數(shù)耗時數(shù)據(jù)。

基于此,本發(fā)明實(shí)施例利用inlinehook(內(nèi)聯(lián)鉤子)技術(shù)過濾掉無用的函數(shù)耗時數(shù)據(jù),其中inlinehook主要是指通過hook“接觸”到需要修改的函數(shù)入口點(diǎn),在動態(tài)庫執(zhí)行內(nèi)部函數(shù)調(diào)用時,改變函數(shù)跳轉(zhuǎn)指令,使系統(tǒng)跳轉(zhuǎn)到自定義的外部函數(shù)上執(zhí)行。以下將進(jìn)行詳細(xì)說明。

請參閱圖2,圖2為本發(fā)明實(shí)施例提供的函數(shù)執(zhí)行時間的測試方法的流程示意圖。該方法包括:

在步驟s201中,終端接收到測試指令后,鉤子hook初始化,并將a函數(shù)進(jìn)行hook。

在步驟s202中,終端在a函數(shù)被hook后,開啟跟蹤trace功能。

為方便描述,本實(shí)施例將用于獲取待測試函數(shù)的時間測試參數(shù)的函數(shù)跟蹤進(jìn)程簡稱為a函數(shù),a函數(shù)是開啟跟蹤trace功能后,運(yùn)行路徑里一定會執(zhí)行的函數(shù)之一。a函數(shù)可理解為獲取待測試函數(shù)(即被執(zhí)行函數(shù))的入口,對待測試函數(shù)進(jìn)行跟蹤測試的函數(shù);其中,此處a函數(shù)可具體包括“dvmmethodtraceadd()”函數(shù)以及“l(fā)ogmethodtraceevent()”函數(shù)。

可以理解的是,目前由于在啟動trace功能后,每個待測試函數(shù)被執(zhí)行時,在dalvik機(jī)器上會執(zhí)行dvmmethodtraceadd()函數(shù),或者在art機(jī)器上會執(zhí)行l(wèi)ogmethodtraceevent()函數(shù),也就是說,都會經(jīng)過dvmmethodtraceadd()函數(shù)或logmethodtraceevent()函數(shù)的處理,a函數(shù)是開啟trace功能后,路徑里面一定會執(zhí)行的函數(shù)之一。

因此,該實(shí)施例中,在啟動函數(shù)跟蹤前,先利用hook技術(shù)在初始化時將dvmmethodtraceadd()函數(shù)或者logmethodtraceevent()函數(shù)hook掉。

其中,a函數(shù)作用是獲取被執(zhí)行函數(shù)所屬的線程、函數(shù)方法的指針地址,函數(shù)的執(zhí)行狀態(tài)(如在執(zhí)行中還是已經(jīng)執(zhí)行完畢)等,獲取這些信息為后續(xù)計算函數(shù)耗時做準(zhǔn)備。

在步驟s203中,終端開啟trace功能后自動跳轉(zhuǎn)到自定義函數(shù)my_a函數(shù)中。

可具體的,終端在a函數(shù)被hook后,開啟trace功能,如通過hook“接觸”到需要修改的a函數(shù)入口點(diǎn),在動態(tài)庫執(zhí)行a函數(shù)內(nèi)部函數(shù)調(diào)用時,改變函數(shù)跳轉(zhuǎn)指令,使系統(tǒng)自動跳轉(zhuǎn)到自定義的my_a函數(shù)上執(zhí)行。

其中,my_a函數(shù)包含待測試函數(shù)以及待測試函數(shù)的判斷處理邏輯,如判斷待測試函數(shù)為系統(tǒng)函數(shù)或非系統(tǒng)函數(shù)的判斷程序。

在步驟s204中,終端判斷待測試函數(shù)為系統(tǒng)函數(shù)或非系統(tǒng)函數(shù)。

可以理解的是,在開啟trace過程中,執(zhí)行的待測試函數(shù)的多種多樣,這里可以把這些函數(shù)分為兩大類,系統(tǒng)函數(shù)和非系統(tǒng)函數(shù),

比如,待測試函數(shù)的參數(shù)之一方法類(method)參數(shù),如果其成員變量類地址指針(declaring_class_)變量中,成員變量類加載器(class_loader_)變量的值為空,則可以表示該待測試函數(shù)為系統(tǒng)函數(shù);相反,如果成員變量類加載器變量的值不為空,則可以表示該待測試函數(shù)為非系統(tǒng)函數(shù)。

其中,類地址指針(declaring_class_)定義一個指向某個類的指針地址,通過這個變量可以獲取這個類的地址,以方便調(diào)用;類加載器(class_loader_)負(fù)責(zé)加載java的核心類,主要用于判斷類加載的情況,如果這個變量的值是空的話表示是系統(tǒng)類加載器,如果不為空的話表示是非系統(tǒng)類加載器。

在步驟s205a中,終端確定待測試函數(shù)為非系統(tǒng)函數(shù)時,返回a函數(shù),并執(zhí)行測試函數(shù)執(zhí)行時間的流程。

在步驟s205b中,終端確定待測試函數(shù)為系統(tǒng)函數(shù)時,將該待測試函數(shù)進(jìn)行過濾,并終止執(zhí)行測試函數(shù)執(zhí)行時間的流程。

在一種實(shí)施方式中,如果終端確定待測試函數(shù)為非系統(tǒng)函數(shù)時,原函數(shù)返回,即返回a函數(shù),繼續(xù)走測試和記錄函數(shù)耗時的邏輯;該實(shí)施方式中,函數(shù)運(yùn)行路徑a可以為:

a函數(shù)→將a函數(shù)hook,跳轉(zhuǎn)到my_a函數(shù)→判斷執(zhí)行的待測試函數(shù)是否為系統(tǒng)函數(shù)→為非系統(tǒng)函數(shù),返回a函數(shù)→執(zhí)行a函數(shù)剩余邏輯,測試函數(shù)執(zhí)行時間。

在另一種實(shí)施方式中,如果確定待測試函數(shù)為系統(tǒng)函數(shù),則返回不做任何事情,即該待測試函數(shù)進(jìn)行過濾,從而終止該函數(shù)計算函數(shù)耗時的邏輯;該實(shí)施方式中,函數(shù)運(yùn)行路徑b可以為:

a函數(shù)→將a函數(shù)hook,跳轉(zhuǎn)到my_a函數(shù)→判斷執(zhí)行的待測試函數(shù)是否為系統(tǒng)函數(shù)→為系統(tǒng)函數(shù),不執(zhí)行a函數(shù)剩余邏輯,直接返回,即終止a函數(shù)的執(zhí)行,繼續(xù)重復(fù)以上路徑,判斷下一個待測試函數(shù)。

需說明的是,對于每一個被執(zhí)行的待測試函數(shù)都要經(jīng)過運(yùn)行路徑a或者運(yùn)行路徑b,并按照設(shè)定好的次序逐一進(jìn)行判斷。

可以理解的是,traceview工具是通過圖形化的方式讓測試人員了解要跟蹤的函數(shù)的性能,而本發(fā)明提出的測試方法,是基于traceview工具原理,利用inlinehook技術(shù)對trace進(jìn)行改造,從而可以針對不同的操作系統(tǒng)都可去掉一些無用的函數(shù)耗時數(shù)據(jù)。

其中,本發(fā)明利用inlinehook技術(shù)對trace進(jìn)行改造可具體如下:首先找到trace獲取函數(shù)耗時的必經(jīng)路徑,利用inlinehook技術(shù)修改必經(jīng)路徑,并跳轉(zhuǎn)到自定義函數(shù)當(dāng)中,自定義函數(shù)中增加對待測試函數(shù)的相關(guān)判斷處理邏輯,以達(dá)到對系統(tǒng)trace進(jìn)行改造,將無用的系統(tǒng)函數(shù)耗時數(shù)據(jù)過濾掉。

由于本方案是在將函數(shù)內(nèi)部實(shí)現(xiàn)做了hook處理,而無需依賴連接外部的測試設(shè)備,也無需帶界面,因此可以認(rèn)為是形成了輕量的trace,又稱minitrace,不僅可以過濾無用的函數(shù)耗時數(shù)據(jù),減少生成的文件大小,還提高了性能,擴(kuò)大了應(yīng)用場景。

該minitrace可以應(yīng)用到基于安卓系統(tǒng)的終端設(shè)備中,對終端應(yīng)用性能進(jìn)行測試,比如,可以將minitrace結(jié)合到終端應(yīng)用程序中,在操作終端應(yīng)用時,如果發(fā)生卡頓,終端應(yīng)用會觸發(fā)minitrace生成trace文件,從而可以分析終端應(yīng)用哪里發(fā)生卡頓,實(shí)現(xiàn)快速定位,分析結(jié)果反饋至開發(fā)人員或測試人員后,實(shí)現(xiàn)對應(yīng)用程序性能進(jìn)行測試。

由上述可知,本實(shí)施例提供的函數(shù)執(zhí)行時間的測試方法,在接收到測試指令后,可以先獲取函數(shù)跟蹤進(jìn)程,并通過預(yù)設(shè)鉤子函數(shù)對函數(shù)跟蹤進(jìn)程進(jìn)行掛起,其中函數(shù)跟蹤進(jìn)程用于獲取待測試函數(shù)的時間測試參數(shù),在掛起函數(shù)跟蹤進(jìn)程后開啟跟蹤功能,當(dāng)確定待測試函數(shù)滿足預(yù)設(shè)條件時,返回函數(shù)跟蹤進(jìn)程,并測試出待測試函數(shù)的執(zhí)行時間;由于利用鉤子對函數(shù)跟蹤進(jìn)程進(jìn)行掛起,改變了待測試函數(shù)的執(zhí)行路徑,且在開啟跟蹤功能后,先對待測試函數(shù)進(jìn)行判斷,滿足預(yù)設(shè)條件的函數(shù)才進(jìn)行測試和記錄函數(shù)耗時的邏輯,因此可以過濾掉一些無用的函數(shù)耗時數(shù)據(jù),進(jìn)一步的,應(yīng)用到終端應(yīng)用時,可以分析終端應(yīng)用哪里發(fā)生卡頓,即該測試方法不僅可以大大的減少函數(shù)耗時數(shù)據(jù)的內(nèi)存占用空間,降低系統(tǒng)資源浪費(fèi),還可以實(shí)現(xiàn)函數(shù)快速定位,

為便于更好的實(shí)施本發(fā)明實(shí)施例提供的函數(shù)執(zhí)行時間的測試方法,本發(fā)明實(shí)施例還提供一種基于上述函數(shù)執(zhí)行時間的測試方法的裝置。其中名詞的含義與上述函數(shù)執(zhí)行時間的測試的方法中相同,具體實(shí)現(xiàn)細(xì)節(jié)可以參考方法實(shí)施例中的說明。

請參閱圖3a,圖3a為本發(fā)明實(shí)施例提供的函數(shù)執(zhí)行時間的測試裝置的結(jié)構(gòu)示意圖,其中該函數(shù)執(zhí)行時間的測試裝置300可以包括接收單元301、獲取單元302、掛起單元303、確定單元304以及測試單元305,如下:

(1)接收單元301;

接收單元301,用于接收測試指令。

(2)獲取單元302;

獲取單元302,用于根據(jù)所述測試指令獲取函數(shù)跟蹤進(jìn)程,所述函數(shù)跟蹤進(jìn)程用于獲取待測試函數(shù)的時間測試參數(shù)。

例如,具體可以接收用戶通過終端上的輸入控件發(fā)送的測試指令,或接收其他設(shè)備發(fā)送的測試指令;然后在接收到測試指令之后,獲取函數(shù)跟蹤進(jìn)程,其中,該函數(shù)跟蹤進(jìn)程可以從本地存儲空間中獲取。

本發(fā)明實(shí)施例中,該函數(shù)跟蹤進(jìn)程可理解為獲取待測試函數(shù)(即被執(zhí)行函數(shù))的入口,對待測試函數(shù)進(jìn)行跟蹤測試的函數(shù),主要用于獲取待測試函數(shù)的時間測試參數(shù),如獲取待測試函數(shù)所屬的線程、待測試函數(shù)方法的指針地址、待測試函數(shù)的執(zhí)行狀態(tài)(如在執(zhí)行中還是已經(jīng)執(zhí)行完畢),等等。

(3)掛起單元303;

掛起單元303,用于通過預(yù)設(shè)鉤子函數(shù)對所述函數(shù)跟蹤進(jìn)程進(jìn)行掛起,并觸發(fā)開啟跟蹤功能。

可以理解的是,目前在啟動跟蹤功能(trace功能)后,待測試函數(shù)在執(zhí)行時,一定會執(zhí)行函數(shù)跟蹤進(jìn)程,因此,本發(fā)明實(shí)施例,可以利用鉤子hook技術(shù)在初始化時將函數(shù)跟蹤進(jìn)程掛起(hook掉),hook后再開啟跟蹤功能。

比如,目前在啟動跟蹤功能后,待測試函數(shù)在執(zhí)行時,在dalvik機(jī)器上會執(zhí)行“dvmmethodtraceadd()”函數(shù),在art機(jī)器上會執(zhí)行“l(fā)ogmethodtraceevent()”函數(shù),因此該實(shí)施例中,在執(zhí)行函數(shù)跟蹤進(jìn)程前,先利用hook技術(shù)在初始化時將獲取到的“dvmmethodtraceadd()”函數(shù)或者“l(fā)ogmethodtraceevent()”函數(shù)hook掉。

其中,該預(yù)設(shè)鉤子函數(shù)可具體包括內(nèi)聯(lián)鉤子(inlinehook)函數(shù),inlinehook函數(shù)主要是指通過hook“接觸”到需要修改的函數(shù)入口點(diǎn),在動態(tài)庫執(zhí)行內(nèi)部函數(shù)調(diào)用時,改變函數(shù)跳轉(zhuǎn)指令,使系統(tǒng)跳轉(zhuǎn)到自定義的外部函數(shù)上執(zhí)行。

(4)確定單元304;

確定單元304,用于在開啟跟蹤功能后,確定待測試函數(shù)是否滿足預(yù)設(shè)條件。

(5)測試單元305;

測試單元305,用于當(dāng)確定所述待測試函數(shù)滿足預(yù)設(shè)條件時,返回所述函數(shù)跟蹤進(jìn)程,并測試出所述待測試函數(shù)的執(zhí)行時間。

在確定待測試函數(shù)滿足預(yù)設(shè)條件時,返回被掛起的函數(shù)跟蹤進(jìn)程,在該函數(shù)跟蹤進(jìn)程中提取該待測試函數(shù)的時間測試參數(shù),如待測試函數(shù)所屬的線程、待測試函數(shù)方法的指針地址、待測試函數(shù)的執(zhí)行狀態(tài)(如在執(zhí)行中還是已經(jīng)執(zhí)行完畢),并根據(jù)這些時間測試參數(shù)測試待測試函數(shù)的執(zhí)行時間,從而可以測試得到函數(shù)占用內(nèi)存、函數(shù)的調(diào)用cpu的時間和占用cpu的執(zhí)行時間等各方面性能。

請一并參閱圖3b,圖3b為本發(fā)明實(shí)施例提供的函數(shù)執(zhí)行時間的測試裝置的結(jié)構(gòu)示意圖,其中函數(shù)執(zhí)行時間的測試裝置400中獲取單元302可以具體包括:

第三確定子單元3021;

用于在接收到測試指令時,確定操作系統(tǒng)版本信息。

比如,在接收到測試指令時,首先確定當(dāng)前測試平臺的操作系統(tǒng)版本信息,以安卓(android)系統(tǒng)平臺為例,先確定操作系統(tǒng)的版本信息,如android4.4、android5.0等等。

第二獲取子單元3022;

用于根據(jù)所述操作系統(tǒng)版本信息,獲取相應(yīng)的函數(shù)跟蹤進(jìn)程。

進(jìn)一步的,根據(jù)確定的操作系統(tǒng)的版本信息,獲取相應(yīng)的函數(shù)跟蹤進(jìn)程,比如,可具體的,目前android4.4及其以下的版本中,對應(yīng)的是dalvik模式,android4.4以上的版本中,對應(yīng)的是art模式,其中,dalvik以及art為用于android平臺的java虛擬機(jī)。

其中,dalvik模式相應(yīng)的函數(shù)跟蹤進(jìn)程為“dvmmethodtraceadd()”函數(shù),art模式相應(yīng)的函數(shù)跟蹤進(jìn)程為“l(fā)ogmethodtraceevent()”函數(shù)。

在某些實(shí)施方式中,函數(shù)執(zhí)行時間的測試裝置400中確定單元304可以具體包括第一獲取子單元3041、判斷子單元3042、第一確定子單元3043以及第二確定子單元3044,如下:

第一獲取子單元3041;

用于在開啟跟蹤功能后,獲取待測試函數(shù)的預(yù)設(shè)參數(shù)信息。

其中,待測試函數(shù)的預(yù)設(shè)參數(shù)信息可以具體為方法類(method)參數(shù),由此,“在開啟跟蹤功能后,獲取待測試函數(shù)的預(yù)設(shè)參數(shù)信息”可以具體為:在開啟跟蹤功能后,獲取待測試函數(shù)的方法類參數(shù)。

判斷子單元3042;

用于根據(jù)所述預(yù)設(shè)參數(shù)信息,判斷待測試函數(shù)為系統(tǒng)函數(shù)或非系統(tǒng)函數(shù)。

例如,所述第一獲取子單元3041用于,在開啟跟蹤功能后,獲取待測試函數(shù)的方法類參數(shù),則所述判斷子單元3042可以具體用于根據(jù)所述方法類參數(shù),判斷待測試函數(shù)為系統(tǒng)函數(shù)或非系統(tǒng)函數(shù)。

第一確定子單元3043;

用于若判斷出所述待測試函數(shù)為非系統(tǒng)函數(shù),則確定待測試函數(shù)滿足預(yù)設(shè)條件。

第二確定子單元3044;

用于若判斷出所述待測試函數(shù)為系統(tǒng)函數(shù),則確定待測試函數(shù)不滿足預(yù)設(shè)條件。

由于系統(tǒng)函數(shù)屬于業(yè)務(wù)側(cè)函數(shù),在開啟跟蹤trace功能后,生成的trace文件中,系統(tǒng)函數(shù)總數(shù)占比較大,并且對于分析性能(如卡頓問題)沒有幫助,因此本實(shí)施例中,如果在確定待測試函數(shù)為系統(tǒng)函數(shù)時,終止運(yùn)行測試和記錄函數(shù)耗時的邏輯,如果在確定待測試函數(shù)為非系統(tǒng)函數(shù)時,繼續(xù)運(yùn)行測試和記錄函數(shù)耗時的邏輯。

進(jìn)一步的,在某些實(shí)施方式中,判斷子單元3042可以具體用于:

在所述方法類參數(shù)的成員變量中,提取類地址指針變量的成員變量,根據(jù)所述類地址指針變量的成員變量,確定類加載器變量的值。

若確定所述類加載器變量的值為空,則判斷出待測試函數(shù)為系統(tǒng)函數(shù),若確定所述類加載器變量的值不為空,則判斷出待測試函數(shù)為非系統(tǒng)函數(shù)。

其中,類地址指針(declaring_class_)變量為方法類(method)參數(shù)的成員變量之一,在獲取到類地址指針變量后,再提取類地址指針變量中的成員變量——類加載器(class_loader_)變量,并根據(jù)類加載器變量的值來判斷待測試函數(shù)為系統(tǒng)函數(shù)或非系統(tǒng)函數(shù)。

在一種實(shí)施方式中,如果確定類加載器變量的值為空,則可以確定該待測試函數(shù)為系統(tǒng)函數(shù),在另一種實(shí)施方式中,如果確定類加載器變量的值不為空,則可以確定出待測試函數(shù)為非系統(tǒng)函數(shù)。

本發(fā)明實(shí)施例中,把被執(zhí)行的待測試函數(shù)分為兩大類,系統(tǒng)函數(shù)與非系統(tǒng)函數(shù),其中此處系統(tǒng)函數(shù)實(shí)際上是區(qū)別于應(yīng)用上層函數(shù),指的是android程序運(yùn)行的過程中,所屬于linux核心層,系統(tǒng)運(yùn)行庫層、框架層的函數(shù),例如所屬類名以android.*,java.*,org.*等開頭的函數(shù);除外,將其他函數(shù)確定為非系統(tǒng)函數(shù)。

如圖3b所示,在某些實(shí)施方式中,測試單元305可以具體包括:

返回子單元3051;

用于當(dāng)確定所述待測試函數(shù)滿足預(yù)設(shè)條件時,返回所述函數(shù)跟蹤進(jìn)程,并在所述函數(shù)跟蹤進(jìn)程中提取所述待測試函數(shù)的時間測試參數(shù)。

測試子單元3052;

用于根據(jù)所述時間測試參數(shù),測試所述待測試函數(shù)的執(zhí)行時間。

在確定待測試函數(shù)為非系統(tǒng)函數(shù)時,返回被掛起的函數(shù)跟蹤進(jìn)程,在該函數(shù)跟蹤進(jìn)程中提取該待測試函數(shù)的時間測試參數(shù),如待測試函數(shù)所屬的線程、待測試函數(shù)方法的指針地址、待測試函數(shù)的執(zhí)行狀態(tài)(如在執(zhí)行中還是已經(jīng)執(zhí)行完畢),并根據(jù)這些時間測試參數(shù)測試待測試函數(shù)的執(zhí)行時間,從而可以測試得到函數(shù)占用內(nèi)存、函數(shù)的調(diào)用cpu的時間和占用cpu的執(zhí)行時間等各方面性能。

另外,如圖3b所示,函數(shù)執(zhí)行時間的測試裝置400還可以包括:

過濾單元306,用于當(dāng)確定所述待測試函數(shù)不滿足預(yù)設(shè)條件時,將所述待測試函數(shù)進(jìn)行過濾,并終止測試所述待測試函數(shù)的執(zhí)行時間。

也就是說,在確定待測試函數(shù)為系統(tǒng)函數(shù)時,將系統(tǒng)函數(shù)這部分無用的函數(shù)耗時數(shù)據(jù)進(jìn)行過濾,不再往下執(zhí)行運(yùn)行測試和記錄函數(shù)耗時的邏輯,繼續(xù)進(jìn)行下一個待測試函數(shù)。

具體實(shí)施時,以上各個單元可以作為獨(dú)立的實(shí)體來實(shí)現(xiàn),也可以進(jìn)行任意組合,作為同一或若干個實(shí)體來實(shí)現(xiàn),以上各個單元的具體實(shí)施可參見前面的方法實(shí)施例,在此不再贅述。

該函數(shù)執(zhí)行時間的測試裝置具體可以集成在如手機(jī)、平板電腦、掌上電腦pda等終端中。

由上述可知,本實(shí)施例提供的函數(shù)執(zhí)行時間的測試裝置,在接收到測試指令后,可以先獲取函數(shù)跟蹤進(jìn)程,并通過預(yù)設(shè)鉤子函數(shù)對函數(shù)跟蹤進(jìn)程進(jìn)行掛起,其中函數(shù)跟蹤進(jìn)程用于獲取待測試函數(shù)的時間測試參數(shù),在掛起函數(shù)跟蹤進(jìn)程后開啟跟蹤功能,當(dāng)確定待測試函數(shù)滿足預(yù)設(shè)條件時,返回函數(shù)跟蹤進(jìn)程,并測試出待測試函數(shù)的執(zhí)行時間;由于利用鉤子對函數(shù)跟蹤進(jìn)程進(jìn)行掛起,改變了待測試函數(shù)的執(zhí)行路徑,且在開啟跟蹤功能后,先對待測試函數(shù)進(jìn)行判斷,滿足預(yù)設(shè)條件的函數(shù)才進(jìn)行測試和記錄函數(shù)耗時的邏輯,因此可以過濾掉一些無用的函數(shù)耗時數(shù)據(jù),大大的減少函數(shù)耗時數(shù)據(jù)的內(nèi)存占用空間,降低系統(tǒng)資源浪費(fèi)。

本發(fā)明實(shí)施例還提供一種終端,如圖4所示,該終端400可以包括有一個或一個以上計算機(jī)可讀存儲介質(zhì)的存儲器401、傳感器402、輸入單元403、顯示單元404、電源405以及包括有一個或者一個以上處理核心的處理器406等部件。本領(lǐng)域技術(shù)人員可以理解,圖4中示出的終端結(jié)構(gòu)并不構(gòu)成對終端的限定,可以包括比圖示更多或更少的部件,或者組合某些部件,或者不同的部件布置。

存儲器401可用于存儲應(yīng)用程序和數(shù)據(jù)。存儲器401存儲的應(yīng)用程序中包含有可執(zhí)行代碼。應(yīng)用程序可以組成各種功能模塊。處理器406通過運(yùn)行存儲在存儲器401的應(yīng)用程序,從而執(zhí)行各種功能應(yīng)用以及數(shù)據(jù)處理。此外,存儲器401可以包括高速隨機(jī)存取存儲器,還可以包括非易失性存儲器,例如至少一個磁盤存儲器件、閃存器件、或其他易失性固態(tài)存儲器件。相應(yīng)地,存儲器401還可以包括存儲器控制器,以提供處理器406和輸入單元403對存儲器401的訪問。

終端還可包括至少一種傳感器402,比如光傳感器、重力加速度傳感器以及其他傳感器。具體地,光傳感器可包括環(huán)境光傳感器及接近傳感器,其中,環(huán)境光傳感器可根據(jù)環(huán)境光線的明暗來調(diào)節(jié)顯示面板的亮度,接近傳感器可在終端移動到耳邊時,關(guān)閉顯示面板和/或背光。作為運(yùn)動傳感器的一種,重力加速度傳感器可檢測各個方向上(一般為三軸)加速度的大小,靜止時可檢測出重力的大小及方向,可用于識別手機(jī)姿態(tài)的應(yīng)用(比如橫豎屏切換、相關(guān)游戲、磁力計姿態(tài)校準(zhǔn))、振動識別相關(guān)功能(比如計步器、敲擊)等;至于終端還可配置的陀螺儀、氣壓計、濕度計、溫度計、紅外線傳感器等其他傳感器,在此不再贅述。

輸入單元403可用于接收輸入的數(shù)字、字符信息或用戶特征信息(比如指紋),以及產(chǎn)生與用戶設(shè)置以及功能控制有關(guān)的鍵盤、鼠標(biāo)、操作桿、光學(xué)或者軌跡球信號輸入。具體地,在一個具體的實(shí)施例中,輸入單元403可包括觸敏表面以及其他輸入設(shè)備。觸敏表面,也稱為觸摸顯示屏或者觸控板,可收集用戶在其上或附近的觸摸操作(比如用戶使用手指、觸筆等任何適合的物體或附件在觸敏表面上或在觸敏表面附近的操作),并根據(jù)預(yù)先設(shè)定的程式驅(qū)動相應(yīng)的連接裝置??蛇x的,觸敏表面可包括觸摸檢測裝置和觸摸控制器兩個部分。其中,觸摸檢測裝置檢測用戶的觸摸方位,并檢測觸摸操作帶來的信號,將信號傳送給觸摸控制器;觸摸控制器從觸摸檢測裝置上接收觸摸信息,并將它轉(zhuǎn)換成觸點(diǎn)坐標(biāo),再送給處理器406,并能接收處理器406發(fā)來的命令并加以執(zhí)行。此外,可以采用電阻式、電容式、紅外線以及表面聲波等多種類型實(shí)現(xiàn)觸敏表面。除了觸敏表面,輸入單元403還可以包括其他輸入設(shè)備。具體地,其他輸入設(shè)備可以包括但不限于物理鍵盤、功能鍵(比如音量控制按鍵、開關(guān)按鍵等)、指紋識別模組、軌跡球、鼠標(biāo)、操作桿等中的一種或多種。

顯示單元404可用于顯示由用戶輸入的信息或提供給用戶的信息以及終端的各種圖形用戶接口,這些圖形用戶接口可以由圖形、文本、圖標(biāo)、視頻和其任意組合來構(gòu)成。顯示單元404可包括顯示面板??蛇x的,可以采用液晶顯示器(lcd,liquidcrystaldisplay)、有機(jī)發(fā)光二極管(oled,organiclight-emittingdiode)等形式來配置顯示面板。進(jìn)一步的,觸敏表面可覆蓋顯示面板,當(dāng)觸敏表面檢測到在其上或附近的觸摸操作后,傳送給處理器406以確定觸摸事件的類型,隨后處理器406根據(jù)觸摸事件的類型在顯示面板上提供相應(yīng)的視覺輸出。雖然在圖4中,觸敏表面與顯示面板是作為兩個獨(dú)立的部件來實(shí)現(xiàn)輸入和輸入功能,但是在某些實(shí)施例中,可以將觸敏表面與顯示面板集成而實(shí)現(xiàn)輸入和輸出功能。

終端還包括給各個部件供電的電源405(比如電池)。優(yōu)選的,電源可以通過電源管理系統(tǒng)與處理器406邏輯相連,從而通過電源管理系統(tǒng)實(shí)現(xiàn)管理充電、放電、以及功耗管理等功能。電源405還可以包括一個或一個以上的直流或交流電源、再充電系統(tǒng)、電源故障檢測電路、電源轉(zhuǎn)換器或者逆變器、電源狀態(tài)指示器等任意組件。

處理器406是終端的控制中心,利用各種接口和線路連接整個終端的各個部分,通過運(yùn)行或執(zhí)行存儲在存儲器401內(nèi)的應(yīng)用程序,以及調(diào)用存儲在存儲器401內(nèi)的數(shù)據(jù),執(zhí)行終端的各種功能和處理數(shù)據(jù),從而對終端進(jìn)行整體監(jiān)控??蛇x的,處理器406可包括一個或多個處理核心;優(yōu)選的,處理器406可集成應(yīng)用處理器和調(diào)制解調(diào)處理器,其中,應(yīng)用處理器主要處理操作系統(tǒng)、用戶界面和應(yīng)用程序等。

盡管圖4中未示出,終端還可以包括攝像頭、藍(lán)牙模塊、網(wǎng)絡(luò)模塊等,在此不再贅述。

具體在本實(shí)施例中,終端中的處理器406會按照如下的指令,將一個或一個以上的應(yīng)用程序的進(jìn)程對應(yīng)的可執(zhí)行代碼加載到存儲器401中,并由處理器406來運(yùn)行存儲在存儲器401中的應(yīng)用程序,從而實(shí)現(xiàn)各種功能:

通過處理器406接收測試指令,并根據(jù)所述測試指令獲取函數(shù)跟蹤進(jìn)程,所述函數(shù)跟蹤進(jìn)程用于獲取待測試函數(shù)的時間測試參數(shù)。

通過處理器406通過預(yù)設(shè)鉤子函數(shù)對所述函數(shù)跟蹤進(jìn)程進(jìn)行掛起,并觸發(fā)開啟跟蹤功能。

通過處理器406在開啟跟蹤功能后,確定待測試函數(shù)是否滿足預(yù)設(shè)條件。

通過處理器406當(dāng)確定所述待測試函數(shù)滿足預(yù)設(shè)條件時,返回所述函數(shù)跟蹤進(jìn)程,并測試出所述待測試函數(shù)的執(zhí)行時間。

處理器406確定待測試函數(shù)是否滿足預(yù)設(shè)條件之后,還可以用于:當(dāng)確定所述待測試函數(shù)不滿足預(yù)設(shè)條件時,將所述待測試函數(shù)進(jìn)行過濾,并終止測試所述待測試函數(shù)的執(zhí)行時間。

在某些實(shí)施方式中,處理器406在開啟跟蹤功能后,確定待測試函數(shù)是否滿足預(yù)設(shè)條件,可以具體包括:在開啟跟蹤功能后,獲取待測試函數(shù)的預(yù)設(shè)參數(shù)信息;根據(jù)所述預(yù)設(shè)參數(shù)信息,判斷待測試函數(shù)為系統(tǒng)函數(shù)或非系統(tǒng)函數(shù);若判斷出所述待測試函數(shù)為非系統(tǒng)函數(shù),則確定待測試函數(shù)滿足預(yù)設(shè)條件;若判斷出所述待測試函數(shù)為系統(tǒng)函數(shù),則確定待測試函數(shù)不滿足預(yù)設(shè)條件。

進(jìn)一步的,在某些實(shí)施方式中,處理器406在開啟跟蹤功能后,獲取待測試函數(shù)的方法類參數(shù);并根據(jù)所述方法類參數(shù),判斷待測試函數(shù)為系統(tǒng)函數(shù)或非系統(tǒng)函數(shù)。

其中,處理器406根據(jù)所述方法類參數(shù),判斷待測試函數(shù)為系統(tǒng)函數(shù)或非系統(tǒng)函數(shù)可以具體包括:在所述方法類參數(shù)的成員變量中,提取類地址指針變量的成員變量;根據(jù)所述類地址指針變量的成員變量,確定類加載器變量的值;若確定所述類加載器變量的值為空,則判斷出待測試函數(shù)為系統(tǒng)函數(shù);若確定所述類加載器變量的值不為空,則判斷出待測試函數(shù)為非系統(tǒng)函數(shù)。

處理器406根據(jù)所述測試指令獲取函數(shù)跟蹤進(jìn)程可以具體包括:在接收到測試指令時,確定操作系統(tǒng)版本信息;根據(jù)所述操作系統(tǒng)版本信息,獲取相應(yīng)的函數(shù)跟蹤進(jìn)程。

處理器406當(dāng)確定所述待測試函數(shù)滿足預(yù)設(shè)條件時,返回所述函數(shù)跟蹤進(jìn)程,并測試出所述待測試函數(shù)的執(zhí)行時間可以具體包括:當(dāng)確定所述待測試函數(shù)滿足預(yù)設(shè)條件時,返回所述函數(shù)跟蹤進(jìn)程,并在所述函數(shù)跟蹤進(jìn)程中提取所述待測試函數(shù)的時間測試參數(shù);根據(jù)所述時間測試參數(shù),測試所述待測試函數(shù)的執(zhí)行時間。

由上述可知,本實(shí)施例提供的終端中,在接收到測試指令后,可以先獲取函數(shù)跟蹤進(jìn)程,并通過預(yù)設(shè)鉤子函數(shù)對函數(shù)跟蹤進(jìn)程進(jìn)行掛起,其中函數(shù)跟蹤進(jìn)程用于獲取待測試函數(shù)的時間測試參數(shù),在掛起函數(shù)跟蹤進(jìn)程后開啟跟蹤功能,當(dāng)確定待測試函數(shù)滿足預(yù)設(shè)條件時,返回函數(shù)跟蹤進(jìn)程,并測試出待測試函數(shù)的執(zhí)行時間;由于利用鉤子對函數(shù)跟蹤進(jìn)程進(jìn)行掛起,改變了待測試函數(shù)的執(zhí)行路徑,且在開啟跟蹤功能后,先對待測試函數(shù)進(jìn)行判斷,滿足預(yù)設(shè)條件的函數(shù)才進(jìn)行測試和記錄函數(shù)耗時的邏輯,因此可以過濾掉一些無用的函數(shù)耗時數(shù)據(jù),大大的減少函數(shù)耗時數(shù)據(jù)的內(nèi)存占用空間,降低系統(tǒng)資源浪費(fèi)。

在上述實(shí)施例中,對各個實(shí)施例的描述都各有側(cè)重,某個實(shí)施例中沒有詳述的部分,可以參見上文針對函數(shù)執(zhí)行時間的測試方法的詳細(xì)描述,此處不再贅述。

本發(fā)明實(shí)施例提供的所述函數(shù)執(zhí)行時間的測試裝置,譬如為計算機(jī)、平板電腦、具有觸摸功能的手機(jī)等等,所述函數(shù)執(zhí)行時間的測試裝置與上文實(shí)施例中的函數(shù)執(zhí)行時間的測試方法屬于同一構(gòu)思,在所述函數(shù)執(zhí)行時間的測試裝置上可以運(yùn)行所述函數(shù)執(zhí)行時間的測試方法實(shí)施例中提供的任一方法,其具體實(shí)現(xiàn)過程詳見所述函數(shù)執(zhí)行時間的測試方法實(shí)施例,此處不再贅述。

需要說明的是,對本發(fā)明所述函數(shù)執(zhí)行時間的測試方法而言,本領(lǐng)域普通測試人員可以理解實(shí)現(xiàn)本發(fā)明實(shí)施例所述函數(shù)執(zhí)行時間的測試方法的全部或部分流程,是可以通過計算機(jī)程序來控制相關(guān)的硬件來完成,所述計算機(jī)程序可存儲于一計算機(jī)可讀取存儲介質(zhì)中,如存儲在終端的存儲器中,并被該終端內(nèi)的至少一個處理器執(zhí)行,在執(zhí)行過程中可包括如所述函數(shù)執(zhí)行時間的測試方法的實(shí)施例的流程。其中,所述的存儲介質(zhì)可為磁碟、光盤、只讀存儲器(rom,readonlymemory)、隨機(jī)存取記憶體(ram,randomaccessmemory)等。

對本發(fā)明實(shí)施例的所述函數(shù)執(zhí)行時間的測試裝置而言,其各功能模塊可以集成在一個處理芯片中,也可以是各個模塊單獨(dú)物理存在,也可以兩個或兩個以上模塊集成在一個模塊中。上述集成的模塊既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能模塊的形式實(shí)現(xiàn)。所述集成的模塊如果以軟件功能模塊的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時,也可以存儲在一個計算機(jī)可讀取存儲介質(zhì)中,所述存儲介質(zhì)譬如為只讀存儲器,磁盤或光盤等。

以上對本發(fā)明實(shí)施例所提供的一種函數(shù)執(zhí)行時間的測試方法及裝置進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個例對本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時,對于本領(lǐng)域的技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實(shí)施方式及應(yīng)用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對本發(fā)明的限制。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
沙湾县| 益阳市| 高阳县| 东至县| 韶关市| 特克斯县| 岢岚县| 积石山| 东阿县| 南安市| 和龙市| 阳新县| 彭泽县| 友谊县| 花垣县| 磐安县| 青神县| 崇文区| 承德市| 张家界市| 上林县| 库尔勒市| 泰安市| 桑日县| 明水县| 锡林郭勒盟| 道孚县| 本溪市| 石河子市| 定南县| 渭南市| 邵东县| 正镶白旗| 双流县| 乌拉特后旗| 通山县| 都匀市| 吉林市| 麻阳| 巩义市| 武城县|