Made the extensive logging optional to improve performance

This commit is contained in:
2020-12-20 07:35:52 +01:00
parent 9172736ac2
commit 6ac642b019
2 changed files with 62 additions and 50 deletions

View File

@ -25,6 +25,10 @@
#include <libb64/cencode.h>
namespace {
constexpr const bool asyncWebSocketDebug = false;
}
#ifndef ESP8266
extern "C" {
typedef struct {
@ -258,7 +262,7 @@ AsyncWebSocketClient::AsyncWebSocketClient(AsyncWebServerRequest *request, Async
: _lock{"AsyncWebSocketClient"}
, _tempObject(NULL)
{
Serial.printf("AsyncWebSocketClient::AsyncWebSocketClient this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
if (asyncWebSocketDebug) Serial.printf("AsyncWebSocketClient::AsyncWebSocketClient this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
_client = request->client();
_server = server;
@ -281,7 +285,8 @@ AsyncWebSocketClient::AsyncWebSocketClient(AsyncWebServerRequest *request, Async
AsyncWebSocketClient::~AsyncWebSocketClient()
{
Serial.printf("AsyncWebSocketClient::~AsyncWebSocketClient this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
if (asyncWebSocketDebug) Serial.printf("AsyncWebSocketClient::~AsyncWebSocketClient this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
{
AsyncWebLockGuard l(_lock, "AsyncWebSocketClient::~AsyncWebSocketClient()");
_messageQueue = {};
@ -292,31 +297,29 @@ AsyncWebSocketClient::~AsyncWebSocketClient()
void AsyncWebSocketClient::_onAck(size_t len, uint32_t time)
{
Serial.printf("AsyncWebSocketClient::_onAck this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
if (asyncWebSocketDebug) Serial.printf("AsyncWebSocketClient::_onAck this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
_lastMessageTime = millis();
{
AsyncWebLockGuard l(_lock, "AsyncWebSocketClient::_onAck()");
AsyncWebLockGuard l(_lock, "AsyncWebSocketClient::_onAck()");
if (!_controlQueue.empty()) {
auto &head = _controlQueue.front();
if (head.finished()){
len -= head.len();
if (_status == WS_DISCONNECTING && head.opcode() == WS_DISCONNECT){
_controlQueue.pop();
_status = WS_DISCONNECTED;
l.unlock();
_client->close(true);
return;
}
if (!_controlQueue.empty()) {
auto &head = _controlQueue.front();
if (head.finished()){
len -= head.len();
if (_status == WS_DISCONNECTING && head.opcode() == WS_DISCONNECT){
_controlQueue.pop();
_status = WS_DISCONNECTED;
l.unlock();
_client->close(true);
return;
}
_controlQueue.pop();
}
}
if(len && !_messageQueue.empty()){
_messageQueue.front().ack(len, time);
}
if(len && !_messageQueue.empty()){
_messageQueue.front().ack(len, time);
}
_runQueue();
@ -324,7 +327,7 @@ void AsyncWebSocketClient::_onAck(size_t len, uint32_t time)
void AsyncWebSocketClient::_onPoll()
{
Serial.printf("AsyncWebSocketClient::_onPoll this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
if (asyncWebSocketDebug) Serial.printf("AsyncWebSocketClient::_onPoll this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
AsyncWebLockGuard l(_lock, "AsyncWebSocketClient::_onPoll");
if(_client->canSend() && (!_controlQueue.empty() || !_messageQueue.empty()))
@ -341,7 +344,7 @@ void AsyncWebSocketClient::_onPoll()
void AsyncWebSocketClient::_runQueue()
{
Serial.printf("AsyncWebSocketClient::_runQueue this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
if (asyncWebSocketDebug) Serial.printf("AsyncWebSocketClient::_runQueue this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
AsyncWebLockGuard l(_lock, "AsyncWebSocketClient::_runQueue()");
@ -362,7 +365,7 @@ void AsyncWebSocketClient::_runQueue()
bool AsyncWebSocketClient::queueIsFull() const
{
Serial.printf("AsyncWebSocketClient::queueIsFull this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
if (asyncWebSocketDebug) Serial.printf("AsyncWebSocketClient::queueIsFull this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
size_t size;
{
@ -374,7 +377,7 @@ bool AsyncWebSocketClient::queueIsFull() const
bool AsyncWebSocketClient::canSend() const
{
Serial.printf("AsyncWebSocketClient::canSend this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
if (asyncWebSocketDebug) Serial.printf("AsyncWebSocketClient::canSend this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
size_t size;
{
@ -386,7 +389,7 @@ bool AsyncWebSocketClient::canSend() const
void AsyncWebSocketClient::_queueControl(uint8_t opcode, const uint8_t *data, size_t len, bool mask)
{
Serial.printf("AsyncWebSocketClient::_queueControl this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
if (asyncWebSocketDebug) Serial.printf("AsyncWebSocketClient::_queueControl this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
{
AsyncWebLockGuard l(_lock, "AsyncWebSocketClient::_queueControl");
@ -399,7 +402,7 @@ void AsyncWebSocketClient::_queueControl(uint8_t opcode, const uint8_t *data, si
void AsyncWebSocketClient::_queueMessage(std::shared_ptr<std::vector<uint8_t>> buffer, uint8_t opcode, bool mask)
{
Serial.printf("AsyncWebSocketClient::_queueMessage this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
if (asyncWebSocketDebug) Serial.printf("AsyncWebSocketClient::_queueMessage this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
if(_status != WS_CONNECTED)
return;
@ -421,29 +424,34 @@ void AsyncWebSocketClient::_queueMessage(std::shared_ptr<std::vector<uint8_t>> b
_runQueue();
}
void AsyncWebSocketClient::close(uint16_t code, const char * message){
if(_status != WS_CONNECTED)
return;
if(code){
uint8_t packetLen = 2;
if(message != NULL){
size_t mlen = strlen(message);
if(mlen > 123) mlen = 123;
packetLen += mlen;
void AsyncWebSocketClient::close(uint16_t code, const char * message)
{
if(_status != WS_CONNECTED)
return;
if(code)
{
uint8_t packetLen = 2;
if (message != NULL)
{
size_t mlen = strlen(message);
if(mlen > 123) mlen = 123;
packetLen += mlen;
}
char * buf = (char*)malloc(packetLen);
if (buf != NULL)
{
buf[0] = (uint8_t)(code >> 8);
buf[1] = (uint8_t)(code & 0xFF);
if (message != NULL){
memcpy(buf+2, message, packetLen -2);
}
_queueControl(WS_DISCONNECT, (uint8_t*)buf, packetLen);
free(buf);
return;
}
}
char * buf = (char*)malloc(packetLen);
if(buf != NULL){
buf[0] = (uint8_t)(code >> 8);
buf[1] = (uint8_t)(code & 0xFF);
if(message != NULL){
memcpy(buf+2, message, packetLen -2);
}
_queueControl(WS_DISCONNECT, (uint8_t*)buf, packetLen);
free(buf);
return;
}
}
_queueControl(WS_DISCONNECT);
_queueControl(WS_DISCONNECT);
}
void AsyncWebSocketClient::ping(const uint8_t *data, size_t len)

View File

@ -5,6 +5,10 @@
#include <ESPAsyncWebServer.h>
namespace {
constexpr const bool asyncWebLockDebug = false;
}
#ifdef ESP32
// This is the ESP32 version of the Sync Lock, using the FreeRTOS Semaphore
@ -34,12 +38,12 @@ public:
if (_lockedBy != currentTask) {
while (true)
{
Serial.printf("AsyncWebLock::lock this=0x%llx name=%s locker=%s task=0x%llx %s\r\n", uint64_t(this), lockName, lockerName, uint64_t(currentTask), pcTaskGetTaskName(currentTask));
if (asyncWebLockDebug) Serial.printf("AsyncWebLock::lock this=0x%llx name=%s locker=%s task=0x%llx %s\r\n", uint64_t(this), lockName, lockerName, uint64_t(currentTask), pcTaskGetTaskName(currentTask));
if (xSemaphoreTake(_lock, 200 / portTICK_PERIOD_MS))
break;
else
Serial.printf("AsyncWebLock::lock FAILED this=0x%llx name=%s locker=%s task=0x%llx %s lastLockedBy=%s\r\n", uint64_t(this), lockName, lockerName, uint64_t(currentTask), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()), _lastLockerName);
Serial.printf("AsyncWebLock::lock FAILED(200ms) this=0x%llx name=%s locker=%s task=0x%llx %s lastLockedBy=%s\r\n", uint64_t(this), lockName, lockerName, uint64_t(currentTask), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()), _lastLockerName);
}
_lockedBy = currentTask;
_lastLockerName = lockerName;
@ -49,7 +53,7 @@ public:
}
void unlock(const char *lockerName) const {
Serial.printf("AsyncWebLock::unlock this=0x%llx name=%s locker=%s task=0x%llx %s\r\n", uint64_t(this), lockName, lockerName, uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
if (asyncWebLockDebug) Serial.printf("AsyncWebLock::unlock this=0x%llx name=%s locker=%s task=0x%llx %s\r\n", uint64_t(this), lockName, lockerName, uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
_lockedBy = NULL;
_lastLockerName = NULL;
xSemaphoreGive(_lock);