// Copyright 2020 The Pigweed Authors
//
// 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
//
//     https://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.
//==============================================================================
// This file contains the backend hooks and implementation details for trace.

#pragma once

#include "pw_preprocessor/arguments.h"
#include "pw_preprocessor/concat.h"
#include "pw_trace_backend/trace_backend.h"

// Default: Flag value if none set
#ifndef PW_TRACE_FLAGS_DEFAULT
#define PW_TRACE_FLAGS_DEFAULT 0
#endif  // PW_TRACE_FLAGS_DEFAULT

// Default: PW_TRACE_TRACE_ID_DEFAULT
#ifndef PW_TRACE_TRACE_ID_DEFAULT
#define PW_TRACE_TRACE_ID_DEFAULT 0
#endif  // PW_TRACE_TRACE_ID_DEFAULT

// Default: PW_TRACE_GROUP_LABEL_DEFAULT
#ifndef PW_TRACE_GROUP_LABEL_DEFAULT
#define PW_TRACE_GROUP_LABEL_DEFAULT ""
#endif  // PW_TRACE_GROUP_LABEL_DEFAULT

// These macros can be used to determine if a trace type contrains span or group
// label
#ifndef PW_TRACE_HAS_TRACE_ID
#define PW_TRACE_HAS_TRACE_ID(TRACE_TYPE)         \
  ((TRACE_TYPE) == PW_TRACE_TYPE_ASYNC_START ||   \
   (TRACE_TYPE) == PW_TRACE_TYPE_ASYNC_INSTANT || \
   (TRACE_TYPE) == PW_TRACE_TYPE_ASYNC_END)
#endif  // PW_TRACE_HAS_TRACE_ID
#ifndef PW_TRACE_HAS_GROUP_LABEL
#define PW_TRACE_HAS_GROUP_LABEL(TRACE_TYPE) (false)
#endif  // PW_TRACE_HAS_GROUP_LABEL

// Default: behaviour for unimplemented trace event types
#ifndef _PW_TRACE_DISABLED
#define _PW_TRACE_DISABLED(...) \
  do {                          \
  } while (0)
#endif  // _PW_TRACE_DISABLED

// Default: label used for PW_TRACE_FUNCTION trace events
#ifndef PW_TRACE_FUNCTION_LABEL
#define PW_TRACE_FUNCTION_LABEL __PRETTY_FUNCTION__
#endif

// Control to enable/disable tracing.  If 0, no traces are emitted.
//
// Defaults to enabled.
#ifndef PW_TRACE_ENABLE
#define PW_TRACE_ENABLE 1
#endif  // PW_TRACE_ENABLE

#define _PW_TRACE_IF_ENABLED(event_type, flags, label, group_label, trace_id) \
  do {                                                                        \
    if ((PW_TRACE_ENABLE) != 0) {                                             \
      PW_TRACE(event_type, flags, label, group_label, trace_id);              \
    }                                                                         \
  } while (0)

#define _PW_TRACE_DATA_IF_ENABLED(event_type,         \
                                  flags,              \
                                  label,              \
                                  group_label,        \
                                  trace_id,           \
                                  data_format_string, \
                                  data,               \
                                  size)               \
  do {                                                \
    if ((PW_TRACE_ENABLE) != 0) {                     \
      PW_TRACE_DATA(event_type,                       \
                    flags,                            \
                    label,                            \
                    group_label,                      \
                    trace_id,                         \
                    data_format_string,               \
                    data,                             \
                    size);                            \
    }                                                 \
  } while (0)

// This block handles:
//      - PW_TRACE_INSTANT(label)
//      - PW_TRACE_INSTANT_FLAG(flag, label)
// Which creates a trace event with the type: PW_TRACE_TYPE_INSTANT
// NOTE: If this type is not defined by the backend this trace is removed.
#ifdef PW_TRACE_TYPE_INSTANT
#define _PW_TRACE_INSTANT_ARGS2(flag, label)         \
  _PW_TRACE_IF_ENABLED(PW_TRACE_TYPE_INSTANT,        \
                       flag,                         \
                       label,                        \
                       PW_TRACE_GROUP_LABEL_DEFAULT, \
                       PW_TRACE_TRACE_ID_DEFAULT)
