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 --"+"กข"-" 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