feat(Core/Optimization): Reduce CPU consumption by allocating sendBuffer only when it is needed. (#18628)
* feat(Core/Optimization): Reduce CPU consumption by allocating the sendBuffer only when it is needed. * Remove whitespaces.
This commit is contained in:
committed by
GitHub
parent
2aaf8474ba
commit
aee2eefb92
@@ -161,11 +161,13 @@ void WorldSocket::CheckIpCallback(PreparedQueryResult result)
|
|||||||
bool WorldSocket::Update()
|
bool WorldSocket::Update()
|
||||||
{
|
{
|
||||||
EncryptableAndCompressiblePacket* queued;
|
EncryptableAndCompressiblePacket* queued;
|
||||||
|
if (_bufferQueue.Dequeue(queued))
|
||||||
|
{
|
||||||
|
// Allocate buffer only when it's needed but not on every Update() call.
|
||||||
MessageBuffer buffer(_sendBufferSize);
|
MessageBuffer buffer(_sendBufferSize);
|
||||||
while (_bufferQueue.Dequeue(queued))
|
do
|
||||||
{
|
{
|
||||||
queued->CompressIfNeeded();
|
queued->CompressIfNeeded();
|
||||||
|
|
||||||
ServerPktHeader header(queued->size() + 2, queued->GetOpcode());
|
ServerPktHeader header(queued->size() + 2, queued->GetOpcode());
|
||||||
if (queued->NeedsEncryption())
|
if (queued->NeedsEncryption())
|
||||||
_authCrypt.EncryptSend(header.header, header.getHeaderLength());
|
_authCrypt.EncryptSend(header.header, header.getHeaderLength());
|
||||||
@@ -193,10 +195,11 @@ bool WorldSocket::Update()
|
|||||||
}
|
}
|
||||||
|
|
||||||
delete queued;
|
delete queued;
|
||||||
}
|
} while (_bufferQueue.Dequeue(queued));
|
||||||
|
|
||||||
if (buffer.GetActiveSize() > 0)
|
if (buffer.GetActiveSize() > 0)
|
||||||
QueuePacket(std::move(buffer));
|
QueuePacket(std::move(buffer));
|
||||||
|
}
|
||||||
|
|
||||||
if (!BaseSocket::Update())
|
if (!BaseSocket::Update())
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
Reference in New Issue
Block a user