#else  // PW_TRACE_TYPE_INSTANT
#define _PW_TRACE_INSTANT_ARGS2(...) _PW_TRACE_DISABLED(__VA_ARGS__)
#endif  // PW_TRACE_TYPE_INSTANT

// This block handles:
//      - PW_TRACE_INSTANT(label, group)
//      - PW_TRACE_INSTANT_FLAG(flag, label, group)
// Which creates a trace event with the type: PW_TRACE_TYPE_INSTANT_GROUP
// NOTE: If this type is not defined by the backend this trace is removed.
#ifdef PW_TRACE_TYPE_INSTANT_GROUP
#define _PW_TRACE_INSTANT_ARGS3(flag, label, group) \
  _PW_TRACE_IF_ENABLED(PW_TRACE_TYPE_INSTANT_GROUP, \
                       flag,                        \
                       label,                       \
                       group,                       \
                       PW_TRACE_TRACE_ID_DEFAULT)
#else  // PW_TRACE_TYPE_INSTANT_GROUP
#define _PW_TRACE_INSTANT_ARGS3(...) _PW_TRACE_DISABLED(__VA_ARGS__)
#endif  // PW_TRACE_TYPE_INSTANT_GROUP

// This block handles:
//      - PW_TRACE_INSTANT(label, group, trace_id)
//      - PW_TRACE_INSTANT_FLAG(flag, label, group, trace_id)
// Which creates a trace event with the type: PW_TRACE_TYPE_ASYNC_INSTANT
// NOTE: If this type is not defined by the backend this trace is removed.
#ifdef PW_TRACE_TYPE_ASYNC_INSTANT
#define _PW_TRACE_INSTANT_ARGS4(flag, label, group, trace_id) \
  _PW_TRACE_IF_ENABLED(                                       \
      PW_TRACE_TYPE_ASYNC_INSTANT, flag, label, group, trace_id)
#else  // PW_TRACE_TYPE_ASYNC_INSTANT
#define _PW_TRACE_INSTANT_ARGS4(...) _PW_TRACE_DISABLED(__VA_ARGS__)
#endif  // PW_TRACE_TYPE_ASYNC_INSTANT

// This block handles:
//      - PW_TRACE_START(label)
//      - PW_TRACE_START_FLAG(flag, label)
// Which creates a trace event with the type: PW_TRACE_TYPE_DURATION_START
// NOTE: If this type is not defined by the backend this trace is removed.
#ifdef PW_TRACE_TYPE_DURATION_START
#define _PW_TRACE_START_ARGS2(flag, label)           \
  _PW_TRACE_IF_ENABLED(PW_TRACE_TYPE_DURATION_START, \
                       flag,                         \
                       label,                        \
                       PW_TRACE_GROUP_LABEL_DEFAULT, \
                       PW_TRACE_TRACE_ID_DEFAULT)
#else  // PW_TRACE_TYPE_DURATION_START
#define _PW_TRACE_START_ARGS2(...) _PW_TRACE_DISABLED(__VA_ARGS__)
#endif  // PW_TRACE_TYPE_DURATION_START

// This block handles:
//      - PW_TRACE_START(label, group)
//      - PW_TRACE_START_FLAG(flag, label, group)
// Which creates a trace event with the type: PW_TRACE_TYPE_DURATION_GROUP_START
// NOTE: If this type is not defined by the backend this trace is removed.
#ifdef PW_TRACE_TYPE_DURATION_GROUP_START  // Disabled if backend doesn't define
                                           // this
