怎么調(diào)試lua性能

我們的游戲使用的是Cocos2dx-lua 3.9的項目,最近發(fā)現(xiàn)我們的游戲。運行比較緩慢。想做一次性能優(yōu)化了。其實主要分為GPU、CPU的分別優(yōu)化。GPU部分的優(yōu)化。網(wǎng)上有很多優(yōu)化措施。但是CPU因為是每個項目都不一樣所以也沒有什么特別的通用的優(yōu)化手段。軟件運行的速度畢竟跟你的代碼質(zhì)量是直接掛鉤的。常規(guī)的Lua優(yōu)化方式。也就是很多地方在提的公共函數(shù)的本地化。比如說`local type = type`這種。不過在后來的調(diào)查中發(fā)現(xiàn)這種方式對于lua5.1效果比較明顯。至于5.3或者luaJIT則效果不是很明顯。調(diào)查中發(fā)現(xiàn)3.9是使用luaJIT的(想知道自己的項目解釋器是不是Jit應該可以print(jit and jit.version))。所以這部分我們就暫時不做了。只能從項目中設計不合理的部分改起了。但是從什么地方開始改。那些函數(shù)調(diào)用的時間比較長,就需要來統(tǒng)計函數(shù)的運行次數(shù)與時間了。

怎么統(tǒng)計每個函數(shù)的運行時間和次數(shù)

網(wǎng)上找了找相關資料,就這篇文章寫的還算明白。lua性能分析。不過我并沒有找到他的代碼,因為Github上的這個項目好像是丟了,不知道為什么。不過大體意思是明白怎么回事了。簡單點說就是在C++層面上通過兩個回調(diào)(函數(shù)進入時、退出時)然后統(tǒng)計時間,然后根據(jù)執(zhí)行的先后順序來一層一層的打印對應的對戰(zhàn),達到游戲中所有的函數(shù)運行時間心中有數(shù)的目的。因為沒有找到他的源碼。不過好在讀懂他是什么意思了。不過我對于Lua C++部分的代碼并不是很熟,所以我決定在Lua方面做手腳,統(tǒng)計函數(shù)的執(zhí)行時間究竟有多長,畢竟可以打到同樣的目的,不過Lua統(tǒng)計時間看看就好。不要太當真。

怎樣給Lua的函數(shù)添加上統(tǒng)計代碼

或許對于其他語言來說這件事情沒有那么容易,不過對于lua語言來說這就簡單多了。最簡單的手段就是讓原來的函數(shù)等于一個新的函數(shù)。在新的函數(shù)中計時并且調(diào)用原來的函數(shù)就可以了。廢話不多說了。直接上相關代碼可能更容易看懂

local function PerformanceStatisticsFunction(key, func)
    -- print("PerformanceStatisticsFunction", key)

    return function( ... )
        local current_stack = nil

 
        
		

網(wǎng)友評論