axmol/samples/Lua/TestLua/Resources/luaScript/PerformanceTest/PerformanceTest.lua

395 lines
12 KiB
Lua
Raw Blame History

require "luaScript/PerformanceTest/PerformanceSpriteTest"
local MAX_COUNT = 5
local LINE_SPACE = 40
local kItemTagBasic = 1000
local testsName =
{
"PerformanceNodeChildrenTest",
"PerformanceParticleTest",
"PerformanceSpriteTest",
"PerformanceTextureTest",
"PerformanceTouchesTest"
}
local s = CCDirector:sharedDirector():getWinSize()
--Create toMainLayr MenuItem
function CreatePerfomBasicLayerMenu(pMenu)
if nil == pMenu then
return
end
local function toMainLayer()
local pScene = PerformanceTestMain()
if pScene ~= nil then
CCDirector:sharedDirector():replaceScene(pScene)
end
end
--Create BackMneu
CCMenuItemFont:setFontName("Arial")
CCMenuItemFont:setFontSize(24);
local pMenuItemFont = CCMenuItemFont:create("Back");
pMenuItemFont:setPosition(ccp(VisibleRect:rightBottom().x - 50, VisibleRect:rightBottom().y + 25))
pMenuItemFont:registerScriptTapHandler(toMainLayer)
pMenu:addChild(pMenuItemFont)
end
----------------------------------
--PerformanceNodeChildrenTest
----------------------------------
local NodeChildrenTestParam =
{
kTagInfoLayer = 1,
kTagMainLayer = 2,
kTagLabelAtlas = 3,
kTagBase = 20000,
TEST_COUNT = 4,
kMaxNodes = 15000,
kNodesIncrease = 500,
}
local function runNodeChildrenTest()
--NodeChildrenMainScene
local nLastRenderedCount = 0
local nQuantityOfNodes = 0
local nCurrentQuantityOfNodes = 0
--IterateSpriteSheet
local pBatchNode = nil
--BasiceLayer param
local bControlMenuVisible = false
local nMaxCases = 0
local nCurCase = 0
local pNewscene = CCScene:create()
local function ShowCurrentTest()
end
local function GetTitle()
if 0 == nCurCase then
return "B - Iterate SpriteSheet"
elseif 1 == nCurCase then
return "C - Add to spritesheet"
elseif 2 == nCurCase then
return "D - Del from spritesheet"
elseif 3 == nCurCase then
return "E - Reorder from spritesheet"
end
end
local function GetSubTitle()
if 0 == nCurCase then
return "Iterate children using C Array API. See console"
elseif 1 == nCurCase then
return "Adds %10 of total sprites with random z. See console"
elseif 2 == nCurCase then
return "Remove %10 of total sprites placed randomly. See console"
elseif 3 == nCurCase then
return "Reorder %10 of total sprites placed randomly. See console"
end
end
local function GetProfilerName()
if 0 == nCurCase then
return "iter c-array"
elseif 1 == nCurCase then
return "add sprites"
elseif 2 == nCurCase then
return "remove sprites"
elseif 3 == nCurCase then
return "reorder sprites"
end
end
local function CreateBasicLayerMenuItem(pMenu,bMenuVisible,nMaxCasesNum,nCurCaseIndex)
if nil ~= pMenu then
bControlMenuVisible = bMenuVisible
nMaxCases = nMaxCasesNum
nCurCase = nCurCaseIndex
if true == bControlMenuVisible then
local function backCallback()
nCurCase = nCurCase - 1
if nCurCase < 0 then
nCurCase = nCurCase + nMaxCases
end
ShowCurrentTest()
end
local function restartCallback()
ShowCurrentTest()
end
local function nextCallback()
nCurCase = nCurCase + 1
--No check nMaxCases
nCurCase = nCurCase % nMaxCases
ShowCurrentTest()
end
local size = CCDirector:sharedDirector():getWinSize()
local item1 = CCMenuItemImage:create(s_pPathB1, s_pPathB2)
item1:registerScriptTapHandler(backCallback)
pMenu:addChild(item1,kItemTagBasic)
local item2 = CCMenuItemImage:create(s_pPathR1, s_pPathR2)
item2:registerScriptTapHandler(restartCallback)
pMenu:addChild(item2,kItemTagBasic)
local item3 = CCMenuItemImage:create(s_pPathF1, s_pPathF2)
pMenu:addChild(item3,kItemTagBasic)
item3:registerScriptTapHandler(nextCallback)
local size = CCDirector:sharedDirector():getWinSize()
item1:setPosition(CCPointMake(size.width / 2 - item2:getContentSize().width * 2, item2:getContentSize().height / 2))
item2:setPosition(CCPointMake(size.width / 2, item2:getContentSize().height / 2))
item3:setPosition(CCPointMake(size.width / 2 + item2:getContentSize().width * 2, item2:getContentSize().height / 2))
end
end
end
local function updateQuantityLabel()
if nQuantityOfNodes ~= nLastRenderedCount then
-- local pInfoLabel = pNewscene:getChildByTag(NodeChildrenTestParam.kTagInfoLayer)
local pInfoLabel = tolua.cast(pNewscene:getChildByTag(NodeChildrenTestParam.kTagInfoLayer), "CCLabelTTF")
local strNode = nQuantityOfNodes.." nodes"
pInfoLabel:setString(strNode)
nLastRenderedCount = nQuantityOfNodes
end
end
local function IterateSpriteSheetCArrayUpdate(t)
if nil == pBatchNode then
return
end
local pChildren = pBatchNode:getChildren()
local pObject = nil
if nil == pChildren then
return
end
local i = 0
local len = pChildren:count()
for i = 0, len - 1, 1 do
local child = tolua.cast(pChildren:objectAtIndex(i), "CCSprite")
child:setVisible(false)
end
end
local function NodeChildrenScheduleUpdate()
if 0 == nCurCase then
pNewscene:scheduleUpdateWithPriorityLua(IterateSpriteSheetCArrayUpdate,0)
elseif 1 == nCurCase then
elseif 2 == nCurCase then
elseif 3 == nCurCase then
end
end
local function updateQuantityOfNodes()
local s = CCDirector:sharedDirector():getWinSize()
--increase nodes
if( nCurrentQuantityOfNodes < nQuantityOfNodes ) then
local i = 0
for i = 0,nQuantityOfNodes - nCurrentQuantityOfNodes - 1 do
local sprite = CCSprite:createWithTexture(pBatchNode:getTexture(), CCRectMake(0, 0, 32, 32))
pBatchNode:addChild(sprite)
sprite:setPosition(ccp( math.random() * s.width, math.random() * s.height))
if 0 ~= nCurCase then
sprite:setVisible(false)
end
end
elseif (nCurrentQuantityOfNodes > nQuantityOfNodes ) then
i = 0
for i = 0, nCurrentQuantityOfNodes - nQuantityOfNodes - 1 do
local index = nCurrentQuantityOfNodes - i - 1
pBatchNode:removeChildAtIndex(index, true)
end
end
nCurrentQuantityOfNodes = nQuantityOfNodes
end
local function onDecrease()
nQuantityOfNodes = nQuantityOfNodes - NodeChildrenTestParam.kNodesIncrease
if nQuantityOfNodes < 0 then
nQuantityOfNodes = 0
end
updateQuantityLabel()
updateQuantityOfNodes()
end
local function onIncrease()
nQuantityOfNodes = nQuantityOfNodes + NodeChildrenTestParam.kNodesIncrease
if nQuantityOfNodes > NodeChildrenTestParam.kMaxNodes then
nQuantityOfNodes = NodeChildrenTestParam.kMaxNodes
end
updateQuantityLabel()
updateQuantityOfNodes()
end
local function SpecialInitWithQuantityOfNodes()
if 0 == nCurCase then
pBatchNode = CCSpriteBatchNode:create("Images/spritesheet1.png")
pNewscene:addChild(pBatchNode)
else
pBatchNode = CCSpriteBatchNode:create("Images/spritesheet1.png");
pNewscene:addChild(pBatchNode);
end
end
local function MainSceneInitWithQuantityOfNodes(nNodes)
local s = CCDirector:sharedDirector():getWinSize()
--Title
local pLabel = CCLabelTTF:create(GetTitle(), "Arial", 40)
pNewscene:addChild(pLabel, 1)
pLabel:setPosition(ccp(s.width/2, s.height-32))
pLabel:setColor(ccc3(255,255,40))
if (nil ~= GetSubTitle()) and ("" ~= GetSubTitle()) then
local pSubLabel = CCLabelTTF:create(GetSubTitle(), "Thonburi", 16);
pNewscene:addChild(pSubLabel, 1);
pSubLabel:setPosition(ccp(s.width/2, s.height-80))
end
nLastRenderedCount = 0
nCurrentQuantityOfNodes = 0
nQuantityOfNodes = nNodes
--"+"<22><>"-" Menu
CCMenuItemFont:setFontSize(65);
local pDecrease = CCMenuItemFont:create(" - ")
pDecrease:registerScriptTapHandler(onDecrease)
pDecrease:setColor(ccc3(0,200,20));
local pIncrease = CCMenuItemFont:create(" + ")
pIncrease:registerScriptTapHandler(onIncrease)
pIncrease:setColor(ccc3(0,200,20));
local pMenuAddOrSub = CCMenu:create()
pMenuAddOrSub:addChild(pDecrease)
pMenuAddOrSub:addChild(pIncrease)
pMenuAddOrSub:alignItemsHorizontally();
pMenuAddOrSub:setPosition(ccp(s.width/2, s.height/2+15));
pNewscene:addChild(pMenuAddOrSub,1)
--InfoLayer
local pInfoLabel = CCLabelTTF:create("0 nodes", "Marker Felt", 30);
pInfoLabel:setColor(ccc3(0,200,20));
pInfoLabel:setPosition(ccp(s.width/2, s.height/2-15));
pNewscene:addChild(pInfoLabel, 1, NodeChildrenTestParam.kTagInfoLayer);
--NodeChildrenMenuLayer
local pNodeChildrenMenuLayer = CCLayer:create()
local pNodeChildrenMenuMenu = CCMenu:create()
CreatePerfomBasicLayerMenu(pNodeChildrenMenuMenu)
CreateBasicLayerMenuItem(pNodeChildrenMenuMenu,true,NodeChildrenTestParam.TEST_COUNT,nCurCase)
pNodeChildrenMenuMenu:setPosition(ccp(0, 0))
pNodeChildrenMenuLayer:addChild(pNodeChildrenMenuMenu)
pNewscene:addChild(pNodeChildrenMenuLayer)
updateQuantityLabel()
updateQuantityOfNodes()
end
SpecialInitWithQuantityOfNodes()
MainSceneInitWithQuantityOfNodes(NodeChildrenTestParam.kNodesIncrease)
NodeChildrenScheduleUpdate()
return pNewscene
end
----------------------------------
--PerformanceParticleTest
----------------------------------
local ParticleTestParam =
{
kTagInfoLayer = 1,
kTagMainLayer = 2,
kTagParticleSystem = 3,
kTagLabelAtlas = 4,
kTagMenuLayer = 1000,
TEST_COUNT = 4,
kMaxParticles = 14000,
kNodesIncrease = 500,
}
local function runParticleTest()
local lastRenderedCount
local quantityParticles
local subtestNumber
end
local CreatePerformancesTestTable =
{
runNodeChildrenTest,
runParticleTest,
runSpriteTest,
runTextureTest,
runTouchesTest
}
local function CreatePerformancesTestScene(nPerformanceNo)
local pNewscene = CreatePerformancesTestTable[nPerformanceNo]()
return pNewscene
end
local function menuCallback(tag, pMenuItem)
local scene = nil
local nIdx = pMenuItem:getZOrder() - kItemTagBasic
local PerformanceTestScene = CreatePerformancesTestScene(nIdx)
if nil ~= PerformanceTestScene then
CCDirector:sharedDirector():replaceScene(PerformanceTestScene)
end
--[[
if tag == "enter" then
scene = PerformanceSpriteTest()
elseif tag == 1 then
elseif tag == 2 then
elseif tag == 3 then
elseif tag == 4 then
end
if scene ~= nil then
CCDirector:sharedDirector():replaceScene(scene)
end
]]--
end
local function PerformanceMainLayer()
local layer = CCLayer:create()
local menu = CCMenu:create()
menu:setPosition(CCPointMake(0, 0))
CCMenuItemFont:setFontName("Arial")
CCMenuItemFont:setFontSize(24)
for i = 1, MAX_COUNT do
local item = CCMenuItemFont:create(testsName[i])
item:registerScriptTapHandler(menuCallback)
item:setPosition(s.width / 2, s.height - (i + 1) * LINE_SPACE)
menu:addChild(item, kItemTagBasic + i)
end
layer:addChild(menu)
return layer
end
-------------------------------------
-- Performance Test
-------------------------------------
function PerformanceTestMain()
local scene = CCScene:create()
scene:addChild(PerformanceMainLayer())
scene:addChild(CreateBackMenuItem())
return scene
end