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

怎么統(tǒng)計(jì)每個(gè)函數(shù)的運(yùn)行時(shí)間和次數(shù)

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

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

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

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

    return function( ... )
        local current_stack = nil

        local parent_stack = PerformanceStatistics:getInstance()._stack_parent      
        
		

網(wǎng)友評(píng)論