summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2012-11-06 21:13:16 +0300
committerAndrei Karas <akaras@inbox.ru>2012-11-07 12:46:08 +0300
commitd812d9fac7bae4eff66a5ce8275be19d0ca77a32 (patch)
tree7f9619d23a44202a76282849bb1284773302309f
parent1bcaac517036751a8fee9ff3d6561f5866e6969e (diff)
downloadmv-d812d9fac7bae4eff66a5ce8275be19d0ca77a32.tar.gz
mv-d812d9fac7bae4eff66a5ce8275be19d0ca77a32.tar.bz2
mv-d812d9fac7bae4eff66a5ce8275be19d0ca77a32.tar.xz
mv-d812d9fac7bae4eff66a5ce8275be19d0ca77a32.zip
Add own profiler and profiler info to some code.
-rw-r--r--src/CMakeLists.txt2
-rw-r--r--src/Makefile.am2
-rw-r--r--src/actorsprite.cpp3
-rw-r--r--src/actorspritemanager.cpp7
-rw-r--r--src/animatedsprite.cpp1
-rw-r--r--src/being.cpp7
-rw-r--r--src/client.cpp77
-rw-r--r--src/compoundsprite.cpp1
-rw-r--r--src/flooritem.cpp2
-rw-r--r--src/game.cpp9
-rw-r--r--src/graphics.cpp10
-rw-r--r--src/gui/botcheckerwindow.cpp2
-rw-r--r--src/gui/chatwindow.cpp2
-rw-r--r--src/gui/connectiondialog.cpp2
-rw-r--r--src/gui/debugwindow.cpp7
-rw-r--r--src/gui/equipmentwindow.cpp5
-rw-r--r--src/gui/gui.cpp13
-rw-r--r--src/gui/killstats.cpp4
-rw-r--r--src/gui/minimap.cpp8
-rw-r--r--src/gui/ministatuswindow.cpp4
-rw-r--r--src/gui/npcdialog.cpp2
-rw-r--r--src/gui/outfitwindow.cpp2
-rw-r--r--src/gui/sdlfont.cpp11
-rw-r--r--src/gui/serverdialog.cpp2
-rw-r--r--src/gui/shopwindow.cpp2
-rw-r--r--src/gui/socialwindow.cpp2
-rw-r--r--src/gui/updaterwindow.cpp2
-rw-r--r--src/gui/viewport.cpp5
-rw-r--r--src/gui/whoisonline.cpp2
-rw-r--r--src/gui/widgets/avatarlistbox.cpp5
-rw-r--r--src/gui/widgets/browserbox.cpp3
-rw-r--r--src/gui/widgets/button.cpp5
-rw-r--r--src/gui/widgets/checkbox.cpp2
-rw-r--r--src/gui/widgets/desktop.cpp2
-rw-r--r--src/gui/widgets/dropdown.cpp4
-rw-r--r--src/gui/widgets/dropshortcutcontainer.cpp5
-rw-r--r--src/gui/widgets/emoteshortcutcontainer.cpp2
-rw-r--r--src/gui/widgets/extendedlistbox.cpp2
-rw-r--r--src/gui/widgets/guitable.cpp2
-rw-r--r--src/gui/widgets/icon.cpp2
-rw-r--r--src/gui/widgets/itemcontainer.cpp7
-rw-r--r--src/gui/widgets/itemshortcutcontainer.cpp8
-rw-r--r--src/gui/widgets/label.cpp2
-rw-r--r--src/gui/widgets/listbox.cpp4
-rw-r--r--src/gui/widgets/passwordfield.cpp2
-rw-r--r--src/gui/widgets/playerbox.cpp4
-rw-r--r--src/gui/widgets/popup.cpp2
-rw-r--r--src/gui/widgets/progressbar.cpp6
-rw-r--r--src/gui/widgets/progressindicator.cpp2
-rw-r--r--src/gui/widgets/radiobutton.cpp2
-rw-r--r--src/gui/widgets/scrollarea.cpp9
-rw-r--r--src/gui/widgets/shoplistbox.cpp5
-rw-r--r--src/gui/widgets/slider.cpp3
-rw-r--r--src/gui/widgets/sliderlist.cpp2
-rw-r--r--src/gui/widgets/spellshortcutcontainer.cpp3
-rw-r--r--src/gui/widgets/tab.cpp5
-rw-r--r--src/gui/widgets/tabbedarea.cpp7
-rw-r--r--src/gui/widgets/textfield.cpp4
-rw-r--r--src/gui/widgets/textpreview.cpp2
-rw-r--r--src/gui/widgets/window.cpp2
-rw-r--r--src/gui/widgets/windowcontainer.cpp11
-rw-r--r--src/gui/widgets/windowcontainer.h4
-rw-r--r--src/guichan/basiccontainer.cpp9
-rw-r--r--src/guichan/graphics.cpp1
-rw-r--r--src/guichan/gui.cpp6
-rw-r--r--src/guichan/widget.cpp2
-rw-r--r--src/guichan/widgets/container.cpp2
-rw-r--r--src/guichan/widgets/scrollarea.cpp2
-rw-r--r--src/guichan/widgets/textbox.cpp2
-rw-r--r--src/imageparticle.cpp1
-rw-r--r--src/imagesprite.cpp1
-rw-r--r--src/localconsts.h5
-rw-r--r--src/localplayer.cpp4
-rw-r--r--src/map.cpp11
-rw-r--r--src/maplayer.cpp22
-rw-r--r--src/mobileopenglgraphics.cpp7
-rw-r--r--src/net/packetcounters.cpp2
-rw-r--r--src/net/tmwa/adminhandler.cpp2
-rw-r--r--src/net/tmwa/beinghandler.cpp2
-rw-r--r--src/net/tmwa/buysellhandler.cpp3
-rw-r--r--src/net/tmwa/charserverhandler.cpp2
-rw-r--r--src/net/tmwa/chathandler.cpp2
-rw-r--r--src/net/tmwa/gamehandler.cpp2
-rw-r--r--src/net/tmwa/generalhandler.cpp6
-rw-r--r--src/net/tmwa/guildhandler.cpp2
-rw-r--r--src/net/tmwa/inventoryhandler.cpp2
-rw-r--r--src/net/tmwa/itemhandler.cpp2
-rw-r--r--src/net/tmwa/loginhandler.cpp2
-rw-r--r--src/net/tmwa/network.cpp4
-rw-r--r--src/net/tmwa/npchandler.cpp2
-rw-r--r--src/net/tmwa/partyhandler.cpp2
-rw-r--r--src/net/tmwa/playerhandler.cpp2
-rw-r--r--src/net/tmwa/questhandler.cpp2
-rw-r--r--src/net/tmwa/specialhandler.cpp2
-rw-r--r--src/net/tmwa/tradehandler.cpp2
-rw-r--r--src/normalopenglgraphics.cpp7
-rw-r--r--src/resources/resourcemanager.cpp4
-rw-r--r--src/safeopenglgraphics.cpp7
-rw-r--r--src/simpleanimation.cpp1
-rw-r--r--src/sound.cpp2
-rw-r--r--src/text.cpp7
-rw-r--r--src/textmanager.cpp2
-rw-r--r--src/textparticle.cpp5
-rw-r--r--src/utils/perfomance.cpp85
-rw-r--r--src/utils/perfomance.h76
105 files changed, 637 insertions, 7 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 77b9792b6..f25ae995d 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -478,6 +478,8 @@ SET(SRCS
utils/mathutils.h
utils/paths.cpp
utils/paths.h
+ utils/perfomance.cpp
+ utils/perfomance.h
utils/physfsrwops.cpp
utils/physfsrwops.h
utils/process.cpp
diff --git a/src/Makefile.am b/src/Makefile.am
index 09c47c21e..2140f85cc 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -482,6 +482,8 @@ manaplus_SOURCES += gui/widgets/avatarlistbox.cpp \
utils/mkdir.h \
utils/paths.cpp \
utils/paths.h \
+ utils/perfomance.cpp \
+ utils/perfomance.h \
utils/physfsrwops.cpp \
utils/physfsrwops.h \
utils/process.cpp \
diff --git a/src/actorsprite.cpp b/src/actorsprite.cpp
index bb612c674..edc954d28 100644
--- a/src/actorsprite.cpp
+++ b/src/actorsprite.cpp
@@ -80,6 +80,7 @@ ActorSprite::~ActorSprite()
bool ActorSprite::draw(Graphics *graphics, int offsetX, int offsetY) const
{
+ FUNC_BLOCK("ActorSprite::draw", 1)
// TODO: Eventually, we probably should fix all sprite offsets so that
// these translations aren't necessary anymore. The sprites know
// best where their base point should be.
@@ -111,6 +112,7 @@ bool ActorSprite::drawSpriteAt(Graphics *const graphics,
void ActorSprite::logic()
{
+ BLOCK_START("ActorSprite::logic")
// Update sprite animations
update(tick_time * MILLISECONDS_IN_A_TICK);
@@ -130,6 +132,7 @@ void ActorSprite::logic()
// Update particle effects
mChildParticleEffects.moveTo(mPos.x, mPos.y);
+ BLOCK_END("ActorSprite::logic")
}
void ActorSprite::actorLogic()
diff --git a/src/actorspritemanager.cpp b/src/actorspritemanager.cpp
index 4cbf157ff..4ccb2e347 100644
--- a/src/actorspritemanager.cpp
+++ b/src/actorspritemanager.cpp
@@ -746,6 +746,7 @@ const ActorSprites &ActorSpriteManager::getAll() const
void ActorSpriteManager::logic()
{
+ BLOCK_START("ActorSpriteManager::logic")
for_actors
{
if (*it)
@@ -753,8 +754,12 @@ void ActorSpriteManager::logic()
}
if (mDeleteActors.empty())
+ {
+ BLOCK_END("ActorSpriteManager::logic")
return;
+ }
+ BLOCK_START("ActorSpriteManager::logic 1")
for (ActorSpritesConstIterator it = mDeleteActors.begin(),
it_end = mDeleteActors.end();
it != it_end; ++it)
@@ -789,6 +794,8 @@ void ActorSpriteManager::logic()
}
mDeleteActors.clear();
+ BLOCK_END("ActorSpriteManager::logic 1")
+ BLOCK_END("ActorSpriteManager::logic")
}
void ActorSpriteManager::clear()
diff --git a/src/animatedsprite.cpp b/src/animatedsprite.cpp
index 2446e19dc..7fc8b2782 100644
--- a/src/animatedsprite.cpp
+++ b/src/animatedsprite.cpp
@@ -266,6 +266,7 @@ bool AnimatedSprite::updateCurrentAnimation(unsigned int time)
bool AnimatedSprite::draw(Graphics *graphics, int posX, int posY) const
{
+ FUNC_BLOCK("AnimatedSprite::draw", 1)
if (!mFrame || !mFrame->image)
return false;
diff --git a/src/being.cpp b/src/being.cpp
index 210736117..fe84cdaaf 100644
--- a/src/being.cpp
+++ b/src/being.cpp
@@ -1243,6 +1243,7 @@ void Being::nextTile()
void Being::logic()
{
+ BLOCK_START("Being::logic")
// Reduce the time that speech is still displayed
if (mSpeechTime > 0)
mSpeechTime--;
@@ -1264,7 +1265,10 @@ void Being::logic()
// This is a hack that stops NPCs from running off the map...
if (mDest.x <= 0 && mDest.y <= 0)
+ {
+ BLOCK_END("Being::logic")
return;
+ }
// The Vector representing the difference between current position
// and the next destination path node.
@@ -1449,6 +1453,7 @@ void Being::logic()
if (mType != PLAYER && actorSpriteManager)
actorSpriteManager->destroy(this);
}
+ BLOCK_END("Being::logic")
}
void Being::drawEmotion(Graphics *const graphics, const int offsetX,
@@ -1878,6 +1883,7 @@ void Being::updateName()
void Being::reReadConfig()
{
+ BLOCK_START("Being::reReadConfig")
if (mUpdateConfigTime + 1 < cur_time)
{
mHighlightMapPortals = config.getBoolValue("highlightMapPortals");
@@ -1898,6 +1904,7 @@ void Being::reReadConfig()
mUpdateConfigTime = cur_time;
}
+ BLOCK_END("Being::reReadConfig")
}
bool Being::updateFromCache()
diff --git a/src/client.cpp b/src/client.cpp
index 2e135fc6a..a73dc6806 100644
--- a/src/client.cpp
+++ b/src/client.cpp
@@ -809,6 +809,10 @@ void Client::gameClear()
if (logger)
logger->log1("Quitting11");
+#ifdef USE_PROFILER
+ Perfomance::clear();
+#endif
+
#ifdef DEBUG_OPENGL_LEAKS
if (logger)
logger->log("textures left: %d", textures_count);
@@ -862,6 +866,8 @@ int Client::gameExec()
while (mState != STATE_EXIT)
{
+ PROFILER_START();
+ BLOCK_START("Client::gameExec 1")
if (mGame)
{
// Let the game handle the events while it is active
@@ -869,6 +875,7 @@ int Client::gameExec()
}
else
{
+ BLOCK_START("Client::gameExec 2")
// Handle SDL events
while (SDL_PollEvent(&event))
{
@@ -917,11 +924,15 @@ int Client::gameExec()
}
#endif
}
+ BLOCK_END("Client::gameExec 2")
}
+ BLOCK_START("Client::gameExec 3")
if (Net::getGeneralHandler())
Net::getGeneralHandler()->flushNetwork();
+ BLOCK_END("Client::gameExec 3")
+ BLOCK_START("Client::gameExec 4")
int k = 0;
while (lastTickTime != tick_time && k < 40)
{
@@ -942,6 +953,7 @@ int Client::gameExec()
gui->slowLogic();
if (mGame)
mGame->slowLogic();
+ BLOCK_END("Client::gameExec 4")
// This is done because at some point tick_time will wrap.
lastTickTime = tick_time;
@@ -961,9 +973,12 @@ int Client::gameExec()
SDL_Delay(100);
}
+ BLOCK_START("Client::SDL_framerateDelay")
if (mLimitFps)
SDL_framerateDelay(&mFpsManager);
+ BLOCK_END("Client::SDL_framerateDelay")
+ BLOCK_START("Client::gameExec 6")
// TODO: Add connect timeouts
if (mState == STATE_CONNECT_GAME &&
Net::getGameHandler()->isConnected())
@@ -1048,12 +1063,14 @@ int Client::gameExec()
mDesktop->setSize(mainGraphics->getWidth(),
mainGraphics->getHeight());
}
+ BLOCK_END("Client::gameExec 6")
if (mState == STATE_SWITCH_LOGIN && mOldState == STATE_GAME)
Net::getGameHandler()->disconnect();
if (mState != mOldState)
{
+ BLOCK_START("Client::gameExec 7")
DepricatedEvent evt(EVENT_STATECHANGE);
evt.setInt("oldState", mOldState);
evt.setInt("newState", mState);
@@ -1088,10 +1105,13 @@ int Client::gameExec()
mQuitDialog->scheduleDelete();
mQuitDialog = nullptr;
}
+ BLOCK_END("Client::gameExec 7")
+ BLOCK_START("Client::gameExec 8")
switch (mState)
{
case STATE_CHOOSE_SERVER:
+ BLOCK_START("Client::gameExec STATE_CHOOSE_SERVER")
logger->log1("State: CHOOSE SERVER");
loginData.clearUpdateHost();
@@ -1119,14 +1139,17 @@ int Client::gameExec()
mOptions.serverName.clear();
mOptions.serverPort = 0;
}
+ BLOCK_END("Client::gameExec STATE_CHOOSE_SERVER")
break;
case STATE_CONNECT_SERVER:
+ BLOCK_START("Client::gameExec STATE_CONNECT_SERVER")
logger->log1("State: CONNECT SERVER");
loginData.updateHosts.clear();
mCurrentDialog = new ConnectionDialog(
_("Connecting to server"), STATE_SWITCH_SERVER);
TranslationManager::loadCurrentLang();
+ BLOCK_END("Client::gameExec STATE_CONNECT_SERVER")
break;
case STATE_PRE_LOGIN:
@@ -1136,6 +1159,7 @@ int Client::gameExec()
break;
case STATE_LOGIN:
+ BLOCK_START("Client::gameExec STATE_LOGIN")
logger->log1("State: LOGIN");
// Don't allow an alpha opacity
// lower than the default value
@@ -1157,16 +1181,20 @@ int Client::gameExec()
// dialog will show up next time.
mOptions.password.clear();
}
+ BLOCK_END("Client::gameExec STATE_LOGIN")
break;
case STATE_LOGIN_ATTEMPT:
+ BLOCK_START("Client::gameExec STATE_LOGIN_ATTEMPT")
logger->log1("State: LOGIN ATTEMPT");
accountLogin(&loginData);
mCurrentDialog = new ConnectionDialog(
_("Logging in"), STATE_SWITCH_SERVER);
+ BLOCK_END("Client::gameExec STATE_LOGIN_ATTEMPT")
break;
case STATE_WORLD_SELECT:
+ BLOCK_START("Client::gameExec STATE_WORLD_SELECT")
logger->log1("State: WORLD SELECT");
{
TranslationManager::loadCurrentLang();
@@ -1192,15 +1220,19 @@ int Client::gameExec()
}
}
}
+ BLOCK_END("Client::gameExec STATE_WORLD_SELECT")
break;
case STATE_WORLD_SELECT_ATTEMPT:
+ BLOCK_START("Client::gameExec STATE_WORLD_SELECT_ATTEMPT")
logger->log1("State: WORLD SELECT ATTEMPT");
mCurrentDialog = new ConnectionDialog(
_("Entering game world"), STATE_WORLD_SELECT);
+ BLOCK_END("Client::gameExec STATE_WORLD_SELECT_ATTEMPT")
break;
case STATE_UPDATE:
+ BLOCK_START("Client::gameExec STATE_UPDATE")
// Determine which source to use for the update host
if (!mOptions.updateHost.empty())
mUpdateHost = mOptions.updateHost;
@@ -1226,10 +1258,12 @@ int Client::gameExec()
+ mUpdatesDir, mOptions.dataPath.empty(),
loginData.updateType);
}
+ BLOCK_END("Client::gameExec STATE_UPDATE")
break;
case STATE_LOAD_DATA:
{
+ BLOCK_START("Client::gameExec STATE_LOAD_DATA")
logger->log1("State: LOAD DATA");
const ResourceManager *const resman
@@ -1298,17 +1332,21 @@ int Client::gameExec()
mDesktop->reloadWallpaper();
mState = STATE_GET_CHARACTERS;
+ BLOCK_END("Client::gameExec STATE_LOAD_DATA")
break;
}
case STATE_GET_CHARACTERS:
+ BLOCK_START("Client::gameExec STATE_GET_CHARACTERS")
logger->log1("State: GET CHARACTERS");
Net::getCharHandler()->requestCharacters();
mCurrentDialog = new ConnectionDialog(
_("Requesting characters"),
STATE_SWITCH_SERVER);
+ BLOCK_END("Client::gameExec STATE_GET_CHARACTERS")
break;
case STATE_CHAR_SELECT:
+ BLOCK_START("Client::gameExec STATE_CHAR_SELECT")
logger->log1("State: CHAR SELECT");
// Don't allow an alpha opacity
// lower than the default value
@@ -1331,10 +1369,11 @@ int Client::gameExec()
// Choosing character on the command line should work only
// once, clear it so that 'switch character' works.
mOptions.character.clear();
-
+ BLOCK_END("Client::gameExec STATE_CHAR_SELECT")
break;
case STATE_CONNECT_GAME:
+ BLOCK_START("Client::gameExec STATE_CONNECT_GAME")
logger->log1("State: CONNECT GAME");
Net::getGameHandler()->connect();
@@ -1342,18 +1381,22 @@ int Client::gameExec()
_("Connecting to the game server"),
Net::getNetworkType() != ServerInfo::MANASERV ?
STATE_CHOOSE_SERVER : STATE_SWITCH_CHARACTER);
+ BLOCK_END("Client::gameExec STATE_CONNECT_GAME")
break;
case STATE_CHANGE_MAP:
+ BLOCK_START("Client::gameExec STATE_CHANGE_MAP")
logger->log1("State: CHANGE_MAP");
Net::getGameHandler()->connect();
mCurrentDialog = new ConnectionDialog(
_("Changing game servers"),
STATE_SWITCH_CHARACTER);
+ BLOCK_END("Client::gameExec STATE_CHANGE_MAP")
break;
case STATE_GAME:
+ BLOCK_START("Client::gameExec STATE_GAME")
if (player_node)
{
logger->log("Memorizing selected character %s",
@@ -1397,29 +1440,36 @@ int Client::gameExec()
if (Net::getGeneralHandler())
Net::getGeneralHandler()->reloadPartially();
mGame = new Game;
+ BLOCK_END("Client::gameExec STATE_GAME")
break;
case STATE_LOGIN_ERROR:
+ BLOCK_START("Client::gameExec STATE_LOGIN_ERROR")
logger->log1("State: LOGIN ERROR");
mCurrentDialog = new OkDialog(_("Error"),
errorMessage, DIALOG_ERROR);
mCurrentDialog->addActionListener(&loginListener);
mCurrentDialog = nullptr; // OkDialog deletes itself
+ BLOCK_END("Client::gameExec STATE_LOGIN_ERROR")
break;
case STATE_ACCOUNTCHANGE_ERROR:
+ BLOCK_START("Client::gameExec STATE_ACCOUNTCHANGE_ERROR")
logger->log1("State: ACCOUNT CHANGE ERROR");
mCurrentDialog = new OkDialog(_("Error"),
errorMessage, DIALOG_ERROR);
mCurrentDialog->addActionListener(&accountListener);
mCurrentDialog = nullptr; // OkDialog deletes itself
+ BLOCK_END("Client::gameExec STATE_ACCOUNTCHANGE_ERROR")
break;
case STATE_REGISTER_PREP:
+ BLOCK_START("Client::gameExec STATE_REGISTER_PREP")
logger->log1("State: REGISTER_PREP");
Net::getLoginHandler()->getRegistrationDetails();
mCurrentDialog = new ConnectionDialog(
_("Requesting registration details"), STATE_LOGIN);
+ BLOCK_END("Client::gameExec STATE_REGISTER_PREP")
break;
case STATE_REGISTER:
@@ -1428,22 +1478,29 @@ int Client::gameExec()
break;
case STATE_REGISTER_ATTEMPT:
+ BLOCK_START("Client::gameExec STATE_REGISTER_ATTEMPT")
logger->log("Username is %s", loginData.username.c_str());
Net::getLoginHandler()->registerAccount(&loginData);
+ BLOCK_END("Client::gameExec STATE_REGISTER_ATTEMPT")
break;
case STATE_CHANGEPASSWORD:
+ BLOCK_START("Client::gameExec STATE_CHANGEPASSWORD")
logger->log1("State: CHANGE PASSWORD");
mCurrentDialog = new ChangePasswordDialog(&loginData);
+ BLOCK_END("Client::gameExec STATE_CHANGEPASSWORD")
break;
case STATE_CHANGEPASSWORD_ATTEMPT:
+ BLOCK_START("Client::gameExec STATE_CHANGEPASSWORD_ATTEMPT")
logger->log1("State: CHANGE PASSWORD ATTEMPT");
Net::getLoginHandler()->changePassword(loginData.username,
loginData.password, loginData.newPassword);
+ BLOCK_END("Client::gameExec STATE_CHANGEPASSWORD_ATTEMPT")
break;
case STATE_CHANGEPASSWORD_SUCCESS:
+ BLOCK_START("Client::gameExec STATE_CHANGEPASSWORD_SUCCESS")
logger->log1("State: CHANGE PASSWORD SUCCESS");
mCurrentDialog = new OkDialog(_("Password Change"),
_("Password changed successfully!"), DIALOG_ERROR);
@@ -1451,6 +1508,7 @@ int Client::gameExec()
mCurrentDialog = nullptr; // OkDialog deletes itself
loginData.password = loginData.newPassword;
loginData.newPassword = "";
+ BLOCK_END("Client::gameExec STATE_CHANGEPASSWORD_SUCCESS")
break;
case STATE_CHANGEEMAIL:
@@ -1495,29 +1553,35 @@ int Client::gameExec()
break;
case STATE_SWITCH_SERVER:
+ BLOCK_START("Client::gameExec STATE_SWITCH_SERVER")
logger->log1("State: SWITCH SERVER");
Net::getLoginHandler()->disconnect();
Net::getGameHandler()->disconnect();
mState = STATE_CHOOSE_SERVER;
+ BLOCK_END("Client::gameExec STATE_SWITCH_SERVER")
break;
case STATE_SWITCH_LOGIN:
+ BLOCK_START("Client::gameExec STATE_SWITCH_LOGIN")
logger->log1("State: SWITCH LOGIN");
Net::getLoginHandler()->logout();
mState = STATE_LOGIN;
+ BLOCK_END("Client::gameExec STATE_SWITCH_LOGIN")
break;
case STATE_SWITCH_CHARACTER:
+ BLOCK_START("Client::gameExec STATE_SWITCH_CHARACTER")
logger->log1("State: SWITCH CHARACTER");
// Done with game
Net::getGameHandler()->disconnect();
mState = STATE_GET_CHARACTERS;
+ BLOCK_END("Client::gameExec STATE_SWITCH_CHARACTER")
break;
case STATE_LOGOUT_ATTEMPT:
@@ -1530,18 +1594,23 @@ int Client::gameExec()
break;
case STATE_EXIT:
+ BLOCK_START("Client::gameExec STATE_EXIT")
logger->log1("State: EXIT");
Net::unload();
+ BLOCK_END("Client::gameExec STATE_EXIT")
break;
case STATE_FORCE_QUIT:
+ BLOCK_START("Client::gameExec STATE_FORCE_QUIT")
logger->log1("State: FORCE QUIT");
if (Net::getGeneralHandler())
Net::getGeneralHandler()->unload();
mState = STATE_EXIT;
+ BLOCK_END("Client::gameExec STATE_FORCE_QUIT")
break;
case STATE_ERROR:
+ BLOCK_START("Client::gameExec STATE_ERROR")
logger->log1("State: ERROR");
logger->log("Error: %s\n", errorMessage.c_str());
mCurrentDialog = new OkDialog(_("Error"),
@@ -1549,6 +1618,7 @@ int Client::gameExec()
mCurrentDialog->addActionListener(&errorListener);
mCurrentDialog = nullptr; // OkDialog deletes itself
Net::getGameHandler()->disconnect();
+ BLOCK_END("Client::gameExec STATE_ERROR")
break;
case STATE_AUTORECONNECT_SERVER:
@@ -1560,7 +1630,9 @@ int Client::gameExec()
mState = STATE_FORCE_QUIT;
break;
}
+ BLOCK_END("Client::gameExec 8")
}
+ BLOCK_END("Client::gameExec 1")
}
return 0;
@@ -1722,6 +1794,9 @@ void Client::initLocalDataDir()
logger->error(strprintf(_("%s doesn't exist and can't be created! "
"Exiting."), mLocalDataDir.c_str()));
}
+#ifdef USE_PROFILER
+ Perfomance::init(mLocalDataDir + "/profiler.log");
+#endif
}
void Client::initTempDir()
diff --git a/src/compoundsprite.cpp b/src/compoundsprite.cpp
index f22e927f0..146ce9a1a 100644
--- a/src/compoundsprite.cpp
+++ b/src/compoundsprite.cpp
@@ -120,6 +120,7 @@ bool CompoundSprite::update(int time)
bool CompoundSprite::draw(Graphics *graphics, int posX, int posY) const
{
+ FUNC_BLOCK("CompoundSprite::draw", 1)
if (mNeedsRedraw)
updateImages();
diff --git a/src/flooritem.cpp b/src/flooritem.cpp
index 2a7ca5aed..cb9f2829f 100644
--- a/src/flooritem.cpp
+++ b/src/flooritem.cpp
@@ -98,6 +98,7 @@ bool FloorItem::draw(Graphics *graphics, int offsetX, int offsetY) const
if (!mMap)
return false;
+ BLOCK_START("FloorItem::draw")
const int x = mX * mMap->getTileWidth() + offsetX;
const int y = mY * mMap->getTileHeight() + offsetY;
gcn::Font *font = nullptr;
@@ -145,5 +146,6 @@ bool FloorItem::draw(Graphics *graphics, int offsetX, int offsetY) const
font->drawString(graphics, toString(mAmount), x, y);
}
}
+ BLOCK_END("FloorItem::draw")
return res;
}
diff --git a/src/game.cpp b/src/game.cpp
index 7993fa25c..3cf000229 100644
--- a/src/game.cpp
+++ b/src/game.cpp
@@ -557,6 +557,7 @@ bool Game::saveScreenshot(SDL_Surface *const screenshot)
void Game::logic()
{
+ BLOCK_START("Game::logic")
handleInput();
// Handle all necessary game logic
@@ -569,10 +570,12 @@ void Game::logic()
mCurrentMap->update();
cur_time = static_cast<int>(time(nullptr));
+ BLOCK_END("Game::logic")
}
void Game::slowLogic()
{
+ BLOCK_START("Game::slowLogic")
if (player_node)
player_node->slowLogic();
if (botCheckerWindow)
@@ -645,10 +648,12 @@ void Game::slowLogic()
disconnectedDialog = nullptr;
}
}
+ BLOCK_END("Game::slowLogic")
}
void Game::adjustPerfomance()
{
+ FUNC_BLOCK("Game::adjustPerfomance", 1)
if (mNextAdjustTime <= adjustDelay)
{
mNextAdjustTime = cur_time + adjustDelay;
@@ -907,6 +912,7 @@ void Game::handleActive(const SDL_Event &event)
*/
void Game::handleInput()
{
+ BLOCK_START("Game::handleInput 1")
if (joystick)
joystick->logic();
@@ -914,6 +920,7 @@ void Game::handleInput()
SDL_Event event;
while (SDL_PollEvent(&event))
{
+ BLOCK_START("Game::handleInput 2")
updateHistory(event);
checkKeys();
@@ -935,6 +942,7 @@ void Game::handleInput()
{
Client::setState(STATE_EXIT);
}
+ BLOCK_END("Game::handleInput 2")
} // End while
// If the user is configuring the keys then don't respond.
@@ -951,6 +959,7 @@ void Game::handleInput()
handleMove();
inputManager.handleRepeat();
+ BLOCK_END("Game::handleInput 1")
}
/**
diff --git a/src/graphics.cpp b/src/graphics.cpp
index 4c1d4e832..a0a9a9c12 100644
--- a/src/graphics.cpp
+++ b/src/graphics.cpp
@@ -376,6 +376,7 @@ bool Graphics::drawRescaledImage(Image *const image, int srcX, int srcY,
const int desiredHeight,
const bool useColor A_UNUSED)
{
+ FUNC_BLOCK("Graphics::drawRescaledImage", 1)
// Check that preconditions for blitting are met.
if (!mTarget || !image)
return false;
@@ -416,6 +417,7 @@ bool Graphics::drawImage2(const Image *const image, int srcX, int srcY,
int dstX, int dstY, const int width,
const int height, const bool useColor A_UNUSED)
{
+ FUNC_BLOCK("Graphics::drawImage2", 1)
// Check that preconditions for blitting are met.
if (!mTarget || !image || !image->mSDLSurface)
return false;
@@ -451,6 +453,7 @@ void Graphics::drawImagePattern(const Image *const image,
const int x, const int y,
const int w, const int h)
{
+ FUNC_BLOCK("Graphics::drawImagePattern", 1)
// Check that preconditions for blitting are met.
if (!mTarget || !image)
return;
@@ -555,6 +558,7 @@ void Graphics::drawImageRect(const int x, const int y,
const Image *const left,
const Image *const center)
{
+ BLOCK_START("Graphics::drawImageRect")
const bool drawMain = center && topLeft && topRight
&& bottomLeft && bottomRight;
@@ -597,6 +601,7 @@ void Graphics::drawImageRect(const int x, const int y,
x + w - bottomRight->getWidth(),
y + h - bottomRight->getHeight());
}
+ BLOCK_END("Graphics::drawImageRect")
}
void Graphics::drawImageRect(int x, int y, int w, int h,
@@ -685,6 +690,7 @@ bool Graphics::calcImageRect(GraphicsVertexes *const vert,
if (!vert)
return false;
+ BLOCK_START("Graphics::calcImageRect")
const bool drawMain = center && topLeft && topRight
&& bottomLeft && bottomRight;
@@ -729,6 +735,7 @@ bool Graphics::calcImageRect(GraphicsVertexes *const vert,
}
popClipArea();
+ BLOCK_END("Graphics::calcImageRect")
return 0;
}
@@ -837,6 +844,7 @@ void Graphics::drawTile(ImageVertexes *const vert)
void Graphics::updateScreen()
{
+ BLOCK_START("Graphics::updateScreen")
if (mDoubleBuffer)
{
SDL_Flip(mTarget);
@@ -846,6 +854,7 @@ void Graphics::updateScreen()
SDL_UpdateRects(mTarget, 1, &mRect);
// SDL_UpdateRect(mTarget, 0, 0, 0, 0);
}
+ BLOCK_END("Graphics::updateScreen")
}
SDL_Surface *Graphics::getScreenshot()
@@ -998,6 +1007,7 @@ int Graphics::SDL_FakeUpperBlit(const SDL_Surface *const src,
void Graphics::fillRectangle(const gcn::Rectangle& rectangle)
{
+ FUNC_BLOCK("Graphics::fillRectangle", 1)
if (mClipStack.empty())
return;
diff --git a/src/gui/botcheckerwindow.cpp b/src/gui/botcheckerwindow.cpp
index 4f3381dec..3164ca7c5 100644
--- a/src/gui/botcheckerwindow.cpp
+++ b/src/gui/botcheckerwindow.cpp
@@ -351,6 +351,7 @@ BotCheckerWindow::~BotCheckerWindow()
void BotCheckerWindow::slowLogic()
{
+ BLOCK_START("BotCheckerWindow::slowLogic")
if (mEnabled && mTableModel)
{
const unsigned int nowTime = cur_time;
@@ -367,6 +368,7 @@ void BotCheckerWindow::slowLogic()
mLastUpdateTime = nowTime;
}
}
+ BLOCK_END("BotCheckerWindow::slowLogic")
}
void BotCheckerWindow::action(const gcn::ActionEvent &event)
diff --git a/src/gui/chatwindow.cpp b/src/gui/chatwindow.cpp
index 47f6be680..2e78c048c 100644
--- a/src/gui/chatwindow.cpp
+++ b/src/gui/chatwindow.cpp
@@ -1693,8 +1693,10 @@ void ChatWindow::mouseExited(gcn::MouseEvent& mouseEvent)
void ChatWindow::draw(gcn::Graphics* graphics)
{
+ BLOCK_START("ChatWindow::draw")
if (!mAutoHide || mHaveMouse)
Window::draw(graphics);
+ BLOCK_END("ChatWindow::draw")
}
void ChatWindow::updateVisibility()
diff --git a/src/gui/connectiondialog.cpp b/src/gui/connectiondialog.cpp
index 770507c38..c92f5f53e 100644
--- a/src/gui/connectiondialog.cpp
+++ b/src/gui/connectiondialog.cpp
@@ -63,6 +63,8 @@ void ConnectionDialog::action(const gcn::ActionEvent &)
void ConnectionDialog::draw(gcn::Graphics *graphics)
{
+ BLOCK_START("ConnectionDialog::draw")
// Don't draw the window background, only draw the children
drawChildren(graphics);
+ BLOCK_END("ConnectionDialog::draw")
}
diff --git a/src/gui/debugwindow.cpp b/src/gui/debugwindow.cpp
index 08ea48dd3..11a8ca3c0 100644
--- a/src/gui/debugwindow.cpp
+++ b/src/gui/debugwindow.cpp
@@ -90,8 +90,12 @@ DebugWindow::~DebugWindow()
void DebugWindow::slowLogic()
{
+ BLOCK_START("DebugWindow::slowLogic")
if (!isVisible() || !mTabs)
+ {
+ BLOCK_END("DebugWindow::slowLogic")
return;
+ }
switch (mTabs->getSelectedTabIndex())
{
@@ -109,10 +113,12 @@ void DebugWindow::slowLogic()
if (player_node)
player_node->tryPingRequest();
+ BLOCK_END("DebugWindow::slowLogic")
}
void DebugWindow::draw(gcn::Graphics *g)
{
+ BLOCK_START("DebugWindow::draw")
Window::draw(g);
if (player_node)
@@ -125,6 +131,7 @@ void DebugWindow::draw(gcn::Graphics *g)
-target->getPixelY() + 32 + getHeight() / 2);
}
}
+ BLOCK_END("DebugWindow::draw")
}
void DebugWindow::widgetResized(const gcn::Event &event)
diff --git a/src/gui/equipmentwindow.cpp b/src/gui/equipmentwindow.cpp
index 6d7baff40..e05e1cc50 100644
--- a/src/gui/equipmentwindow.cpp
+++ b/src/gui/equipmentwindow.cpp
@@ -141,6 +141,7 @@ EquipmentWindow::~EquipmentWindow()
void EquipmentWindow::draw(gcn::Graphics *graphics)
{
+ BLOCK_START("EquipmentWindow::draw")
// Draw window graphics
Window::draw(graphics);
Graphics *const g = static_cast<Graphics*>(graphics);
@@ -162,7 +163,10 @@ void EquipmentWindow::draw(gcn::Graphics *graphics)
}
if (!mEquipment)
+ {
+ BLOCK_END("EquipmentWindow::draw")
return;
+ }
i = 0;
for (std::vector<EquipmentBox*>::const_iterator it = mBoxes.begin(),
@@ -197,6 +201,7 @@ void EquipmentWindow::draw(gcn::Graphics *graphics)
box->y + mItemPadding);
}
}
+ BLOCK_END("EquipmentWindow::draw")
}
void EquipmentWindow::action(const gcn::ActionEvent &event)
diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp
index 6e78e3ac8..956b9e8b3 100644
--- a/src/gui/gui.cpp
+++ b/src/gui/gui.cpp
@@ -258,11 +258,15 @@ Gui::~Gui()
void Gui::logic()
{
+ BLOCK_START("Gui::logic")
ResourceManager *const resman = ResourceManager::getInstance();
resman->clearScheduled();
if (!mTop)
+ {
+ BLOCK_END("Gui::logic")
return;
+ }
handleModalFocus();
handleModalMouseInputFocus();
@@ -271,10 +275,12 @@ void Gui::logic()
handleMouseInput();
mTop->logic();
+ BLOCK_END("Gui::logic")
}
void Gui::slowLogic()
{
+ BLOCK_START("Gui::slowLogic")
Palette::advanceGradients();
// Fade out mouse cursor after extended inactivity
@@ -297,14 +303,17 @@ void Gui::slowLogic()
mSecureFont->slowLogic();
if (boldFont)
boldFont->slowLogic();
+ BLOCK_END("Gui::slowLogic")
}
bool Gui::handleInput()
{
+ BLOCK_START("Gui::handleInput")
if (mInput)
return handleKeyInput2();
else
return false;
+ BLOCK_END("Gui::handleInput")
}
bool Gui::handleKeyInput2()
@@ -312,6 +321,7 @@ bool Gui::handleKeyInput2()
if (!guiInput)
return false;
+ BLOCK_START("Gui::handleKeyInput2")
bool consumed(false);
while (!mInput->isKeyQueueEmpty())
@@ -376,11 +386,13 @@ bool Gui::handleKeyInput2()
}
}
} // end while
+ BLOCK_END("Gui::handleKeyInput2")
return consumed;
}
void Gui::draw()
{
+ BLOCK_START("Gui::draw 1")
mGraphics->pushClipArea(getTop()->getDimension());
getTop()->draw(mGraphics);
@@ -403,6 +415,7 @@ void Gui::draw()
}
mGraphics->popClipArea();
+ BLOCK_END("Gui::draw 1")
}
void Gui::videoResized() const
diff --git a/src/gui/killstats.cpp b/src/gui/killstats.cpp
index b591e6c51..d8da5c1e8 100644
--- a/src/gui/killstats.cpp
+++ b/src/gui/killstats.cpp
@@ -259,6 +259,7 @@ void KillStats::gainXp(int xp)
void KillStats::recalcStats()
{
+ BLOCK_START("KillStats::recalcStats")
const int curTime = cur_time;
// Need Update Exp Counter
@@ -295,10 +296,12 @@ void KillStats::recalcStats()
m15minExpNum = newExp;
}
validateJacko();
+ BLOCK_END("KillStats::recalcStats")
}
void KillStats::update()
{
+ BLOCK_START("KillStats::update")
mExpSpeed1Label->setCaption(strprintf(ngettext("Exp speed per %d min: %s",
"Exp speed per %d min: %s", 1), 1, toString(m1minSpeed).c_str()));
@@ -355,6 +358,7 @@ void KillStats::update()
validateJacko();
updateJackoLabel();
+ BLOCK_END("KillStats::update")
}
void KillStats::draw(gcn::Graphics *g)
{
diff --git a/src/gui/minimap.cpp b/src/gui/minimap.cpp
index b773976c3..f155faaea 100644
--- a/src/gui/minimap.cpp
+++ b/src/gui/minimap.cpp
@@ -206,10 +206,14 @@ void Minimap::toggle()
void Minimap::draw(gcn::Graphics *graphics)
{
+ BLOCK_START("Minimap::draw")
Window::draw(graphics);
if (!userPalette || !player_node || !viewport)
+ {
+ BLOCK_END("Minimap::draw")
return;
+ }
Graphics *const graph = static_cast<Graphics*>(graphics);
@@ -218,7 +222,10 @@ void Minimap::draw(gcn::Graphics *graphics)
graphics->pushClipArea(a);
if (!actorSpriteManager)
+ {
+ BLOCK_END("Minimap::draw")
return;
+ }
mMapOriginX = 0;
mMapOriginY = 0;
@@ -396,6 +403,7 @@ void Minimap::draw(gcn::Graphics *graphics)
graphics->setColor(userPalette->getColor(UserPalette::PC));
graphics->drawRectangle(gcn::Rectangle(x, y, w, h));
graphics->popClipArea();
+ BLOCK_END("Minimap::draw")
}
void Minimap::mouseReleased(gcn::MouseEvent &event)
diff --git a/src/gui/ministatuswindow.cpp b/src/gui/ministatuswindow.cpp
index 234218e8c..835c0b250 100644
--- a/src/gui/ministatuswindow.cpp
+++ b/src/gui/ministatuswindow.cpp
@@ -255,6 +255,7 @@ void MiniStatusWindow::updateStatus()
void MiniStatusWindow::logic()
{
+ BLOCK_START("MiniStatusWindow::logic")
Popup::logic();
for (size_t i = 0, sz = mIcons.size(); i < sz; i++)
@@ -262,11 +263,14 @@ void MiniStatusWindow::logic()
if (mIcons[i])
mIcons[i]->update(tick_time * 10);
}
+ BLOCK_END("MiniStatusWindow::logic")
}
void MiniStatusWindow::draw(gcn::Graphics *graphics)
{
+ BLOCK_START("MiniStatusWindow::draw")
drawChildren(graphics);
+ BLOCK_END("MiniStatusWindow::draw")
}
void MiniStatusWindow::mouseMoved(gcn::MouseEvent &event)
diff --git a/src/gui/npcdialog.cpp b/src/gui/npcdialog.cpp
index ab05a3b49..1eb5e9800 100644
--- a/src/gui/npcdialog.cpp
+++ b/src/gui/npcdialog.cpp
@@ -745,6 +745,7 @@ void NpcDialog::setAvatarAction(const int actionId)
void NpcDialog::logic()
{
+ BLOCK_START("NpcDialog::logic")
Window::logic();
if (mShowAvatar && mAvatarBeing)
{
@@ -760,6 +761,7 @@ void NpcDialog::logic()
}
}
}
+ BLOCK_END("NpcDialog::logic")
}
void NpcDialog::clearRows()
diff --git a/src/gui/outfitwindow.cpp b/src/gui/outfitwindow.cpp
index b5e5757ca..a79fd5fbc 100644
--- a/src/gui/outfitwindow.cpp
+++ b/src/gui/outfitwindow.cpp
@@ -308,6 +308,7 @@ void OutfitWindow::copyOutfit(const int src, const int dst)
void OutfitWindow::draw(gcn::Graphics *graphics)
{
+ BLOCK_START("OutfitWindow::draw")
Window::draw(graphics);
Graphics *const g = static_cast<Graphics*>(graphics);
@@ -364,6 +365,7 @@ void OutfitWindow::draw(gcn::Graphics *graphics)
g->drawImage(image, tPosX, tPosY);
}
}
+ BLOCK_END("OutfitWindow::draw")
}
diff --git a/src/gui/sdlfont.cpp b/src/gui/sdlfont.cpp
index 33581767d..7ecf7cb4f 100644
--- a/src/gui/sdlfont.cpp
+++ b/src/gui/sdlfont.cpp
@@ -66,6 +66,7 @@ class SDLTextChunk final
void generate(TTF_Font *const font, const float alpha)
{
+ BLOCK_START("SDLTextChunk::generate")
SDL_Color sdlCol;
sdlCol.b = static_cast<uint8_t>(color.b);
sdlCol.r = static_cast<uint8_t>(color.r);
@@ -80,11 +81,13 @@ class SDLTextChunk final
if (!surface)
{
img = nullptr;
+ BLOCK_END("SDLTextChunk::generate")
return;
}
img = imageHelper->createTextSurface(surface, alpha);
SDL_FreeSurface(surface);
+ BLOCK_END("SDLTextChunk::generate")
}
Image *img;
@@ -192,8 +195,12 @@ void SDLFont::drawString(gcn::Graphics *const graphics,
const std::string &text,
const int x, const int y)
{
+ BLOCK_START("SDLFont::drawString")
if (text.empty())
+ {
+ BLOCK_END("SDLFont::drawString")
return;
+ }
Graphics *const g = dynamic_cast<Graphics *const>(graphics);
@@ -260,11 +267,12 @@ void SDLFont::drawString(gcn::Graphics *const graphics,
image->setAlpha(alpha);
g->drawImage(image, x, y);
}
-
+ BLOCK_END("SDLFont::drawString")
}
void SDLFont::slowLogic()
{
+ BLOCK_START("SDLFont::slowLogic")
if (!mCleanTime)
{
mCleanTime = cur_time + CLEAN_TIME;
@@ -274,6 +282,7 @@ void SDLFont::slowLogic()
doClean();
mCleanTime = cur_time + CLEAN_TIME;
}
+ BLOCK_END("SDLFont::slowLogic")
}
void SDLFont::createSDLTextChunk(SDLTextChunk *const chunk)
diff --git a/src/gui/serverdialog.cpp b/src/gui/serverdialog.cpp
index 306c0534f..5cc1c2acb 100644
--- a/src/gui/serverdialog.cpp
+++ b/src/gui/serverdialog.cpp
@@ -492,6 +492,7 @@ void ServerDialog::mouseClicked(gcn::MouseEvent &mouseEvent)
void ServerDialog::logic()
{
+ BLOCK_START("ServerDialog::logic")
{
MutexLocker tempLock(&mMutex);
if (mDownloadStatus == DOWNLOADING_COMPLETE)
@@ -520,6 +521,7 @@ void ServerDialog::logic()
}
Window::logic();
+ BLOCK_END("ServerDialog::logic")
}
void ServerDialog::downloadServerList()
diff --git a/src/gui/shopwindow.cpp b/src/gui/shopwindow.cpp
index acc3f3948..a9afab262 100644
--- a/src/gui/shopwindow.cpp
+++ b/src/gui/shopwindow.cpp
@@ -776,12 +776,14 @@ void ShopWindow::processRequest(std::string nick, std::string data,
void ShopWindow::updateTimes()
{
+ BLOCK_START("ShopWindow::updateTimes")
if (mAnnonceTime + (2 * 60) < cur_time
|| mAnnonceTime > cur_time)
{
mBuyAnnounceButton->setEnabled(true);
mSellAnnounceButton->setEnabled(true);
}
+ BLOCK_END("ShopWindow::updateTimes")
}
bool ShopWindow::checkFloodCounter(int &counterTime) const
diff --git a/src/gui/socialwindow.cpp b/src/gui/socialwindow.cpp
index 0fc926009..bb59517e5 100644
--- a/src/gui/socialwindow.cpp
+++ b/src/gui/socialwindow.cpp
@@ -1666,6 +1666,7 @@ void SocialWindow::updateActiveList()
void SocialWindow::slowLogic()
{
+ BLOCK_START("SocialWindow::slowLogic")
const unsigned int nowTime = cur_time;
if (mNeedUpdate && nowTime - mLastUpdateTime > 1)
{
@@ -1680,6 +1681,7 @@ void SocialWindow::slowLogic()
mNeedUpdate = false;
mLastUpdateTime = nowTime;
}
+ BLOCK_END("SocialWindow::slowLogic")
}
void SocialWindow::updateAvatar(std::string name)
diff --git a/src/gui/updaterwindow.cpp b/src/gui/updaterwindow.cpp
index e156f98be..2abb8979c 100644
--- a/src/gui/updaterwindow.cpp
+++ b/src/gui/updaterwindow.cpp
@@ -605,6 +605,7 @@ void UpdaterWindow::addUpdateFile(const ResourceManager *const resman,
void UpdaterWindow::logic()
{
+ BLOCK_START("UpdaterWindow::logic")
// Update Scroll logic
mScrollArea->logic();
@@ -826,6 +827,7 @@ void UpdaterWindow::logic()
+ toString(static_cast<unsigned>(mDownloadStatus)));
break;
}
+ BLOCK_END("UpdaterWindow::logic")
}
bool UpdaterWindow::validateFile(const std::string &filePath,
diff --git a/src/gui/viewport.cpp b/src/gui/viewport.cpp
index e7d7ab85d..3fb487811 100644
--- a/src/gui/viewport.cpp
+++ b/src/gui/viewport.cpp
@@ -116,6 +116,7 @@ extern MiniStatusWindow *miniStatusWindow;
void Viewport::draw(gcn::Graphics *gcnGraphics)
{
+ BLOCK_START("Viewport::draw 1")
static int lastTick = tick_time;
if (!mMap || !player_node)
@@ -123,6 +124,7 @@ void Viewport::draw(gcn::Graphics *gcnGraphics)
gcnGraphics->setColor(gcn::Color(64, 64, 64));
gcnGraphics->fillRectangle(
gcn::Rectangle(0, 0, getWidth(), getHeight()));
+ BLOCK_END("Viewport::draw 1")
return;
}
@@ -265,15 +267,18 @@ void Viewport::draw(gcn::Graphics *gcnGraphics)
// Draw contained widgets
WindowContainer::draw(gcnGraphics);
+ BLOCK_END("Viewport::draw 1")
}
void Viewport::logic()
{
+ BLOCK_START("Viewport::logic")
WindowContainer::logic();
// Make the player follow the mouse position
// if the mouse is dragged elsewhere than in a window.
_followMouse();
+ BLOCK_END("Viewport::logic")
}
void Viewport::_followMouse()
diff --git a/src/gui/whoisonline.cpp b/src/gui/whoisonline.cpp
index 425d5fbd8..fa3980024 100644
--- a/src/gui/whoisonline.cpp
+++ b/src/gui/whoisonline.cpp
@@ -606,6 +606,7 @@ void WhoIsOnline::slowLogic()
if (!mAllowUpdate)
return;
+ BLOCK_START("WhoIsOnline::slowLogic")
if (mUpdateTimer == 0)
mUpdateTimer = cur_time;
@@ -658,6 +659,7 @@ void WhoIsOnline::slowLogic()
default:
break;
}
+ BLOCK_END("WhoIsOnline::slowLogic")
}
void WhoIsOnline::action(const gcn::ActionEvent &event)
diff --git a/src/gui/widgets/avatarlistbox.cpp b/src/gui/widgets/avatarlistbox.cpp
index 1f5556a5d..dcb280596 100644
--- a/src/gui/widgets/avatarlistbox.cpp
+++ b/src/gui/widgets/avatarlistbox.cpp
@@ -89,8 +89,12 @@ AvatarListBox::~AvatarListBox()
void AvatarListBox::draw(gcn::Graphics *gcnGraphics)
{
+ BLOCK_START("AvatarListBox::draw")
if (!mListModel || !player_node)
+ {
+ BLOCK_END("AvatarListBox::draw")
return;
+ }
AvatarListModel *const model = static_cast<AvatarListModel *const>(
mListModel);
@@ -276,6 +280,7 @@ void AvatarListBox::draw(gcn::Graphics *gcnGraphics)
}
setWidth(parent->getWidth() - 10);
+ BLOCK_END("AvatarListBox::draw")
}
void AvatarListBox::mousePressed(gcn::MouseEvent &event)
diff --git a/src/gui/widgets/browserbox.cpp b/src/gui/widgets/browserbox.cpp
index 4d0e5e32c..1fa563915 100644
--- a/src/gui/widgets/browserbox.cpp
+++ b/src/gui/widgets/browserbox.cpp
@@ -335,6 +335,7 @@ void BrowserBox::mouseMoved(gcn::MouseEvent &event)
void BrowserBox::draw(gcn::Graphics *graphics)
{
+ BLOCK_START("BrowserBox::draw")
const gcn::ClipRectangle cr = graphics->getCurrentClipArea();
Graphics *const graphics2 = static_cast<Graphics *const>(graphics);
mYStart = cr.y - cr.yOffset;
@@ -400,7 +401,7 @@ void BrowserBox::draw(gcn::Graphics *graphics)
}
}
- return;
+ BLOCK_END("BrowserBox::draw")
}
int BrowserBox::calcHeight()
diff --git a/src/gui/widgets/button.cpp b/src/gui/widgets/button.cpp
index 31bde646f..5a12893a6 100644
--- a/src/gui/widgets/button.cpp
+++ b/src/gui/widgets/button.cpp
@@ -276,6 +276,7 @@ void Button::updateAlpha()
void Button::draw(gcn::Graphics *graphics)
{
+ BLOCK_START("Button::draw")
int mode;
if (!isEnabled())
@@ -289,7 +290,10 @@ void Button::draw(gcn::Graphics *graphics)
const Skin *const skin = button[mode];
if (!skin)
+ {
+ BLOCK_END("Button::draw")
return;
+ }
updateAlpha();
@@ -409,6 +413,7 @@ void Button::draw(gcn::Graphics *graphics)
g2->drawImage(mImages[mode], imageX, imageY);
g2->drawText(getCaption(), textX, textY, getAlignment());
}
+ BLOCK_END("Button::draw")
}
void Button::mouseReleased(gcn::MouseEvent& mouseEvent)
diff --git a/src/gui/widgets/checkbox.cpp b/src/gui/widgets/checkbox.cpp
index 0c2b7ca14..786c77fd2 100644
--- a/src/gui/widgets/checkbox.cpp
+++ b/src/gui/widgets/checkbox.cpp
@@ -91,6 +91,7 @@ CheckBox::~CheckBox()
void CheckBox::draw(gcn::Graphics* graphics)
{
+ BLOCK_START("CheckBox::draw")
drawBox(graphics);
graphics->setFont(getFont());
@@ -98,6 +99,7 @@ void CheckBox::draw(gcn::Graphics* graphics)
graphics->drawText(getCaption(), mPadding + mImageSize + mSpacing,
mPadding);
+ BLOCK_END("CheckBox::draw")
}
void CheckBox::updateAlpha()
diff --git a/src/gui/widgets/desktop.cpp b/src/gui/widgets/desktop.cpp
index 0a6657d3e..6079d33a8 100644
--- a/src/gui/widgets/desktop.cpp
+++ b/src/gui/widgets/desktop.cpp
@@ -82,6 +82,7 @@ void Desktop::widgetResized(const gcn::Event &event A_UNUSED)
void Desktop::draw(gcn::Graphics *graphics)
{
+ BLOCK_START("Desktop::draw")
Graphics *const g = static_cast<Graphics *const>(graphics);
if (!mWallpaper || (getWidth() > mWallpaper->getWidth() ||
@@ -112,6 +113,7 @@ void Desktop::draw(gcn::Graphics *graphics)
g->fillRectangle(gcn::Rectangle(mVersionLabel->getDimension()));
Container::draw(graphics);
+ BLOCK_END("Desktop::draw")
}
void Desktop::setBestFittingWallpaper()
diff --git a/src/gui/widgets/dropdown.cpp b/src/gui/widgets/dropdown.cpp
index a896b4698..bde16760b 100644
--- a/src/gui/widgets/dropdown.cpp
+++ b/src/gui/widgets/dropdown.cpp
@@ -186,6 +186,7 @@ void DropDown::updateAlpha()
void DropDown::draw(gcn::Graphics* graphics)
{
+ BLOCK_START("DropDown::draw")
int h;
if (mDroppedDown)
@@ -227,15 +228,18 @@ void DropDown::draw(gcn::Graphics* graphics)
graphics->setColor(mShadowColor);
graphics->drawLine(0, h + 1, getWidth(), h + 1);
}
+ BLOCK_END("DropDown::draw")
}
void DropDown::drawFrame(gcn::Graphics *graphics)
{
+ BLOCK_START("DropDown::drawFrame")
const int bs = getFrameSize();
const int w = getWidth() + bs * 2;
const int h = getHeight() + bs * 2;
static_cast<Graphics*>(graphics)->drawImageRect(0, 0, w, h, skinRect);
+ BLOCK_END("DropDown::drawFrame")
}
void DropDown::drawButton(gcn::Graphics *graphics)
diff --git a/src/gui/widgets/dropshortcutcontainer.cpp b/src/gui/widgets/dropshortcutcontainer.cpp
index 95a09533e..756738eb0 100644
--- a/src/gui/widgets/dropshortcutcontainer.cpp
+++ b/src/gui/widgets/dropshortcutcontainer.cpp
@@ -91,6 +91,7 @@ void DropShortcutContainer::draw(gcn::Graphics *graphics)
if (!dropShortcut)
return;
+ BLOCK_START("DropShortcutContainer::draw")
if (Client::getGuiAlpha() != mAlpha)
{
mAlpha = Client::getGuiAlpha();
@@ -113,7 +114,10 @@ void DropShortcutContainer::draw(gcn::Graphics *graphics)
const Inventory *const inv = PlayerInfo::getInventory();
if (!inv)
+ {
+ BLOCK_END("DropShortcutContainer::draw")
return;
+ }
for (unsigned i = 0; i < mMaxItems; i++)
{
@@ -166,6 +170,7 @@ void DropShortcutContainer::draw(gcn::Graphics *graphics)
gcn::Graphics::CENTER);
}
}
+ BLOCK_END("DropShortcutContainer::draw")
}
void DropShortcutContainer::mouseDragged(gcn::MouseEvent &event)
diff --git a/src/gui/widgets/emoteshortcutcontainer.cpp b/src/gui/widgets/emoteshortcutcontainer.cpp
index 79abadf9c..1d1a5a60b 100644
--- a/src/gui/widgets/emoteshortcutcontainer.cpp
+++ b/src/gui/widgets/emoteshortcutcontainer.cpp
@@ -104,6 +104,7 @@ void EmoteShortcutContainer::draw(gcn::Graphics *graphics)
if (!emoteShortcut)
return;
+ BLOCK_START("EmoteShortcutContainer::draw")
mAlpha = Client::getGuiAlpha();
if (Client::getGuiAlpha() != mAlpha && mBackgroundImg)
mBackgroundImg->setAlpha(mAlpha);
@@ -157,6 +158,7 @@ void EmoteShortcutContainer::draw(gcn::Graphics *graphics)
spr->draw(g, tPosX, tPosY);
}
}
+ BLOCK_END("EmoteShortcutContainer::draw")
}
void EmoteShortcutContainer::mouseDragged(gcn::MouseEvent &event A_UNUSED)
diff --git a/src/gui/widgets/extendedlistbox.cpp b/src/gui/widgets/extendedlistbox.cpp
index f1b41c03f..bb138b456 100644
--- a/src/gui/widgets/extendedlistbox.cpp
+++ b/src/gui/widgets/extendedlistbox.cpp
@@ -54,6 +54,7 @@ void ExtendedListBox::draw(gcn::Graphics *graphics)
if (!mListModel)
return;
+ BLOCK_START("ExtendedListBox::draw")
ExtendedListModel *const model = static_cast<ExtendedListModel* const>(
mListModel);
Graphics *const g = static_cast<Graphics *const>(graphics);
@@ -95,4 +96,5 @@ void ExtendedListBox::draw(gcn::Graphics *graphics)
image->getWidth() + mImagePadding + mSpacing, y + textPos);
}
}
+ BLOCK_END("ExtendedListBox::draw")
}
diff --git a/src/gui/widgets/guitable.cpp b/src/gui/widgets/guitable.cpp
index 39f08340d..935fa833d 100644
--- a/src/gui/widgets/guitable.cpp
+++ b/src/gui/widgets/guitable.cpp
@@ -293,6 +293,7 @@ void GuiTable::draw(gcn::Graphics* graphics)
if (!mModel || !getRowHeight())
return;
+ BLOCK_START("GuiTable::draw")
if (Client::getGuiAlpha() != mAlpha)
mAlpha = Client::getGuiAlpha();
@@ -386,6 +387,7 @@ void GuiTable::draw(gcn::Graphics* graphics)
mTopWidget->draw(graphics);
graphics->popClipArea();
}
+ BLOCK_END("GuiTable::draw")
}
void GuiTable::moveToTop(gcn::Widget *widget)
diff --git a/src/gui/widgets/icon.cpp b/src/gui/widgets/icon.cpp
index e152d3c4b..7b4f4857e 100644
--- a/src/gui/widgets/icon.cpp
+++ b/src/gui/widgets/icon.cpp
@@ -54,10 +54,12 @@ void Icon::setImage(Image *const image)
void Icon::draw(gcn::Graphics *g)
{
+ BLOCK_START("Icon::draw")
if (mImage)
{
Graphics *const graphics = static_cast<Graphics*>(g);
graphics->drawImage(mImage, (getWidth() - mImage->mBounds.w) / 2,
(getHeight() - mImage->mBounds.h) / 2);
}
+ BLOCK_END("Icon::draw")
}
diff --git a/src/gui/widgets/itemcontainer.cpp b/src/gui/widgets/itemcontainer.cpp
index 616c5caa2..6e9ce1657 100644
--- a/src/gui/widgets/itemcontainer.cpp
+++ b/src/gui/widgets/itemcontainer.cpp
@@ -208,10 +208,14 @@ ItemContainer::~ItemContainer()
void ItemContainer::logic()
{
+ BLOCK_START("ItemContainer::logic")
gcn::Widget::logic();
if (!mInventory)
+ {
+ BLOCK_END("ItemContainer::logic")
return;
+ }
const int lastUsedSlot = mInventory->getLastUsedSlot();
@@ -220,6 +224,7 @@ void ItemContainer::logic()
mLastUsedSlot = lastUsedSlot;
adjustHeight();
}
+ BLOCK_END("ItemContainer::logic")
}
void ItemContainer::draw(gcn::Graphics *graphics)
@@ -227,6 +232,7 @@ void ItemContainer::draw(gcn::Graphics *graphics)
if (!mInventory || !mShowMatrix)
return;
+ BLOCK_START("ItemContainer::draw")
Graphics *const g = static_cast<Graphics *const>(graphics);
g->setFont(getFont());
@@ -313,6 +319,7 @@ void ItemContainer::draw(gcn::Graphics *graphics)
itemY + mEquippedTextPadding, gcn::Graphics::CENTER);
}
}
+ BLOCK_END("ItemContainer::draw")
}
void ItemContainer::selectNone()
diff --git a/src/gui/widgets/itemshortcutcontainer.cpp b/src/gui/widgets/itemshortcutcontainer.cpp
index ccc8cb4c3..44248258c 100644
--- a/src/gui/widgets/itemshortcutcontainer.cpp
+++ b/src/gui/widgets/itemshortcutcontainer.cpp
@@ -100,9 +100,13 @@ void ItemShortcutContainer::setWidget2(const Widget2 *const widget)
void ItemShortcutContainer::draw(gcn::Graphics *graphics)
{
+ BLOCK_START("ItemShortcutContainer::draw")
const ItemShortcut *const selShortcut = itemShortcut[mNumber];
if (!selShortcut)
+ {
+ BLOCK_END("ItemShortcutContainer::draw")
return;
+ }
mAlpha = Client::getGuiAlpha();
if (Client::getGuiAlpha() != mAlpha)
@@ -126,7 +130,10 @@ void ItemShortcutContainer::draw(gcn::Graphics *graphics)
const Inventory *const inv = PlayerInfo::getInventory();
if (!inv)
+ {
+ BLOCK_END("ItemShortcutContainer::draw")
return;
+ }
for (unsigned i = 0; i < mMaxItems; i++)
{
@@ -231,6 +238,7 @@ void ItemShortcutContainer::draw(gcn::Graphics *graphics)
gcn::Graphics::CENTER);
}
}
+ BLOCK_END("ItemShortcutContainer::draw")
}
void ItemShortcutContainer::mouseDragged(gcn::MouseEvent &event)
diff --git a/src/gui/widgets/label.cpp b/src/gui/widgets/label.cpp
index 0286caa7f..2d565a571 100644
--- a/src/gui/widgets/label.cpp
+++ b/src/gui/widgets/label.cpp
@@ -69,6 +69,7 @@ void Label::init()
void Label::draw(gcn::Graphics* graphics)
{
+ BLOCK_START("Label::draw")
int textX;
const int textY = getHeight() / 2 - getFont()->getHeight() / 2;
@@ -92,6 +93,7 @@ void Label::draw(gcn::Graphics* graphics)
graphics->setFont(getFont());
graphics->setColor(mForegroundColor);
graphics->drawText(getCaption(), textX, textY, getAlignment());
+ BLOCK_END("Label::draw")
}
void Label::adjustSize()
diff --git a/src/gui/widgets/listbox.cpp b/src/gui/widgets/listbox.cpp
index b90522229..4de4e360f 100644
--- a/src/gui/widgets/listbox.cpp
+++ b/src/gui/widgets/listbox.cpp
@@ -86,6 +86,7 @@ void ListBox::draw(gcn::Graphics *graphics)
if (!mListModel)
return;
+ BLOCK_START("ListBox::draw")
updateAlpha();
mHighlightColor.a = static_cast<int>(mAlpha * 255.0f);
@@ -109,6 +110,7 @@ void ListBox::draw(gcn::Graphics *graphics)
graphics->drawText(mListModel->getElementAt(i),
mPadding, y + mPadding);
}
+ BLOCK_END("ListBox::draw")
}
void ListBox::keyPressed(gcn::KeyEvent &keyEvent)
@@ -225,11 +227,13 @@ void ListBox::refocus()
void ListBox::adjustSize()
{
+ BLOCK_START("ListBox::adjustSize")
if (mListModel)
{
setHeight(getRowHeight() * mListModel->getNumberOfElements()
+ 2 * mPadding);
}
+ BLOCK_END("ListBox::adjustSize")
}
void ListBox::logic()
diff --git a/src/gui/widgets/passwordfield.cpp b/src/gui/widgets/passwordfield.cpp
index f301f2fe7..512c12761 100644
--- a/src/gui/widgets/passwordfield.cpp
+++ b/src/gui/widgets/passwordfield.cpp
@@ -33,6 +33,7 @@ PasswordField::PasswordField(const Widget2 *const widget,
void PasswordField::draw(gcn::Graphics *graphics)
{
+ BLOCK_START("PasswordField::draw")
// std::string uses cow, thus cheap copy
const std::string original = mText;
if (mPasswordChar)
@@ -41,4 +42,5 @@ void PasswordField::draw(gcn::Graphics *graphics)
mText = "";
TextField::draw(graphics);
mText = original;
+ BLOCK_END("PasswordField::draw")
}
diff --git a/src/gui/widgets/playerbox.cpp b/src/gui/widgets/playerbox.cpp
index 747cd91ab..f378373b2 100644
--- a/src/gui/widgets/playerbox.cpp
+++ b/src/gui/widgets/playerbox.cpp
@@ -97,6 +97,7 @@ void PlayerBox::init(std::string skin)
void PlayerBox::draw(gcn::Graphics *graphics)
{
+ BLOCK_START("PlayerBox::draw")
if (mBeing)
{
// Draw character
@@ -114,10 +115,12 @@ void PlayerBox::draw(gcn::Graphics *graphics)
mBackground.grid[a]->setAlpha(Client::getGuiAlpha());
}
}
+ BLOCK_END("PlayerBox::draw")
}
void PlayerBox::drawFrame(gcn::Graphics *graphics)
{
+ BLOCK_START("PlayerBox::drawFrame")
if (mDrawBackground)
{
int w, h, bs;
@@ -128,4 +131,5 @@ void PlayerBox::drawFrame(gcn::Graphics *graphics)
static_cast<Graphics*>(graphics)->drawImageRect(
0, 0, w, h, mBackground);
}
+ BLOCK_END("PlayerBox::drawFrame")
}
diff --git a/src/gui/widgets/popup.cpp b/src/gui/widgets/popup.cpp
index b870d2eb1..03beec766 100644
--- a/src/gui/widgets/popup.cpp
+++ b/src/gui/widgets/popup.cpp
@@ -102,6 +102,7 @@ void Popup::setWindowContainer(WindowContainer *const wc)
void Popup::draw(gcn::Graphics *graphics)
{
+ BLOCK_START("Popup::draw")
Graphics *const g = static_cast<Graphics*>(graphics);
if (mRedraw)
@@ -116,6 +117,7 @@ void Popup::draw(gcn::Graphics *graphics)
// g->drawImageRect(0, 0, getWidth(), getHeight(), mSkin->getBorder());
drawChildren(graphics);
+ BLOCK_END("Popup::draw")
}
gcn::Rectangle Popup::getChildrenArea()
diff --git a/src/gui/widgets/progressbar.cpp b/src/gui/widgets/progressbar.cpp
index 590447b89..ef3aa19a0 100644
--- a/src/gui/widgets/progressbar.cpp
+++ b/src/gui/widgets/progressbar.cpp
@@ -90,6 +90,7 @@ ProgressBar::~ProgressBar()
void ProgressBar::logic()
{
+ BLOCK_START("ProgressBar::logic")
if (mSmoothColorChange && mColorToGo != mColor)
{
// Smoothly changing the color for a nicer effect.
@@ -115,6 +116,7 @@ void ProgressBar::logic()
if (mProgressToGo < mProgress)
mProgress = std::max(0.0f, mProgress - 0.005f);
}
+ BLOCK_END("ProgressBar::logic")
}
void ProgressBar::updateAlpha()
@@ -139,11 +141,11 @@ void ProgressBar::updateAlpha()
void ProgressBar::draw(gcn::Graphics *graphics)
{
+ BLOCK_START("ProgressBar::draw")
updateAlpha();
-
mColor.a = static_cast<int>(mAlpha * 255);
-
render(static_cast<Graphics*>(graphics));
+ BLOCK_END("ProgressBar::draw")
}
void ProgressBar::setProgress(const float progress)
diff --git a/src/gui/widgets/progressindicator.cpp b/src/gui/widgets/progressindicator.cpp
index 936e357ab..10b2bba88 100644
--- a/src/gui/widgets/progressindicator.cpp
+++ b/src/gui/widgets/progressindicator.cpp
@@ -65,6 +65,7 @@ void ProgressIndicator::logic()
void ProgressIndicator::draw(gcn::Graphics *graphics)
{
+ BLOCK_START("ProgressIndicator::draw")
if (mIndicator)
{
// Draw the indicator centered on the widget
@@ -72,4 +73,5 @@ void ProgressIndicator::draw(gcn::Graphics *graphics)
const int y = (getHeight() - 32) / 2;
mIndicator->draw(static_cast<Graphics*>(graphics), x, y);
}
+ BLOCK_END("ProgressIndicator::draw")
}
diff --git a/src/gui/widgets/radiobutton.cpp b/src/gui/widgets/radiobutton.cpp
index 98e1182e1..1c56f787e 100644
--- a/src/gui/widgets/radiobutton.cpp
+++ b/src/gui/widgets/radiobutton.cpp
@@ -149,6 +149,7 @@ void RadioButton::drawBox(gcn::Graphics* graphics)
void RadioButton::draw(gcn::Graphics* graphics)
{
+ BLOCK_START("RadioButton::draw")
drawBox(graphics);
graphics->setFont(getFont());
@@ -156,6 +157,7 @@ void RadioButton::draw(gcn::Graphics* graphics)
graphics->drawText(getCaption(), mPadding + mImageSize + mSpacing,
mPadding);
+ BLOCK_END("RadioButton::draw")
}
void RadioButton::mouseEntered(gcn::MouseEvent& event A_UNUSED)
diff --git a/src/gui/widgets/scrollarea.cpp b/src/gui/widgets/scrollarea.cpp
index 0b7b73e6e..5658c6a8f 100644
--- a/src/gui/widgets/scrollarea.cpp
+++ b/src/gui/widgets/scrollarea.cpp
@@ -177,8 +177,12 @@ void ScrollArea::init(std::string skinName)
void ScrollArea::logic()
{
+ BLOCK_START("ScrollArea::logic")
if (!isVisible())
+ {
+ BLOCK_END("ScrollArea::logic")
return;
+ }
gcn::ScrollArea::logic();
gcn::Widget *const content = getContent();
@@ -208,6 +212,7 @@ void ScrollArea::logic()
setHorizontalScrollAmount(mHScroll - mLeftButtonScrollAmount);
else if (mRightButtonPressed)
setHorizontalScrollAmount(mHScroll + mRightButtonScrollAmount);
+ BLOCK_END("ScrollArea::logic")
}
void ScrollArea::updateAlpha()
@@ -236,6 +241,7 @@ void ScrollArea::updateAlpha()
void ScrollArea::draw(gcn::Graphics *graphics)
{
+ BLOCK_START("ScrollArea::draw")
if (mVBarVisible)
{
drawUpButton(graphics);
@@ -254,10 +260,12 @@ void ScrollArea::draw(gcn::Graphics *graphics)
updateAlpha();
drawChildren(graphics);
+ BLOCK_END("ScrollArea::draw")
}
void ScrollArea::drawFrame(gcn::Graphics *graphics)
{
+ BLOCK_START("ScrollArea::drawFrame")
if (mOpaque)
{
const int bs = getFrameSize();
@@ -307,6 +315,7 @@ void ScrollArea::drawFrame(gcn::Graphics *graphics)
// static_cast<Graphics*>(graphics)->
// drawImageRect(0, 0, w, h, background);
}
+ BLOCK_END("ScrollArea::drawFrame")
}
void ScrollArea::setOpaque(bool opaque)
diff --git a/src/gui/widgets/shoplistbox.cpp b/src/gui/widgets/shoplistbox.cpp
index 0134a64c9..86c2e2e67 100644
--- a/src/gui/widgets/shoplistbox.cpp
+++ b/src/gui/widgets/shoplistbox.cpp
@@ -84,8 +84,12 @@ void ShopListBox::setPlayersMoney(const int money)
void ShopListBox::draw(gcn::Graphics *gcnGraphics)
{
+ BLOCK_START("ShopListBox::draw")
if (!mListModel || !mShopItems)
+ {
+ BLOCK_END("ShopListBox::draw")
return;
+ }
if (Client::getGuiAlpha() != mAlpha)
mAlpha = Client::getGuiAlpha();
@@ -156,6 +160,7 @@ void ShopListBox::draw(gcn::Graphics *gcnGraphics)
ITEM_ICON_SIZE + mPadding,
y + (ITEM_ICON_SIZE - getFont()->getHeight()) / 2 + mPadding);
}
+ BLOCK_END("ShopListBox::draw")
}
void ShopListBox::adjustSize()
diff --git a/src/gui/widgets/slider.cpp b/src/gui/widgets/slider.cpp
index 4ba57b257..1f6a68be9 100644
--- a/src/gui/widgets/slider.cpp
+++ b/src/gui/widgets/slider.cpp
@@ -112,9 +112,11 @@ void Slider::updateAlpha()
void Slider::draw(gcn::Graphics *graphics)
{
+ BLOCK_START("Slider::draw")
if (!buttons[0].grid[HSTART] || !buttons[1].grid[HSTART]
|| !buttons[0].grid[HEND])
{
+ BLOCK_END("Slider::draw")
return;
}
@@ -174,6 +176,7 @@ void Slider::draw(gcn::Graphics *graphics)
}
drawMarker(graphics);
+ BLOCK_END("Slider::draw")
}
void Slider::drawMarker(gcn::Graphics *const graphics) const
diff --git a/src/gui/widgets/sliderlist.cpp b/src/gui/widgets/sliderlist.cpp
index c108930d1..d57b1a092 100644
--- a/src/gui/widgets/sliderlist.cpp
+++ b/src/gui/widgets/sliderlist.cpp
@@ -108,12 +108,14 @@ void SliderList::resize()
void SliderList::draw(gcn::Graphics *graphics)
{
+ BLOCK_START("SliderList::draw")
if (mOldWidth != getWidth())
{
resize();
mOldWidth = getWidth();
}
Container::draw(graphics);
+ BLOCK_END("SliderList::draw")
}
void SliderList::updateLabel()
diff --git a/src/gui/widgets/spellshortcutcontainer.cpp b/src/gui/widgets/spellshortcutcontainer.cpp
index cfc3863eb..10e82676e 100644
--- a/src/gui/widgets/spellshortcutcontainer.cpp
+++ b/src/gui/widgets/spellshortcutcontainer.cpp
@@ -93,6 +93,7 @@ void SpellShortcutContainer::draw(gcn::Graphics *graphics)
if (!spellShortcut)
return;
+ BLOCK_START("SpellShortcutContainer::draw")
if (Client::getGuiAlpha() != mAlpha)
{
mAlpha = Client::getGuiAlpha();
@@ -155,7 +156,7 @@ void SpellShortcutContainer::draw(gcn::Graphics *graphics)
{
// Draw the item image being dragged by the cursor.
}
-
+ BLOCK_END("SpellShortcutContainer::draw")
}
void SpellShortcutContainer::mouseDragged(gcn::MouseEvent &event)
diff --git a/src/gui/widgets/tab.cpp b/src/gui/widgets/tab.cpp
index aea8efb37..6747b19e0 100644
--- a/src/gui/widgets/tab.cpp
+++ b/src/gui/widgets/tab.cpp
@@ -147,6 +147,7 @@ void Tab::updateAlpha()
void Tab::draw(gcn::Graphics *graphics)
{
+ BLOCK_START("Tab::draw")
int mode = TAB_STANDARD;
// check which type of tab to draw
@@ -184,7 +185,10 @@ void Tab::draw(gcn::Graphics *graphics)
const Skin *const skin = tabImg[mode];
if (!skin)
+ {
+ BLOCK_END("Tab::draw")
return;
+ }
updateAlpha();
@@ -206,6 +210,7 @@ void Tab::draw(gcn::Graphics *graphics)
// draw label
drawChildren(graphics);
+ BLOCK_END("Tab::draw")
}
void Tab::widgetResized(const gcn::Event &event A_UNUSED)
diff --git a/src/gui/widgets/tabbedarea.cpp b/src/gui/widgets/tabbedarea.cpp
index 0321e5044..ded2986d3 100644
--- a/src/gui/widgets/tabbedarea.cpp
+++ b/src/gui/widgets/tabbedarea.cpp
@@ -129,10 +129,15 @@ Tab *TabbedArea::getTab(const std::string &name) const
void TabbedArea::draw(gcn::Graphics *graphics)
{
+ BLOCK_START("TabbedArea::draw")
if (mTabs.empty())
+ {
+ BLOCK_END("TabbedArea::draw")
return;
+ }
drawChildren(graphics);
+ BLOCK_END("TabbedArea::draw")
}
gcn::Widget *TabbedArea::getWidget(const std::string &name) const
@@ -274,7 +279,9 @@ void TabbedArea::removeTab(Tab *tab)
void TabbedArea::logic()
{
+ BLOCK_START("TabbedArea::logic")
logicChildren();
+ BLOCK_END("TabbedArea::logic")
}
void TabbedArea::mousePressed(gcn::MouseEvent &mouseEvent)
diff --git a/src/gui/widgets/textfield.cpp b/src/gui/widgets/textfield.cpp
index a31ae59fe..fc9c73a68 100644
--- a/src/gui/widgets/textfield.cpp
+++ b/src/gui/widgets/textfield.cpp
@@ -119,6 +119,7 @@ void TextField::updateAlpha()
void TextField::draw(gcn::Graphics *graphics)
{
+ BLOCK_START("TextField::draw")
updateAlpha();
if (isFocused())
@@ -131,13 +132,16 @@ void TextField::draw(gcn::Graphics *graphics)
graphics->setColor(mForegroundColor);
graphics->setFont(getFont());
graphics->drawText(mText, mPadding - mXScroll, mPadding);
+ BLOCK_END("TextField::draw")
}
void TextField::drawFrame(gcn::Graphics *graphics)
{
+ BLOCK_START("TextField::drawFrame")
const int bs = 2 * getFrameSize();
static_cast<Graphics*>(graphics)->drawImageRect(0, 0,
getWidth() + bs, getHeight() + bs, skin);
+ BLOCK_END("TextField::drawFrame")
}
void TextField::setNumeric(const bool numeric)
diff --git a/src/gui/widgets/textpreview.cpp b/src/gui/widgets/textpreview.cpp
index f9f0269c0..8468da782 100644
--- a/src/gui/widgets/textpreview.cpp
+++ b/src/gui/widgets/textpreview.cpp
@@ -78,6 +78,7 @@ TextPreview::~TextPreview()
void TextPreview::draw(gcn::Graphics* graphics)
{
+ BLOCK_START("TextPreview::draw")
if (Client::getGuiAlpha() != mAlpha)
mAlpha = Client::getGuiAlpha();
@@ -112,6 +113,7 @@ void TextPreview::draw(gcn::Graphics* graphics)
TextRenderer::renderText(graphics, mText, mPadding + 1, mPadding + 1,
gcn::Graphics::LEFT, gcn::Color(mTextColor->r, mTextColor->g,
mTextColor->b, alpha), mFont, mOutline, mShadow);
+ BLOCK_END("TextPreview::draw")
}
void TextPreview::adjustSize()
diff --git a/src/gui/widgets/window.cpp b/src/gui/widgets/window.cpp
index e4a279e6c..ecf8f0f99 100644
--- a/src/gui/widgets/window.cpp
+++ b/src/gui/widgets/window.cpp
@@ -186,6 +186,7 @@ void Window::draw(gcn::Graphics *graphics)
if (!mSkin)
return;
+ BLOCK_START("Window::draw")
Graphics *const g = static_cast<Graphics*>(graphics);
bool update = false;
@@ -237,6 +238,7 @@ void Window::draw(gcn::Graphics *graphics)
{
drawChildren(graphics);
}
+ BLOCK_END("Window::draw")
}
void Window::setContentSize(int width, int height)
diff --git a/src/gui/widgets/windowcontainer.cpp b/src/gui/widgets/windowcontainer.cpp
index 9acba77b2..8c985737c 100644
--- a/src/gui/widgets/windowcontainer.cpp
+++ b/src/gui/widgets/windowcontainer.cpp
@@ -37,10 +37,12 @@ WindowContainer::WindowContainer(const Widget2 *const widget) :
void WindowContainer::logic()
{
+ BLOCK_START("WindowContainer::logic")
delete_all(mDeathList);
mDeathList.clear();
gcn::Container::logic();
+ BLOCK_END("WindowContainer::logic")
}
void WindowContainer::scheduleDelete(gcn::Widget *const widget)
@@ -59,3 +61,12 @@ void WindowContainer::adjustAfterResize(const int oldScreenWidth,
window->adjustPositionAfterResize(oldScreenWidth, oldScreenHeight);
}
}
+
+#ifdef USE_PROFILER
+void WindowContainer::draw(gcn::Graphics* graphics)
+{
+ BLOCK_START("WindowContainer::draw")
+ Container::draw(graphics);
+ BLOCK_END("WindowContainer::draw")
+}
+#endif
diff --git a/src/gui/widgets/windowcontainer.h b/src/gui/widgets/windowcontainer.h
index 7a7b77fe1..fd25a1162 100644
--- a/src/gui/widgets/windowcontainer.h
+++ b/src/gui/widgets/windowcontainer.h
@@ -57,6 +57,10 @@ class WindowContainer : public Container
void adjustAfterResize(const int oldScreenWidth,
const int oldScreenHeight);
+#ifdef USE_PROFILER
+ void draw(gcn::Graphics* graphics);
+#endif
+
private:
/**
* List of widgets that are scheduled to be deleted.
diff --git a/src/guichan/basiccontainer.cpp b/src/guichan/basiccontainer.cpp
index f3f61b65a..fb69bb53a 100644
--- a/src/guichan/basiccontainer.cpp
+++ b/src/guichan/basiccontainer.cpp
@@ -257,6 +257,8 @@ namespace gcn
void BasicContainer::drawChildren(Graphics* graphics)
{
+ BLOCK_START("BasicContainer::drawChildren")
+
graphics->pushClipArea(getChildrenArea());
for (WidgetListConstIterator iter = mWidgets.begin();
@@ -274,26 +276,33 @@ namespace gcn
rec.width += 2 * (*iter)->getFrameSize();
rec.height += 2 * (*iter)->getFrameSize();
graphics->pushClipArea(rec);
+ BLOCK_START("BasicContainer::drawChildren 1")
(*iter)->drawFrame(graphics);
+ BLOCK_END("BasicContainer::drawChildren 1")
graphics->popClipArea();
}
graphics->pushClipArea((*iter)->getDimension());
+ BLOCK_START("BasicContainer::drawChildren 2")
(*iter)->draw(graphics);
+ BLOCK_END("BasicContainer::drawChildren 2")
graphics->popClipArea();
}
}
graphics->popClipArea();
+ BLOCK_END("BasicContainer::drawChildren")
}
void BasicContainer::logicChildren()
{
+ BLOCK_START("BasicContainer::logicChildren")
for (WidgetListConstIterator iter = mWidgets.begin();
iter != mWidgets.end(); ++ iter)
{
(*iter)->logic();
}
+ BLOCK_END("BasicContainer::logicChildren")
}
void BasicContainer::showWidgetPart(Widget* widget, Rectangle area)
diff --git a/src/guichan/graphics.cpp b/src/guichan/graphics.cpp
index 52e183591..756b5a9b5 100644
--- a/src/guichan/graphics.cpp
+++ b/src/guichan/graphics.cpp
@@ -155,6 +155,7 @@ namespace gcn
void Graphics::drawText(const std::string& text, int x, int y,
Alignment alignment)
{
+ FUNC_BLOCK("Graphics::drawText", 1)
if (!mFont)
throw GCN_EXCEPTION("No font set.");
diff --git a/src/guichan/gui.cpp b/src/guichan/gui.cpp
index 41b9fe30f..ed4417650 100644
--- a/src/guichan/gui.cpp
+++ b/src/guichan/gui.cpp
@@ -161,6 +161,7 @@ namespace gcn
void Gui::handleMouseInput()
{
+ BLOCK_START("Gui::handleMouseInput")
while (!mInput->isMouseQueueEmpty())
{
const MouseInput mouseInput = mInput->dequeueMouseInput();
@@ -192,6 +193,7 @@ namespace gcn
break;
}
}
+ BLOCK_END("Gui::handleMouseInput")
}
void Gui::handleKeyInput()
@@ -748,6 +750,7 @@ namespace gcn
void Gui::handleModalMouseInputFocus()
{
+ BLOCK_START("Gui::handleModalMouseInputFocus")
// Check if modal mouse input focus has been gained by a widget.
if ((mFocusHandler->getLastWidgetWithModalMouseInputFocus()
!= mFocusHandler->getModalMouseInputFocused())
@@ -765,10 +768,12 @@ namespace gcn
handleModalFocusReleased();
mFocusHandler->setLastWidgetWithModalMouseInputFocus(nullptr);
}
+ BLOCK_END("Gui::handleModalMouseInputFocus")
}
void Gui::handleModalFocus()
{
+ BLOCK_START("Gui::handleModalFocus")
// Check if modal focus has been gained by a widget.
if ((mFocusHandler->getLastWidgetWithModalFocus()
!= mFocusHandler->getModalFocused())
@@ -786,6 +791,7 @@ namespace gcn
handleModalFocusReleased();
mFocusHandler->setLastWidgetWithModalFocus(nullptr);
}
+ BLOCK_END("Gui::handleModalFocus")
}
void Gui::handleModalFocusGained()
diff --git a/src/guichan/widget.cpp b/src/guichan/widget.cpp
index e9e846e76..fbc0cfef9 100644
--- a/src/guichan/widget.cpp
+++ b/src/guichan/widget.cpp
@@ -108,6 +108,7 @@ namespace gcn
void Widget::drawFrame(Graphics* graphics)
{
+ BLOCK_START("Widget::drawFrame")
const Color &faceColor = getBaseColor();
Color highlightColor = faceColor + 0x303030;
Color shadowColor = faceColor - 0x303030;
@@ -126,6 +127,7 @@ namespace gcn
graphics->drawLine(width - i, i + 1, width - i, height - i);
graphics->drawLine(i, height - i, width - i - 1, height - i);
}
+ BLOCK_END("Widget::drawFrame")
}
void Widget::_setParent(Widget* parent)
diff --git a/src/guichan/widgets/container.cpp b/src/guichan/widgets/container.cpp
index ec61338c8..64f1ee8cb 100644
--- a/src/guichan/widgets/container.cpp
+++ b/src/guichan/widgets/container.cpp
@@ -69,6 +69,7 @@ namespace gcn
void Container::draw(Graphics* graphics)
{
+ BLOCK_START("Container::draw")
if (isOpaque())
{
graphics->setColor(getBaseColor());
@@ -76,6 +77,7 @@ namespace gcn
}
drawChildren(graphics);
+ BLOCK_END("Container::draw")
}
void Container::setOpaque(bool opaque)
diff --git a/src/guichan/widgets/scrollarea.cpp b/src/guichan/widgets/scrollarea.cpp
index f79bd32eb..59e909258 100644
--- a/src/guichan/widgets/scrollarea.cpp
+++ b/src/guichan/widgets/scrollarea.cpp
@@ -455,6 +455,7 @@ namespace gcn
void ScrollArea::logic()
{
+ BLOCK_START("ScrollArea::logic")
checkPolicies();
setVerticalScrollAmount(getVerticalScrollAmount());
@@ -466,6 +467,7 @@ namespace gcn
-mVScroll + getContent()->getFrameSize());
getContent()->logic();
}
+ BLOCK_END("ScrollArea::logic")
}
void ScrollArea::checkPolicies()
diff --git a/src/guichan/widgets/textbox.cpp b/src/guichan/widgets/textbox.cpp
index 0c8f4451a..66441894b 100644
--- a/src/guichan/widgets/textbox.cpp
+++ b/src/guichan/widgets/textbox.cpp
@@ -120,6 +120,7 @@ namespace gcn
void TextBox::draw(Graphics* graphics)
{
+ BLOCK_START("TextBox::draw")
if (mOpaque)
{
graphics->setColor(mBackgroundColor);
@@ -142,6 +143,7 @@ namespace gcn
graphics->drawText(mTextRows[i], 1,
static_cast<int>(i * getFont()->getHeight()));
}
+ BLOCK_END("TextBox::draw")
}
void TextBox::drawCaret(Graphics* graphics, int x, int y)
diff --git a/src/imageparticle.cpp b/src/imageparticle.cpp
index 863cb8ba8..a4ae38a84 100644
--- a/src/imageparticle.cpp
+++ b/src/imageparticle.cpp
@@ -67,6 +67,7 @@ ImageParticle::~ImageParticle()
bool ImageParticle::draw(Graphics *graphics, int offsetX, int offsetY) const
{
+ FUNC_BLOCK("ImageParticle::draw", 1)
if (!isAlive() || !mImage)
return false;
diff --git a/src/imagesprite.cpp b/src/imagesprite.cpp
index e827476db..aef932b20 100644
--- a/src/imagesprite.cpp
+++ b/src/imagesprite.cpp
@@ -50,6 +50,7 @@ ImageSprite::~ImageSprite()
bool ImageSprite::draw(Graphics* graphics, int posX, int posY) const
{
+ FUNC_BLOCK("ImageSprite::draw", 1)
if (!mImage)
return false;
diff --git a/src/localconsts.h b/src/localconsts.h
index 7db758697..7fa4fc381 100644
--- a/src/localconsts.h
+++ b/src/localconsts.h
@@ -62,3 +62,8 @@
//Android logging
#define ANDROID_LOG 1
+
+//profiler
+//#define USE_PROFILER 1
+
+#include "utils/perfomance.h"
diff --git a/src/localplayer.cpp b/src/localplayer.cpp
index ede9f412c..d387cdd40 100644
--- a/src/localplayer.cpp
+++ b/src/localplayer.cpp
@@ -208,6 +208,7 @@ LocalPlayer::~LocalPlayer()
void LocalPlayer::logic()
{
+ BLOCK_START("LocalPlayer::logic")
#ifdef USE_MUMBLE
if (mumbleManager)
mumbleManager->setPos(mX, mY, mDirection);
@@ -325,10 +326,12 @@ void LocalPlayer::logic()
}
Being::logic();
+ BLOCK_END("LocalPlayer::logic")
}
void LocalPlayer::slowLogic()
{
+ BLOCK_START("LocalPlayer::slowLogic")
if (weightNotice && weightNoticeTime < cur_time)
{
weightNotice->scheduleDelete();
@@ -354,6 +357,7 @@ void LocalPlayer::slowLogic()
else
mAdvertTime = cur_time + 30;
}
+ BLOCK_END("LocalPlayer::slowLogic")
}
void LocalPlayer::setAction(const Action &action, const int attackType)
diff --git a/src/map.cpp b/src/map.cpp
index c31356276..f0fae1a9c 100644
--- a/src/map.cpp
+++ b/src/map.cpp
@@ -325,6 +325,7 @@ void Map::draw(Graphics *graphics, int scrollX, int scrollY)
if (!player_node)
return;
+ BLOCK_START("Map::draw")
// Calculate range of tiles which are on-screen
const int endPixelY = graphics->mHeight + scrollY + mTileHeight - 1
+ mMaxTileHeight - mTileHeight;
@@ -338,7 +339,9 @@ void Map::draw(Graphics *graphics, int scrollX, int scrollY)
// so that they overlap correctly
// if (mSpritesUpdated)
// {
+ BLOCK_START("Map::draw sort")
mActors.sort(actorCompare);
+ BLOCK_END("Map::draw sort")
// mSpritesUpdated = false;
// }
@@ -475,6 +478,7 @@ void Map::draw(Graphics *graphics, int scrollX, int scrollY)
}
drawAmbientLayers(graphics, FOREGROUND_LAYERS, mOverlayDetail);
+ BLOCK_END("Map::draw")
}
#define fillCollision(collision, color) \
@@ -546,6 +550,7 @@ void Map::drawCollision(Graphics *const graphics,
void Map::updateAmbientLayers(const float scrollX, const float scrollY)
{
+ BLOCK_START("Map::updateAmbientLayers")
static int lastTick = tick_time; // static = only initialized at first call
if (mLastAScrollX == 0.0f && mLastAScrollY == 0.0f)
@@ -575,14 +580,19 @@ void Map::updateAmbientLayers(const float scrollX, const float scrollY)
mLastAScrollX = scrollX;
mLastAScrollY = scrollY;
lastTick = tick_time;
+ BLOCK_END("Map::updateAmbientLayers")
}
void Map::drawAmbientLayers(Graphics *const graphics, const LayerType type,
const int detail)
{
+ BLOCK_START("Map::drawAmbientLayers")
// Detail 0 = no ambient effects except background image
if (detail <= 0 && type != BACKGROUND_LAYERS)
+ {
+ BLOCK_END("Map::drawAmbientLayers")
return;
+ }
// find out which layer list to draw
AmbientLayerVector *layers;
@@ -609,6 +619,7 @@ void Map::drawAmbientLayers(Graphics *const graphics, const LayerType type,
if (detail == 1)
break;
}
+ BLOCK_END("Map::drawAmbientLayers")
}
Tileset *Map::getTilesetWithGid(const int gid) const
diff --git a/src/maplayer.cpp b/src/maplayer.cpp
index 752ff593f..8980b4f47 100644
--- a/src/maplayer.cpp
+++ b/src/maplayer.cpp
@@ -86,6 +86,7 @@ void MapLayer::draw(Graphics *const graphics,
if (!player_node)
return;
+ BLOCK_START("MapLayer::draw")
startX -= mX;
startY -= mY;
endX -= mX;
@@ -145,10 +146,12 @@ void MapLayer::draw(Graphics *const graphics,
x += c;
}
}
+ BLOCK_END("MapLayer::draw")
}
void MapLayer::drawSDL(Graphics *const graphics)
{
+ BLOCK_START("MapLayer::drawSDL")
MapRows::const_iterator rit = mTempRows.begin();
const MapRows::const_iterator rit_end = mTempRows.end();
while (rit != rit_end)
@@ -163,6 +166,7 @@ void MapLayer::drawSDL(Graphics *const graphics)
}
++ rit;
}
+ BLOCK_END("MapLayer::drawSDL")
}
#ifdef USE_OPENGL
@@ -171,6 +175,7 @@ void MapLayer::updateSDL(Graphics *const graphics, int startX, int startY,
const int scrollX, const int scrollY,
const int debugFlags)
{
+ BLOCK_START("MapLayer::updateSDL")
delete_all(mTempRows);
mTempRows.clear();
@@ -226,6 +231,7 @@ void MapLayer::updateSDL(Graphics *const graphics, int startX, int startY,
}
}
}
+ BLOCK_END("MapLayer::updateSDL")
}
void MapLayer::updateOGL(Graphics *const graphics, int startX, int startY,
@@ -233,6 +239,7 @@ void MapLayer::updateOGL(Graphics *const graphics, int startX, int startY,
const int scrollX, const int scrollY,
const int debugFlags)
{
+ BLOCK_START("MapLayer::updateOGL")
delete_all(mTempRows);
mTempRows.clear();
@@ -302,10 +309,12 @@ void MapLayer::updateOGL(Graphics *const graphics, int startX, int startY,
}
}
}
+ BLOCK_END("MapLayer::updateOGL")
}
void MapLayer::drawOGL(Graphics *const graphics)
{
+ BLOCK_START("MapLayer::drawOGL")
MapRows::const_iterator rit = mTempRows.begin();
const MapRows::const_iterator rit_end = mTempRows.end();
// int k = 0;
@@ -322,6 +331,7 @@ void MapLayer::drawOGL(Graphics *const graphics)
}
++ rit;
}
+ BLOCK_END("MapLayer::drawOGL")
// logger->log("draws: %d", k);
}
#endif
@@ -332,8 +342,12 @@ void MapLayer::drawFringe(Graphics *const graphics, int startX, int startY,
const Actors *const actors,
const int debugFlags, const int yFix) const
{
+ BLOCK_START("MapLayer::drawFringe")
if (!player_node || !mSpecialLayer || !mTempLayer)
+ {
+ BLOCK_END("MapLayer::drawFringe")
return;
+ }
startX -= mX;
startY -= mY;
@@ -512,16 +526,19 @@ void MapLayer::drawFringe(Graphics *const graphics, int startX, int startY,
}
}
}
+ BLOCK_END("MapLayer::drawFringe")
}
int MapLayer::getTileDrawWidth(const Image *img,
const int endX, int &width) const
{
+ BLOCK_START("MapLayer::getTileDrawWidth")
const Image *const img1 = img;
int c = 0;
if (!img1)
{
width = 0;
+ BLOCK_END("MapLayer::getTileDrawWidth")
return c;
}
width = img1->mBounds.w;
@@ -534,6 +551,7 @@ int MapLayer::getTileDrawWidth(const Image *img,
if (img)
width += img->mBounds.w;
}
+ BLOCK_END("MapLayer::getTileDrawWidth")
return c;
}
@@ -634,6 +652,7 @@ void SpecialLayer::draw(Graphics *const graphics, int startX, int startY,
int endX, int endY,
const int scrollX, const int scrollY) const
{
+ BLOCK_START("SpecialLayer::draw")
if (startX < 0)
startX = 0;
if (startY < 0)
@@ -648,6 +667,7 @@ void SpecialLayer::draw(Graphics *const graphics, int startX, int startY,
for (int x = startX; x < endX; x++)
itemDraw(graphics, x, y, scrollX, scrollY);
}
+ BLOCK_END("SpecialLayer::draw")
}
void SpecialLayer::itemDraw(Graphics *const graphics, const int x, const int y,
@@ -742,6 +762,7 @@ void MapItem::setPos(const int x, const int y)
void MapItem::draw(Graphics *const graphics, const int x, const int y,
const int dx, const int dy) const
{
+ BLOCK_START("MapItem::draw")
if (mImage)
graphics->drawImage(mImage, x, y);
@@ -780,6 +801,7 @@ void MapItem::draw(Graphics *const graphics, const int x, const int y,
font->drawString(graphics, mName, x, y);
}
}
+ BLOCK_END("MapItem::draw")
}
ObjectsLayer::ObjectsLayer(const unsigned width, const unsigned height) :
diff --git a/src/mobileopenglgraphics.cpp b/src/mobileopenglgraphics.cpp
index 564f9be82..7cb445342 100644
--- a/src/mobileopenglgraphics.cpp
+++ b/src/mobileopenglgraphics.cpp
@@ -188,6 +188,7 @@ bool MobileOpenGLGraphics::drawImage2(const Image *const image,
const int width, const int height,
const bool useColor)
{
+ FUNC_BLOCK("Graphics::drawImage2", 1)
if (!image)
return false;
@@ -231,6 +232,7 @@ bool MobileOpenGLGraphics::drawRescaledImage(Image *const image, int srcX,
const bool useColor,
bool smooth)
{
+ FUNC_BLOCK("Graphics::drawRescaledImage", 1)
if (!image)
return false;
@@ -284,6 +286,7 @@ void MobileOpenGLGraphics::drawImagePattern(const Image *const image,
const int x, const int y,
const int w, const int h)
{
+ FUNC_BLOCK("Graphics::drawImagePattern", 1)
if (!image)
return;
@@ -739,11 +742,13 @@ void MobileOpenGLGraphics::drawTile(ImageVertexes *const vert)
void MobileOpenGLGraphics::updateScreen()
{
+ BLOCK_START("Graphics::updateScreen")
// glFlush();
// glFinish();
SDL_GL_SwapBuffers();
// may be need clear?
// glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
+ BLOCK_END("Graphics::updateScreen")
}
void MobileOpenGLGraphics::_beginDraw()
@@ -984,6 +989,7 @@ void MobileOpenGLGraphics::setTexturingAndBlending(bool enable)
void MobileOpenGLGraphics::drawRectangle(const gcn::Rectangle& rect,
bool filled)
{
+ BLOCK_START("Graphics::drawRectangle")
setTexturingAndBlending(false);
restoreColor();
@@ -1020,6 +1026,7 @@ void MobileOpenGLGraphics::drawRectangle(const gcn::Rectangle& rect,
glVertexPointer(2, GL_SHORT, 0, &vert);
glDrawArrays(GL_LINE_LOOP, 0, 4);
}
+ BLOCK_END("Graphics::drawRectangle")
}
bool MobileOpenGLGraphics::drawNet(const int x1, const int y1,
diff --git a/src/net/packetcounters.cpp b/src/net/packetcounters.cpp
index 6fb8588fe..d2193895d 100644
--- a/src/net/packetcounters.cpp
+++ b/src/net/packetcounters.cpp
@@ -120,6 +120,7 @@ void PacketCounters::update()
if (!runCounters)
return;
+ BLOCK_START("PacketCounters::update")
updateCounter(PacketCounters::mInCurrentSec, PacketCounters::mInBytesCalc,
PacketCounters::mInBytes);
updateCounter(PacketCounters::mInCurrentSec,
@@ -128,4 +129,5 @@ void PacketCounters::update()
PacketCounters::mOutBytesCalc, PacketCounters::mOutBytes);
updateCounter(PacketCounters::mOutCurrentSec,
PacketCounters::mOutPacketsCalc, PacketCounters::mOutPackets);
+ BLOCK_END("PacketCounters::update")
}
diff --git a/src/net/tmwa/adminhandler.cpp b/src/net/tmwa/adminhandler.cpp
index d7fc78d1d..26abfc0cd 100644
--- a/src/net/tmwa/adminhandler.cpp
+++ b/src/net/tmwa/adminhandler.cpp
@@ -56,6 +56,7 @@ AdminHandler::AdminHandler() :
void AdminHandler::handleMessage(Net::MessageIn &msg)
{
+ BLOCK_START("AdminHandler::handleMessage")
int id;
switch (msg.getId())
{
@@ -68,6 +69,7 @@ void AdminHandler::handleMessage(Net::MessageIn &msg)
default:
break;
}
+ BLOCK_END("AdminHandler::handleMessage")
}
void AdminHandler::announce(const std::string &text)
diff --git a/src/net/tmwa/beinghandler.cpp b/src/net/tmwa/beinghandler.cpp
index 5bf0bc1d6..9d9c82fce 100644
--- a/src/net/tmwa/beinghandler.cpp
+++ b/src/net/tmwa/beinghandler.cpp
@@ -107,6 +107,7 @@ void BeingHandler::requestNameById(int id)
void BeingHandler::handleMessage(Net::MessageIn &msg)
{
+ BLOCK_START("BeingHandler::handleMessage")
switch (msg.getId())
{
case SMSG_BEING_VISIBLE:
@@ -235,6 +236,7 @@ void BeingHandler::handleMessage(Net::MessageIn &msg)
default:
break;
}
+ BLOCK_END("BeingHandler::handleMessage")
}
void BeingHandler::undress(Being *being)
diff --git a/src/net/tmwa/buysellhandler.cpp b/src/net/tmwa/buysellhandler.cpp
index 6d94370c7..fcc6be2cf 100644
--- a/src/net/tmwa/buysellhandler.cpp
+++ b/src/net/tmwa/buysellhandler.cpp
@@ -73,6 +73,7 @@ BuySellHandler::BuySellHandler() :
void BuySellHandler::handleMessage(Net::MessageIn &msg)
{
+ BLOCK_START("BuySellHandler::handleMessage")
switch (msg.getId())
{
case SMSG_NPC_BUY_SELL_CHOICE:
@@ -98,7 +99,7 @@ void BuySellHandler::handleMessage(Net::MessageIn &msg)
default:
break;
}
-
+ BLOCK_END("BuySellHandler::handleMessage")
}
void BuySellHandler::processNpcBuy(Net::MessageIn &msg)
diff --git a/src/net/tmwa/charserverhandler.cpp b/src/net/tmwa/charserverhandler.cpp
index 039010535..4d0fae108 100644
--- a/src/net/tmwa/charserverhandler.cpp
+++ b/src/net/tmwa/charserverhandler.cpp
@@ -73,6 +73,7 @@ CharServerHandler::CharServerHandler() :
void CharServerHandler::handleMessage(Net::MessageIn &msg)
{
+ BLOCK_START("CharServerHandler::handleMessage")
switch (msg.getId())
{
case SMSG_CHAR_LOGIN:
@@ -162,6 +163,7 @@ void CharServerHandler::handleMessage(Net::MessageIn &msg)
default:
break;
}
+ BLOCK_END("CharServerHandler::handleMessage")
}
void CharServerHandler::readPlayerData(Net::MessageIn &msg,
diff --git a/src/net/tmwa/chathandler.cpp b/src/net/tmwa/chathandler.cpp
index ef6ff2847..07f95d5f9 100644
--- a/src/net/tmwa/chathandler.cpp
+++ b/src/net/tmwa/chathandler.cpp
@@ -69,6 +69,7 @@ void ChatHandler::handleMessage(Net::MessageIn &msg)
if (!localChatTab)
return;
+ BLOCK_START("ChatHandler::handleMessage")
switch (msg.getId())
{
case SMSG_WHISPER_RESPONSE:
@@ -100,6 +101,7 @@ void ChatHandler::handleMessage(Net::MessageIn &msg)
default:
break;
}
+ BLOCK_END("ChatHandler::handleMessage")
}
void ChatHandler::talk(const std::string &text)
diff --git a/src/net/tmwa/gamehandler.cpp b/src/net/tmwa/gamehandler.cpp
index 2515a45d3..e09bb5436 100644
--- a/src/net/tmwa/gamehandler.cpp
+++ b/src/net/tmwa/gamehandler.cpp
@@ -58,6 +58,7 @@ GameHandler::GameHandler() :
void GameHandler::handleMessage(Net::MessageIn &msg)
{
+ BLOCK_START("GameHandler::handleMessage")
switch (msg.getId())
{
case SMSG_MAP_LOGIN_SUCCESS:
@@ -84,6 +85,7 @@ void GameHandler::handleMessage(Net::MessageIn &msg)
default:
break;
}
+ BLOCK_END("GameHandler::handleMessage")
}
void GameHandler::mapLoadedEvent()
diff --git a/src/net/tmwa/generalhandler.cpp b/src/net/tmwa/generalhandler.cpp
index 33ccfe819..b26a14daf 100644
--- a/src/net/tmwa/generalhandler.cpp
+++ b/src/net/tmwa/generalhandler.cpp
@@ -121,6 +121,7 @@ GeneralHandler::~GeneralHandler()
void GeneralHandler::handleMessage(Net::MessageIn &msg)
{
+ BLOCK_START("GeneralHandler::handleMessage")
int code;
switch (msg.getId())
@@ -164,6 +165,7 @@ void GeneralHandler::handleMessage(Net::MessageIn &msg)
default:
break;
}
+ BLOCK_END("GeneralHandler::handleMessage")
}
void GeneralHandler::load()
@@ -220,9 +222,12 @@ void GeneralHandler::flushNetwork()
if (!mNetwork)
return;
+ BLOCK_START("GeneralHandler::flushNetwork 1")
mNetwork->flush();
+ BLOCK_END("GeneralHandler::flushNetwork 1")
mNetwork->dispatchMessages();
+ BLOCK_START("GeneralHandler::flushNetwork 3")
if (mNetwork->getState() == Network::NET_ERROR)
{
if (!mNetwork->getError().empty())
@@ -232,6 +237,7 @@ void GeneralHandler::flushNetwork()
Client::setState(STATE_ERROR);
}
+ BLOCK_END("GeneralHandler::flushNetwork 3")
}
void GeneralHandler::clearHandlers()
diff --git a/src/net/tmwa/guildhandler.cpp b/src/net/tmwa/guildhandler.cpp
index 6b97c6020..5f148ebac 100644
--- a/src/net/tmwa/guildhandler.cpp
+++ b/src/net/tmwa/guildhandler.cpp
@@ -80,6 +80,7 @@ GuildHandler::~GuildHandler()
void GuildHandler::handleMessage(Net::MessageIn &msg)
{
+ BLOCK_START("GuildHandler::handleMessage")
switch (msg.getId())
{
case SMSG_GUILD_CREATE_RESPONSE:
@@ -189,6 +190,7 @@ void GuildHandler::handleMessage(Net::MessageIn &msg)
default:
break;
}
+ BLOCK_END("GuildHandler::handleMessage")
}
void GuildHandler::create(const std::string &name)
diff --git a/src/net/tmwa/inventoryhandler.cpp b/src/net/tmwa/inventoryhandler.cpp
index f5768f8c5..562e9c00b 100644
--- a/src/net/tmwa/inventoryhandler.cpp
+++ b/src/net/tmwa/inventoryhandler.cpp
@@ -67,6 +67,7 @@ InventoryHandler::~InventoryHandler()
void InventoryHandler::handleMessage(Net::MessageIn &msg)
{
+ BLOCK_START("InventoryHandler::handleMessage")
switch (msg.getId())
{
case SMSG_PLAYER_INVENTORY:
@@ -133,6 +134,7 @@ void InventoryHandler::handleMessage(Net::MessageIn &msg)
default:
break;
}
+ BLOCK_END("InventoryHandler::handleMessage")
}
void InventoryHandler::equipItem(const Item *item)
diff --git a/src/net/tmwa/itemhandler.cpp b/src/net/tmwa/itemhandler.cpp
index 7612b638e..d1becafef 100644
--- a/src/net/tmwa/itemhandler.cpp
+++ b/src/net/tmwa/itemhandler.cpp
@@ -45,6 +45,7 @@ ItemHandler::ItemHandler() :
void ItemHandler::handleMessage(Net::MessageIn &msg)
{
+ BLOCK_START("ItemHandler::handleMessage")
switch (msg.getId())
{
case SMSG_ITEM_VISIBLE:
@@ -62,6 +63,7 @@ void ItemHandler::handleMessage(Net::MessageIn &msg)
default:
break;
}
+ BLOCK_END("ItemHandler::handleMessage")
}
} // namespace TmwAthena
diff --git a/src/net/tmwa/loginhandler.cpp b/src/net/tmwa/loginhandler.cpp
index eb0364d44..7e4eca95f 100644
--- a/src/net/tmwa/loginhandler.cpp
+++ b/src/net/tmwa/loginhandler.cpp
@@ -65,6 +65,7 @@ LoginHandler::~LoginHandler()
void LoginHandler::handleMessage(Net::MessageIn &msg)
{
+ BLOCK_START("LoginHandler::handleMessage")
switch (msg.getId())
{
case SMSG_CHAR_PASSWORD_RESPONSE:
@@ -94,6 +95,7 @@ void LoginHandler::handleMessage(Net::MessageIn &msg)
default:
break;
}
+ BLOCK_END("LoginHandler::handleMessage")
}
void LoginHandler::connect()
diff --git a/src/net/tmwa/network.cpp b/src/net/tmwa/network.cpp
index c8c28e0d2..e7e336d2d 100644
--- a/src/net/tmwa/network.cpp
+++ b/src/net/tmwa/network.cpp
@@ -135,6 +135,7 @@ void Network::clearHandlers()
void Network::dispatchMessages()
{
+ BLOCK_START("Network::dispatchMessages")
while (messageReady())
{
MessageIn *const msg = getNextMessage();
@@ -158,6 +159,7 @@ void Network::dispatchMessages()
skip(msg->getLength());
delete msg;
}
+ BLOCK_END("Network::dispatchMessages")
}
bool Network::messageReady()
@@ -197,6 +199,7 @@ bool Network::messageReady()
MessageIn *Network::getNextMessage()
{
+ BLOCK_START("Network::getNextMessage")
while (!messageReady())
{
if (mState == NET_ERROR)
@@ -224,6 +227,7 @@ MessageIn *Network::getNextMessage()
MessageIn *const msg = new MessageIn(mInBuffer, len);
SDL_mutexV(mMutex);
+ BLOCK_END("Network::getNextMessage")
return msg;
}
diff --git a/src/net/tmwa/npchandler.cpp b/src/net/tmwa/npchandler.cpp
index 3e9fe3822..732fc7d06 100644
--- a/src/net/tmwa/npchandler.cpp
+++ b/src/net/tmwa/npchandler.cpp
@@ -63,6 +63,7 @@ NpcHandler::NpcHandler() :
void NpcHandler::handleMessage(Net::MessageIn &msg)
{
+ BLOCK_START("NpcHandler::handleMessage")
const int npcId = getNpc(msg, msg.getId() == SMSG_NPC_CHOICE
|| msg.getId() == SMSG_NPC_MESSAGE);
@@ -107,6 +108,7 @@ void NpcHandler::handleMessage(Net::MessageIn &msg)
}
mDialog = nullptr;
+ BLOCK_END("NpcHandler::handleMessage")
}
void NpcHandler::talk(int npcId)
diff --git a/src/net/tmwa/partyhandler.cpp b/src/net/tmwa/partyhandler.cpp
index e23629bc2..7ff752252 100644
--- a/src/net/tmwa/partyhandler.cpp
+++ b/src/net/tmwa/partyhandler.cpp
@@ -65,6 +65,7 @@ PartyHandler::~PartyHandler()
void PartyHandler::handleMessage(Net::MessageIn &msg)
{
+ BLOCK_START("PartyHandler::handleMessage")
switch (msg.getId())
{
case SMSG_PARTY_CREATE:
@@ -101,6 +102,7 @@ void PartyHandler::handleMessage(Net::MessageIn &msg)
default:
break;
}
+ BLOCK_END("PartyHandler::handleMessage")
}
void PartyHandler::create(const std::string &name)
diff --git a/src/net/tmwa/playerhandler.cpp b/src/net/tmwa/playerhandler.cpp
index 1067418e2..d5c48e387 100644
--- a/src/net/tmwa/playerhandler.cpp
+++ b/src/net/tmwa/playerhandler.cpp
@@ -62,6 +62,7 @@ PlayerHandler::PlayerHandler() :
void PlayerHandler::handleMessage(Net::MessageIn &msg)
{
+ BLOCK_START("PlayerHandler::handleMessage")
switch (msg.getId())
{
case SMSG_WALK_RESPONSE:
@@ -107,6 +108,7 @@ void PlayerHandler::handleMessage(Net::MessageIn &msg)
default:
break;
}
+ BLOCK_END("PlayerHandler::handleMessage")
}
void PlayerHandler::attack(int id, bool keep)
diff --git a/src/net/tmwa/questhandler.cpp b/src/net/tmwa/questhandler.cpp
index bd03dc7a2..228e06ed0 100644
--- a/src/net/tmwa/questhandler.cpp
+++ b/src/net/tmwa/questhandler.cpp
@@ -52,6 +52,7 @@ QuestHandler::QuestHandler() :
void QuestHandler::handleMessage(Net::MessageIn &msg)
{
+ BLOCK_START("QuestHandler::handleMessage")
switch (msg.getId())
{
case CMSG_QUEST_SET_VAR:
@@ -65,6 +66,7 @@ void QuestHandler::handleMessage(Net::MessageIn &msg)
default:
break;
}
+ BLOCK_END("QuestHandler::handleMessage")
}
void QuestHandler::processSetQuestVar(Net::MessageIn &msg A_UNUSED)
diff --git a/src/net/tmwa/specialhandler.cpp b/src/net/tmwa/specialhandler.cpp
index ab37aba97..72838e052 100644
--- a/src/net/tmwa/specialhandler.cpp
+++ b/src/net/tmwa/specialhandler.cpp
@@ -50,6 +50,7 @@ SpecialHandler::SpecialHandler() :
void SpecialHandler::handleMessage(Net::MessageIn &msg)
{
+ BLOCK_START("SpecialHandler::handleMessage")
switch (msg.getId())
{
case SMSG_PLAYER_SKILLS:
@@ -67,6 +68,7 @@ void SpecialHandler::handleMessage(Net::MessageIn &msg)
default:
break;
}
+ BLOCK_END("SpecialHandler::handleMessage")
}
void SpecialHandler::useBeing(int id, int level, int beingId)
diff --git a/src/net/tmwa/tradehandler.cpp b/src/net/tmwa/tradehandler.cpp
index 4fc099f27..727ca581a 100644
--- a/src/net/tmwa/tradehandler.cpp
+++ b/src/net/tmwa/tradehandler.cpp
@@ -58,6 +58,7 @@ TradeHandler::TradeHandler() :
void TradeHandler::handleMessage(Net::MessageIn &msg)
{
+ BLOCK_START("TradeHandler::handleMessage")
switch (msg.getId())
{
case SMSG_TRADE_REQUEST:
@@ -91,6 +92,7 @@ void TradeHandler::handleMessage(Net::MessageIn &msg)
default:
break;
}
+ BLOCK_END("TradeHandler::handleMessage")
}
void TradeHandler::request(Being *being)
diff --git a/src/normalopenglgraphics.cpp b/src/normalopenglgraphics.cpp
index 7fb4a7786..40cd5226b 100644
--- a/src/normalopenglgraphics.cpp
+++ b/src/normalopenglgraphics.cpp
@@ -225,6 +225,7 @@ bool NormalOpenGLGraphics::drawImage2(const Image *const image,
const int width, const int height,
const bool useColor)
{
+ FUNC_BLOCK("Graphics::drawImage2", 1)
if (!image)
return false;
@@ -268,6 +269,7 @@ bool NormalOpenGLGraphics::drawRescaledImage(Image *const image, int srcX,
const bool useColor,
bool smooth)
{
+ FUNC_BLOCK("Graphics::drawRescaledImage", 1)
if (!image)
return false;
@@ -321,6 +323,7 @@ void NormalOpenGLGraphics::drawImagePattern(const Image *const image,
const int x, const int y,
const int w, const int h)
{
+ FUNC_BLOCK("Graphics::drawImagePattern", 1)
if (!image)
return;
@@ -928,11 +931,13 @@ void NormalOpenGLGraphics::drawTile(ImageVertexes *const vert)
void NormalOpenGLGraphics::updateScreen()
{
+ BLOCK_START("Graphics::updateScreen")
// glFlush();
// glFinish();
SDL_GL_SwapBuffers();
// may be need clear?
// glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
+ BLOCK_END("Graphics::updateScreen")
}
void NormalOpenGLGraphics::_beginDraw()
@@ -1173,6 +1178,7 @@ void NormalOpenGLGraphics::setTexturingAndBlending(bool enable)
void NormalOpenGLGraphics::drawRectangle(const gcn::Rectangle& rect,
bool filled)
{
+ BLOCK_START("Graphics::drawRectangle")
const float offset = filled ? 0 : 0.5f;
const float x = static_cast<float>(rect.x);
const float y = static_cast<float>(rect.y);
@@ -1192,6 +1198,7 @@ void NormalOpenGLGraphics::drawRectangle(const gcn::Rectangle& rect,
glVertexPointer(2, GL_FLOAT, 0, &vert);
glDrawArrays(filled ? GL_QUADS : GL_LINE_LOOP, 0, 4);
+ BLOCK_END("Graphics::drawRectangle")
}
bool NormalOpenGLGraphics::drawNet(const int x1, const int y1,
diff --git a/src/resources/resourcemanager.cpp b/src/resources/resourcemanager.cpp
index 5bd4db3e4..6779419f1 100644
--- a/src/resources/resourcemanager.cpp
+++ b/src/resources/resourcemanager.cpp
@@ -1023,12 +1023,14 @@ void ResourceManager::scheduleDelete(SDL_Surface *const surface)
void ResourceManager::clearScheduled()
{
+ BLOCK_START("ResourceManager::clearScheduled")
for (std::set<SDL_Surface*>::iterator i = deletedSurfaces.begin(),
i_end = deletedSurfaces.end(); i != i_end; ++i)
{
SDL_FreeSurface(*i);
}
deletedSurfaces.clear();
+ BLOCK_END("ResourceManager::clearScheduled")
}
struct RescaledLoader
@@ -1069,6 +1071,7 @@ Image *ResourceManager::getRescaled(Image *const image,
void ResourceManager::delayedLoad()
{
+ BLOCK_START("ResourceManager::delayedLoad")
static int loadTime = 0;
if (loadTime < cur_time)
{
@@ -1091,6 +1094,7 @@ void ResourceManager::delayedLoad()
else
loadTime = time2 + 3;
}
+ BLOCK_END("ResourceManager::delayedLoad")
}
void ResourceManager::removeDelayLoad(const AnimationDelayLoad
diff --git a/src/safeopenglgraphics.cpp b/src/safeopenglgraphics.cpp
index f4ae7ba93..9ca2340d0 100644
--- a/src/safeopenglgraphics.cpp
+++ b/src/safeopenglgraphics.cpp
@@ -147,6 +147,7 @@ bool SafeOpenGLGraphics::drawImage2(const Image *const image,
const int width, const int height,
const bool useColor)
{
+ FUNC_BLOCK("Graphics::drawImage2", 1)
if (!image)
return false;
@@ -190,6 +191,7 @@ bool SafeOpenGLGraphics::drawRescaledImage(Image *const image, int srcX,
const bool useColor,
bool smooth)
{
+ FUNC_BLOCK("Graphics::drawRescaledImage", 1)
if (!image)
return false;
@@ -245,6 +247,7 @@ void SafeOpenGLGraphics::drawImagePattern(const Image *const image,
const int x, const int y,
const int w, const int h)
{
+ FUNC_BLOCK("Graphics::drawImagePattern", 1)
if (!image)
return;
@@ -375,9 +378,11 @@ void SafeOpenGLGraphics::drawImageRect2(GraphicsVertexes* vert,
void SafeOpenGLGraphics::updateScreen()
{
+ BLOCK_START("Graphics::updateScreen")
glFlush();
glFinish();
SDL_GL_SwapBuffers();
+ BLOCK_END("Graphics::updateScreen")
}
void SafeOpenGLGraphics::_beginDraw()
@@ -589,6 +594,7 @@ void SafeOpenGLGraphics::setTexturingAndBlending(bool enable)
void SafeOpenGLGraphics::drawRectangle(const gcn::Rectangle& rect, bool filled)
{
+ BLOCK_START("Graphics::drawRectangle")
const float offset = filled ? 0 : 0.5f;
setTexturingAndBlending(false);
@@ -604,6 +610,7 @@ void SafeOpenGLGraphics::drawRectangle(const gcn::Rectangle& rect, bool filled)
glVertex2f(static_cast<float>(rect.x) + offset,
static_cast<float>(rect.y + rect.height) - offset);
glEnd();
+ BLOCK_END("Graphics::drawRectangle")
}
void SafeOpenGLGraphics::bindTexture(GLenum target, GLuint texture)
diff --git a/src/simpleanimation.cpp b/src/simpleanimation.cpp
index f9966d83f..63ec812a9 100644
--- a/src/simpleanimation.cpp
+++ b/src/simpleanimation.cpp
@@ -68,6 +68,7 @@ SimpleAnimation::~SimpleAnimation()
bool SimpleAnimation::draw(Graphics *const graphics,
const int posX, const int posY) const
{
+ FUNC_BLOCK("SimpleAnimation::draw", 1)
if (!mCurrentFrame || !mCurrentFrame->image)
return false;
diff --git a/src/sound.cpp b/src/sound.cpp
index cb4b11770..82e7b2f6d 100644
--- a/src/sound.cpp
+++ b/src/sound.cpp
@@ -285,6 +285,7 @@ void Sound::fadeOutAndPlayMusic(const std::string &fileName, const int ms)
void Sound::logic()
{
+ BLOCK_START("Sound::logic")
if (sFadingOutEnded)
{
if (mMusic)
@@ -300,6 +301,7 @@ void Sound::logic()
mNextMusicFile.clear();
}
}
+ BLOCK_END("Sound::logic")
}
void Sound::playSfx(const std::string &path, const int x, const int y) const
diff --git a/src/text.cpp b/src/text.cpp
index 41b2b01ca..cf15590fe 100644
--- a/src/text.cpp
+++ b/src/text.cpp
@@ -125,6 +125,7 @@ void Text::adviseXY(const int x, const int y)
void Text::draw(gcn::Graphics *const graphics, const int xOff, const int yOff)
{
+ BLOCK_START("Text::draw")
if (mIsSpeech)
{
static_cast<Graphics*>(graphics)->drawImageRect(
@@ -135,6 +136,7 @@ void Text::draw(gcn::Graphics *const graphics, const int xOff, const int yOff)
TextRenderer::renderText(graphics, mText,
mX - xOff, mY - yOff, gcn::Graphics::LEFT,
*mColor, mFont, !mIsSpeech, true);
+ BLOCK_END("Text::draw")
}
FlashText::FlashText(const std::string &text, const int x, const int y,
@@ -148,10 +150,15 @@ FlashText::FlashText(const std::string &text, const int x, const int y,
void FlashText::draw(gcn::Graphics *const graphics,
const int xOff, const int yOff)
{
+ BLOCK_START("FlashText::draw")
if (mTime)
{
if ((--mTime & 4) == 0)
+ {
+ BLOCK_END("FlashText::draw")
return;
+ }
}
Text::draw(graphics, xOff, yOff);
+ BLOCK_END("FlashText::draw")
}
diff --git a/src/textmanager.cpp b/src/textmanager.cpp
index 1bd8ebef8..f44f22383 100644
--- a/src/textmanager.cpp
+++ b/src/textmanager.cpp
@@ -66,12 +66,14 @@ TextManager::~TextManager()
void TextManager::draw(gcn::Graphics *const graphics,
const int xOff, const int yOff)
{
+ BLOCK_START("TextManager::draw")
for (TextList::const_iterator bPtr = mTextList.begin(),
ePtr = mTextList.end();
bPtr != ePtr; ++ bPtr)
{
(*bPtr)->draw(graphics, xOff, yOff);
}
+ BLOCK_END("TextManager::draw")
}
void TextManager::place(const Text *const textObj, const Text *const omit,
diff --git a/src/textparticle.cpp b/src/textparticle.cpp
index 4ee261f82..e3d3fc710 100644
--- a/src/textparticle.cpp
+++ b/src/textparticle.cpp
@@ -41,8 +41,12 @@ TextParticle::TextParticle(Map *const map, const std::string &text,
bool TextParticle::draw(Graphics *graphics, int offsetX, int offsetY) const
{
+ BLOCK_START("TextParticle::draw")
if (!isAlive())
+ {
+ BLOCK_END("TextParticle::draw")
return false;
+ }
const int screenX = static_cast<int>(mPos.x) + offsetX;
const int screenY = static_cast<int>(mPos.y) - static_cast<int>(mPos.z)
@@ -69,5 +73,6 @@ bool TextParticle::draw(Graphics *graphics, int offsetX, int offsetY) const
screenX, screenY, gcn::Graphics::CENTER,
color, mTextFont, mOutline, false, static_cast<int>(alpha));
+ BLOCK_END("TextParticle::draw")
return true;
}
diff --git a/src/utils/perfomance.cpp b/src/utils/perfomance.cpp
new file mode 100644
index 000000000..db25b4fe7
--- /dev/null
+++ b/src/utils/perfomance.cpp
@@ -0,0 +1,85 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2012 The ManaPlus Developers
+ *
+ * This file is part of The ManaPlus Client.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "localconsts.h"
+
+#ifdef USE_PROFILER
+
+#include "utils/perfomance.h"
+
+#include "configuration.h"
+
+#include <algorithm>
+#include <cstdarg>
+#include <cstdio>
+#include <fstream>
+#include <iostream>
+#include <string.h>
+#include <time.h>
+
+#include "debug.h"
+
+//static const clockid_t clockType = CLOCK_PROCESS_CPUTIME_ID;
+static const clockid_t clockType = CLOCK_MONOTONIC;
+
+namespace Perfomance
+{
+ std::ofstream file;
+
+ void init(const std::string &path)
+ {
+ file.open(path.c_str(), std::ios_base::trunc);
+ }
+
+ void clear()
+ {
+ if (file.is_open())
+ file.close();
+ }
+
+ void start()
+ {
+ timespec time;
+ clock_gettime(clockType, &time);
+ file << static_cast<long long int>(time.tv_sec) * 1000000000LL
+ + static_cast<long long int>(time.tv_nsec)
+ << " __init__" << std::endl;
+ }
+
+ void blockStart(const std::string &name)
+ {
+ timespec time;
+ clock_gettime(clockType, &time);
+ file << static_cast<long long int>(time.tv_sec) * 1000000000LL
+ + static_cast<long long int>(time.tv_nsec)
+ << " start: " << name << std::endl;
+ }
+
+ void blockEnd(const std::string &name)
+ {
+ timespec time;
+ clock_gettime(clockType, &time);
+ file << static_cast<long long int>(time.tv_sec) * 1000000000LL
+ + static_cast<long long int>(time.tv_nsec)
+ << " end: " << name << std::endl;
+ }
+}
+
+#endif
diff --git a/src/utils/perfomance.h b/src/utils/perfomance.h
new file mode 100644
index 000000000..ddca355c1
--- /dev/null
+++ b/src/utils/perfomance.h
@@ -0,0 +1,76 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2012 The ManaPlus Developers
+ *
+ * This file is part of The ManaPlus Client.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef UTILS_PEFOMANCE_H
+#define UTILS_PEFOMANCE_H
+
+#ifdef USE_PROFILER
+#include <string>
+#include <sstream>
+#include <list>
+#include <set>
+#include <vector>
+
+#include "localconsts.h"
+
+#define PROFILER_START() Perfomance::start();
+#define BLOCK_START(name) Perfomance::blockStart(name);
+#define BLOCK_END(name) Perfomance::blockEnd(name);
+#define FUNC_BLOCK(name, id) Perfomance::Func PerfomanceFunc##id(name);
+
+namespace Perfomance
+{
+ void start();
+
+ void init(const std::string &path);
+
+ void clear();
+
+ void blockStart(const std::string &name);
+
+ void blockEnd(const std::string &name);
+
+ class Func
+ {
+ public:
+ Func(const std::string &str) :
+ name(str)
+ {
+ blockStart(str);
+ }
+
+ ~Func()
+ {
+ blockEnd(name);
+ }
+
+ std::string name;
+ };
+}
+
+#else // USE_PROFILER
+
+#define PROFILER_START()
+#define BLOCK_START(name)
+#define BLOCK_END(name)
+#define FUNC_BLOCK(name, id)
+
+#endif // USE_PROFILER
+#endif // UTILS_PEFOMANCE_H