#define _PW_TRACE_START_ARGS3(flag, label, group)          \
  _PW_TRACE_IF_ENABLED(PW_TRACE_TYPE_DURATION_GROUP_START, \
                       flag,                               \
                       label,                              \
                       group,                              \
                       PW_TRACE_TRACE_ID_DEFAULT)
#else  // PW_TRACE_TYPE_DURATION_GROUP_START
#define _PW_TRACE_START_ARGS3(...) _PW_TRACE_DISABLED(__VA_ARGS__)
#endif  // PW_TRACE_TYPE_DURATION_GROUP_START

// This block handles:
//      - PW_TRACE_START(label, group, trace_id)
//      - PW_TRACE_START_FLAG(flag, label, group, trace_id)
// Which creates a trace event with the type: PW_TRACE_TYPE_ASYNC_START
// NOTE: If this type is not defined by the backend this trace is removed.
#ifdef PW_TRACE_TYPE_ASYNC_START
#define _PW_TRACE_START_ARGS4(flag, label, group, trace_id) \
  _PW_TRACE_IF_ENABLED(PW_TRACE_TYPE_ASYNC_START, flag, label, group, trace_id)
#else  // PW_TRACE_TYPE_ASYNC_START
#define _PW_TRACE_START_ARGS4(...) _PW_TRACE_DISABLED(__VA_ARGS__)
#endif  // PW_TRACE_TYPE_ASYNC_START

// This block handles:
//      - PW_TRACE_END(labe)
//      - PW_TRACE_END_FLAG(flag, label)
// Which creates a trace event with the type: PW_TRACE_TYPE_DURATION_END
// NOTE: If this type is not defined by the backend this trace is removed.
#ifdef PW_TRACE_TYPE_DURATION_END
#define _PW_TRACE_END_ARGS2(flag, label)             \
  _PW_TRACE_IF_ENABLED(PW_TRACE_TYPE_DURATION_END,   \
                       flag,                         \
                       label,                        \
                       PW_TRACE_GROUP_LABEL_DEFAULT, \
                       PW_TRACE_TRACE_ID_DEFAULT)
#else  // PW_TRACE_TYPE_DURATION_END
#define _PW_TRACE_END_ARGS2(...) _PW_TRACE_DISABLED(__VA_ARGS__)
#endif  // PW_TRACE_TYPE_DURATION_END

// This block handles:
//      - PW_TRACE_END(label, group)
//      - PW_TRACE_END_FLAG(flag, label, group)
// Which creates a trace event with the type: PW_TRACE_TYPE_DURATION_GROUP_END
// NOTE: If this type is not defined by the backend this trace is removed.
#ifdef PW_TRACE_TYPE_DURATION_GROUP_END
#define _PW_TRACE_END_ARGS3(flag, label, group)          \
  _PW_TRACE_IF_ENABLED(PW_TRACE_TYPE_DURATION_GROUP_END, \
                       flag,                             \
                       label,                            \
                       group,                            \
                       PW_TRACE_TRACE_ID_DEFAULT)
#else  // PW_TRACE_TYPE_DURATION_GROUP_END
#define _PW_TRACE_END_ARGS3(...) _PW_TRACE_DISABLED(__VA_ARGS__)
#endif  // PW_TRACE_TYPE_DURATION_GROUP_END

// This block handles:
//      - PW_TRACE_END(label, group, trace_id)
//      - PW_TRACE_END_FLAG(flag, label, group, trace_id)
// Which creates a trace event with the type: PW_TRACE_TYPE_ASYNC_END
// NOTE: If this type is not defined by the backend this trace is removed.
#ifdef PW_TRACE_TYPE_ASYNC_END
#define _PW_TRACE_END_ARGS4(flag, label, group, trace_id) \
  _PW_TRACE_IF_ENABLED(PW_TRACE_TYPE_ASYNC_END, flag, label, group, trace_id)
