mirror of
https://github.com/vcmi/vcmi.git
synced 2025-03-19 21:10:12 +02:00
Fixes excessive logging causing RMG slowdown
- Do not apply formatting on log entries that will be discarded due to high log level - Do not log incorrect access to visitablePos due to its numerous use by RMG
This commit is contained in:
parent
2272707175
commit
6da58a6871
@ -58,6 +58,7 @@ public:
|
|||||||
|
|
||||||
virtual void log(ELogLevel::ELogLevel level, const std::string & message) const = 0;
|
virtual void log(ELogLevel::ELogLevel level, const std::string & message) const = 0;
|
||||||
virtual void log(ELogLevel::ELogLevel level, const boost::format & fmt) const = 0;
|
virtual void log(ELogLevel::ELogLevel level, const boost::format & fmt) const = 0;
|
||||||
|
virtual ELogLevel::ELogLevel getEffectiveLevel() const = 0;
|
||||||
|
|
||||||
/// Returns true if a debug/trace log message will be logged, false if not.
|
/// Returns true if a debug/trace log message will be logged, false if not.
|
||||||
/// Useful if performance is important and concatenating the log message is a expensive task.
|
/// Useful if performance is important and concatenating the log message is a expensive task.
|
||||||
@ -66,6 +67,8 @@ public:
|
|||||||
|
|
||||||
template<typename T, typename ... Args>
|
template<typename T, typename ... Args>
|
||||||
void log(ELogLevel::ELogLevel level, const std::string & format, T t, Args ... args) const
|
void log(ELogLevel::ELogLevel level, const std::string & format, T t, Args ... args) const
|
||||||
|
{
|
||||||
|
if (getEffectiveLevel() <= level)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -79,6 +82,7 @@ public:
|
|||||||
log(ELogLevel::ERROR, format);
|
log(ELogLevel::ERROR, format);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Log methods for various log levels
|
/// Log methods for various log levels
|
||||||
inline void error(const std::string & message) const
|
inline void error(const std::string & message) const
|
||||||
|
@ -146,14 +146,17 @@ void CLogger::log(ELogLevel::ELogLevel level, const std::string & message) const
|
|||||||
|
|
||||||
void CLogger::log(ELogLevel::ELogLevel level, const boost::format & fmt) const
|
void CLogger::log(ELogLevel::ELogLevel level, const boost::format & fmt) const
|
||||||
{
|
{
|
||||||
|
if (getEffectiveLevel() <= level)
|
||||||
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
log(level, fmt.str());
|
log(level, fmt.str());
|
||||||
}
|
}
|
||||||
catch(...)
|
catch (...)
|
||||||
{
|
{
|
||||||
log(ELogLevel::ERROR, "Invalid log format!");
|
log(ELogLevel::ERROR, "Invalid log format!");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ELogLevel::ELogLevel CLogger::getLevel() const
|
ELogLevel::ELogLevel CLogger::getLevel() const
|
||||||
|
@ -46,7 +46,7 @@ private:
|
|||||||
|
|
||||||
/// The logger is used to log messages to certain targets of a specific domain/name.
|
/// The logger is used to log messages to certain targets of a specific domain/name.
|
||||||
/// It is thread-safe and can be used concurrently by several threads.
|
/// It is thread-safe and can be used concurrently by several threads.
|
||||||
class DLL_LINKAGE CLogger: public vstd::CLoggerBase
|
class DLL_LINKAGE CLogger final: public vstd::CLoggerBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ELogLevel::ELogLevel getLevel() const;
|
ELogLevel::ELogLevel getLevel() const;
|
||||||
@ -70,7 +70,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
explicit CLogger(const CLoggerDomain & domain);
|
explicit CLogger(const CLoggerDomain & domain);
|
||||||
inline ELogLevel::ELogLevel getEffectiveLevel() const; /// Returns the log level applied on this logger whether directly or indirectly.
|
inline ELogLevel::ELogLevel getEffectiveLevel() const override; /// Returns the log level applied on this logger whether directly or indirectly.
|
||||||
inline void callTargets(const LogRecord & record) const;
|
inline void callTargets(const LogRecord & record) const;
|
||||||
|
|
||||||
CLoggerDomain domain;
|
CLoggerDomain domain;
|
||||||
|
@ -217,8 +217,8 @@ int CGObjectInstance::getSightRadius() const
|
|||||||
|
|
||||||
int3 CGObjectInstance::getVisitableOffset() const
|
int3 CGObjectInstance::getVisitableOffset() const
|
||||||
{
|
{
|
||||||
if (!isVisitable())
|
// if (!isVisitable())
|
||||||
logGlobal->debug("Attempt to access visitable offset on a non-visitable object!");
|
// logGlobal->debug("Attempt to access visitable offset on a non-visitable object!");
|
||||||
return appearance->getVisitableOffset();
|
return appearance->getVisitableOffset();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -317,8 +317,8 @@ void CGObjectInstance::onHeroVisit( const CGHeroInstance * h ) const
|
|||||||
|
|
||||||
int3 CGObjectInstance::visitablePos() const
|
int3 CGObjectInstance::visitablePos() const
|
||||||
{
|
{
|
||||||
if (!isVisitable())
|
// if (!isVisitable())
|
||||||
logGlobal->debug("Attempt to access visitable position on a non-visitable object!");
|
// logGlobal->debug("Attempt to access visitable position on a non-visitable object!");
|
||||||
|
|
||||||
return pos - getVisitableOffset();
|
return pos - getVisitableOffset();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user