wxWidgets/tests/benchmarks/log.cpp
Vadim Zeitlin f7f7b59ab2 Added a simple benchmark of wxLogDebug() and wxLogTrace().
Measure time taken by these calls when the debug/trace messages are not
enabled.

See #11829.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70434 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-01-22 00:58:09 +00:00

110 lines
2.2 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// Name: tests/benchmarks/log.cpp
// Purpose: Log-related benchmarks
// Author: Vadim Zeitlin
// Created: 2012-01-21
// RCS-ID: $Id$
// Copyright: (c) 2011 Vadim Zeitlin <vadim@wxwidgets.org>
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#include "bench.h"
#include "wx/log.h"
// This class is used to check that the arguments of log functions are not
// evaluated.
struct NotCreated
{
NotCreated() { wxAbort(); }
const char* AsStr() const { return "unreachable"; }
};
// Temporarily change the log level to the given one.
class LogLevelSetter
{
public:
LogLevelSetter(wxLogLevel levelNew)
: m_levelOld(wxLog::GetLogLevel())
{
wxLog::SetLogLevel(levelNew);
}
~LogLevelSetter()
{
wxLog::SetLogLevel(m_levelOld);
}
private:
const wxLogLevel m_levelOld;
wxDECLARE_NO_COPY_CLASS(LogLevelSetter);
};
BENCHMARK_FUNC(LogDebugDisabled)
{
LogLevelSetter level(wxLOG_Info);
wxLogDebug("Ignored debug message: %s", NotCreated().AsStr());
return true;
}
BENCHMARK_FUNC(LogTraceDisabled)
{
LogLevelSetter level(wxLOG_Info);
wxLogTrace("", NotCreated().AsStr());
return true;
}
BENCHMARK_FUNC(LogTraceActive)
{
static bool s_added = false;
if ( !s_added )
{
s_added = true;
wxLog::AddTraceMask("logbench");
}
// Remove the actual logging overhead by simply throwing away the log
// messages.
class NulLog : public wxLog
{
public:
NulLog()
: m_logOld(wxLog::SetActiveTarget(this))
{
}
virtual ~NulLog()
{
wxLog::SetActiveTarget(m_logOld);
}
protected:
virtual void DoLogRecord(wxLogLevel,
const wxString&,
const wxLogRecordInfo&)
{
}
wxLog* m_logOld;
};
NulLog nulLog;
wxLogTrace("logbench", "Trace message");
return true;
}
BENCHMARK_FUNC(LogTraceInactive)
{
wxLogTrace("bloordyblop", "Trace message");
return true;
}