#else  // PW_TRACE_TYPE_ASYNC_END
#define _PW_TRACE_END_ARGS4(...) _PW_TRACE_DISABLED(__VA_ARGS__)
#endif  // PW_TRACE_TYPE_ASYNC_END

// The pigweed scope objects gets defined inline with the trace event. The
// constructor handles the start trace event, and the destructor does the end.
#ifndef _PW_TRACE_SCOPE_OBJECT
#define _PW_TRACE_SCOPE_OBJECT(                                              \
    object_name, flag, event_type_start, event_type_end, label, group)       \
  class object_name {                                                        \
   public:                                                                   \
    object_name(uint32_t trace_id = PW_TRACE_TRACE_ID_DEFAULT)               \
        : trace_id_(trace_id) {                                              \
      _PW_TRACE_IF_ENABLED(event_type_start, flag, label, group, trace_id_); \
    }                                                                        \
    ~object_name() {                                                         \
      _PW_TRACE_IF_ENABLED(event_type_end, flag, label, group, trace_id_);   \
    }                                                                        \
                                                                             \
   private:                                                                  \
    const uint32_t trace_id_;                                                \
  }
#endif  // _PW_TRACE_SCOPE_OBJECT

// This block handles:
//      - PW_TRACE_SCOPE(label)
//      - PW_TRACE_SCOPE_FLAG(flag, label)
//      - PW_TRACE_FUNCTION()
//      - PW_TRACE_FUNCTION_FLAG(flag)
// These each generate two trace events:
//      - PW_TRACE_TYPE_DURATION_START: Where trace event appears in code.
//      - PW_TRACE_TYPE_DURATION_END: When current scope is lost.
// NOTE; If these types are not defined by the backend these traces are removed.
#if defined(PW_TRACE_TYPE_DURATION_START) && defined(PW_TRACE_TYPE_DURATION_END)
#define _PW_TRACE_SCOPE_ARGS2(flag, label)                            \
  _PW_TRACE_SCOPE_OBJECT(PW_CONCAT(_PwTraceScopeObject, __COUNTER__), \
                         flag,                                        \
                         PW_TRACE_TYPE_DURATION_START,                \
                         PW_TRACE_TYPE_DURATION_END,                  \
                         label,                                       \
                         PW_TRACE_GROUP_LABEL_DEFAULT)                \
  PW_CONCAT(_pw_trace_scope_object, __COUNTER__);
#define _PW_TRACE_FUNCTION_ARGS0() \
  _PW_TRACE_SCOPE_ARGS2(PW_TRACE_FLAGS, PW_TRACE_FUNCTION_LABEL)
#define _PW_TRACE_FUNCTION_FLAGS_ARGS1(flag) \
  _PW_TRACE_SCOPE_ARGS2(flag, PW_TRACE_FUNCTION_LABEL)
#endif  // defined(PW_TRACE_TYPE_DURATION_START) &&
        // defined(PW_TRACE_TYPE_DURATION_END)

// This block handles:
//      - PW_TRACE_SCOPE(label, group)
//      - PW_TRACE_SCOPE_FLAG(flag, label, group)
//      - PW_TRACE_FUNCTION(group)
//      - PW_TRACE_FUNCTION_FLAG(flag, group)
// These each generate two trace events:
//      - PW_TRACE_TYPE_DURATION_GROUP_START: Where trace event appears in code.
//      - PW_TRACE_TYPE_DURATION_GROUP_END: When current scope is lost.
// NOTE; If these types are not defined by the backend these traces are removed.
#if defined(PW_TRACE_TYPE_DURATION_GROUP_START) && \
    defined(PW_TRACE_TYPE_DURATION_GROUP_END)
