This is an automated email from the ASF dual-hosted git repository.

swebb2066 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4cxx.git


The following commit(s) were added to refs/heads/master by this push:
     new f25c321a Improve benchmark test descriptions and simplify code (#317)
f25c321a is described below

commit f25c321ac8918c67de1157d6dad942cc88ddddf5
Author: Stephen Webb <[email protected]>
AuthorDate: Fri Dec 22 11:54:49 2023 +1100

    Improve benchmark test descriptions and simplify code (#317)
---
 src/test/cpp/benchmark/benchmark.cpp | 131 +++++++++++++++++------------------
 1 file changed, 64 insertions(+), 67 deletions(-)

diff --git a/src/test/cpp/benchmark/benchmark.cpp 
b/src/test/cpp/benchmark/benchmark.cpp
index 132c5ea6..7c4fd400 100644
--- a/src/test/cpp/benchmark/benchmark.cpp
+++ b/src/test/cpp/benchmark/benchmark.cpp
@@ -27,6 +27,10 @@ public:
 
        NullWriterAppender() {}
 
+       NullWriterAppender(const LayoutPtr& layout)
+               : AppenderSkeleton(layout)
+       {}
+
        void close() override {}
 
        bool requiresLayout() const override
@@ -51,14 +55,6 @@ public:
 
 IMPLEMENT_LOG4CXX_OBJECT(NullWriterAppender)
 
-#if defined(LOG4CXX_VERSION_MINOR) && (0 < LOG4CXX_VERSION_MAJOR || 11 < 
LOG4CXX_VERSION_MINOR)
-LOG4CXX_PTR_DEF(NullWriterAppender);
-#else
-#define LOG4CXX_HAS_FMT 0
-template class log4cxx::helpers::ObjectPtrT<NullWriterAppender>;
-typedef log4cxx::helpers::ObjectPtrT<NullWriterAppender> NullWriterAppenderPtr;
-#endif
-
 class benchmarker : public ::benchmark::Fixture
 {
 public:
@@ -71,12 +67,8 @@ public:
                m_logger->setAdditivity(false);
                m_logger->setLevel(Level::getInfo());
 
-               PatternLayoutPtr pattern(new PatternLayout);
-               pattern->setConversionPattern(LOG4CXX_STR("%m%n"));
-
-               NullWriterAppenderPtr nullWriter(new NullWriterAppender);
+               auto nullWriter = 
std::make_shared<NullWriterAppender>(std::make_shared<PatternLayout>(LOG4CXX_STR("%m%n")));
                nullWriter->setName(LOG4CXX_STR("NullWriterAppender"));
-               nullWriter->setLayout(pattern);
 
                m_logger->addAppender(nullWriter);
        }
@@ -119,122 +111,127 @@ BENCHMARK_DEFINE_F(benchmarker, 
logDisabledTrace)(benchmark::State& state)
        m_logger->setLevel(Level::getDebug());
        for (auto _ : state)
        {
-               LOG4CXX_TRACE( m_logger, LOG4CXX_STR("This is a static string 
to see what happens"));
+               LOG4CXX_TRACE( m_logger, LOG4CXX_STR("Hello: static string 
message"));
        }
 }
 BENCHMARK_REGISTER_F(benchmarker, logDisabledTrace)->Name("Testing disabled 
logging request")->MinWarmUpTime(benchmarker::warmUpSeconds());
 BENCHMARK_REGISTER_F(benchmarker, logDisabledTrace)->Name("Testing disabled 
logging request")->Threads(benchmarker::threadCount());
 
-BENCHMARK_DEFINE_F(benchmarker, logStaticString)(benchmark::State& state)
+BENCHMARK_DEFINE_F(benchmarker, logShortString)(benchmark::State& state)
 {
        m_logger->setLevel(Level::getInfo());
        for (auto _ : state)
        {
-               LOG4CXX_INFO( m_logger, LOG4CXX_STR("This is a static string to 
see what happens"));
+               LOG4CXX_INFO(m_logger, LOG4CXX_STR("Hello"));
        }
 }
-BENCHMARK_REGISTER_F(benchmarker, logStaticString)->Name("Logging static 
string");
+BENCHMARK_REGISTER_F(benchmarker, logShortString)->Name("Logging 5 char string 
using MessageBuffer, pattern: %m%n");
+BENCHMARK_REGISTER_F(benchmarker, logShortString)->Name("Logging 5 char string 
using MessageBuffer, pattern: %m%n")->Threads(benchmarker::threadCount());
 
-#if LOG4CXX_USING_STD_FORMAT || LOG4CXX_HAS_FMT
-BENCHMARK_DEFINE_F(benchmarker, logStaticStringFMT)(benchmark::State& state)
+BENCHMARK_DEFINE_F(benchmarker, logLongString)(benchmark::State& state)
 {
+       m_logger->setLevel(Level::getInfo());
        for (auto _ : state)
        {
-               LOG4CXX_INFO_FMT(m_logger, "This is a static string to see what 
happens", 0);
+               LOG4CXX_INFO( m_logger, LOG4CXX_STR("Hello: this is a long 
static string message"));
        }
 }
-BENCHMARK_REGISTER_F(benchmarker, logStaticStringFMT)->Name("Logging static 
string with FMT");
+BENCHMARK_REGISTER_F(benchmarker, logLongString)->Name("Logging 49 char string 
using MessageBuffer, pattern: %m%n");
+BENCHMARK_REGISTER_F(benchmarker, logLongString)->Name("Logging 49 char string 
using MessageBuffer, pattern: %m%n")->Threads(benchmarker::threadCount());
 
-BENCHMARK_DEFINE_F(benchmarker, logIntValueFMT)(benchmark::State& state)
+BENCHMARK_DEFINE_F(benchmarker, logIntValueMessageBuffer)(benchmark::State& 
state)
 {
        int x = 0;
        for (auto _ : state)
        {
-               LOG4CXX_INFO_FMT( m_logger, "Hello: msg number {}", ++x);
+               LOG4CXX_INFO( m_logger, "Hello: message number " << ++x);
        }
 }
-BENCHMARK_REGISTER_F(benchmarker, logIntValueFMT)->Name("Logging int value 
with FMT");
-BENCHMARK_REGISTER_F(benchmarker, logIntValueFMT)->Name("Logging int value 
with FMT")->Threads(benchmarker::threadCount());
+BENCHMARK_REGISTER_F(benchmarker, logIntValueMessageBuffer)->Name("Logging int 
value using MessageBuffer, pattern: %m%n");
+BENCHMARK_REGISTER_F(benchmarker, logIntValueMessageBuffer)->Name("Logging int 
value using MessageBuffer, pattern: %m%n")->Threads(benchmarker::threadCount());
 
-BENCHMARK_DEFINE_F(benchmarker, logIntPlusFloatValueFMT)(benchmark::State& 
state)
+BENCHMARK_DEFINE_F(benchmarker, 
logIntPlusFloatMessageBuffer)(benchmark::State& state)
 {
        int x = 0;
        for (auto _ : state)
        {
                auto f = static_cast<float>(rand()) / 
static_cast<float>(RAND_MAX);
-               LOG4CXX_INFO_FMT( m_logger, "Hello: msg number {} pseudo-random 
float {:.3f}", ++x, f);
+               LOG4CXX_INFO( m_logger, "Hello: message number " << ++x
+                       << " pseudo-random float " << std::setprecision(3) << 
std::fixed << f);
        }
 }
-BENCHMARK_REGISTER_F(benchmarker, logIntPlusFloatValueFMT)->Name("Logging 
int+float with FMT");
-BENCHMARK_REGISTER_F(benchmarker, logIntPlusFloatValueFMT)->Name("Logging 
int+float with FMT")->Threads(benchmarker::threadCount());
-#endif
+BENCHMARK_REGISTER_F(benchmarker, logIntPlusFloatMessageBuffer)->Name("Logging 
int+float using MessageBuffer, pattern: %m%n");
+BENCHMARK_REGISTER_F(benchmarker, logIntPlusFloatMessageBuffer)->Name("Logging 
int+float using MessageBuffer, pattern: 
%m%n")->Threads(benchmarker::threadCount());
 
-BENCHMARK_DEFINE_F(benchmarker, logIntValueStream)(benchmark::State& state)
+template <class ...Args>
+void logWithConversionPattern(benchmark::State& state, Args&&... args)
 {
+    auto args_tuple = std::make_tuple(std::move(args)...);
+       LogString conversionPattern = std::get<0>(args_tuple);
+
+       auto pattern = std::make_shared<PatternLayout>( conversionPattern );
+       auto logger = Logger::getLogger( LOG4CXX_STR("bench_logger") );
+       
logger->getAppender(LOG4CXX_STR("NullWriterAppender"))->setLayout(pattern);
+
        int x = 0;
        for (auto _ : state)
        {
-               LOG4CXX_INFO( m_logger, "Hello: msg number " << ++x);
+               LOG4CXX_INFO( logger, LOG4CXX_STR("Hello: msg number ") << ++x);
        }
 }
-BENCHMARK_REGISTER_F(benchmarker, logIntValueStream)->Name("Logging int value 
with std::ostream");
-BENCHMARK_REGISTER_F(benchmarker, logIntValueStream)->Name("Logging int value 
with std::ostream")->Threads(benchmarker::threadCount());
+BENCHMARK_CAPTURE(logWithConversionPattern, DateMessage, LOG4CXX_STR("[%d] 
%m%n"))->Name("Logging int value using MessageBuffer, pattern: [%d] %m%n");
+BENCHMARK_CAPTURE(logWithConversionPattern, DateClassLevelMessage, 
LOG4CXX_STR("[%d] [%c] [%p] %m%n"))->Name("Logging int value using 
MessageBuffer, pattern: [%d] [%c] [%p] %m%n");
 
-BENCHMARK_DEFINE_F(benchmarker, logIntPlusFloatStream)(benchmark::State& state)
+#if  LOG4CXX_USING_STD_FORMAT || LOG4CXX_HAS_FMT
+BENCHMARK_DEFINE_F(benchmarker, logLongStringFMT)(benchmark::State& state)
 {
-       int x = 0;
        for (auto _ : state)
        {
-               auto f = static_cast<float>(rand()) / 
static_cast<float>(RAND_MAX);
-               LOG4CXX_INFO( m_logger, "Hello: msg number " << ++x
-                       << " pseudo-random float " << std::setprecision(3) << 
std::fixed << f);
+               LOG4CXX_INFO_FMT(m_logger, "Hello: this is a long static string 
message", 0);
        }
 }
-BENCHMARK_REGISTER_F(benchmarker, logIntPlusFloatStream)->Name("Logging 
int+float with std::ostream");
-BENCHMARK_REGISTER_F(benchmarker, logIntPlusFloatStream)->Name("Logging 
int+float with std::ostream")->Threads(benchmarker::threadCount());
+BENCHMARK_REGISTER_F(benchmarker, logLongStringFMT)->Name("Logging 49 char 
string using FMT, pattern: %m%n");
+BENCHMARK_REGISTER_F(benchmarker, logLongStringFMT)->Name("Logging 49 char 
string using FMT, pattern: %m%n")->Threads(benchmarker::threadCount());
 
-template <class ...Args>
-void logWithConversionPattern(benchmark::State& state, Args&&... args)
+BENCHMARK_DEFINE_F(benchmarker, logIntValueFMT)(benchmark::State& state)
 {
-    auto args_tuple = std::make_tuple(std::move(args)...);
-       LogString conversionPattern = std::get<0>(args_tuple);
-
-       PatternLayoutPtr pattern(new PatternLayout);
-       pattern->setConversionPattern( conversionPattern );
-       auto logger = Logger::getLogger( LOG4CXX_STR("bench_logger") );
-       
logger->getAppender(LOG4CXX_STR("NullWriterAppender"))->setLayout(pattern);
+       int x = 0;
+       for (auto _ : state)
+       {
+               LOG4CXX_INFO_FMT(m_logger, "Hello: msg number {}", ++x);
+       }
+}
+BENCHMARK_REGISTER_F(benchmarker, logIntValueFMT)->Name("Logging int value 
using FMT, pattern: %m%n");
+BENCHMARK_REGISTER_F(benchmarker, logIntValueFMT)->Name("Logging int value 
using FMT, pattern: %m%n")->Threads(benchmarker::threadCount());
 
+BENCHMARK_DEFINE_F(benchmarker, logIntPlusFloatValueFMT)(benchmark::State& 
state)
+{
        int x = 0;
        for (auto _ : state)
        {
-               LOG4CXX_INFO( logger, LOG4CXX_STR("Hello m_logger: msg number 
") << ++x);
+               auto f = static_cast<float>(rand()) / 
static_cast<float>(RAND_MAX);
+               LOG4CXX_INFO_FMT(m_logger, "Hello: msg number {} pseudo-random 
float {:.3f}", ++x, f);
        }
 }
-BENCHMARK_CAPTURE(logWithConversionPattern, NoFormat, 
LOG4CXX_STR("%m%n"))->Name("NoFormat pattern: %m%n");
-BENCHMARK_CAPTURE(logWithConversionPattern, DateOnly, LOG4CXX_STR("[%d] 
%m%n"))->Name("DateOnly pattern: [%d] %m%n");
-BENCHMARK_CAPTURE(logWithConversionPattern, DateClassLevel, LOG4CXX_STR("[%d] 
[%c] [%p] %m%n"))->Name("DateClassLevel pattern: [%d] [%c] [%p] %m%n");
+BENCHMARK_REGISTER_F(benchmarker, logIntPlusFloatValueFMT)->Name("Logging 
int+float using FMT, pattern: %m%n");
+BENCHMARK_REGISTER_F(benchmarker, logIntPlusFloatValueFMT)->Name("Logging 
int+float using FMT, pattern: %m%n")->Threads(benchmarker::threadCount());
+#endif
 
 static void SetAsyncAppender(const benchmark::State& state)
 {
-       LoggerPtr logger = Logger::getLogger( LOG4CXX_STR("bench_logger") );
+       auto logger = Logger::getLogger(LOG4CXX_STR("bench_logger"));
        logger->removeAllAppenders();
-       logger->setAdditivity( false );
-       logger->setLevel( Level::getInfo() );
-
-       PatternLayoutPtr pattern(new PatternLayout);
-       pattern->setConversionPattern(LOG4CXX_STR("%m%n"));
+       logger->setAdditivity(false);
+       logger->setLevel(Level::getInfo());
 
-       NullWriterAppenderPtr nullWriter(new NullWriterAppender);
-       nullWriter->setLayout( pattern );
-       AsyncAppenderPtr asyncAppender = AsyncAppenderPtr(new AsyncAppender());
+       auto nullWriter = 
std::make_shared<NullWriterAppender>(std::make_shared<PatternLayout>(LOG4CXX_STR("%m%n")));
+       auto asyncAppender = std::make_shared<AsyncAppender>();
        asyncAppender->addAppender(nullWriter);
        asyncAppender->setBufferSize(5);
-       helpers::Pool p;
-       asyncAppender->activateOptions(p);
        logger->addAppender(asyncAppender);
 }
-BENCHMARK_REGISTER_F(benchmarker, logIntValueStream)->Name("Logging int value 
with std::ostream to AsyncAppender")->Setup(SetAsyncAppender);
-BENCHMARK_REGISTER_F(benchmarker, logIntValueStream)->Name("Logging int value 
with std::ostream to AsyncAppender")->Threads(benchmarker::threadCount());
+BENCHMARK_REGISTER_F(benchmarker, logIntValueMessageBuffer)->Name("Async, int 
value using MessageBuffer, pattern: %m%n")->Setup(SetAsyncAppender);
+BENCHMARK_REGISTER_F(benchmarker, logIntValueMessageBuffer)->Name("Async, int 
value using MessageBuffer, pattern: %m%n")->Threads(benchmarker::threadCount());
 
 BENCHMARK_MAIN();
 

Reply via email to