You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by sw...@apache.org on 2024/02/15 23:10:18 UTC

(logging-log4cxx) branch master updated: Remove unnessessary indirection in AsyncAppender (#353)

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 ce8cfab5 Remove unnessessary indirection in AsyncAppender (#353)
ce8cfab5 is described below

commit ce8cfab5122de16206e1d253954abb8e457a3323
Author: Stephen Webb <st...@ieee.org>
AuthorDate: Fri Feb 16 10:10:13 2024 +1100

    Remove unnessessary indirection in AsyncAppender (#353)
    
    * Preallocate buffer space
---
 src/main/cpp/asyncappender.cpp | 33 +++++++++++++++------------------
 1 file changed, 15 insertions(+), 18 deletions(-)

diff --git a/src/main/cpp/asyncappender.cpp b/src/main/cpp/asyncappender.cpp
index 08b09889..5c540cff 100644
--- a/src/main/cpp/asyncappender.cpp
+++ b/src/main/cpp/asyncappender.cpp
@@ -100,9 +100,8 @@ struct AsyncAppender::AsyncAppenderPriv : public AppenderSkeleton::AppenderSkele
 {
 	AsyncAppenderPriv() :
 		AppenderSkeletonPrivate(),
-		buffer(),
 		bufferSize(DEFAULT_BUFFER_SIZE),
-		appenders(std::make_shared<AppenderAttachableImpl>(pool)),
+		appenders(pool),
 		dispatcher(),
 		locationInfo(false),
 		blocking(true)
@@ -148,7 +147,7 @@ struct AsyncAppender::AsyncAppenderPriv : public AppenderSkeleton::AppenderSkele
 	/**
 	 * Nested appenders.
 	*/
-	helpers::AppenderAttachableImplPtr appenders;
+	helpers::AppenderAttachableImpl appenders;
 
 	/**
 	 *  Dispatcher.
@@ -187,7 +186,7 @@ AsyncAppender::~AsyncAppender()
 
 void AsyncAppender::addAppender(const AppenderPtr newAppender)
 {
-	priv->appenders->addAppender(newAppender);
+	priv->appenders.addAppender(newAppender);
 }
 
 
@@ -224,7 +223,7 @@ void AsyncAppender::append(const spi::LoggingEventPtr& event, Pool& p)
 {
 	if (priv->bufferSize <= 0)
 	{
-		priv->appenders->appendLoopOnAppenders(event, p);
+		priv->appenders.appendLoopOnAppenders(event, p);
 	}
 
 	// Set the NDC and MDC for the calling thread as these
@@ -238,6 +237,7 @@ void AsyncAppender::append(const spi::LoggingEventPtr& event, Pool& p)
 	if (!priv->dispatcher.joinable())
 	{
 		priv->dispatcher = ThreadUtility::instance()->createThread( LOG4CXX_STR("AsyncAppender"), &AsyncAppender::dispatch, this );
+		priv->buffer.reserve(priv->bufferSize);
 	}
 	while (true)
 	{
@@ -313,7 +313,7 @@ void AsyncAppender::close()
 		priv->dispatcher.join();
 	}
 
-	for (auto item : priv->appenders->getAllAppenders())
+	for (auto item : priv->appenders.getAllAppenders())
 	{
 		item->close();
 	}
@@ -321,17 +321,17 @@ void AsyncAppender::close()
 
 AppenderList AsyncAppender::getAllAppenders() const
 {
-	return priv->appenders->getAllAppenders();
+	return priv->appenders.getAllAppenders();
 }
 
 AppenderPtr AsyncAppender::getAppender(const LogString& n) const
 {
-	return priv->appenders->getAppender(n);
+	return priv->appenders.getAppender(n);
 }
 
 bool AsyncAppender::isAttached(const AppenderPtr appender) const
 {
-	return priv->appenders->isAttached(appender);
+	return priv->appenders.isAttached(appender);
 }
 
 bool AsyncAppender::requiresLayout() const
@@ -341,17 +341,17 @@ bool AsyncAppender::requiresLayout() const
 
 void AsyncAppender::removeAllAppenders()
 {
-	priv->appenders->removeAllAppenders();
+	priv->appenders.removeAllAppenders();
 }
 
 void AsyncAppender::removeAppender(const AppenderPtr appender)
 {
-	priv->appenders->removeAppender(appender);
+	priv->appenders.removeAppender(appender);
 }
 
 void AsyncAppender::removeAppender(const LogString& n)
 {
-	priv->appenders->removeAppender(n);
+	priv->appenders.removeAppender(n);
 }
 
 bool AsyncAppender::getLocationInfo() const
@@ -467,17 +467,14 @@ void AsyncAppender::dispatch()
 			);
 			isActive = !priv->closed;
 
-			for (auto eventItem : priv->buffer)
-			{
-				events.push_back(eventItem);
-			}
-
+			events = std::move(priv->buffer);
 			for (auto discardItem : priv->discardMap)
 			{
 				events.push_back(discardItem.second.createEvent(p));
 			}
 
 			priv->buffer.clear();
+			priv->buffer.reserve(priv->bufferSize);
 			priv->discardMap.clear();
 			priv->bufferNotFull.notify_all();
 		}
@@ -486,7 +483,7 @@ void AsyncAppender::dispatch()
 		{
 			try
 			{
-				priv->appenders->appendLoopOnAppenders(item, p);
+				priv->appenders.appendLoopOnAppenders(item, p);
 			}
 			catch (std::exception& ex)
 			{