#define _PW_TRACE_SCOPE_ARGS3(flag, label, group)                     \
  _PW_TRACE_SCOPE_OBJECT(PW_CONCAT(_PwTraceScopeObject, __COUNTER__), \
                         flag,                                        \
                         PW_TRACE_TYPE_DURATION_GROUP_START,          \
                         PW_TRACE_TYPE_DURATION_GROUP_END,            \
                         label,                                       \
                         group)                                       \
  PW_CONCAT(_pw_trace_scope_object, __COUNTER__);
#define _PW_TRACE_FUNCTION_ARGS1(group) \
  _PW_TRACE_SCOPE_ARGS3(PW_TRACE_FLAGS, PW_TRACE_FUNCTION_LABEL, group)
#define _PW_TRACE_FUNCTION_FLAGS_ARGS2(flag, group) \
  _PW_TRACE_SCOPE_ARGS3(flag, PW_TRACE_FUNCTION_LABEL, group)
#endif  // defined(PW_TRACE_TYPE_DURATION_GROUP_START) &&
        // defined(PW_TRACE_TYPE_DURATION_GROUP_END)

// This block handles:
//      - PW_TRACE_SCOPE(label, group, trace_id)
//      - PW_TRACE_SCOPE_FLAG(flag, label, group, trace_id)
//      - PW_TRACE_FUNCTION(group, trace_id)
//      - PW_TRACE_FUNCTION_FLAG(flag, group, trace_id)
// These each generate two trace events:
//      - PW_TRACE_TYPE_ASYNC_START: Where trace event appears in code.
//      - PW_TRACE_TYPE_ASYNC_END: When current scope is lost.
// NOTE: If these types are not defined by the backend these traces are removed.
#if defined(PW_TRACE_TYPE_ASYNC_START) && defined(PW_TRACE_TYPE_ASYNC_END)
#define _PW_TRACE_SCOPE_ARGS4(flag, label, group, trace_id)           \
  _PW_TRACE_SCOPE_OBJECT(PW_CONCAT(_PwTraceScopeObject, __COUNTER__), \
                         flag,                                        \
                         PW_TRACE_TYPE_ASYNC_START,                   \
                         PW_TRACE_TYPE_ASYNC_END,                     \
                         label,                                       \
                         group)                                       \
  PW_CONCAT(_pw_trace_scope_object, __COUNTER__)(trace_id);
#define _PW_TRACE_FUNCTION_ARGS2(group, trace_id) \
  _PW_TRACE_SCOPE_ARGS4(                          \
      PW_TRACE_FLAGS, PW_TRACE_FUNCTION_LABEL, group, trace_id)
#define _PW_TRACE_FUNCTION_FLAGS_ARGS3(flag, group, trace_id) \
  _PW_TRACE_SCOPE_ARGS4(flag, PW_TRACE_FUNCTION_LABEL, group, trace_id)
#endif  // defined(PW_TRACE_TYPE_ASYNC_START) &&
        // defined(PW_TRACE_TYPE_ASYNC_END)

// This block handles:
//      - PW_TRACE_INSTANT_DATA(label,
//                              data_format_string,
//                              data,
//                              size)
//      - PW_TRACE_INSTANT_DATA_FLAG(flag,
//                                   label,
//                                   data_format_string,
//                                   data,
//                                   size)
// Which creates a trace event with the type: PW_TRACE_TYPE_INSTANT
// NOTE: If this type or PW_TRACE_DATA is not defined by the backend this trace
// is removed.
#if defined(PW_TRACE_DATA) && defined(PW_TRACE_TYPE_INSTANT)
#define _PW_TRACE_INSTANT_DATA_ARGS5(                     \
    flag, label, data_format_string, data, size)          \
  _PW_TRACE_DATA_IF_ENABLED(PW_TRACE_TYPE_INSTANT,        \
                            flag,                         \
                            label,                        \
                            PW_TRACE_GROUP_LABEL_DEFAULT, \
                            PW_TRACE_TRACE_ID_DEFAULT,    \
                            data_format_string,           \
                            data,                         \
                            size)
