f7f7b59ab2
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
110 lines
2.2 KiB
C++
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;
|
|
}
|