2012-04-19 14:35:52 +08:00
# include "PerformanceSpriteTest.h"
2011-03-25 13:59:08 +08:00
enum {
2012-06-12 16:56:34 +08:00
kMaxNodes = 50000 ,
kNodesIncrease = 250 ,
2011-03-25 13:59:08 +08:00
TEST_COUNT = 7 ,
} ;
enum {
kTagInfoLayer = 1 ,
kTagMainLayer = 2 ,
2013-09-30 16:22:55 +08:00
kTagAutoTestMenu = 3 ,
2011-04-21 14:46:15 +08:00
kTagMenuLayer = ( kMaxNodes + 1000 ) ,
2011-03-25 13:59:08 +08:00
} ;
2012-04-19 14:35:52 +08:00
////////////////////////////////////////////////////////
//
// SubTest
//
2011-03-25 13:59:08 +08:00
////////////////////////////////////////////////////////
2011-04-07 14:30:35 +08:00
SubTest : : ~ SubTest ( )
{
2012-04-19 14:35:52 +08:00
if ( batchNode )
{
batchNode - > release ( ) ;
batchNode = NULL ;
}
2011-04-07 14:30:35 +08:00
}
2013-06-20 14:17:10 +08:00
void SubTest : : initWithSubTest ( int nSubTest , Node * p )
2011-03-25 13:59:08 +08:00
{
subtestNumber = nSubTest ;
parent = p ;
batchNode = NULL ;
/*
* Tests :
* 1 : 1 ( 32 - bit ) PNG sprite of 52 x 139
* 2 : 1 ( 32 - bit ) PNG Batch Node using 1 sprite of 52 x 139
* 3 : 1 ( 16 - bit ) PNG Batch Node using 1 sprite of 52 x 139
* 4 : 1 ( 4 - bit ) PVRTC Batch Node using 1 sprite of 52 x 139
* 5 : 14 ( 32 - bit ) PNG sprites of 85 x 121 each
* 6 : 14 ( 32 - bit ) PNG Batch Node of 85 x 121 each
* 7 : 14 ( 16 - bit ) PNG Batch Node of 85 x 121 each
* 8 : 14 ( 4 - bit ) PVRTC Batch Node of 85 x 121 each
* 9 : 64 ( 32 - bit ) sprites of 32 x 32 each
* 10 : 64 ( 32 - bit ) PNG Batch Node of 32 x 32 each
* 11 : 64 ( 16 - bit ) PNG Batch Node of 32 x 32 each
* 12 : 64 ( 4 - bit ) PVRTC Batch Node of 32 x 32 each
*/
// purge textures
2013-08-16 16:05:27 +08:00
auto mgr = TextureCache : : getInstance ( ) ;
2012-04-19 14:35:52 +08:00
// [mgr removeAllTextures];
2011-03-25 13:59:08 +08:00
mgr - > removeTexture ( mgr - > addImage ( " Images/grossinis_sister1.png " ) ) ;
mgr - > removeTexture ( mgr - > addImage ( " Images/grossini_dance_atlas.png " ) ) ;
mgr - > removeTexture ( mgr - > addImage ( " Images/spritesheet1.png " ) ) ;
switch ( subtestNumber )
{
case 1 :
case 4 :
case 7 :
break ;
///
case 2 :
2013-07-26 04:36:19 +08:00
Texture2D : : setDefaultAlphaPixelFormat ( Texture2D : : PixelFormat : : RGBA8888 ) ;
2013-06-20 14:17:10 +08:00
batchNode = SpriteBatchNode : : create ( " Images/grossinis_sister1.png " , 100 ) ;
2011-03-25 13:59:08 +08:00
p - > addChild ( batchNode , 0 ) ;
break ;
case 3 :
2013-07-26 04:36:19 +08:00
Texture2D : : setDefaultAlphaPixelFormat ( Texture2D : : PixelFormat : : RGBA4444 ) ;
2013-06-20 14:17:10 +08:00
batchNode = SpriteBatchNode : : create ( " Images/grossinis_sister1.png " , 100 ) ;
2011-03-25 13:59:08 +08:00
p - > addChild ( batchNode , 0 ) ;
break ;
///
case 5 :
2013-07-26 04:36:19 +08:00
Texture2D : : setDefaultAlphaPixelFormat ( Texture2D : : PixelFormat : : RGBA8888 ) ;
2013-06-20 14:17:10 +08:00
batchNode = SpriteBatchNode : : create ( " Images/grossini_dance_atlas.png " , 100 ) ;
2011-03-25 13:59:08 +08:00
p - > addChild ( batchNode , 0 ) ;
2012-04-19 14:35:52 +08:00
break ;
2011-03-25 13:59:08 +08:00
case 6 :
2013-07-26 04:36:19 +08:00
Texture2D : : setDefaultAlphaPixelFormat ( Texture2D : : PixelFormat : : RGBA4444 ) ;
2013-06-20 14:17:10 +08:00
batchNode = SpriteBatchNode : : create ( " Images/grossini_dance_atlas.png " , 100 ) ;
2011-03-25 13:59:08 +08:00
p - > addChild ( batchNode , 0 ) ;
break ;
///
case 8 :
2013-07-26 04:36:19 +08:00
Texture2D : : setDefaultAlphaPixelFormat ( Texture2D : : PixelFormat : : RGBA8888 ) ;
2013-06-20 14:17:10 +08:00
batchNode = SpriteBatchNode : : create ( " Images/spritesheet1.png " , 100 ) ;
2011-03-25 13:59:08 +08:00
p - > addChild ( batchNode , 0 ) ;
break ;
case 9 :
2013-07-26 04:36:19 +08:00
Texture2D : : setDefaultAlphaPixelFormat ( Texture2D : : PixelFormat : : RGBA4444 ) ;
2013-06-20 14:17:10 +08:00
batchNode = SpriteBatchNode : : create ( " Images/spritesheet1.png " , 100 ) ;
2011-03-25 13:59:08 +08:00
p - > addChild ( batchNode , 0 ) ;
break ;
default :
break ;
}
2012-04-19 14:35:52 +08:00
if ( batchNode )
{
batchNode - > retain ( ) ;
}
2011-03-25 13:59:08 +08:00
2013-07-26 04:36:19 +08:00
Texture2D : : setDefaultAlphaPixelFormat ( Texture2D : : PixelFormat : : DEFAULT ) ;
2011-03-25 13:59:08 +08:00
}
2013-06-20 14:17:10 +08:00
Sprite * SubTest : : createSpriteWithTag ( int tag )
2011-03-25 13:59:08 +08:00
{
// create
2013-07-26 04:36:19 +08:00
Texture2D : : setDefaultAlphaPixelFormat ( Texture2D : : PixelFormat : : RGBA8888 ) ;
2011-03-25 13:59:08 +08:00
2013-06-20 14:17:10 +08:00
Sprite * sprite = NULL ;
2011-03-25 13:59:08 +08:00
switch ( subtestNumber )
{
case 1 :
{
2013-06-20 14:17:10 +08:00
sprite = Sprite : : create ( " Images/grossinis_sister1.png " ) ;
2011-03-25 13:59:08 +08:00
parent - > addChild ( sprite , 0 , tag + 100 ) ;
break ;
}
case 2 :
case 3 :
{
2013-07-12 14:30:26 +08:00
sprite = Sprite : : createWithTexture ( batchNode - > getTexture ( ) , Rect ( 0 , 0 , 52 , 139 ) ) ;
2011-03-25 13:59:08 +08:00
batchNode - > addChild ( sprite , 0 , tag + 100 ) ;
break ;
}
case 4 :
{
int idx = ( CCRANDOM_0_1 ( ) * 1400 / 100 ) + 1 ;
char str [ 32 ] = { 0 } ;
sprintf ( str , " Images/grossini_dance_%02d.png " , idx ) ;
2013-06-20 14:17:10 +08:00
sprite = Sprite : : create ( str ) ;
2011-03-25 13:59:08 +08:00
parent - > addChild ( sprite , 0 , tag + 100 ) ;
break ;
}
case 5 :
case 6 :
{
int y , x ;
int r = ( CCRANDOM_0_1 ( ) * 1400 / 100 ) ;
y = r / 5 ;
x = r % 5 ;
x * = 85 ;
y * = 121 ;
2013-07-12 14:30:26 +08:00
sprite = Sprite : : createWithTexture ( batchNode - > getTexture ( ) , Rect ( x , y , 85 , 121 ) ) ;
2011-03-25 13:59:08 +08:00
batchNode - > addChild ( sprite , 0 , tag + 100 ) ;
break ;
}
case 7 :
{
int y , x ;
int r = ( CCRANDOM_0_1 ( ) * 6400 / 100 ) ;
y = r / 8 ;
x = r % 8 ;
char str [ 40 ] = { 0 } ;
sprintf ( str , " Images/sprites_test/sprite-%d-%d.png " , x , y ) ;
2013-06-20 14:17:10 +08:00
sprite = Sprite : : create ( str ) ;
2011-03-25 13:59:08 +08:00
parent - > addChild ( sprite , 0 , tag + 100 ) ;
break ;
}
case 8 :
case 9 :
{
int y , x ;
int r = ( CCRANDOM_0_1 ( ) * 6400 / 100 ) ;
y = r / 8 ;
x = r % 8 ;
x * = 32 ;
y * = 32 ;
2013-07-12 14:30:26 +08:00
sprite = Sprite : : createWithTexture ( batchNode - > getTexture ( ) , Rect ( x , y , 32 , 32 ) ) ;
2011-03-25 13:59:08 +08:00
batchNode - > addChild ( sprite , 0 , tag + 100 ) ;
break ;
}
default :
break ;
}
2013-07-26 04:36:19 +08:00
Texture2D : : setDefaultAlphaPixelFormat ( Texture2D : : PixelFormat : : DEFAULT ) ;
2011-03-25 13:59:08 +08:00
return sprite ;
}
void SubTest : : removeByTag ( int tag )
{
switch ( subtestNumber )
{
case 1 :
case 4 :
case 7 :
parent - > removeChildByTag ( tag + 100 , true ) ;
break ;
case 2 :
case 3 :
case 5 :
case 6 :
case 8 :
case 9 :
batchNode - > removeChildAtIndex ( tag , true ) ;
2012-04-19 14:35:52 +08:00
// [batchNode removeChildByTag:tag+100 cleanup:YES];
2011-03-25 13:59:08 +08:00
break ;
default :
break ;
}
}
2012-04-19 14:35:52 +08:00
////////////////////////////////////////////////////////
//
// SpriteMenuLayer
//
2011-03-25 13:59:08 +08:00
////////////////////////////////////////////////////////
2013-09-30 16:22:55 +08:00
void SpriteMenuLayer : : restartCallback ( Object * sender )
{
if ( SpriteMainScene : : _s_autoTest )
{
log ( " It's auto sprite performace testing,so this operation is invalid " ) ;
return ;
}
PerformBasicLayer : : restartCallback ( sender ) ;
}
void SpriteMenuLayer : : nextCallback ( Object * sender )
{
if ( SpriteMainScene : : _s_autoTest )
{
log ( " It's auto sprite performace testing,so this operation is invalid " ) ;
return ;
}
PerformBasicLayer : : nextCallback ( sender ) ;
}
void SpriteMenuLayer : : backCallback ( Object * sender )
{
if ( SpriteMainScene : : _s_autoTest )
{
log ( " It's auto sprite performace testing,so this operation is invalid " ) ;
return ;
}
PerformBasicLayer : : backCallback ( sender ) ;
}
2011-03-25 13:59:08 +08:00
void SpriteMenuLayer : : showCurrentTest ( )
{
2013-07-23 08:25:44 +08:00
SpriteMainScene * scene = NULL ;
2013-08-16 16:05:27 +08:00
auto pPreScene = ( SpriteMainScene * ) getParent ( ) ;
2011-03-25 13:59:08 +08:00
int nSubTest = pPreScene - > getSubTestNum ( ) ;
int nNodes = pPreScene - > getNodesNum ( ) ;
2013-06-15 14:03:30 +08:00
switch ( _curCase )
2011-03-25 13:59:08 +08:00
{
case 0 :
2013-07-23 08:25:44 +08:00
scene = new SpritePerformTest1 ;
2011-03-25 13:59:08 +08:00
break ;
case 1 :
2013-07-23 08:25:44 +08:00
scene = new SpritePerformTest2 ;
2011-03-25 13:59:08 +08:00
break ;
case 2 :
2013-07-23 08:25:44 +08:00
scene = new SpritePerformTest3 ;
2011-03-25 13:59:08 +08:00
break ;
case 3 :
2013-07-23 08:25:44 +08:00
scene = new SpritePerformTest4 ;
2011-03-25 13:59:08 +08:00
break ;
case 4 :
2013-07-23 08:25:44 +08:00
scene = new SpritePerformTest5 ;
2011-03-25 13:59:08 +08:00
break ;
case 5 :
2013-07-23 08:25:44 +08:00
scene = new SpritePerformTest6 ;
2011-03-25 13:59:08 +08:00
break ;
case 6 :
2013-07-23 08:25:44 +08:00
scene = new SpritePerformTest7 ;
2011-03-25 13:59:08 +08:00
break ;
}
2013-09-30 16:22:55 +08:00
SpriteMainScene : : _s_nSpriteCurCase = _curCase ;
2011-03-25 13:59:08 +08:00
2013-07-23 08:25:44 +08:00
if ( scene )
2012-04-19 14:35:52 +08:00
{
2013-07-23 08:25:44 +08:00
scene - > initWithSubTest ( nSubTest , nNodes ) ;
Director : : getInstance ( ) - > replaceScene ( scene ) ;
scene - > release ( ) ;
2012-04-19 14:35:52 +08:00
}
2011-03-25 13:59:08 +08:00
}
2012-04-19 14:35:52 +08:00
////////////////////////////////////////////////////////
//
// SpriteMainScene
//
2011-03-25 13:59:08 +08:00
////////////////////////////////////////////////////////
2013-09-30 16:22:55 +08:00
bool SpriteMainScene : : _s_autoTest = false ;
int SpriteMainScene : : _s_nSpriteCurCase = 0 ;
2011-03-25 13:59:08 +08:00
void SpriteMainScene : : initWithSubTest ( int asubtest , int nNodes )
{
//srandom(0);
subtestNumber = asubtest ;
2013-06-15 14:03:30 +08:00
_subTest = new SubTest ;
_subTest - > initWithSubTest ( asubtest , this ) ;
2011-03-25 13:59:08 +08:00
2013-08-16 16:05:27 +08:00
auto s = Director : : getInstance ( ) - > getWinSize ( ) ;
2011-03-25 13:59:08 +08:00
lastRenderedCount = 0 ;
quantityNodes = 0 ;
2013-06-20 14:17:10 +08:00
MenuItemFont : : setFontSize ( 65 ) ;
2013-08-16 16:05:27 +08:00
auto decrease = MenuItemFont : : create ( " - " , CC_CALLBACK_1 ( SpriteMainScene : : onDecrease , this ) ) ;
2013-07-05 16:49:22 +08:00
decrease - > setColor ( Color3B ( 0 , 200 , 20 ) ) ;
2013-08-16 16:05:27 +08:00
auto increase = MenuItemFont : : create ( " + " , CC_CALLBACK_1 ( SpriteMainScene : : onIncrease , this ) ) ;
2013-07-05 16:49:22 +08:00
increase - > setColor ( Color3B ( 0 , 200 , 20 ) ) ;
2011-03-25 13:59:08 +08:00
2013-08-16 16:05:27 +08:00
auto menu = Menu : : create ( decrease , increase , NULL ) ;
2011-03-25 13:59:08 +08:00
menu - > alignItemsHorizontally ( ) ;
2013-07-12 14:11:55 +08:00
menu - > setPosition ( Point ( s . width / 2 , s . height - 65 ) ) ;
2011-03-25 13:59:08 +08:00
addChild ( menu , 1 ) ;
2013-08-16 16:05:27 +08:00
auto infoLabel = LabelTTF : : create ( " 0 nodes " , " Marker Felt " , 30 ) ;
2013-07-05 16:49:22 +08:00
infoLabel - > setColor ( Color3B ( 0 , 200 , 20 ) ) ;
2013-07-12 14:11:55 +08:00
infoLabel - > setPosition ( Point ( s . width / 2 , s . height - 90 ) ) ;
2011-03-25 13:59:08 +08:00
addChild ( infoLabel , 1 , kTagInfoLayer ) ;
// add menu
2013-09-30 16:22:55 +08:00
auto menuLayer = new SpriteMenuLayer ( true , TEST_COUNT , SpriteMainScene : : _s_nSpriteCurCase ) ;
2013-07-24 06:20:22 +08:00
addChild ( menuLayer , 1 , kTagMenuLayer ) ;
menuLayer - > release ( ) ;
2013-09-30 16:22:55 +08:00
/**
* auto test menu
*/
auto menuAutoTest = Menu : : create ( ) ;
menuAutoTest - > setPosition ( Point : : ZERO ) ;
MenuItemFont : : setFontName ( " Arial " ) ;
MenuItemFont : : setFontSize ( 24 ) ;
MenuItemFont * autoTestItem = NULL ;
if ( SpriteMainScene : : _s_autoTest )
{
autoTestItem = MenuItemFont : : create ( " Auto Test On " , CC_CALLBACK_1 ( SpriteMainScene : : onAutoTest , this ) ) ;
}
else
{
autoTestItem = MenuItemFont : : create ( " Auto Test Off " , CC_CALLBACK_1 ( SpriteMainScene : : onAutoTest , this ) ) ;
}
autoTestItem - > setTag ( 1 ) ;
autoTestItem - > setPosition ( Point ( s . width - 90 , s . height / 2 ) ) ;
menuAutoTest - > addChild ( autoTestItem ) ;
addChild ( menuAutoTest , 3 , kTagAutoTestMenu ) ;
2011-03-25 13:59:08 +08:00
// Sub Tests
2013-06-20 14:17:10 +08:00
MenuItemFont : : setFontSize ( 32 ) ;
2013-08-16 16:05:27 +08:00
auto subMenu = Menu : : create ( ) ;
2012-04-19 14:35:52 +08:00
for ( int i = 1 ; i < = 9 ; + + i )
{
char str [ 10 ] = { 0 } ;
sprintf ( str , " %d " , i ) ;
2013-08-16 16:05:27 +08:00
auto itemFont = MenuItemFont : : create ( str , CC_CALLBACK_1 ( SpriteMainScene : : testNCallback , this ) ) ;
2012-04-19 14:35:52 +08:00
itemFont - > setTag ( i ) ;
2013-07-24 06:20:22 +08:00
subMenu - > addChild ( itemFont , 10 ) ;
2012-04-19 14:35:52 +08:00
2011-03-25 13:59:08 +08:00
if ( i < = 3 )
2013-07-05 16:49:22 +08:00
itemFont - > setColor ( Color3B ( 200 , 20 , 20 ) ) ;
2011-03-25 13:59:08 +08:00
else if ( i < = 6 )
2013-07-05 16:49:22 +08:00
itemFont - > setColor ( Color3B ( 0 , 200 , 20 ) ) ;
2011-03-25 13:59:08 +08:00
else
2013-07-05 16:49:22 +08:00
itemFont - > setColor ( Color3B ( 0 , 20 , 200 ) ) ;
2011-03-25 13:59:08 +08:00
}
2013-07-24 06:20:22 +08:00
subMenu - > alignItemsHorizontally ( ) ;
subMenu - > setPosition ( Point ( s . width / 2 , 80 ) ) ;
addChild ( subMenu , 2 ) ;
2011-03-25 13:59:08 +08:00
// add title label
2013-08-16 16:05:27 +08:00
auto label = LabelTTF : : create ( title ( ) . c_str ( ) , " Arial " , 40 ) ;
2011-03-25 13:59:08 +08:00
addChild ( label , 1 ) ;
2013-07-12 14:11:55 +08:00
label - > setPosition ( Point ( s . width / 2 , s . height - 32 ) ) ;
2013-07-05 16:49:22 +08:00
label - > setColor ( Color3B ( 255 , 255 , 40 ) ) ;
2011-03-25 13:59:08 +08:00
while ( quantityNodes < nNodes )
onIncrease ( this ) ;
}
std : : string SpriteMainScene : : title ( )
{
return " No title " ;
}
SpriteMainScene : : ~ SpriteMainScene ( )
{
2013-06-15 14:03:30 +08:00
if ( _subTest )
2012-04-19 14:35:52 +08:00
{
2013-06-15 14:03:30 +08:00
delete _subTest ;
_subTest = NULL ;
2011-03-25 13:59:08 +08:00
}
}
2013-07-26 06:53:24 +08:00
void SpriteMainScene : : testNCallback ( Object * sender )
2011-03-25 13:59:08 +08:00
{
2013-09-30 16:22:55 +08:00
if ( SpriteMainScene : : _s_autoTest )
{
log ( " It's auto sprite performace testing,so this operation is invalid " ) ;
return ;
}
2013-07-26 06:53:24 +08:00
subtestNumber = static_cast < MenuItemFont * > ( sender ) - > getTag ( ) ;
auto menu = static_cast < SpriteMenuLayer * > ( getChildByTag ( kTagMenuLayer ) ) ;
menu - > restartCallback ( sender ) ;
2011-03-25 13:59:08 +08:00
}
void SpriteMainScene : : updateNodes ( )
{
if ( quantityNodes ! = lastRenderedCount )
{
2013-08-16 16:05:27 +08:00
auto infoLabel = ( LabelTTF * ) getChildByTag ( kTagInfoLayer ) ;
2011-03-25 13:59:08 +08:00
char str [ 16 ] = { 0 } ;
sprintf ( str , " %u nodes " , quantityNodes ) ;
infoLabel - > setString ( str ) ;
lastRenderedCount = quantityNodes ;
}
}
2013-07-26 06:53:24 +08:00
void SpriteMainScene : : onIncrease ( Object * sender )
2013-09-30 16:22:55 +08:00
{
2011-03-25 13:59:08 +08:00
if ( quantityNodes > = kMaxNodes )
return ;
for ( int i = 0 ; i < kNodesIncrease ; i + + )
{
2013-08-16 16:05:27 +08:00
auto sprite = _subTest - > createSpriteWithTag ( quantityNodes ) ;
2011-03-25 13:59:08 +08:00
doTest ( sprite ) ;
quantityNodes + + ;
}
updateNodes ( ) ;
}
2013-07-26 06:53:24 +08:00
void SpriteMainScene : : onDecrease ( Object * sender )
2011-03-25 13:59:08 +08:00
{
2013-09-30 16:22:55 +08:00
2011-03-25 13:59:08 +08:00
if ( quantityNodes < = 0 )
return ;
for ( int i = 0 ; i < kNodesIncrease ; i + + )
{
quantityNodes - - ;
2013-06-15 14:03:30 +08:00
_subTest - > removeByTag ( quantityNodes ) ;
2011-03-25 13:59:08 +08:00
}
updateNodes ( ) ;
}
2013-09-30 16:22:55 +08:00
void SpriteMainScene : : dumpProfilerFPS ( )
{
if ( _vecFPS . empty ( ) )
{
log ( " Error: the FPS vector is empty " ) ;
return ;
}
auto iter = _vecFPS . begin ( ) ;
float minFPS = * iter ;
float maxFPS = * iter ;
float totalFPS = 0.0f ;
float averagerFPS = 0.0f ;
for ( ; iter ! = _vecFPS . end ( ) ; + + iter )
{
if ( minFPS > * iter )
{
minFPS = * iter ;
}
if ( maxFPS < * iter )
{
maxFPS = * iter ;
}
totalFPS + = * iter ;
}
averagerFPS = totalFPS / _vecFPS . size ( ) ;
log ( " Cur test: %d, cur sub item :%d,cur sprite nums:%d, the min FPS value is %.1f,the max FPS value is %.1f,the averager FPS is %.1f " , SpriteMainScene : : _s_nSpriteCurCase , subtestNumber , quantityNodes , minFPS , maxFPS , averagerFPS ) ;
}
void SpriteMainScene : : updateAutoTest ( float dt )
{
if ( SpriteMainScene : : _s_autoTest )
{
_executeTimes + = 1 ;
_vecFPS . push_back ( Director : : getInstance ( ) - > getFrameRate ( ) ) ;
if ( _executeTimes > = SpriteMainScene : : MAX_AUTO_TEST_TIMES )
{
dumpProfilerFPS ( ) ;
nextAutoTest ( ) ;
}
}
}
void SpriteMainScene : : onEnter ( )
{
Scene : : onEnter ( ) ;
if ( SpriteMainScene : : _s_autoTest )
{
_vecFPS . clear ( ) ;
_executeTimes = 0 ;
auto director = Director : : getInstance ( ) ;
auto sched = director - > getScheduler ( ) ;
sched - > scheduleSelector ( SEL_SCHEDULE ( & SpriteMainScene : : updateAutoTest ) , this , 0.2 , false ) ;
}
}
void SpriteMainScene : : onExit ( )
{
if ( SpriteMainScene : : _s_autoTest )
{
auto director = Director : : getInstance ( ) ;
auto sched = director - > getScheduler ( ) ;
sched - > unscheduleSelector ( SEL_SCHEDULE ( & SpriteMainScene : : updateAutoTest ) , this ) ;
}
Scene : : onExit ( ) ;
}
void SpriteMainScene : : autoShowSpriteTests ( int curCase , int subTest , int nodes )
{
SpriteMainScene * scene = NULL ;
switch ( curCase )
{
case 0 :
scene = new SpritePerformTest1 ;
break ;
case 1 :
scene = new SpritePerformTest2 ;
break ;
case 2 :
scene = new SpritePerformTest3 ;
break ;
case 3 :
scene = new SpritePerformTest4 ;
break ;
case 4 :
scene = new SpritePerformTest5 ;
break ;
case 5 :
scene = new SpritePerformTest6 ;
break ;
case 6 :
scene = new SpritePerformTest7 ;
break ;
}
SpriteMainScene : : _s_nSpriteCurCase = curCase ;
if ( scene )
{
scene - > initWithSubTest ( subTest , nodes ) ;
Director : : getInstance ( ) - > replaceScene ( scene ) ;
scene - > release ( ) ;
}
}
void SpriteMainScene : : beginAutoTest ( )
{
if ( 0 ! = SpriteMainScene : : _s_nSpriteCurCase )
{
SpriteMainScene : : _s_nSpriteCurCase = 0 ;
}
auto scene = new SpritePerformTest1 ;
scene - > initWithSubTest ( 1 , 500 ) ;
Director : : getInstance ( ) - > replaceScene ( scene ) ;
scene - > release ( ) ;
}
void SpriteMainScene : : endAutoTest ( )
{
SpriteMainScene : : _s_autoTest = false ;
auto director = Director : : getInstance ( ) ;
auto sched = director - > getScheduler ( ) ;
sched - > unscheduleSelector ( SEL_SCHEDULE ( & SpriteMainScene : : updateAutoTest ) , this ) ;
}
void SpriteMainScene : : nextAutoTest ( )
{
if ( SpriteMainScene : : _s_nSpriteCurCase < SpriteMainScene : : MAX_SPRITE_TEST_CASE )
{
if ( subtestNumber < SpriteMainScene : : MAX_SUB_TEST_NUMS )
{
subtestNumber + = 1 ;
autoShowSpriteTests ( SpriteMainScene : : _s_nSpriteCurCase , subtestNumber , quantityNodes ) ;
}
else if ( subtestNumber = = SpriteMainScene : : MAX_SUB_TEST_NUMS )
{
if ( quantityNodes = = SpriteMainScene : : AUTO_TEST_NODE_NUM1 )
{
autoShowSpriteTests ( SpriteMainScene : : _s_nSpriteCurCase , 1 , SpriteMainScene : : AUTO_TEST_NODE_NUM2 ) ;
}
else
{
if ( SpriteMainScene : : _s_nSpriteCurCase + 1 < SpriteMainScene : : MAX_SPRITE_TEST_CASE )
{
SpriteMainScene : : _s_nSpriteCurCase + = 1 ;
autoShowSpriteTests ( SpriteMainScene : : _s_nSpriteCurCase , 1 , SpriteMainScene : : AUTO_TEST_NODE_NUM1 ) ;
}
else
{
finishAutoTest ( ) ;
}
}
}
}
}
void SpriteMainScene : : finishAutoTest ( )
{
SpriteMainScene : : _s_autoTest = false ;
auto director = Director : : getInstance ( ) ;
auto sched = director - > getScheduler ( ) ;
sched - > unscheduleSelector ( SEL_SCHEDULE ( & SpriteMainScene : : updateAutoTest ) , this ) ;
auto autoTestMenu = dynamic_cast < Menu * > ( getChildByTag ( kTagAutoTestMenu ) ) ;
if ( nullptr ! = autoTestMenu )
{
auto menuItemFont = dynamic_cast < MenuItemFont * > ( autoTestMenu - > getChildByTag ( 1 ) ) ;
if ( nullptr ! = menuItemFont )
{
menuItemFont - > setString ( " Auto Test finish " ) ;
}
}
log ( " Sprite performance test is finish " ) ;
}
void SpriteMainScene : : onAutoTest ( Object * sender )
{
SpriteMainScene : : _s_autoTest = ! SpriteMainScene : : _s_autoTest ;
MenuItemFont * menuItem = dynamic_cast < MenuItemFont * > ( sender ) ;
if ( nullptr ! = menuItem )
{
if ( SpriteMainScene : : _s_autoTest )
{
menuItem - > setString ( " Auto Test On " ) ;
beginAutoTest ( ) ;
}
else
{
menuItem - > setString ( " Auto Test Off " ) ;
endAutoTest ( ) ;
}
}
}
2012-04-19 14:35:52 +08:00
////////////////////////////////////////////////////////
//
// For test functions
//
2011-03-25 13:59:08 +08:00
////////////////////////////////////////////////////////
2013-07-24 06:20:22 +08:00
void performanceActions ( Sprite * sprite )
2011-03-25 13:59:08 +08:00
{
2013-08-16 16:05:27 +08:00
auto size = Director : : getInstance ( ) - > getWinSize ( ) ;
2013-07-24 06:20:22 +08:00
sprite - > setPosition ( Point ( ( rand ( ) % ( int ) size . width ) , ( rand ( ) % ( int ) size . height ) ) ) ;
2011-03-25 13:59:08 +08:00
float period = 0.5f + ( rand ( ) % 1000 ) / 500.0f ;
2013-08-16 16:05:27 +08:00
auto rot = RotateBy : : create ( period , 360.0f * CCRANDOM_0_1 ( ) ) ;
auto rot_back = rot - > reverse ( ) ;
auto permanentRotation = RepeatForever : : create ( Sequence : : create ( rot , rot_back , NULL ) ) ;
2013-07-24 06:20:22 +08:00
sprite - > runAction ( permanentRotation ) ;
2011-03-25 13:59:08 +08:00
float growDuration = 0.5f + ( rand ( ) % 1000 ) / 500.0f ;
2013-08-16 16:05:27 +08:00
auto grow = ScaleBy : : create ( growDuration , 0.5f , 0.5f ) ;
auto permanentScaleLoop = RepeatForever : : create ( Sequence : : create ( grow , grow - > reverse ( ) , NULL ) ) ;
2013-07-24 06:20:22 +08:00
sprite - > runAction ( permanentScaleLoop ) ;
2011-03-25 13:59:08 +08:00
}
2013-07-24 06:20:22 +08:00
void performanceActions20 ( Sprite * sprite )
2011-03-25 13:59:08 +08:00
{
2013-08-16 16:05:27 +08:00
auto size = Director : : getInstance ( ) - > getWinSize ( ) ;
2011-03-25 13:59:08 +08:00
if ( CCRANDOM_0_1 ( ) < 0.2f )
2013-07-24 06:20:22 +08:00
sprite - > setPosition ( Point ( ( rand ( ) % ( int ) size . width ) , ( rand ( ) % ( int ) size . height ) ) ) ;
2011-03-25 13:59:08 +08:00
else
2013-07-24 06:20:22 +08:00
sprite - > setPosition ( Point ( - 1000 , - 1000 ) ) ;
2011-03-25 13:59:08 +08:00
float period = 0.5f + ( rand ( ) % 1000 ) / 500.0f ;
2013-08-16 16:05:27 +08:00
auto rot = RotateBy : : create ( period , 360.0f * CCRANDOM_0_1 ( ) ) ;
auto rot_back = rot - > reverse ( ) ;
auto permanentRotation = RepeatForever : : create ( Sequence : : create ( rot , rot_back , NULL ) ) ;
2013-07-24 06:20:22 +08:00
sprite - > runAction ( permanentRotation ) ;
2011-03-25 13:59:08 +08:00
float growDuration = 0.5f + ( rand ( ) % 1000 ) / 500.0f ;
2013-08-16 16:05:27 +08:00
auto grow = ScaleBy : : create ( growDuration , 0.5f , 0.5f ) ;
auto permanentScaleLoop = RepeatForever : : create ( Sequence : : createWithTwoActions ( grow , grow - > reverse ( ) ) ) ;
2013-07-24 06:20:22 +08:00
sprite - > runAction ( permanentScaleLoop ) ;
2011-03-25 13:59:08 +08:00
}
2013-07-24 06:20:22 +08:00
void performanceRotationScale ( Sprite * sprite )
2011-03-25 13:59:08 +08:00
{
2013-08-16 16:05:27 +08:00
auto size = Director : : getInstance ( ) - > getWinSize ( ) ;
2013-07-24 06:20:22 +08:00
sprite - > setPosition ( Point ( ( rand ( ) % ( int ) size . width ) , ( rand ( ) % ( int ) size . height ) ) ) ;
sprite - > setRotation ( CCRANDOM_0_1 ( ) * 360 ) ;
sprite - > setScale ( CCRANDOM_0_1 ( ) * 2 ) ;
2011-03-25 13:59:08 +08:00
}
2013-07-24 06:20:22 +08:00
void performancePosition ( Sprite * sprite )
2011-03-25 13:59:08 +08:00
{
2013-08-16 16:05:27 +08:00
auto size = Director : : getInstance ( ) - > getWinSize ( ) ;
2013-07-24 06:20:22 +08:00
sprite - > setPosition ( Point ( ( rand ( ) % ( int ) size . width ) , ( rand ( ) % ( int ) size . height ) ) ) ;
2011-03-25 13:59:08 +08:00
}
2013-07-24 06:20:22 +08:00
void performanceout20 ( Sprite * sprite )
2011-03-25 13:59:08 +08:00
{
2013-08-16 16:05:27 +08:00
auto size = Director : : getInstance ( ) - > getWinSize ( ) ;
2011-03-25 13:59:08 +08:00
if ( CCRANDOM_0_1 ( ) < 0.2f )
2013-07-24 06:20:22 +08:00
sprite - > setPosition ( Point ( ( rand ( ) % ( int ) size . width ) , ( rand ( ) % ( int ) size . height ) ) ) ;
2011-03-25 13:59:08 +08:00
else
2013-07-24 06:20:22 +08:00
sprite - > setPosition ( Point ( - 1000 , - 1000 ) ) ;
2011-03-25 13:59:08 +08:00
}
2013-07-24 06:20:22 +08:00
void performanceOut100 ( Sprite * sprite )
2011-03-25 13:59:08 +08:00
{
2013-07-24 06:20:22 +08:00
sprite - > setPosition ( Point ( - 1000 , - 1000 ) ) ;
2011-03-25 13:59:08 +08:00
}
2013-07-24 06:20:22 +08:00
void performanceScale ( Sprite * sprite )
2011-03-25 13:59:08 +08:00
{
2013-08-16 16:05:27 +08:00
auto size = Director : : getInstance ( ) - > getWinSize ( ) ;
2013-07-24 06:20:22 +08:00
sprite - > setPosition ( Point ( ( rand ( ) % ( int ) size . width ) , ( rand ( ) % ( int ) size . height ) ) ) ;
sprite - > setScale ( CCRANDOM_0_1 ( ) * 100 / 50 ) ;
2011-03-25 13:59:08 +08:00
}
2012-04-19 14:35:52 +08:00
////////////////////////////////////////////////////////
//
// SpritePerformTest1
//
2011-03-25 13:59:08 +08:00
////////////////////////////////////////////////////////
std : : string SpritePerformTest1 : : title ( )
{
char str [ 32 ] = { 0 } ;
sprintf ( str , " A (%d) position " , subtestNumber ) ;
std : : string strRet = str ;
return strRet ;
}
2013-06-20 14:17:10 +08:00
void SpritePerformTest1 : : doTest ( Sprite * sprite )
2011-03-25 13:59:08 +08:00
{
performancePosition ( sprite ) ;
}
2012-04-19 14:35:52 +08:00
////////////////////////////////////////////////////////
//
// SpritePerformTest2
//
2011-03-25 13:59:08 +08:00
////////////////////////////////////////////////////////
std : : string SpritePerformTest2 : : title ( )
{
char str [ 32 ] = { 0 } ;
sprintf ( str , " B (%d) scale " , subtestNumber ) ;
std : : string strRet = str ;
return strRet ;
}
2013-06-20 14:17:10 +08:00
void SpritePerformTest2 : : doTest ( Sprite * sprite )
2011-03-25 13:59:08 +08:00
{
performanceScale ( sprite ) ;
}
2012-04-19 14:35:52 +08:00
////////////////////////////////////////////////////////
//
// SpritePerformTest3
//
2011-03-25 13:59:08 +08:00
////////////////////////////////////////////////////////
std : : string SpritePerformTest3 : : title ( )
{
char str [ 32 ] = { 0 } ;
sprintf ( str , " C (%d) scale + rot " , subtestNumber ) ;
std : : string strRet = str ;
return strRet ;
}
2013-06-20 14:17:10 +08:00
void SpritePerformTest3 : : doTest ( Sprite * sprite )
2011-03-25 13:59:08 +08:00
{
performanceRotationScale ( sprite ) ;
}
2012-04-19 14:35:52 +08:00
////////////////////////////////////////////////////////
//
// SpritePerformTest4
//
2011-03-25 13:59:08 +08:00
////////////////////////////////////////////////////////
std : : string SpritePerformTest4 : : title ( )
{
char str [ 32 ] = { 0 } ;
sprintf ( str , " D (%d) 100%% out " , subtestNumber ) ;
std : : string strRet = str ;
return strRet ;
}
2013-06-20 14:17:10 +08:00
void SpritePerformTest4 : : doTest ( Sprite * sprite )
2011-03-25 13:59:08 +08:00
{
performanceOut100 ( sprite ) ;
}
2012-04-19 14:35:52 +08:00
////////////////////////////////////////////////////////
//
// SpritePerformTest5
//
2011-03-25 13:59:08 +08:00
////////////////////////////////////////////////////////
std : : string SpritePerformTest5 : : title ( )
{
char str [ 32 ] = { 0 } ;
sprintf ( str , " E (%d) 80%% out " , subtestNumber ) ;
std : : string strRet = str ;
return strRet ;
}
2013-06-20 14:17:10 +08:00
void SpritePerformTest5 : : doTest ( Sprite * sprite )
2011-03-25 13:59:08 +08:00
{
performanceout20 ( sprite ) ;
}
2012-04-19 14:35:52 +08:00
////////////////////////////////////////////////////////
//
// SpritePerformTest6
//
2011-03-25 13:59:08 +08:00
////////////////////////////////////////////////////////
std : : string SpritePerformTest6 : : title ( )
{
char str [ 32 ] = { 0 } ;
sprintf ( str , " F (%d) actions " , subtestNumber ) ;
std : : string strRet = str ;
return strRet ;
}
2013-06-20 14:17:10 +08:00
void SpritePerformTest6 : : doTest ( Sprite * sprite )
2011-03-25 13:59:08 +08:00
{
performanceActions ( sprite ) ;
}
2012-04-19 14:35:52 +08:00
////////////////////////////////////////////////////////
//
// SpritePerformTest7
//
2011-03-25 13:59:08 +08:00
////////////////////////////////////////////////////////
std : : string SpritePerformTest7 : : title ( )
{
char str [ 32 ] = { 0 } ;
sprintf ( str , " G (%d) actions 80%% out " , subtestNumber ) ;
std : : string strRet = str ;
return strRet ;
}
2013-06-20 14:17:10 +08:00
void SpritePerformTest7 : : doTest ( Sprite * sprite )
2011-03-25 13:59:08 +08:00
{
performanceActions20 ( sprite ) ;
}
void runSpriteTest ( )
{
2013-09-30 16:22:55 +08:00
SpriteMainScene : : _s_autoTest = false ;
2013-08-16 16:05:27 +08:00
auto scene = new SpritePerformTest1 ;
2013-07-23 08:25:44 +08:00
scene - > initWithSubTest ( 1 , 50 ) ;
Director : : getInstance ( ) - > replaceScene ( scene ) ;
scene - > release ( ) ;
2011-03-25 13:59:08 +08:00
}