Skip to content

Commit 9e148bb

Browse files
committed
backend: Replace linkedlist with map for counter diagnostics
1 parent d1737c6 commit 9e148bb

File tree

3 files changed

+25
-38
lines changed

3 files changed

+25
-38
lines changed

src/tracing/esp32_diagnostic_trace/Counter.cpp

+11-27
Original file line numberDiff line numberDiff line change
@@ -23,43 +23,27 @@ namespace chip {
2323
namespace Tracing {
2424
namespace Diagnostics {
2525

26-
// This is a one time allocation for counters. It is not supposed to be freed.
27-
ESPDiagnosticCounter * ESPDiagnosticCounter::mHead = nullptr;
26+
std::map<const char *, uint32_t> ESPDiagnosticCounter::mCounterList;
2827

29-
ESPDiagnosticCounter * ESPDiagnosticCounter::GetInstance(const char * label)
28+
void ESPDiagnosticCounter::CountInit(const char* label)
3029
{
31-
ESPDiagnosticCounter * current = mHead;
32-
33-
while (current != nullptr)
34-
{
35-
if (strcmp(current->label, label) == 0)
36-
{
37-
current->instanceCount++;
38-
return current;
39-
}
40-
current = current->mNext;
30+
if (mCounterList.find(label) != mCounterList.end()) {
31+
mCounterList[label]++;
32+
}
33+
else {
34+
mCounterList[label] = 1;
4135
}
42-
43-
// Allocate a new instance if counter is not present in the list.
44-
void * ptr = Platform::MemoryAlloc(sizeof(ESPDiagnosticCounter));
45-
VerifyOrDie(ptr != nullptr);
46-
47-
ESPDiagnosticCounter * newInstance = new (ptr) ESPDiagnosticCounter(label);
48-
newInstance->mNext = mHead;
49-
mHead = newInstance;
50-
51-
return newInstance;
5236
}
5337

54-
int32_t ESPDiagnosticCounter::GetInstanceCount() const
38+
int32_t ESPDiagnosticCounter::GetInstanceCount(const char* label) const
5539
{
56-
return instanceCount;
40+
return mCounterList[label];
5741
}
5842

59-
void ESPDiagnosticCounter::ReportMetrics()
43+
void ESPDiagnosticCounter::ReportMetrics(const char* label)
6044
{
6145
CHIP_ERROR err = CHIP_NO_ERROR;
62-
Counter counter(label, instanceCount, esp_log_timestamp());
46+
Counter counter(label, GetInstanceCount(label), esp_log_timestamp());
6347
DiagnosticStorageImpl & diagnosticStorage = DiagnosticStorageImpl::GetInstance();
6448
err = diagnosticStorage.Store(counter);
6549
VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(DeviceLayer, "Failed to store Counter diagnostic data"));

src/tracing/esp32_diagnostic_trace/Counter.h

+13-10
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include <lib/support/CHIPMem.h>
2525
#include <lib/support/CHIPMemString.h>
2626
#include <string.h>
27+
#include <map>
2728

2829
namespace chip {
2930
namespace Tracing {
@@ -39,20 +40,22 @@ namespace Diagnostics {
3940

4041
class ESPDiagnosticCounter
4142
{
42-
private:
43-
static ESPDiagnosticCounter * mHead; // head of the counter list
44-
const char * label; // unique key ,it is used as a static string.
45-
int32_t instanceCount;
46-
ESPDiagnosticCounter * mNext; // pointer to point to the next entry in the list
43+
public:
44+
static ESPDiagnosticCounter & GetInstance(const char* label) {
45+
static ESPDiagnosticCounter instance;
46+
CountInit(label);
47+
return instance;
48+
}
4749

48-
ESPDiagnosticCounter(const char * labelParam) : label(labelParam), instanceCount(1), mNext(nullptr) {}
50+
int32_t GetInstanceCount(const char *label) const;
4951

50-
public:
51-
static ESPDiagnosticCounter * GetInstance(const char * label);
52+
void ReportMetrics(const char* label);
5253

53-
int32_t GetInstanceCount() const;
54+
private:
55+
ESPDiagnosticCounter() {}
5456

55-
void ReportMetrics();
57+
static std::map<const char*, uint32_t> mCounterList;
58+
static void CountInit(const char* label);
5659
};
5760

5861
} // namespace Diagnostics

src/tracing/esp32_diagnostic_trace/DiagnosticTracing.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ void ESP32Diagnostics::LogMetricEvent(const MetricEvent & event)
146146

147147
void ESP32Diagnostics::TraceCounter(const char * label)
148148
{
149-
ESPDiagnosticCounter::GetInstance(label)->ReportMetrics();
149+
ESPDiagnosticCounter::GetInstance(label).ReportMetrics(label);
150150
}
151151

152152
void ESP32Diagnostics::TraceBegin(const char * label, const char * group)

0 commit comments

Comments
 (0)