| // 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_ |