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 <[email protected]>
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)
{