Skip to content

Commit 4242526

Browse files
andy31415andreilitvinrestyled-commits
authored
Create a JSON Log tracing backend (#27135)
* Start a backend implementation, empty for now * Add jsonpp support * Allow sstream and string usage in the log tracing library * remove unneeded log line * Restyle * Make matter tracing opt-in by default. Will enable it for chip-tool and linux apps at start * make things compile, add dependency into chip-command * Enable tracing for CHIPTool * Ensure uniqueness * Restyle * Add a few more comments * Add MATTER_TRACE_EVENT_SCOPE everywhere. Ran: ```sh rg MATTER_TRACE_EVENT_SCOPE --files-with-matches \ | grep -v src/trace \ | xargs sd \ '(^(\s*)MATTER_TRACE_EVENT_SCOPE\("(.*)",\s*"(.*)"\);)' \ "\${1}\n\${2}MATTER_TRACE_SCOPE(::chip::Tracing::Scope::\${4}_\${3});" ``` * Add tracing/scope.h include to have access to MATTER_TRACE_SCOPE * Switch addressresolve to use matter tracing instead of tracevent (instant is one of the cases where matter_trace did not actually work) * Switch out and add incremental resolve record parse * Restyle * Make chip-tool compile. Still need to fix device apps * Fix compilation with tracing disabled * Enable tracing by defaulf for a lot of example apps * Add some dependencies to tracing * Make sure no unused member error * Another update for tracing disabled * Restyle * Scope the macros a bit more * Restyle * Only build tracing tests if tracing is enabled on the platform * Restyle * Enable tracing on linux using a different logic - all linux builds have tracing by default * Restyle * Fix check_includes_config * Add a string splitter class * Switch to use the support string splitter class * Use standard command argument handling for CSV string vector * Support optional string vector arguments * Fix typo * Do not fail on stringop-truncation in tests * Fix initialization of mData for null cases for stringsplitter * Restyled by clang-format * Add more unit tests and ensure final empty element is emitted * Restyled by clang-format * separator should be const * Restyled by clang-format * Review comment: use char span * Use char span for string splitting * Restyled by clang-format * Restyled by clang-format * Force a static cast for size compares * make linter happy * Restyled by clang-format --------- Co-authored-by: Andrei Litvin <andreilitvin@google.com> Co-authored-by: Restyled.io <commits@restyled.io>
1 parent 3d481f3 commit 4242526

File tree

28 files changed

+604
-22
lines changed

28 files changed

+604
-22
lines changed

examples/chip-tool/BUILD.gn

+2
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,8 @@ static_library("chip-tool-utils") {
114114
"${chip_root}/src/lib",
115115
"${chip_root}/src/lib/support/jsontlv",
116116
"${chip_root}/src/platform",
117+
"${chip_root}/src/tracing",
118+
"${chip_root}/src/tracing/log_json",
117119
"${chip_root}/third_party/inipp",
118120
"${chip_root}/third_party/jsoncpp",
119121
]

examples/chip-tool/args.gni

+2
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,5 @@ chip_system_project_config_include = "<SystemProjectConfig.h>"
2222

2323
chip_project_config_include_dirs = [ "${chip_root}/examples/chip-tool/include" ]
2424
chip_project_config_include_dirs += [ "${chip_root}/config/standalone" ]
25+
26+
matter_enable_tracing_support = true

examples/chip-tool/commands/common/CHIPCommand.cpp

+34
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@
2626
#include <lib/support/ScopedBuffer.h>
2727
#include <lib/support/TestGroupData.h>
2828

29+
#include <tracing/log_json/log_json_tracing.h>
30+
#include <tracing/registry.h>
31+
2932
#if CHIP_CONFIG_TRANSPORT_TRACE_ENABLED
3033
#include "TraceDecoder.h"
3134
#include "TraceHandlers.h"
@@ -48,6 +51,7 @@ const chip::Credentials::AttestationTrustStore * CHIPCommand::sTrustStore = null
4851
chip::Credentials::GroupDataProviderImpl CHIPCommand::sGroupDataProvider{ kMaxGroupsPerFabric, kMaxGroupKeysPerFabric };
4952

5053
namespace {
54+
5155
CHIP_ERROR GetAttestationTrustStore(const char * paaTrustStorePath, const chip::Credentials::AttestationTrustStore ** trustStore)
5256
{
5357
if (paaTrustStorePath == nullptr)
@@ -77,6 +81,16 @@ CHIP_ERROR GetAttestationTrustStore(const char * paaTrustStorePath, const chip::
7781
*trustStore = &attestationTrustStore;
7882
return CHIP_NO_ERROR;
7983
}
84+
85+
using ::chip::Tracing::ScopedRegistration;
86+
using ::chip::Tracing::LogJson::LogJsonBackend;
87+
88+
LogJsonBackend log_json_backend;
89+
90+
// ScopedRegistration ensures register/unregister is met, as long
91+
// as the vector is cleared (and we do so when stopping tracing).
92+
std::vector<std::unique_ptr<ScopedRegistration>> tracing_backends;
93+
8094
} // namespace
8195

8296
CHIP_ERROR CHIPCommand::MaybeSetUpStack()
@@ -240,6 +254,24 @@ CHIP_ERROR CHIPCommand::Run()
240254

241255
void CHIPCommand::StartTracing()
242256
{
257+
if (mTraceTo.HasValue())
258+
{
259+
for (const auto & destination : mTraceTo.Value())
260+
{
261+
if (destination == "log")
262+
{
263+
if (!log_json_backend.IsInList())
264+
{
265+
tracing_backends.push_back(std::make_unique<ScopedRegistration>(log_json_backend));
266+
}
267+
}
268+
else
269+
{
270+
ChipLogError(AppServer, "Unknown trace destination: '%s'", destination.c_str());
271+
}
272+
}
273+
}
274+
243275
#if CHIP_CONFIG_TRANSPORT_TRACE_ENABLED
244276
chip::trace::InitTrace();
245277

@@ -266,6 +298,8 @@ void CHIPCommand::StartTracing()
266298

267299
void CHIPCommand::StopTracing()
268300
{
301+
tracing_backends.clear();
302+
269303
#if CHIP_CONFIG_TRANSPORT_TRACE_ENABLED
270304
chip::trace::DeInitTrace();
271305
#endif // CHIP_CONFIG_TRANSPORT_TRACE_ENABLED

examples/chip-tool/commands/common/CHIPCommand.h

+3
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ class CHIPCommand : public Command
8585
AddArgument("trace_log", 0, 1, &mTraceLog);
8686
AddArgument("trace_decode", 0, 1, &mTraceDecode);
8787
#endif // CHIP_CONFIG_TRANSPORT_TRACE_ENABLED
88+
AddArgument("trace-to", &mTraceTo, "Trace destinations, comma-separated (e.g. log)");
8889
AddArgument("ble-adapter", 0, UINT16_MAX, &mBleAdapterId);
8990
AddArgument("storage-directory", &mStorageDirectory,
9091
"Directory to place chip-tool's storage files in. Defaults to $TMPDIR, with fallback to /tmp");
@@ -238,4 +239,6 @@ class CHIPCommand : public Command
238239
chip::Optional<bool> mTraceLog;
239240
chip::Optional<bool> mTraceDecode;
240241
#endif // CHIP_CONFIG_TRANSPORT_TRACE_ENABLED
242+
243+
chip::Optional<std::vector<std::string>> mTraceTo;
241244
};

examples/chip-tool/commands/common/Command.cpp

+52
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
#include <lib/support/CodeUtils.h>
3636
#include <lib/support/SafeInt.h>
3737
#include <lib/support/ScopedBuffer.h>
38+
#include <lib/support/StringSplitter.h>
3839
#include <lib/support/logging/CHIPLogging.h>
3940

4041
constexpr const char * kOptionalArgumentPrefix = "--";
@@ -220,6 +221,29 @@ bool Command::InitArgument(size_t argIndex, char * argValue)
220221
return CHIP_NO_ERROR == customArgument->Parse(arg.name, argValue);
221222
}
222223

224+
case ArgumentType::VectorString: {
225+
std::vector<std::string> vectorArgument;
226+
227+
chip::StringSplitter splitter(argValue, ',');
228+
chip::CharSpan value;
229+
230+
while (splitter.Next(value))
231+
{
232+
vectorArgument.push_back(std::string(value.data(), value.size()));
233+
}
234+
235+
if (arg.flags == Argument::kOptional)
236+
{
237+
auto argument = static_cast<chip::Optional<std::vector<std::string>> *>(arg.value);
238+
argument->SetValue(vectorArgument);
239+
}
240+
else
241+
{
242+
auto argument = static_cast<std::vector<std::string> *>(arg.value);
243+
*argument = vectorArgument;
244+
}
245+
return true;
246+
}
223247
case ArgumentType::VectorBool: {
224248
// Currently only chip::Optional<std::vector<bool>> is supported.
225249
if (arg.flags != Argument::kOptional)
@@ -798,6 +822,30 @@ size_t Command::AddArgument(const char * name, int64_t min, uint64_t max, void *
798822
return AddArgumentToList(std::move(arg));
799823
}
800824

825+
size_t Command::AddArgument(const char * name, std::vector<std::string> * value, const char * desc)
826+
{
827+
Argument arg;
828+
arg.type = ArgumentType::VectorString;
829+
arg.name = name;
830+
arg.value = static_cast<void *>(value);
831+
arg.flags = 0;
832+
arg.desc = desc;
833+
834+
return AddArgumentToList(std::move(arg));
835+
}
836+
837+
size_t Command::AddArgument(const char * name, chip::Optional<std::vector<std::string>> * value, const char * desc)
838+
{
839+
Argument arg;
840+
arg.type = ArgumentType::VectorString;
841+
arg.name = name;
842+
arg.value = static_cast<void *>(value);
843+
arg.flags = Argument::kOptional;
844+
arg.desc = desc;
845+
846+
return AddArgumentToList(std::move(arg));
847+
}
848+
801849
const char * Command::GetArgumentName(size_t index) const
802850
{
803851
if (index < mArgs.size())
@@ -916,6 +964,10 @@ void Command::ResetArguments()
916964
VerifyOrDie(false);
917965
break;
918966
}
967+
case ArgumentType::VectorString: {
968+
ResetOptionalArg<std::vector<std::string>>(arg);
969+
break;
970+
}
919971
case ArgumentType::VectorBool: {
920972
ResetOptionalArg<std::vector<bool>>(arg);
921973
break;

examples/chip-tool/commands/common/Command.h

+4
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ enum ArgumentType
7272
Vector16,
7373
Vector32,
7474
VectorCustom,
75+
VectorString, // comma separated string items
7576
};
7677

7778
struct Argument
@@ -254,6 +255,9 @@ class Command
254255
return AddArgument(name, min, max, reinterpret_cast<double *>(value), desc, flags | Argument::kNullable);
255256
}
256257

258+
size_t AddArgument(const char * name, std::vector<std::string> * value, const char * desc);
259+
size_t AddArgument(const char * name, chip::Optional<std::vector<std::string>> * value, const char * desc);
260+
257261
void ResetArguments();
258262

259263
virtual CHIP_ERROR Run() = 0;

examples/tv-casting-app/tv-casting-common/BUILD.gn

+2
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ chip_data_model("tv-casting-common") {
8888
deps = [
8989
"${chip_root}/src/app/tests/suites/commands/interaction_model",
9090
"${chip_root}/src/lib/support/jsontlv",
91+
"${chip_root}/src/tracing",
92+
"${chip_root}/src/tracing/log_json",
9193
"${chip_root}/third_party/inipp",
9294
"${chip_root}/third_party/jsoncpp",
9395
]

scripts/tools/check_includes_config.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -153,5 +153,8 @@
153153
# of a list of discovered things.
154154
'src/controller/SetUpCodePairer.h': {'deque'},
155155

156-
'src/controller/ExamplePersistentStorage.cpp': {'fstream'}
156+
'src/controller/ExamplePersistentStorage.cpp': {'fstream'},
157+
158+
# Library meant for non-embedded
159+
'src/tracing/log_json/log_json_tracing.cpp': {'string', 'sstream'}
157160
}

src/BUILD.gn

+5-1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import("${chip_root}/build/chip/tests.gni")
2121
import("${chip_root}/src/ble/ble.gni")
2222
import("${chip_root}/src/lwip/lwip.gni")
2323
import("${chip_root}/src/platform/device.gni")
24+
import("${chip_root}/src/tracing/tracing_args.gni")
2425

2526
declare_args() {
2627
# Build monolithic test library.
@@ -94,9 +95,12 @@ if (chip_build_tests) {
9495
"${chip_root}/src/lib/support/tests",
9596
"${chip_root}/src/protocols/secure_channel/tests",
9697
"${chip_root}/src/system/tests",
97-
"${chip_root}/src/tracing/tests",
9898
"${chip_root}/src/transport/tests",
9999
]
100+
101+
if (matter_enable_tracing_support) {
102+
deps += [ "${chip_root}/src/tracing/tests" ]
103+
}
100104
}
101105

102106
if (chip_device_platform != "none") {

src/app/clusters/general-commissioning-server/general-commissioning-server.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
#include <platform/ConfigurationManager.h>
3636
#include <platform/DeviceControlServer.h>
3737
#include <trace/trace.h>
38+
#include <tracing/scope.h>
3839

3940
using namespace chip;
4041
using namespace chip::app;
@@ -155,6 +156,7 @@ bool emberAfGeneralCommissioningClusterArmFailSafeCallback(app::CommandHandler *
155156
const Commands::ArmFailSafe::DecodableType & commandData)
156157
{
157158
MATTER_TRACE_EVENT_SCOPE("ArmFailSafe", "GeneralCommissioning");
159+
MATTER_TRACE_SCOPE(::chip::Tracing::Scope::GeneralCommissioning_ArmFailSafe);
158160
auto & failSafeContext = Server::GetInstance().GetFailSafeContext();
159161
Commands::ArmFailSafeResponse::Type response;
160162

@@ -217,6 +219,7 @@ bool emberAfGeneralCommissioningClusterCommissioningCompleteCallback(
217219
const Commands::CommissioningComplete::DecodableType & commandData)
218220
{
219221
MATTER_TRACE_EVENT_SCOPE("CommissioningComplete", "GeneralCommissioning");
222+
MATTER_TRACE_SCOPE(::chip::Tracing::Scope::GeneralCommissioning_CommissioningComplete);
220223

221224
DeviceControlServer * devCtrl = &DeviceLayer::DeviceControlServer::DeviceControlSvr();
222225
auto & failSafe = Server::GetInstance().GetFailSafeContext();
@@ -284,6 +287,7 @@ bool emberAfGeneralCommissioningClusterSetRegulatoryConfigCallback(app::CommandH
284287
const Commands::SetRegulatoryConfig::DecodableType & commandData)
285288
{
286289
MATTER_TRACE_EVENT_SCOPE("SetRegulatoryConfig", "GeneralCommissioning");
290+
MATTER_TRACE_SCOPE(::chip::Tracing::Scope::GeneralCommissioning_SetRegulatoryConfig);
287291
DeviceControlServer * server = &DeviceLayer::DeviceControlServer::DeviceControlSvr();
288292
Commands::SetRegulatoryConfigResponse::Type response;
289293

src/app/clusters/network-commissioning/network-commissioning.cpp

+7
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
#include <platform/PlatformManager.h>
3333
#include <platform/internal/DeviceNetworkInfo.h>
3434
#include <trace/trace.h>
35+
#include <tracing/scope.h>
3536

3637
using namespace chip;
3738
using namespace chip::app;
@@ -244,6 +245,7 @@ void Instance::OnNetworkingStatusChange(NetworkCommissioning::Status aCommission
244245
void Instance::HandleScanNetworks(HandlerContext & ctx, const Commands::ScanNetworks::DecodableType & req)
245246
{
246247
MATTER_TRACE_EVENT_SCOPE("HandleScanNetwork", "NetworkCommissioning");
248+
MATTER_TRACE_SCOPE(::chip::Tracing::Scope::NetworkCommissioning_HandleScanNetwork);
247249
if (mFeatureFlags.Has(Feature::kWiFiNetworkInterface))
248250
{
249251
ByteSpan ssid;
@@ -316,6 +318,7 @@ bool CheckFailSafeArmed(CommandHandlerInterface::HandlerContext & ctx)
316318
void Instance::HandleAddOrUpdateWiFiNetwork(HandlerContext & ctx, const Commands::AddOrUpdateWiFiNetwork::DecodableType & req)
317319
{
318320
MATTER_TRACE_EVENT_SCOPE("HandleAddOrUpdateWiFiNetwork", "NetworkCommissioning");
321+
MATTER_TRACE_SCOPE(::chip::Tracing::Scope::NetworkCommissioning_HandleAddOrUpdateWiFiNetwork);
319322

320323
VerifyOrReturn(CheckFailSafeArmed(ctx));
321324

@@ -374,6 +377,7 @@ void Instance::HandleAddOrUpdateWiFiNetwork(HandlerContext & ctx, const Commands
374377
void Instance::HandleAddOrUpdateThreadNetwork(HandlerContext & ctx, const Commands::AddOrUpdateThreadNetwork::DecodableType & req)
375378
{
376379
MATTER_TRACE_EVENT_SCOPE("HandleAddOrUpdateThreadNetwork", "NetworkCommissioning");
380+
MATTER_TRACE_SCOPE(::chip::Tracing::Scope::NetworkCommissioning_HandleAddOrUpdateThreadNetwork);
377381

378382
VerifyOrReturn(CheckFailSafeArmed(ctx));
379383

@@ -411,6 +415,7 @@ void Instance::CommitSavedBreadcrumb()
411415
void Instance::HandleRemoveNetwork(HandlerContext & ctx, const Commands::RemoveNetwork::DecodableType & req)
412416
{
413417
MATTER_TRACE_EVENT_SCOPE("HandleRemoveNetwork", "NetworkCommissioning");
418+
MATTER_TRACE_SCOPE(::chip::Tracing::Scope::NetworkCommissioning_HandleRemoveNetwork);
414419

415420
VerifyOrReturn(CheckFailSafeArmed(ctx));
416421

@@ -433,6 +438,7 @@ void Instance::HandleRemoveNetwork(HandlerContext & ctx, const Commands::RemoveN
433438
void Instance::HandleConnectNetwork(HandlerContext & ctx, const Commands::ConnectNetwork::DecodableType & req)
434439
{
435440
MATTER_TRACE_EVENT_SCOPE("HandleConnectNetwork", "NetworkCommissioning");
441+
MATTER_TRACE_SCOPE(::chip::Tracing::Scope::NetworkCommissioning_HandleConnectNetwork);
436442
if (req.networkID.size() > DeviceLayer::NetworkCommissioning::kMaxNetworkIDLen)
437443
{
438444
ctx.mCommandHandler.AddStatus(ctx.mRequestPath, Protocols::InteractionModel::Status::InvalidValue);
@@ -451,6 +457,7 @@ void Instance::HandleConnectNetwork(HandlerContext & ctx, const Commands::Connec
451457
void Instance::HandleReorderNetwork(HandlerContext & ctx, const Commands::ReorderNetwork::DecodableType & req)
452458
{
453459
MATTER_TRACE_EVENT_SCOPE("HandleReorderNetwork", "NetworkCommissioning");
460+
MATTER_TRACE_SCOPE(::chip::Tracing::Scope::NetworkCommissioning_HandleReorderNetwork);
454461
Commands::NetworkConfigResponse::Type response;
455462
MutableCharSpan debugText;
456463
#if CHIP_CONFIG_NETWORK_COMMISSIONING_DEBUG_TEXT_BUFFER_SIZE

src/app/clusters/operational-credentials-server/operational-credentials-server.cpp

+9
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
#include <platform/CHIPDeviceLayer.h>
5050
#include <string.h>
5151
#include <trace/trace.h>
52+
#include <tracing/scope.h>
5253

5354
using namespace chip;
5455
using namespace ::chip::Transport;
@@ -408,6 +409,7 @@ bool emberAfOperationalCredentialsClusterRemoveFabricCallback(app::CommandHandle
408409
const Commands::RemoveFabric::DecodableType & commandData)
409410
{
410411
MATTER_TRACE_EVENT_SCOPE("RemoveFabric", "OperationalCredentials");
412+
MATTER_TRACE_SCOPE(::chip::Tracing::Scope::OperationalCredentials_RemoveFabric);
411413
auto & fabricBeingRemoved = commandData.fabricIndex;
412414

413415
ChipLogProgress(Zcl, "OpCreds: Received a RemoveFabric Command for FabricIndex 0x%x",
@@ -468,6 +470,7 @@ bool emberAfOperationalCredentialsClusterUpdateFabricLabelCallback(app::CommandH
468470
const Commands::UpdateFabricLabel::DecodableType & commandData)
469471
{
470472
MATTER_TRACE_EVENT_SCOPE("UpdateFabricLabel", "OperationalCredentials");
473+
MATTER_TRACE_SCOPE(::chip::Tracing::Scope::OperationalCredentials_UpdateFabricLabel);
471474
auto & label = commandData.label;
472475
auto ourFabricIndex = commandObj->GetAccessingFabricIndex();
473476
auto finalStatus = Status::Failure;
@@ -590,6 +593,7 @@ bool emberAfOperationalCredentialsClusterAddNOCCallback(app::CommandHandler * co
590593
const Commands::AddNOC::DecodableType & commandData)
591594
{
592595
MATTER_TRACE_EVENT_SCOPE("AddNOC", "OperationalCredentials");
596+
MATTER_TRACE_SCOPE(::chip::Tracing::Scope::OperationalCredentials_AddNOC);
593597
auto & NOCValue = commandData.NOCValue;
594598
auto & ICACValue = commandData.ICACValue;
595599
auto & adminVendorId = commandData.adminVendorId;
@@ -763,6 +767,7 @@ bool emberAfOperationalCredentialsClusterUpdateNOCCallback(app::CommandHandler *
763767
const Commands::UpdateNOC::DecodableType & commandData)
764768
{
765769
MATTER_TRACE_EVENT_SCOPE("UpdateNOC", "OperationalCredentials");
770+
MATTER_TRACE_SCOPE(::chip::Tracing::Scope::OperationalCredentials_UpdateNOC);
766771
auto & NOCValue = commandData.NOCValue;
767772
auto & ICACValue = commandData.ICACValue;
768773

@@ -855,6 +860,7 @@ bool emberAfOperationalCredentialsClusterCertificateChainRequestCallback(
855860
const Commands::CertificateChainRequest::DecodableType & commandData)
856861
{
857862
MATTER_TRACE_EVENT_SCOPE("CertificateChainRequest", "OperationalCredentials");
863+
MATTER_TRACE_SCOPE(::chip::Tracing::Scope::OperationalCredentials_CertificateChainRequest);
858864
auto & certificateType = commandData.certificateType;
859865

860866
CHIP_ERROR err = CHIP_NO_ERROR;
@@ -903,6 +909,7 @@ bool emberAfOperationalCredentialsClusterAttestationRequestCallback(app::Command
903909
const Commands::AttestationRequest::DecodableType & commandData)
904910
{
905911
MATTER_TRACE_EVENT_SCOPE("AttestationRequest", "OperationalCredentials");
912+
MATTER_TRACE_SCOPE(::chip::Tracing::Scope::OperationalCredentials_AttestationRequest);
906913
auto & attestationNonce = commandData.attestationNonce;
907914

908915
auto finalStatus = Status::Failure;
@@ -999,6 +1006,7 @@ bool emberAfOperationalCredentialsClusterCSRRequestCallback(app::CommandHandler
9991006
const Commands::CSRRequest::DecodableType & commandData)
10001007
{
10011008
MATTER_TRACE_EVENT_SCOPE("CSRRequest", "OperationalCredentials");
1009+
MATTER_TRACE_SCOPE(::chip::Tracing::Scope::OperationalCredentials_CSRRequest);
10021010
ChipLogProgress(Zcl, "OpCreds: Received a CSRRequest command");
10031011

10041012
chip::Platform::ScopedMemoryBuffer<uint8_t> nocsrElements;
@@ -1134,6 +1142,7 @@ bool emberAfOperationalCredentialsClusterAddTrustedRootCertificateCallback(
11341142
const Commands::AddTrustedRootCertificate::DecodableType & commandData)
11351143
{
11361144
MATTER_TRACE_EVENT_SCOPE("AddTrustedRootCertificate", "OperationalCredentials");
1145+
MATTER_TRACE_SCOPE(::chip::Tracing::Scope::OperationalCredentials_AddTrustedRootCertificate);
11371146

11381147
auto & fabricTable = Server::GetInstance().GetFabricTable();
11391148
auto finalStatus = Status::Failure;

0 commit comments

Comments
 (0)