#else  // defined(PW_TRACE_DATA) && defined(PW_TRACE_TYPE_INSTANT)
#define _PW_TRACE_INSTANT_DATA_ARGS5(...) _PW_TRACE_DISABLED(__VA_ARGS__)
#endif  // defined(PW_TRACE_DATA) && defined(PW_TRACE_TYPE_INSTANT)

// This block handles:
//      - PW_TRACE_INSTANT_DATA(label,
//                              group,
//                              data_format_string,
//                              data,
//                              size)
//      - PW_TRACE_INSTANT_DATA_FLAG(flag,
//                                   label,
//                                   group,
//                                   data_format_string,
//                                   data,
//                                   size)
// Which creates a trace event with the type: PW_TRACE_TYPE_INSTANT_GROUP
// NOTE: If this type or PW_TRACE_DATA is not defined by the backend this trace
// is removed.
#if defined(PW_TRACE_DATA) && defined(PW_TRACE_TYPE_INSTANT_GROUP)
#define _PW_TRACE_INSTANT_DATA_ARGS6(                    \
    flag, label, group, data_format_string, data, size)  \
  _PW_TRACE_DATA_IF_ENABLED(PW_TRACE_TYPE_INSTANT_GROUP, \
                            flag,                        \
                            label,                       \
                            group,                       \
                            PW_TRACE_TRACE_ID_DEFAULT,   \
                            data_format_string,          \
                            data,                        \
                            size)
#else  // defined(PW_TRACE_DATA) && defined(PW_TRACE_TYPE_INSTANT_GROUP)
#define _PW_TRACE_INSTANT_DATA_ARGS6(...) _PW_TRACE_DISABLED(__VA_ARGS__)
#endif  // defined(PW_TRACE_DATA) && defined(PW_TRACE_TYPE_INSTANT_GROUP)

// This block handles:
//      - PW_TRACE_INSTANT_DATA(label,
//                              group,
//                              trace_id
//                              data_format_string,
//                              data,
//                              size)
//      - PW_TRACE_INSTANT_DATA_FLAG(flag,
//                                   label,
//                                   group,
//                                   trace_id
//                                   data_format_string,
//                                   data,
//                                   size)
// Which creates a trace event with the type: PW_TRACE_TYPE_ASYNC_INSTANT
// NOTE: If this type or PW_TRACE_DATA is not defined by the backend this trace
// is removed.
#if defined(PW_TRACE_DATA) && defined(PW_TRACE_TYPE_ASYNC_INSTANT)
#define _PW_TRACE_INSTANT_DATA_ARGS7(                             \
    flag, label, group, trace_id, data_format_string, data, size) \
  _PW_TRACE_DATA_IF_ENABLED(PW_TRACE_TYPE_ASYNC_INSTANT,          \
                            flag,                                 \
                            label,                                \
                            group,                                \
                            trace_id,                             \
                            data_format_string,                   \
                            data,                                 \
                            size)
#else  // defined(PW_TRACE_DATA) && defined(PW_TRACE_TYPE_ASYNC_INSTANT)
#define _PW_TRACE_INSTANT_DATA_ARGS7(...) _PW_TRACE_DISABLED(__VA_ARGS__)
#endif  // defined(PW_TRACE_DATA) && defined(PW_TRACE_TYPE_ASYNC_INSTANT)

// This block handles:
//      - PW_TRACE_START_DATA(label,
//                            data_format_string,
//                            data,
//                            size)
//      - PW_TRACE_START_DATA_FLAG(flag,
//                                 label,
//                                 data_format_string,
//                                 data,
//                                 size)
// Which creates a trace event with the type: PW_TRACE_TYPE_DURATION_START
// NOTE: If this type or PW_TRACE_DATA is not defined by the backend this trace
// is removed.
#if defined(PW_TRACE_DATA) && defined(PW_TRACE_TYPE_DURATION_START)
#define _PW_TRACE_START_DATA_ARGS5(                       \
    flag, label, data_format_string, data, size)          \
  _PW_TRACE_DATA_IF_ENABLED(PW_TRACE_TYPE_DURATION_START, \
                            flag,                         \
                            label,                        \
                            PW_TRACE_GROUP_LABEL_DEFAULT, \
                            PW_TRACE_TRACE_ID_DEFAULT,    \
                            data_format_string,           \
                            data,                         \
                            size)
