blob: bc6501dbf6b4be4b084b6a0ca09155a584ba0a04 [file] [log] [blame]
/*
* Copyright (c) 2023 Project CHIP Authors
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#pragma once
#include <lib/support/IntrusiveList.h>
#include <tracing/log_declares.h>
#include <tracing/scopes.h>
namespace chip {
namespace Tracing {
/// Represents a generic tracing back-end.
///
/// Derived from an intrusive list base as multiple
/// tracing back-ends may exist per application.
class Backend : public ::chip::IntrusiveListNodeBase<>
{
public:
virtual ~Backend() = default;
/// Begin a trace for the specified scope.
///
/// Scopes must be completed by a corresponding
/// TraceEnd call.
virtual void TraceBegin(Scope scope) = 0;
/// Tracing end assumes completing a previously
/// started scope with TraceBegin and nesting is assumed.
///
/// Expect scopes like:
/// TraceBegin(Foo)
/// TraceBegin(Bar)
/// TraceEnd(Bar)
/// TraceEnd(Foo)
///
/// The following is NOT acceptable:
/// TraceBegin(Foo)
/// TraceBegin(Bar)
/// TraceEnd(Foo)
/// TraceEnd(Bar)
virtual void TraceEnd(Scope scope) = 0;
/// Trace a zero-sized event
virtual void TraceInstant(Instant instant) = 0;
virtual void LogMessageSend(MessageSendInfo &) { TraceInstant(Instant::Log_MessageSend); }
virtual void LogMessageReceived(MessageReceiveInfo &) { TraceInstant(Instant::Log_MessageReceived); }
virtual void LogNodeLookup(NodeLookupInfo &) { TraceInstant(Instant::Log_NodeLookup); }
virtual void LogNodeDiscovered(NodeDiscoveredInfo &) { TraceInstant(Instant::Log_NodeDiscovered); }
virtual void LogNodeDiscoveryFailed(NodeDiscoveryFailedInfo &) { TraceInstant(Instant::Log_NodeDiscoveryFailed); }
};
} // namespace Tracing
} // namespace chip