mirror of https://github.com/axmolengine/axmol.git
fixed #468, Implement CCProfiler & CCProfilingTimer. And use them in PerformanceNodeChildrenTest.
This commit is contained in:
parent
7337119501
commit
7231120b16
|
@ -26,9 +26,6 @@ THE SOFTWARE.
|
|||
|
||||
#if CC_ENABLE_PROFILERS
|
||||
|
||||
#include <stdio.h>
|
||||
#include <iostream>
|
||||
|
||||
namespace cocos2d
|
||||
{
|
||||
using namespace std;
|
||||
|
@ -60,11 +57,17 @@ namespace cocos2d
|
|||
{
|
||||
CCProfiler *p = CCProfiler::sharedProfiler();
|
||||
p->m_pActiveTimers->removeObject(pTimer);
|
||||
|
||||
if (0 == (p->m_pActiveTimers->count()))
|
||||
{
|
||||
CC_SAFE_DELETE(g_sSharedProfiler);
|
||||
}
|
||||
}
|
||||
|
||||
bool CCProfiler::init()
|
||||
{
|
||||
m_pActiveTimers = new CCMutableArray<CCProfilingTimer*>();
|
||||
m_pActiveTimers = CCArray::array();
|
||||
m_pActiveTimers->retain();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -76,11 +79,13 @@ namespace cocos2d
|
|||
|
||||
void CCProfiler::displayTimers()
|
||||
{
|
||||
CCMutableArray<CCProfilingTimer*>::CCMutableArrayIterator it;
|
||||
for (it = m_pActiveTimers->begin(); it != m_pActiveTimers->end(); ++it)
|
||||
CCObject* pObject = NULL;
|
||||
CCProfilingTimer* pTimer = NULL;
|
||||
CCARRAY_FOREACH(m_pActiveTimers, pObject)
|
||||
{
|
||||
char *pszDescription = (*it)->description();
|
||||
cout << pszDescription << endl;
|
||||
pTimer = (CCProfilingTimer*) pObject;
|
||||
char *pszDescription = pTimer->description();
|
||||
CCLog(pszDescription);
|
||||
delete pszDescription;
|
||||
}
|
||||
}
|
||||
|
@ -89,9 +94,10 @@ namespace cocos2d
|
|||
|
||||
bool CCProfilingTimer::initWithName(const char* pszTimerName, CCObject *pInstance)
|
||||
{
|
||||
char tmp[100];
|
||||
char tmp[160];
|
||||
sprintf(tmp, "%s (0x%.8x)", pszTimerName, pInstance);
|
||||
m_NameStr = string(tmp);
|
||||
m_dAverageTime = 0.0;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -103,21 +109,21 @@ namespace cocos2d
|
|||
|
||||
char* CCProfilingTimer::description()
|
||||
{
|
||||
char *pszDes = new char[m_NameStr.length() + sizeof(double) + 20];
|
||||
char *pszDes = new char[m_NameStr.length() + sizeof(double) + 32];
|
||||
sprintf(pszDes, "%s: avg time, %fms", m_NameStr.c_str(), m_dAverageTime);
|
||||
return pszDes;
|
||||
}
|
||||
|
||||
void CCProfilingBeginTimingBlock(CCProfilingTimer *pTimer)
|
||||
{
|
||||
CCTime::gettimeofdayCocos2d(&pTimer->getStartTime(), NULL);
|
||||
CCTime::gettimeofdayCocos2d(pTimer->getStartTime(), NULL);
|
||||
}
|
||||
|
||||
void CCProfilingEndTimingBlock(CCProfilingTimer *pTimer)
|
||||
{
|
||||
struct cc_timeval currentTime;
|
||||
CCTime::gettimeofdayCocos2d(¤tTime, NULL);
|
||||
CCTime::timersubCocos2d(¤tTime, &pTimer->getStartTime(), ¤tTime);
|
||||
CCTime::timersubCocos2d(¤tTime, pTimer->getStartTime(), ¤tTime);
|
||||
double duration = currentTime.tv_sec * 1000.0 + currentTime.tv_usec / 1000.0;
|
||||
|
||||
// return in milliseconds
|
||||
|
|
|
@ -33,13 +33,13 @@ THE SOFTWARE.
|
|||
|
||||
#include "CCObject.h"
|
||||
#include "platform/platform.h"
|
||||
#include "CCMutableArray.h"
|
||||
#include "CCArray.h"
|
||||
|
||||
namespace cocos2d
|
||||
{
|
||||
class CCProfilingTimer;
|
||||
|
||||
class CCProfiler : public CCObject
|
||||
class CC_DLL CCProfiler : public CCObject
|
||||
{
|
||||
public:
|
||||
~CCProfiler(void);
|
||||
|
@ -52,7 +52,7 @@ namespace cocos2d
|
|||
static void releaseTimer(CCProfilingTimer *pTimer);
|
||||
|
||||
protected:
|
||||
CCMutableArray<CCProfilingTimer*> *m_pActiveTimers;
|
||||
CCArray *m_pActiveTimers;
|
||||
};
|
||||
|
||||
class CCProfilingTimer : public CCObject
|
||||
|
@ -61,7 +61,7 @@ namespace cocos2d
|
|||
bool initWithName(const char* pszTimerName, CCObject *pInstance);
|
||||
~CCProfilingTimer(void);
|
||||
char* description(void);
|
||||
inline struct cc_timeval getStartTime(void) { return m_sStartTime; };
|
||||
inline struct cc_timeval * getStartTime(void) { return &m_sStartTime; };
|
||||
inline void setAverageTime(double value) { m_dAverageTime = value; }
|
||||
inline double getAverageTime(void) { return m_dAverageTime; }
|
||||
|
||||
|
@ -71,8 +71,8 @@ namespace cocos2d
|
|||
double m_dAverageTime;
|
||||
};
|
||||
|
||||
void CCProfilingBeginTimingBlock(CCProfilingTimer *pTimer);
|
||||
void CCProfilingEndTimingBlock(CCProfilingTimer *pTimer);
|
||||
void CC_DLL CCProfilingBeginTimingBlock(CCProfilingTimer *pTimer);
|
||||
void CC_DLL CCProfilingEndTimingBlock(CCProfilingTimer *pTimer);
|
||||
|
||||
} // end of namespace cocos2d
|
||||
|
||||
|
|
|
@ -163,6 +163,14 @@ void NodeChildrenMainScene::updateQuantityLabel()
|
|||
// IterateSpriteSheet
|
||||
//
|
||||
////////////////////////////////////////////////////////
|
||||
IterateSpriteSheet::~IterateSpriteSheet()
|
||||
{
|
||||
#if CC_ENABLE_PROFILERS
|
||||
CCProfiler::releaseTimer(_profilingTimer);
|
||||
_profilingTimer = NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
void IterateSpriteSheet::updateQuantityOfNodes()
|
||||
{
|
||||
CCSize s = CCDirector::sharedDirector()->getWinSize();
|
||||
|
@ -197,9 +205,19 @@ void IterateSpriteSheet::initWithQuantityOfNodes(unsigned int nNodes)
|
|||
addChild(batchNode);
|
||||
|
||||
NodeChildrenMainScene::initWithQuantityOfNodes(nNodes);
|
||||
|
||||
#if CC_ENABLE_PROFILERS
|
||||
_profilingTimer = CCProfiler::timerWithName(profilerName().c_str(), this);
|
||||
#endif
|
||||
|
||||
scheduleUpdate();
|
||||
}
|
||||
|
||||
std::string IterateSpriteSheet::profilerName()
|
||||
{
|
||||
return "none";
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////
|
||||
//
|
||||
// IterateSpriteSheetFastEnum
|
||||
|
@ -207,18 +225,23 @@ void IterateSpriteSheet::initWithQuantityOfNodes(unsigned int nNodes)
|
|||
////////////////////////////////////////////////////////
|
||||
void IterateSpriteSheetFastEnum::update(ccTime dt)
|
||||
{
|
||||
//CCProfilingBeginTimingBlock(_profilingTimer);
|
||||
|
||||
// iterate using fast enumeration protocol
|
||||
CCArray* pChildren = batchNode->getChildren();
|
||||
CCObject* pObject = NULL;
|
||||
|
||||
#if CC_ENABLE_PROFILERS
|
||||
CCProfilingBeginTimingBlock(_profilingTimer);
|
||||
#endif
|
||||
|
||||
CCARRAY_FOREACH(pChildren, pObject)
|
||||
{
|
||||
CCSprite* pSprite = (CCSprite*) pObject;
|
||||
pSprite->setIsVisible(false);
|
||||
}
|
||||
|
||||
//CCProfilingEndTimingBlock(_profilingTimer);
|
||||
#if CC_ENABLE_PROFILERS
|
||||
CCProfilingEndTimingBlock(_profilingTimer);
|
||||
#endif
|
||||
}
|
||||
|
||||
std::string IterateSpriteSheetFastEnum::title()
|
||||
|
@ -227,6 +250,11 @@ std::string IterateSpriteSheetFastEnum::title()
|
|||
}
|
||||
|
||||
std::string IterateSpriteSheetFastEnum::subtitle()
|
||||
{
|
||||
return "Iterate children using Fast Enum API. See console";
|
||||
}
|
||||
|
||||
std::string IterateSpriteSheetFastEnum::profilerName()
|
||||
{
|
||||
return "iter fast enum";
|
||||
}
|
||||
|
@ -241,11 +269,20 @@ void IterateSpriteSheetCArray::update(ccTime dt)
|
|||
// iterate using fast enumeration protocol
|
||||
CCArray* pChildren = batchNode->getChildren();
|
||||
CCObject* pObject = NULL;
|
||||
CCARRAY_FOREACH(pChildren, pObject)
|
||||
{
|
||||
CCSprite* pSprite = (CCSprite*)pObject;
|
||||
pSprite->setIsVisible(false);
|
||||
}
}
|
||||
|
||||
#if CC_ENABLE_PROFILERS
|
||||
CCProfilingBeginTimingBlock(_profilingTimer);
|
||||
#endif
|
||||
|
||||
CCARRAY_FOREACH(pChildren, pObject)
|
||||
{
|
||||
CCSprite* pSprite = (CCSprite*)pObject;
|
||||
pSprite->setIsVisible(false);
}
|
||||
|
||||
#if CC_ENABLE_PROFILERS
|
||||
CCProfilingEndTimingBlock(_profilingTimer);
|
||||
#endif
|
||||
}
|
||||
|
||||
std::string IterateSpriteSheetCArray::title()
|
||||
{
|
||||
|
@ -257,17 +294,35 @@ std::string IterateSpriteSheetCArray::subtitle()
|
|||
return "Iterate children using C Array API. See console";
|
||||
}
|
||||
|
||||
std::string IterateSpriteSheetCArray::profilerName()
|
||||
{
|
||||
return "iter c-array";
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////
|
||||
//
|
||||
// AddRemoveSpriteSheet
|
||||
//
|
||||
////////////////////////////////////////////////////////
|
||||
AddRemoveSpriteSheet::~AddRemoveSpriteSheet()
|
||||
{
|
||||
#if CC_ENABLE_PROFILERS
|
||||
CCProfiler::releaseTimer(_profilingTimer);
|
||||
_profilingTimer = NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
void AddRemoveSpriteSheet::initWithQuantityOfNodes(unsigned int nNodes)
|
||||
{
|
||||
batchNode = CCSpriteBatchNode::batchNodeWithFile("Images/spritesheet1.png");
|
||||
addChild(batchNode);
|
||||
|
||||
NodeChildrenMainScene::initWithQuantityOfNodes(nNodes);
|
||||
|
||||
#if CC_ENABLE_PROFILERS
|
||||
_profilingTimer = CCProfiler::timerWithName(profilerName().c_str(), this);
|
||||
#endif
|
||||
|
||||
scheduleUpdate();
|
||||
}
|
||||
|
||||
|
@ -299,6 +354,11 @@ void AddRemoveSpriteSheet::updateQuantityOfNodes()
|
|||
currentQuantityOfNodes = quantityOfNodes;
|
||||
}
|
||||
|
||||
std::string AddRemoveSpriteSheet::profilerName()
|
||||
{
|
||||
return "none";
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////
|
||||
//
|
||||
// AddSpriteSheet
|
||||
|
@ -326,13 +386,18 @@ void AddSpriteSheet::update(ccTime dt)
|
|||
}
|
||||
|
||||
// add them with random Z (very important!)
|
||||
// CCProfilingBeginTimingBlock(_profilingTimer);
|
||||
#if CC_ENABLE_PROFILERS
|
||||
CCProfilingBeginTimingBlock(_profilingTimer);
|
||||
#endif
|
||||
|
||||
for( int i=0; i < totalToAdd;i++ )
|
||||
{
|
||||
batchNode->addChild((CCNode*) (sprites->objectAtIndex(i)), zs[i], kTagBase+i);
|
||||
}
|
||||
// [batchNode sortAllChildren];
|
||||
// CCProfilingEndTimingBlock(_profilingTimer);
|
||||
|
||||
#if CC_ENABLE_PROFILERS
|
||||
CCProfilingEndTimingBlock(_profilingTimer);
|
||||
#endif
|
||||
|
||||
// remove them
|
||||
for( int i=0;i < totalToAdd;i++)
|
||||
|
@ -354,6 +419,10 @@ std::string AddSpriteSheet::subtitle()
|
|||
return "Adds %10 of total sprites with random z. See console";
|
||||
}
|
||||
|
||||
std::string AddSpriteSheet::profilerName()
|
||||
{
|
||||
return "add sprites";
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////
|
||||
//
|
||||
|
@ -385,12 +454,18 @@ void RemoveSpriteSheet::update(ccTime dt)
|
|||
}
|
||||
|
||||
// remove them
|
||||
// CCProfilingBeginTimingBlock(_profilingTimer);
|
||||
#if CC_ENABLE_PROFILERS
|
||||
CCProfilingBeginTimingBlock(_profilingTimer);
|
||||
#endif
|
||||
|
||||
for( int i=0;i < totalToAdd;i++)
|
||||
{
|
||||
batchNode->removeChildByTag(kTagBase+i, true);
|
||||
}
|
||||
// CCProfilingEndTimingBlock(_profilingTimer);
|
||||
|
||||
#if CC_ENABLE_PROFILERS
|
||||
CCProfilingEndTimingBlock(_profilingTimer);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -404,6 +479,11 @@ std::string RemoveSpriteSheet::subtitle()
|
|||
return "Remove %10 of total sprites placed randomly. See console";
|
||||
}
|
||||
|
||||
std::string RemoveSpriteSheet::profilerName()
|
||||
{
|
||||
return "remove sprites";
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////
|
||||
//
|
||||
// ReorderSpriteSheet
|
||||
|
@ -436,14 +516,19 @@ void ReorderSpriteSheet::update(ccTime dt)
|
|||
// [batchNode sortAllChildren];
|
||||
|
||||
// reorder them
|
||||
//CCProfilingBeginTimingBlock(_profilingTimer);
|
||||
#if CC_ENABLE_PROFILERS
|
||||
CCProfilingBeginTimingBlock(_profilingTimer);
|
||||
#endif
|
||||
|
||||
for( int i=0;i < totalToAdd;i++)
|
||||
{
|
||||
CCNode* pNode = (CCNode*) (batchNode->getChildren()->objectAtIndex(i));
|
||||
batchNode->reorderChild(pNode, CCRANDOM_MINUS1_1() * 50);
|
||||
}
|
||||
// [batchNode sortAllChildren];
|
||||
//CCProfilingEndTimingBlock(_profilingTimer);
|
||||
|
||||
#if CC_ENABLE_PROFILERS
|
||||
CCProfilingEndTimingBlock(_profilingTimer);
|
||||
#endif
|
||||
|
||||
// remove them
|
||||
for( int i=0;i < totalToAdd;i++)
|
||||
|
@ -463,6 +548,11 @@ std::string ReorderSpriteSheet::subtitle()
|
|||
return "Reorder %10 of total sprites placed randomly. See console";
|
||||
}
|
||||
|
||||
std::string ReorderSpriteSheet::profilerName()
|
||||
{
|
||||
return "reorder sprites";
|
||||
}
|
||||
|
||||
void runNodeChildrenTest()
|
||||
{
|
||||
IterateSpriteSheet* pScene = new IterateSpriteSheetCArray();
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#define __PERFORMANCE_NODE_CHILDREN_TEST_H__
|
||||
|
||||
#include "PerformanceTest.h"
|
||||
#include "support/CCProfiling.h"
|
||||
|
||||
class NodeChildrenMenuLayer : public PerformBasicLayer
|
||||
{
|
||||
|
@ -33,13 +34,18 @@ protected:
|
|||
class IterateSpriteSheet : public NodeChildrenMainScene
|
||||
{
|
||||
public:
|
||||
~IterateSpriteSheet();
|
||||
virtual void updateQuantityOfNodes();
|
||||
virtual void initWithQuantityOfNodes(unsigned int nNodes);
|
||||
virtual void update(ccTime dt) = 0;
|
||||
virtual std::string profilerName();
|
||||
|
||||
protected:
|
||||
CCSpriteBatchNode *batchNode;
|
||||
//CCProfilingTimer *_profilingTimer;
|
||||
|
||||
#if CC_ENABLE_PROFILERS
|
||||
CCProfilingTimer *_profilingTimer;
|
||||
#endif
|
||||
};
|
||||
|
||||
class IterateSpriteSheetFastEnum : public IterateSpriteSheet
|
||||
|
@ -49,6 +55,7 @@ public:
|
|||
|
||||
virtual std::string title();
|
||||
virtual std::string subtitle();
|
||||
virtual std::string profilerName();
|
||||
};
|
||||
|
||||
class IterateSpriteSheetCArray : public IterateSpriteSheet
|
||||
|
@ -58,18 +65,24 @@ public:
|
|||
|
||||
virtual std::string title();
|
||||
virtual std::string subtitle();
|
||||
virtual std::string profilerName();
|
||||
};
|
||||
|
||||
class AddRemoveSpriteSheet : public NodeChildrenMainScene
|
||||
{
|
||||
public:
|
||||
~AddRemoveSpriteSheet();
|
||||
virtual void updateQuantityOfNodes();
|
||||
virtual void initWithQuantityOfNodes(unsigned int nNodes);
|
||||
virtual void update(ccTime dt) = 0;
|
||||
virtual std::string profilerName();
|
||||
|
||||
protected:
|
||||
CCSpriteBatchNode *batchNode;
|
||||
//CCProfilingTimer* _profilingTimer;
|
||||
|
||||
#if CC_ENABLE_PROFILERS
|
||||
CCProfilingTimer* _profilingTimer;
|
||||
#endif
|
||||
};
|
||||
|
||||
class AddSpriteSheet : public AddRemoveSpriteSheet
|
||||
|
@ -79,6 +92,7 @@ public:
|
|||
|
||||
virtual std::string title();
|
||||
virtual std::string subtitle();
|
||||
virtual std::string profilerName();
|
||||
};
|
||||
|
||||
class RemoveSpriteSheet : public AddRemoveSpriteSheet
|
||||
|
@ -88,6 +102,7 @@ public:
|
|||
|
||||
virtual std::string title();
|
||||
virtual std::string subtitle();
|
||||
virtual std::string profilerName();
|
||||
};
|
||||
|
||||
class ReorderSpriteSheet : public AddRemoveSpriteSheet
|
||||
|
@ -97,6 +112,7 @@ public:
|
|||
|
||||
virtual std::string title();
|
||||
virtual std::string subtitle();
|
||||
virtual std::string profilerName();
|
||||
};
|
||||
|
||||
void runNodeChildrenTest();
|
||||
|
|
Loading…
Reference in New Issue