#else  // defined(PW_TRACE_DATA) && defined(PW_TRACE_TYPE_DURATION_START)
#define _PW_TRACE_START_DATA_ARGS5(...) _PW_TRACE_DISABLED(__VA_ARGS__)
#endif  // defined(PW_TRACE_DATA) && defined(PW_TRACE_TYPE_DURATION_START)

// This block handles:
//      - PW_TRACE_START_DATA(label,
//                            group,
//                            data_format_string,
//                            data,
//                            size)
//      - PW_TRACE_START_DATA_FLAG(flag,
//                                 label,
//                                 group,
//                                 data_format_string,
//                                 data,
//                                 size)
// Which creates a trace event with the type: PW_TRACE_TYPE_DURATION_GROUP_START
// NOTE: If this type or PW_TRACE_DATA is not defined by the backend this trace
// is removed.
#if defined(PW_TRACE_DATA) && defined(PW_TRACE_TYPE_DURATION_GROUP_START)
#define _PW_TRACE_START_DATA_ARGS6(                             \
    flag, label, group, data_format_string, data, size)         \
  _PW_TRACE_DATA_IF_ENABLED(PW_TRACE_TYPE_DURATION_GROUP_START, \
                            flag,                               \
                            label,                              \
                            group,                              \
                            PW_TRACE_TRACE_ID_DEFAULT,          \
                            data_format_string,                 \
                            data,                               \
                            size)
#else  // defined(PW_TRACE_DATA) && defined(PW_TRACE_TYPE_DURATION_START)
#define _PW_TRACE_START_DATA_ARGS6(...) _PW_TRACE_DISABLED(__VA_ARGS__)
#endif  // defined(PW_TRACE_DATA) && defined(PW_TRACE_TYPE_DURATION_START)

// This block handles:
//      - PW_TRACE_START_DATA(label,
//                            group,
//                            trace_id
//                            data_format_string,
//                            data,
//                            size)
//      - PW_TRACE_START_DATA_FLAG(flag,
//                                 label,
//                                 group,
//                                 trace_id
//                                 data_format_string,
//                                 data,
//                                 size)
// Which creates a trace event with the type: PW_TRACE_TYPE_ASYNC_START
// NOTE: If this type or PW_TRACE_DATA is not defined by the backend this trace
// is removed.
#if defined(PW_TRACE_DATA) && defined(PW_TRACE_TYPE_ASYNC_START)
#define _PW_TRACE_START_DATA_ARGS7(                               \
    flag, label, group, trace_id, data_format_string, data, size) \
  _PW_TRACE_DATA_IF_ENABLED(PW_TRACE_TYPE_ASYNC_START,            \
                            flag,                                 \
                            label,                                \
                            group,                                \
                            trace_id,                             \
                            data_format_string,                   \
                            data,                                 \
                            size)
#else  // defined(PW_TRACE_DATA) && defined(PW_TRACE_TYPE_ASYNC_START)
#define _PW_TRACE_START_DATA_ARGS7(...) _PW_TRACE_DISABLED(__VA_ARGS__)
#endif  // defined(PW_TRACE_DATA) && defined(PW_TRACE_TYPE_ASYNC_START)

