blob: 77d6dd37d9fe7013e40065932a0d72efbd43faee [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 <lib/trace-engine/instrumentation.h>
#include <lib/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)
#define TRACE_VTHREAD_INTERNAL_COUNTER(category_literal, name_literal, vthread_literal, \
vthread_id, counter_id, timestamp, args...) \
do { \
TRACE_VTHREAD_INTERNAL_EVENT_RECORD( \
(category_literal), \
trace_internal_write_vthread_counter_event_record_and_release_context( \
_trace_vthread_context, &_trace_vthread_category_ref, (name_literal), \
(vthread_literal), (vthread_id), (counter_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);
void trace_internal_write_vthread_counter_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, uint64_t counter_id,
trace_ticks_t timestamp, trace_arg_t* args, size_t num_args);
#endif // TRACE_VTHREAD_INTERNAL_EVENT_VTHREAD_H_