blob: da38fe3ee4513c6a1a5354c0e51013dfae785c19 [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef TRACE_VTHREAD_INTERNAL_EVENT_VTHREAD_H_
#define TRACE_VTHREAD_INTERNAL_EVENT_VTHREAD_H_
#include <trace-engine/instrumentation.h>
#include <trace/event_args.h>
#ifndef NTRACE
#define TRACE_VTHREAD_INTERNAL_EVENT_RECORD( \
category_literal, stmt, args...) \
do { \
trace_string_ref_t __trace_vthread_category_ref; \
trace_context_t* __trace_vthread_context = \
trace_acquire_context_for_category( \
(category_literal), &__trace_vthread_category_ref); \
if (unlikely(__trace_vthread_context)) { \
TRACE_DECLARE_ARGS(__trace_vthread_context, \
__trace_vthread_args, \
args); \
stmt; \
} \
} while (0)
#else
#define TRACE_VTHREAD_INTERNAL_EVENT_RECORD( \
category_literal, stmt, args...) \
do { \
if (0) { \
trace_string_ref_t __trace_vthread_category_ref; \
trace_context_t* __trace_vthread_context = 0; \
TRACE_DECLARE_ARGS(__trace_vthread_context, \
__trace_vthread_args, \
args); \
stmt; \
} \
} while (0)
#endif // NTRACE
#define TRACE_VTHREAD_INTERNAL_DURATION_BEGIN( \
category_literal, name_literal, vthread_literal, vthread_id, timestamp, \
args...) \
do { \
TRACE_VTHREAD_INTERNAL_EVENT_RECORD( \
(category_literal), \
trace_internal_write_vthread_duration_begin_event_record_and_release_context( \
__trace_vthread_context, &__trace_vthread_category_ref, \
(name_literal), (vthread_literal), (vthread_id), (timestamp), \
__trace_vthread_args, TRACE_NUM_ARGS(__trace_vthread_args)), \
args); \
} while (0)
#define TRACE_VTHREAD_INTERNAL_DURATION_END( \
category_literal, name_literal, vthread_literal, vthread_id, timestamp, \
args...) \
do { \
TRACE_VTHREAD_INTERNAL_EVENT_RECORD( \
(category_literal), \
trace_internal_write_vthread_duration_end_event_record_and_release_context( \
__trace_vthread_context, &__trace_vthread_category_ref, \
(name_literal), (vthread_literal), (vthread_id), (timestamp), \
__trace_vthread_args, TRACE_NUM_ARGS(__trace_vthread_args)), \
args); \
} while (0)
#define TRACE_VTHREAD_INTERNAL_FLOW_BEGIN( \
category_literal, name_literal, vthread_literal, vthread_id, \
flow_id, timestamp, args...) \
do { \
TRACE_VTHREAD_INTERNAL_EVENT_RECORD( \
(category_literal), \
trace_internal_write_vthread_flow_begin_event_record_and_release_context( \
__trace_vthread_context, &__trace_vthread_category_ref, \
(name_literal), (vthread_literal), (vthread_id), (flow_id), \
(timestamp), __trace_vthread_args, \
TRACE_NUM_ARGS(__trace_vthread_args)), \
args); \
} while (0)
#define TRACE_VTHREAD_INTERNAL_FLOW_STEP( \
category_literal, name_literal, vthread_literal, vthread_id, \
flow_id, timestamp, args...) \
do { \
TRACE_VTHREAD_INTERNAL_EVENT_RECORD( \
(category_literal), \
trace_internal_write_vthread_flow_step_event_record_and_release_context( \
__trace_vthread_context, &__trace_vthread_category_ref, \
(name_literal), (vthread_literal), (vthread_id), (flow_id), \
(timestamp), __trace_vthread_args, \
TRACE_NUM_ARGS(__trace_vthread_args)), \
args); \
} while (0)
#define TRACE_VTHREAD_INTERNAL_FLOW_END( \
category_literal, name_literal, vthread_literal, vthread_id, \
flow_id, timestamp, args...) \
do { \
TRACE_VTHREAD_INTERNAL_EVENT_RECORD( \
(category_literal), \
trace_internal_write_vthread_flow_end_event_record_and_release_context( \
__trace_vthread_context, &__trace_vthread_category_ref, \
(name_literal), (vthread_literal), (vthread_id), (flow_id), \
(timestamp), __trace_vthread_args, \
TRACE_NUM_ARGS(__trace_vthread_args)), \
args); \
} while (0)
void trace_internal_write_vthread_duration_begin_event_record_and_release_context(
trace_context_t* context,
const trace_string_ref_t* category_ref,
const char* name_literal,
const char* vthread_literal,
trace_vthread_id_t vthread_id,
trace_ticks_t timestamp,
trace_arg_t* args, size_t num_args);
void trace_internal_write_vthread_duration_end_event_record_and_release_context(
trace_context_t* context,
const trace_string_ref_t* category_ref,
const char* name_literal,
const char* vthread_literal,
trace_vthread_id_t vthread_id,
trace_ticks_t timestamp,
trace_arg_t* args, size_t num_args);
void trace_internal_write_vthread_flow_begin_event_record_and_release_context(
trace_context_t* context,
const trace_string_ref_t* category_ref,
const char* name_literal,
const char* vthread_literal,
trace_vthread_id_t vthread_id,
trace_flow_id_t flow_id,
trace_ticks_t timestamp,
trace_arg_t* args, size_t num_args);
void trace_internal_write_vthread_flow_step_event_record_and_release_context(
trace_context_t* context,
const trace_string_ref_t* category_ref,
const char* name_literal,
const char* vthread_literal,
trace_vthread_id_t vthread_id,
trace_flow_id_t flow_id,
trace_ticks_t timestamp,
trace_arg_t* args, size_t num_args);
void trace_internal_write_vthread_flow_end_event_record_and_release_context(
trace_context_t* context,
const trace_string_ref_t* category_ref,
const char* name_literal,
const char* vthread_literal,
trace_vthread_id_t vthread_id,
trace_flow_id_t flow_id,
trace_ticks_t timestamp,
trace_arg_t* args, size_t num_args);
#endif // TRACE_VTHREAD_INTERNAL_EVENT_VTHREAD_H_