cocos2d-x에 프로파일링 기능이 제공되고 있지만, 기본적으로 배포시에는 비활성화 되어 있지요. 그 사용법에 대한 간단한 팁을 제공해드리고자 해요. 뭐 거창한건 아니구요 원하는 구간의 시작과 끝에 태깅을 하면 그 구간의 호출 수 및 시간등을 보여주는 방식이지요.
일단 기능을 활성화 기키려면 ccConfig.h에 디파인 되어 있는 CC_ENABLE_PROFILERS 를 1로 켜주면 되요. 그리고 사용 시는 원하는 구간에 CC_PROFILER_START("") CC_PROFILER_STOP("")로 달아주면 끝!
그리고 프로파일링 결과를 보고 싶으면 CC_PROFILER_DISPLAY_TIMERS()를 호출해주면 출력창에 결과가 나오지요. 물론 출력창에 찍는것이니 매 프레임 호출하는것은 미친짓이겠지요. (저는 이 함수를 참고해서 화면에 출력되게 개조해서 써요)
근데 한가지 손봐줘야 할 것이 하나 있는데요, CC_ENABLE_PROFILERS를 켜주고 빌드하면 링크 에러가 나지요. CC_PROFILER_START, CC_PROFILER_STOP, CC_PROFILER_DISPLAY_TIMERS 등의 디파인은 CCProfiling.h에 선언되어 있는 전역함수들을 매핑한 것인데, 선언 시 CC_DLL 가 빠져있네요. 혹시 심심해할까봐 이런 소소한 똥방울 심어주는 오픈소스의 센스 ㅎㅎ
다음과 같이 CC_DLL이 빠진 곳은 빈칸 채우기를 해주면 되요.
class CC_DLL CCProfilingTimer : public CCObject
...
extern void CC_DLL CCProfilingBeginTimingBlock(const char *timerName);
extern void CC_DLL CCProfilingEndTimingBlock(const char *timerName);
extern void CC_DLL CCProfilingResetTimingBlock(const char *timerName);
그리고, CCParticleBatchNode.cpp에 있는 CCParticleBatchNode::draw() 메소드에서 프로파일러를 사용하고 있는데, CC_PROFILER_START로 되야 할 곳에 CC_PROFILER_STOP로 되어 있어요. 이곳도 살포시 수정 해주시고 빠진 include도 추가해주세요. 귀챦지만 어쩔 수가 없네요. 이런게 오픈소스의 잔재미죠;;
디버깅이 잘 안되서 머리 식힐 겸 글을 올리는데 하나도 안식네요. 훗. 롤이나 한판 해야겠어요. 그럼 모두들 즐트롤~
'프로그래밍' 카테고리의 다른 글
std::numeric_limits 의 min, max는 왜 클래스 내부 초기화를 할 수 없는가?! (4) | 2013.04.06 |
---|---|
C++에서 ID Type이 필요할때 어떻게 쓰시나요?? (0) | 2013.04.05 |
모바일 게임 만들기 체험을 해봐요. 프로그래밍을 몰라도 좋아요. (17) | 2013.01.18 |
C# Singleton class (10) | 2013.01.03 |
[2012 대학 특강] 아티스트 + 프로그래머 = ? (2) | 2013.01.01 |