本發(fā)明涉及到手機(jī)應(yīng)用開發(fā)領(lǐng)域,尤其涉及一種深度抓取手機(jī)應(yīng)用運(yùn)行性能數(shù)據(jù)的方法及裝置。
背景技術(shù):
在智能手機(jī)行業(yè),隨著手機(jī)游戲的市場占有率越來越高,大部分的知名游戲開發(fā)公司都在手機(jī)游戲開發(fā)投入了較多的技術(shù)研發(fā)。由于手機(jī)的硬件配置與個人計算機(jī)相比有明顯的差距,同時考慮耗電量及發(fā)熱等因素,其性能與個人計算機(jī)相差甚遠(yuǎn),因此手機(jī)游戲會更多的關(guān)注游戲的性能,以提高用戶體驗。
unity作為一種廣泛應(yīng)用的手機(jī)應(yīng)用開發(fā)引擎,提供了完善的手機(jī)游戲性能監(jiān)控工具。具體地,手機(jī)應(yīng)用開發(fā)人員通過使用unity引擎自帶的profiler工具,可以深度抓取各種常用的unity引擎性能數(shù)據(jù)。因為當(dāng)profiler開關(guān)打開后,手機(jī)游戲的性能將受到明顯的影響,所以手機(jī)游戲的發(fā)布版本都會關(guān)掉該選項,從而只能對開發(fā)版本進(jìn)行測試抓取數(shù)據(jù),無法對真實玩家使用的發(fā)行版本深度抓取性能數(shù)據(jù)。而當(dāng)手機(jī)應(yīng)用開發(fā)人員使用常規(guī)的監(jiān)控方式,即啟動一個獨立進(jìn)程讀取被測試手機(jī)游戲進(jìn)程的proc文件系統(tǒng)數(shù)據(jù),獲取其cpu、內(nèi)存或網(wǎng)絡(luò)等使用情況時,又無法深度抓取unity引擎中的資源占用,例如內(nèi)存使用等數(shù)據(jù)。
鑒于上述原因,手機(jī)應(yīng)用開發(fā)人員需要一套面向手機(jī)應(yīng)用的發(fā)布版本在運(yùn)行期間的深度抓取手機(jī)應(yīng)用運(yùn)行性能數(shù)據(jù)工具,以獲取面向真實用戶的發(fā)行版本運(yùn)行性能數(shù)據(jù),為手機(jī)應(yīng)用優(yōu)化提供數(shù)據(jù)支撐。同時,手機(jī)應(yīng)用開發(fā)人員能收集當(dāng)前外網(wǎng)中使用unity引擎開發(fā)的大量手機(jī)游戲的性能數(shù)據(jù),為手機(jī)應(yīng)用測試人員制定性能測試的標(biāo)準(zhǔn)提供大數(shù)據(jù)支持。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的是解決現(xiàn)有技術(shù)的不足,提供一種深度抓取手機(jī)應(yīng)用運(yùn)行性能數(shù)據(jù)的方法及裝置,其面向安卓智能手機(jī)中基于unity引擎開發(fā)的程序,能夠獲得深度抓取面向用戶的手機(jī)應(yīng)用運(yùn)行性能數(shù)據(jù)的效果。
為了實現(xiàn)上述目的,本發(fā)明采用以下的技術(shù)方案:
提出一種深度抓取手機(jī)應(yīng)用運(yùn)行性能數(shù)據(jù)的方法,用于安卓智能手機(jī)中基于unity引擎開發(fā)的程序,包括以下步驟:
s100)啟動被檢測手機(jī)應(yīng)用,并監(jiān)視該手機(jī)應(yīng)用進(jìn)程;
s200)查找unity引擎中應(yīng)用程序編程接口,并檢測該應(yīng)用程序編程接口的運(yùn)行性能數(shù)據(jù);
s300)執(zhí)行對應(yīng)的操作,觸發(fā)調(diào)用該應(yīng)用程序編程接口,以獲取并保存當(dāng)前該運(yùn)行性能數(shù)據(jù);
s400)將該運(yùn)行性能數(shù)據(jù)導(dǎo)出到外部文件。
在本發(fā)明的上述方法中,該應(yīng)用程序編程接口包括mono平臺從操作系統(tǒng)的分配內(nèi)存接口。
在本發(fā)明的上述方法中,該應(yīng)用程序編程接口包括圖形渲染接口。
進(jìn)一步地,該圖形渲染接口被抓取的運(yùn)行性能數(shù)據(jù)包括接口調(diào)用次數(shù)、三角形數(shù)以及頂點數(shù)。
在本發(fā)明的上述方法中,該應(yīng)用程序編程接口包括場景切換接口。
進(jìn)一步地,該場景切換接口被抓取的運(yùn)行性能數(shù)據(jù)包括該場景切換接口調(diào)用耗時。
在本發(fā)明的上述方法中,該應(yīng)用程序編程接口包括資源加載接口。
進(jìn)一步地,該資源加載接口被抓取的運(yùn)行性能數(shù)據(jù)包括資源加載統(tǒng)計數(shù)據(jù)。
本發(fā)明也提出了一種深度抓取手機(jī)應(yīng)用運(yùn)行性能數(shù)據(jù)的裝置,用于安卓智能手機(jī)中基于unity引擎開發(fā)的程序,包括以下模塊:
啟動模塊,用于啟動被檢測手機(jī)應(yīng)用,并監(jiān)視該手機(jī)應(yīng)用進(jìn)程;
觸發(fā)模塊,用于手機(jī)應(yīng)用開發(fā)人員在執(zhí)行操作后,發(fā)出抓取應(yīng)用程序編程接口的當(dāng)前運(yùn)行性能數(shù)據(jù)的消息;
抓取模塊,用于接收抓取應(yīng)用程序編程接口的當(dāng)前運(yùn)行性能數(shù)據(jù)的消息后,抓取對應(yīng)的運(yùn)行性能數(shù)據(jù);
導(dǎo)出模塊,用于將抓取的運(yùn)行性能數(shù)據(jù)導(dǎo)出到外部文件。
在本發(fā)明的上述裝置中,該觸發(fā)模塊在該手機(jī)應(yīng)用開發(fā)人員執(zhí)行相應(yīng)操作后,發(fā)出抓取mono平臺從操作系統(tǒng)的該分配內(nèi)存接口的當(dāng)前運(yùn)行性能數(shù)據(jù)的消息。
在本發(fā)明的上述裝置中,該觸發(fā)模塊在該手機(jī)應(yīng)用開發(fā)人員執(zhí)行相應(yīng)操作后,發(fā)出抓取該圖形渲染接口的當(dāng)前運(yùn)行性能數(shù)據(jù)的消息。
進(jìn)一步地,該抓取模塊接收抓取該圖形渲染接口的當(dāng)前運(yùn)行性能數(shù)據(jù)的消息后,抓取的運(yùn)行性能數(shù)據(jù)包括接口調(diào)用次數(shù)、三角形數(shù)以及頂點數(shù)。
在本發(fā)明的上述裝置中,該觸發(fā)模塊在該手機(jī)應(yīng)用開發(fā)人員執(zhí)行相應(yīng)操作后,發(fā)出抓取該場景切換接口的當(dāng)前運(yùn)行性能數(shù)據(jù)的消息。
進(jìn)一步地,該抓取模塊接收抓取該場景切換接口的當(dāng)前運(yùn)行性能數(shù)據(jù)的消息后,抓取的運(yùn)行性能數(shù)據(jù)包括該場景切換接口調(diào)用耗時。
在本發(fā)明的上述裝置中,該觸發(fā)模塊在該手機(jī)應(yīng)用開發(fā)人員執(zhí)行相應(yīng)操作后,發(fā)出抓取該資源加載接口的當(dāng)前運(yùn)行性能數(shù)據(jù)的消息。
進(jìn)一步地,該抓取模塊接收抓取該資源加載接口的當(dāng)前運(yùn)行性能數(shù)據(jù)的消息后,抓取的運(yùn)行性能數(shù)據(jù)包括資源加載統(tǒng)計數(shù)據(jù)。
本發(fā)明還提供了一種計算機(jī)可讀介質(zhì),包含用于執(zhí)行上述深度抓取手機(jī)應(yīng)用運(yùn)行性能數(shù)據(jù)方法的指令。
本發(fā)明的有益效果為:通過不受開發(fā)版本和發(fā)行版本的限制,深度抓取真實用戶使用安卓智能手機(jī)中基于unity引擎開發(fā)程序的運(yùn)行性能數(shù)據(jù),為手機(jī)應(yīng)用開發(fā)人員進(jìn)行優(yōu)化提供數(shù)據(jù)支撐;同時通過收集當(dāng)前外網(wǎng)中使用unity引擎開發(fā)的大量手機(jī)游戲的性能數(shù)據(jù),為制定性能測試的標(biāo)準(zhǔn)提供大數(shù)據(jù)支持。
附圖說明
圖1所示為本發(fā)明提出的深度抓取手機(jī)應(yīng)用運(yùn)行性能數(shù)據(jù)的方法流程圖;
圖2所示為本發(fā)明提出的抓取內(nèi)存狀況的運(yùn)行性能數(shù)據(jù)的方法流程圖;
圖3所示為本發(fā)明提出的抓取圖形渲染的運(yùn)行性能數(shù)據(jù)的方法流程圖;
圖4所示為本發(fā)明提出的抓取場景切換的運(yùn)行性能數(shù)據(jù)的方法流程圖;
圖5所示為本發(fā)明提出的抓取資源加載的運(yùn)行性能數(shù)據(jù)的方法流程圖;
圖6所示為本發(fā)明提出的深度抓取手機(jī)應(yīng)用運(yùn)行性能數(shù)據(jù)的裝置結(jié)構(gòu)圖。
具體實施方式
以下將結(jié)合實施例和附圖對本發(fā)明的構(gòu)思、具體結(jié)構(gòu)及產(chǎn)生的技術(shù)效果進(jìn)行清楚、完整的描述,以充分地理解本發(fā)明的目的、方案和效果。需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互組合。附圖中各處使用的相同的附圖標(biāo)記指示相同或相似的部分。
圖1所示為本發(fā)明提出的深度抓取手機(jī)應(yīng)用運(yùn)行性能數(shù)據(jù)的方法流程圖。參照圖1,一個用于安卓智能手機(jī)中基于unity引擎開發(fā)程序的示例性實施例,包括如下步驟:
s100)啟動被檢測手機(jī)應(yīng)用,通過adb工具連接手機(jī),并使用注入程序?qū)⒈O(jiān)控代碼注入到手機(jī)應(yīng)用,從而監(jiān)視所述手機(jī)應(yīng)用進(jìn)程;
s200)查找unity引擎中相關(guān)的應(yīng)用程序編程接口,并檢測所述應(yīng)用程序編程接口的運(yùn)行性能數(shù)據(jù);
s300)執(zhí)行對應(yīng)的操作,觸發(fā)調(diào)用所述應(yīng)用程序編程接口,以獲取并保存當(dāng)前所述運(yùn)行性能數(shù)據(jù);
s400)當(dāng)退出被檢測手機(jī)應(yīng)用時,將收集到的所述運(yùn)行性能數(shù)據(jù)導(dǎo)出到外部文件。
根據(jù)本發(fā)明的一個優(yōu)選實施例,參照圖2所示的抓取內(nèi)存狀況的運(yùn)行性能數(shù)據(jù)的方法流程圖,執(zhí)行深度抓取手機(jī)應(yīng)用所述運(yùn)行性能數(shù)據(jù)的功能代碼注入被檢測手機(jī)游戲進(jìn)程后,查找unity引擎中mono平臺從操作系統(tǒng)的所述分配內(nèi)存接口;當(dāng)執(zhí)行相關(guān)的操作,觸發(fā)unity引擎中mono平臺從操作系統(tǒng)的所述分配內(nèi)存接口時,監(jiān)控代碼將通過所述分配內(nèi)存接口,抓取即時內(nèi)存分配的所述運(yùn)行性能數(shù)據(jù)。
根據(jù)本發(fā)明的一個優(yōu)選實施例,參照圖3所示的抓取圖形渲染的性能數(shù)據(jù)方法流程圖,執(zhí)行深度抓取手機(jī)應(yīng)用所述運(yùn)行性能數(shù)據(jù)的功能代碼注入被檢測手機(jī)游戲進(jìn)程后,查找unity引擎中的所述圖形渲染接口,例如gldraw中的相關(guān)接口;當(dāng)執(zhí)行相關(guān)的操作,觸發(fā)unity引擎中的所述圖形渲染接口時,監(jiān)控代碼將通過所述圖形渲染接口,抓取包括但不限于每幀的drawcall接口調(diào)用次數(shù)、三角形數(shù)以及頂點數(shù)等所述運(yùn)行性能數(shù)據(jù)。
根據(jù)本發(fā)明的一個優(yōu)選實施例,參照圖4所示的抓取場景切換的性能數(shù)據(jù)方法流程圖,執(zhí)行深度抓取手機(jī)應(yīng)用所述運(yùn)行性能數(shù)據(jù)的功能代碼注入被檢測手機(jī)游戲進(jìn)程后,查找unity引擎中的所述場景切換接口;當(dāng)執(zhí)行相關(guān)的場景切換操作,觸發(fā)unity引擎中的所述場景切換接口時,監(jiān)控代碼將通過所述場景切換接口,抓取包括但不限于所述場景切換接口調(diào)用耗時等所述運(yùn)行性能數(shù)據(jù)。
根據(jù)本發(fā)明的另一個優(yōu)選實施例,參照圖5所示的抓取資源加載的性能數(shù)據(jù)方法流程圖,執(zhí)行深度抓取手機(jī)應(yīng)用所述運(yùn)行性能數(shù)據(jù)的功能代碼注入被檢測手機(jī)游戲進(jìn)程后,查找unity引擎中的所述資源加載接口;當(dāng)執(zhí)行相關(guān)的操作,觸發(fā)unity引擎中的所述資源加載接口時,監(jiān)控代碼將通過所述資源加載接口,抓取包括但不限于所述資源加載接口的統(tǒng)計資源等所述運(yùn)行性能數(shù)據(jù)。
實現(xiàn)上述深度抓取手機(jī)應(yīng)用運(yùn)行性能數(shù)據(jù)方法的功能代碼可編譯而生成可執(zhí)行程序,并保存在計算機(jī)可讀介質(zhì)中。
圖6所示為本發(fā)明提出的深度抓取手機(jī)應(yīng)用運(yùn)行性能數(shù)據(jù)的裝置結(jié)構(gòu)圖。所述裝置用于安卓智能手機(jī)中基于unity引擎開發(fā)的程序。參照圖6,圖中箭頭的表示數(shù)據(jù)流向。
手機(jī)應(yīng)用開發(fā)人員開始測試游戲后,啟動模塊啟動被檢測手機(jī)應(yīng)用,并監(jiān)視所述手機(jī)應(yīng)用進(jìn)程,使得觸發(fā)模塊可以查找unity引擎中相關(guān)的應(yīng)用程序編程接口;當(dāng)手機(jī)應(yīng)用開發(fā)人員執(zhí)行相應(yīng)的操作后,觸發(fā)模塊檢測到unity引擎中相關(guān)的應(yīng)用程序編程接口被調(diào)用后,向抓取模塊發(fā)出抓取應(yīng)用程序編程接口的當(dāng)前運(yùn)行性能數(shù)據(jù)的消息;抓取模塊在接收抓取應(yīng)用程序編程接口的當(dāng)前運(yùn)行性能數(shù)據(jù)的消息后,抓取對應(yīng)的運(yùn)行性能數(shù)據(jù);測試完畢后,導(dǎo)出模塊將抓取的運(yùn)行性能數(shù)據(jù)導(dǎo)出到外部文件。
根據(jù)本發(fā)明的一個優(yōu)選實施例,所述觸發(fā)模塊查找unity引擎中mono平臺從操作系統(tǒng)的所述分配內(nèi)存接口;當(dāng)執(zhí)行相關(guān)的操作,所述觸發(fā)模塊檢測到unity引擎中mono平臺從操作系統(tǒng)的所述分配內(nèi)存接口被調(diào)用時,向所述抓取模塊發(fā)出消息;所述抓取模塊接收到消息后,將通過所述分配內(nèi)存接口,抓取即時內(nèi)存分配的所述運(yùn)行性能數(shù)據(jù)。
根據(jù)本發(fā)明的一個優(yōu)選實施例,所述觸發(fā)模塊查找unity引擎中的所述圖形渲染接口,例如gldraw中的相關(guān)接口;當(dāng)執(zhí)行相關(guān)的場景切換操作,所述觸發(fā)模塊檢測到unity引擎中的所述圖形渲染接口被調(diào)用時,向所述抓取模塊發(fā)出消息;所述抓取模塊接收到消息后,將通過所述圖形渲染接口,抓取包括但不限于每幀的drawcall接口調(diào)用次數(shù)、三角形數(shù)以及頂點數(shù)等所述運(yùn)行性能數(shù)據(jù)。
根據(jù)本發(fā)明的一個優(yōu)選實施例,所述觸發(fā)模塊查找unity引擎中的所述場景切換接口;當(dāng)執(zhí)行相關(guān)的場景切換操作,所述觸發(fā)模塊檢測到unity引擎中的所述場景切換接口被調(diào)用時,向所述抓取模塊發(fā)出消息;所述抓取模塊接收到消息后,將通過所述場景切換接口,抓取包括但不限于所述場景切換接口調(diào)用耗時等運(yùn)行性能數(shù)據(jù)。
根據(jù)本發(fā)明的另一個優(yōu)選實施例,所述觸發(fā)模塊查找unity引擎中的所述資源加載接口;當(dāng)執(zhí)行相關(guān)的操作,所述觸發(fā)模塊檢測到unity引擎中的所述資源加載接口被調(diào)用時,向所述抓取模塊發(fā)出消息;所述抓取模塊接收到消息后,將通過所述資源加載接口,抓取包括但不限于所述資源加載接口的統(tǒng)計資源等所述運(yùn)行性能數(shù)據(jù)。
盡管本發(fā)明的描述已經(jīng)相當(dāng)詳盡且特別對幾個所述實施例進(jìn)行了描述,但其并非旨在局限于任何這些細(xì)節(jié)或?qū)嵤├蛉魏翁厥鈱嵤├?,而是?yīng)當(dāng)將其視作是通過參考所附權(quán)利要求考慮到現(xiàn)有技術(shù)為這些權(quán)利要求提供廣義的可能性解釋,從而有效地涵蓋本發(fā)明的預(yù)定范圍。此外,上文以發(fā)明人可預(yù)見的實施例對本發(fā)明進(jìn)行描述,其目的是為了提供有用的描述,而那些目前尚未預(yù)見的對本發(fā)明的非實質(zhì)性改動仍可代表本發(fā)明的等效改動。