blob: 67a36462cedc568cf066da8a21eabdfbbeed412c [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_