// This block handles:
//      - PW_TRACE_END_DATA(label,
//                          data_format_string,
//                          data,
//                          size)
//      - PW_TRACE_END_DATA_FLAG(flag,
//                               label,
//                               data_format_string,
//                               data,
//                               size)
// Which creates a trace event with the type: PW_TRACE_TYPE_DURATION_END
// NOTE: If this type or PW_TRACE_DATA is not defined by the backend this trace
// is removed.
#if defined(PW_TRACE_DATA) && defined(PW_TRACE_TYPE_DURATION_END)
#define _PW_TRACE_END_DATA_ARGS5(flag, label, data_format_string, data, size) \
  _PW_TRACE_DATA_IF_ENABLED(PW_TRACE_TYPE_DURATION_END,                       \
                            flag,                                             \
                            label,                                            \
                            PW_TRACE_GROUP_LABEL_DEFAULT,                     \
                            PW_TRACE_TRACE_ID_DEFAULT,                        \
                            data_format_string,                               \
                            data,                                             \
                            size)
#else  // defined(PW_TRACE_DATA) && defined(PW_TRACE_TYPE_DURATION_START)
#define _PW_TRACE_END_DATA_ARGS5(...) _PW_TRACE_DISABLED(__VA_ARGS__)
#endif  // defined(PW_TRACE_DATA) && defined(PW_TRACE_TYPE_DURATION_START)

// This block handles:
//      - PW_TRACE_END_DATA(label,
//                          group,
//                          data_format_string,
//                          data,
//                          size)
//      - PW_TRACE_END_DATA_FLAG(flag,
//                               label,
//                               group,
//                               data_format_string,
//                               data,
//                               size)
// Which creates a trace event with the type: PW_TRACE_TYPE_DURATION_GROUP_END
// NOTE: If this type or PW_TRACE_DATA is not defined by the backend this trace
// is removed.
#if defined(PW_TRACE_DATA) && defined(PW_TRACE_TYPE_DURATION_GROUP_END)
#define _PW_TRACE_END_DATA_ARGS6(                             \
    flag, label, group, data_format_string, data, size)       \
  _PW_TRACE_DATA_IF_ENABLED(PW_TRACE_TYPE_DURATION_GROUP_END, \
                            flag,                             \
                            label,                            \
                            group,                            \
                            PW_TRACE_TRACE_ID_DEFAULT,        \
                            data_format_string,               \
                            data,                             \
                            size)
#else  // defined(PW_TRACE_DATA) && defined(PW_TRACE_TYPE_DURATION_GROUP_END)
#define _PW_TRACE_END_DATA_ARGS6(...) _PW_TRACE_DISABLED(__VA_ARGS__)
#endif  // defined(PW_TRACE_DATA) && defined(PW_TRACE_TYPE_DURATION_GROUP_END)

// This block handles:
//      - PW_TRACE_END_DATA(label,
//                          group,
//                          trace_id
//                          data_format_string,
//                          data,
//                          size)
//      - PW_TRACE_END_DATA_FLAG(flag,
//                               label,
//                               group,
//                               trace_id
//                               data_format_string,
//                               data,
//                               size)
// Which creates a trace event with the type: PW_TRACE_TYPE_ASYNC_END
// NOTE: If this type or PW_TRACE_DATA is not defined by the backend this trace
// is removed.
#if defined(PW_TRACE_DATA) && defined(PW_TRACE_TYPE_ASYNC_END)
#define _PW_TRACE_END_DATA_ARGS7(                                 \
    flag, label, group, trace_id, data_format_string, data, size) \
  _PW_TRACE_DATA_IF_ENABLED(PW_TRACE_TYPE_ASYNC_END,              \
                            flag,                                 \
                            label,                                \
                            group,                                \
                            trace_id,                             \
                            data_format_string,                   \
                            data,                                 \
                            size)
#else  // defined(PW_TRACE_DATA) && defined(PW_TRACE_TYPE_ASYNC_END)
#define _PW_TRACE_END_DATA_ARGS7(...) _PW_TRACE_DISABLED(__VA_ARGS__)
#endif  // defined(PW_TRACE_DATA) && defined(PW_TRACE_TYPE_ASYNC_END)
