itrace
Instrumented Trace
itrace.h
Go to the documentation of this file.
1 
11 #ifndef ITRACE_H
12 #define ITRACE_H
13 #include "itrace_types.h"
14 #include "itrace_utils.h"
15 #ifndef DISABLE_ITRACE
16 
17 #ifdef __cplusplus
18 extern "C" {
19 #endif
20 
21 
46 itrace_return_t itrace_open_logger(int domain, itrace_logger_handle_t* logger_handle_ptr);
47 
60 itrace_return_t itrace_remote_open(itrace_logger_handle_t* logger_handle_ptr, int is_blocking_call);
61 
68 
69 
77 
94 itrace_return_t itrace_set_root_filename(itrace_logger_handle_t logger_handle, const char* root_filename);
95 
105 itrace_return_t itrace_get_root_filename(itrace_logger_handle_t logger_handle, char* root_filename);
106 
118 
129 
139 itrace_return_t itrace_set_target_files(itrace_logger_handle_t logger_handle, uint32_t file_types);
140 
141 
171 itrace_return_t itrace_open_profiler(itrace_logger_handle_t logger_handle, uint32_t domain, size_t log_size, itrace_profiler_handle_t* profiler_handle_ptr);
172 
180 
192 
203 itrace_return_t itrace_add_event_by_id(itrace_profiler_handle_t profiler_handle, uint32_t event_id);
204 
213 itrace_return_t itrace_add_events(itrace_profiler_handle_t profiler_handle, itrace_event_t* events, int num_events);
214 
233 itrace_return_t itrace_add_events_from_file(itrace_profiler_handle_t profiler_handle, const char* events_filename);
234 
242 
250 
251 #ifndef DISABLE_ITRACE_EVENTS
252 
279 itrace_return_t itrace_register_events(itrace_profiler_handle_t profiler_handle, itrace_event_t* attempted_to_register_events, int* num_attempted_to_register_events);
280 
288 
289 #endif // DISABLE_ITRACE_EVENTS
290 
300 itrace_return_t itrace_get_num_events_left_to_register(itrace_profiler_handle_t profiler_handle, int* num_events_left_to_register);
301 
310 itrace_return_t itrace_get_registered_events(itrace_profiler_handle_t profiler_handle, itrace_event_t* registered_events, int* num_registered_events);
311 
325 
337 
351 
358 
359 #ifndef DISABLE_ITRACE_EVENTS
360 
379 itrace_return_t itrace_start_section(itrace_profiler_handle_t profiler_handle, const char* section_name, itrace_measured_events_t* measured_events);
380 
392 
409 
410 #else // DISABLE_ITRACE_EVENTS
411 
412 static inline itrace_return_t itrace_start_section(itrace_profiler_handle_t profiler_handle, const char* section_name, itrace_measured_events_t* measured_events) {
413  // Use char address as a simple way of generating a (likely) unique section_id
414  // Mask with 0xff to make fingerprints shorter and thus more readable
416  return ITRACE_RET_SUCCESS;
417 }
418 
420  itrace_start_section_no_events(section_id);
421  return ITRACE_RET_SUCCESS;
422 }
423 
424 static inline itrace_return_t itrace_end_section(itrace_profiler_handle_t profiler_handle, itrace_measured_events_t* measured_events) {
426  return ITRACE_RET_SUCCESS;
427 }
428 
429 #endif // DISABLE_ITRACE_EVENTS
430 
442 
443 #ifndef DISABLE_ITRACE_MARKERS
444 
453 itrace_return_t itrace_add_marker(itrace_profiler_handle_t profiler_handle, const char* marker_name);
454 #endif // DISABLE_ITRACE_MARKERS
455 
464 itrace_return_t itrace_start_periodic_events_reader(itrace_profiler_handle_t profiler_handle, uint32_t events_reader_period_us, uint32_t thread_priority);
465 
473 
487 itrace_return_t itrace_start_periodic_logs_flusher(itrace_logger_handle_t logger_handle, uint32_t flushing_period_us);
488 
500 
549 itrace_return_t itrace_setup_from_file(itrace_logger_handle_t* logger_handle_ptr, const char* setup_filename);
550 
558 
575 
589 
599 itrace_return_t itrace_get_dsp_version(itrace_profiler_handle_t profiler_handle, char* dsp_version);
600 
608 itrace_return_t itrace_get_domain(itrace_profiler_handle_t profiler_handle, uint32_t* domain_id);
609 
620 itrace_return_t itrace_get_itrace_version(itrace_profiler_handle_t profiler_handle, uint32_t* version);
621 
635 itrace_return_t itrace_configure_pmu_policy(itrace_profiler_handle_t profiler_handle, uint32_t min_num_pmu_events_to_register, uint32_t max_num_pmu_events_to_register, uint32_t pmu_registration_timeout_us);
636 
651 itrace_return_t itrace_register_thread(itrace_profiler_handle_t profiler_handle, const char* thread_name);
652 
657 
659 // Function only needed internally for multi-pass macros
660 void itrace_merge_csv_files(char *file_name,int num_files);
662 
673 #define ITRACE_START_SECTION_WITH_CONTEXT_NO_EVENTS(itrace_section_id_param) \
674  itrace_section_no_events_context_t itrace_section_no_events_context; \
675  itrace_section_id_t itrace_section_id = itrace_section_id_param; \
676  itrace_start_section_with_context_no_events(&itrace_section_no_events_context);
677 
681 #define ITRACE_END_SECTION_WITH_CONTEXT_NO_EVENTS() itrace_end_section_with_context_no_events(itrace_section_id, &itrace_section_no_events_context);
682 
683 #ifndef DISABLE_ITRACE_EVENTS
684 
688 #define ITRACE_START_SECTION_WITH_CONTEXT(itrace_section_id_param) \
689  itrace_section_context_t itrace_section_context; \
690  itrace_section_id_t itrace_section_id = itrace_section_id_param; \
691  itrace_start_section_with_context(&itrace_section_context);
692 
696 #define ITRACE_END_SECTION_WITH_CONTEXT() itrace_end_section_with_context(itrace_section_id, &itrace_section_context);
697 
698 #endif // DISABLE_ITRACE_EVENTS
699 
705 #define ITRACE_START_SECTION_WITH_CONTEXT_NO_EVENTS_MSPS(itrace_section_id_param) \
706  itrace_section_no_events_context_t itrace_section_no_events_context_##itrace_section_id_param; \
707  itrace_section_id_t itrace_section_id_##itrace_section_id_param = itrace_section_id_param; \
708  itrace_start_section_with_context_no_events(&itrace_section_no_events_context_##itrace_section_id_param);
709 
715 #define ITRACE_END_SECTION_WITH_CONTEXT_NO_EVENTS_MSPS(itrace_section_id_param) itrace_end_section_with_context_no_events(itrace_section_id_##itrace_section_id_param, &itrace_section_no_events_context_##itrace_section_id_param);
716 
717 #ifndef DISABLE_ITRACE_EVENTS
718 
724 #define ITRACE_START_SECTION_WITH_CONTEXT_MSPS(itrace_section_id_param) \
725  itrace_section_context_t itrace_section_context_##itrace_section_id_param; \
726  itrace_section_id_t itrace_section_id_##itrace_section_id_param = itrace_section_id_param; \
727  itrace_start_section_with_context(&itrace_section_context_##itrace_section_id_param);
728 
734 #define ITRACE_END_SECTION_WITH_CONTEXT_MSPS(itrace_section_id_param) itrace_end_section_with_context(itrace_section_id_##itrace_section_id_param, &itrace_section_context_##itrace_section_id_param);
735 
736 #endif // DISABLE_ITRACE_EVENTS
737 
738 #ifdef __cplusplus
739 }
740 
763 #define ITRACE_MONITOR_FUNCTION_NO_EVENTS_CPP(...) \
764  static bool itrace_is_first_function_occurrence = true; \
765  itrace_section_id_t itrace_function_section_id = (itrace_section_id_t) &itrace_is_first_function_occurrence; \
766  auto itrace_function_profiler = itrace_is_message_registration_needed(itrace_function_section_id) ? make_itrace_function_profiler<false>(itrace_function_section_id, __FUNCSIG__, ## __VA_ARGS__) : make_itrace_function_profiler<false>(itrace_function_section_id, ## __VA_ARGS__); \
767  itrace_is_first_function_occurrence = false;
768 
787 #define ITRACE_MONITOR_FUNCTION_CPP(...) \
788  static bool itrace_is_first_function_occurrence = true; \
789  itrace_section_id_t itrace_function_section_id = (itrace_section_id_t) &itrace_is_first_function_occurrence; \
790  auto itrace_function_profiler = itrace_is_message_registration_needed(itrace_function_section_id) ? make_itrace_function_profiler<true>(itrace_function_section_id, __FUNCSIG__, ## __VA_ARGS__) : make_itrace_function_profiler<true>(itrace_function_section_id, ## __VA_ARGS__); \
791  itrace_is_first_function_occurrence = false;
792 
811 #define ITRACE_MONITOR_SCOPE_NO_EVENTS_CPP(name, ...) \
812  static bool itrace_is_first_scope_occurrence = true; \
813  itrace_section_id_t itrace_scope_section_id = (itrace_section_id_t) &itrace_is_first_scope_occurrence; \
814  auto itrace_scope_profiler = itrace_is_message_registration_needed(itrace_scope_section_id) ? make_itrace_function_profiler<false>(itrace_scope_section_id, #name, ## __VA_ARGS__) : make_itrace_function_profiler<false>(itrace_scope_section_id, ## __VA_ARGS__); \
815  itrace_is_first_scope_occurrence = false;
816 
834 #define ITRACE_MONITOR_SCOPE_CPP(name, ...) \
835  static bool itrace_is_first_scope_occurrence = true; \
836  itrace_section_id_t itrace_scope_section_id = (itrace_section_id_t) &itrace_is_first_scope_occurrence; \
837  auto itrace_scope_profiler = itrace_is_message_registration_needed(itrace_scope_section_id) ? make_itrace_function_profiler<true>(itrace_scope_section_id, #name, ## __VA_ARGS__) : make_itrace_function_profiler<true>(itrace_scope_section_id, ## __VA_ARGS__); \
838  itrace_is_first_scope_occurrence = false;
839 
860 #define ITRACE_START_SECTION_CPP(name, ...) \
861  static bool itrace_is_first_section_occurrence = true; \
862  itrace_section_id_t itrace_section_id = (itrace_section_id_t) &itrace_is_first_section_occurrence; \
863  auto itrace_section_profiler = itrace_is_message_registration_needed(itrace_section_id) ? make_itrace_function_profiler<true>(itrace_section_id, #name, ## __VA_ARGS__) : make_itrace_function_profiler<true>(itrace_section_id, ## __VA_ARGS__); \
864  itrace_is_first_section_occurrence = false;
865 
872 #define ITRACE_END_SECTION_CPP() \
873  itrace_section_profiler.reset();
874 
893 #define ITRACE_START_SECTION_MSPS_CPP(name, ...) \
894  static bool itrace_is_first_section_occurrence_##name = true; \
895  itrace_section_id_t itrace_section_id_##name = (itrace_section_id_t) &itrace_is_first_section_occurrence_##name; \
896  auto itrace_section_profiler_##name = itrace_is_message_registration_needed(itrace_section_id_##name) ? make_itrace_function_profiler<true>(itrace_section_id_##name, #name, ## __VA_ARGS__) : make_itrace_function_profiler<true>(itrace_section_id_##name, ## __VA_ARGS__); \
897  itrace_is_first_section_occurrence_##name = false;
898 
907 #define ITRACE_END_SECTION_MSPS_CPP(name) \
908  itrace_section_profiler_##name.reset();
909 
910 #ifndef DISABLE_ITRACE_MARKERS
911 
928 #define ITRACE_ADD_MARKER_WITH_VARIABLES_CPP(table_name, ...) \
929 { \
930  static bool itrace_is_first_variable_dump = true; \
931  itrace_add_marker_with_variables(itrace_is_first_variable_dump, #table_name, ## __VA_ARGS__); \
932 }
933 #endif // DISABLE_ITRACE_MARKERS
934 
935 #endif // __cplusplus
936 
937 #endif // DISABLE_ITRACE
938 
939 #endif // ITRACE_H
itrace_return_t itrace_get_num_events_left_to_register(itrace_profiler_handle_t profiler_handle, int *num_events_left_to_register)
Return the number of events that are still to be registered.
itrace_return_t itrace_end_periodic_events_reader(itrace_profiler_handle_t profiler_handle)
End the periodic event reader.
itrace_return_t itrace_start_section(itrace_profiler_handle_t profiler_handle, const char *section_name, itrace_measured_events_t *measured_events)
Define the start of a section for which all registered events will be monitored.
itrace_return_t itrace_end_section(itrace_profiler_handle_t profiler_handle, itrace_measured_events_t *measured_events)
Define the end of a section for which all registered events will be monitored.
itrace_return_t itrace_remove_all_events(itrace_profiler_handle_t profiler_handle)
Remove all events to be registered.
itrace_return_t itrace_add_marker(itrace_profiler_handle_t profiler_handle, const char *marker_name)
Add a marker.
Public itrace types.
itrace_return_t itrace_set_stid(itrace_profiler_handle_t profiler_handle, itrace_stid_t *stid)
Filter all PMU events by STID.
itrace_return_t itrace_open_profiler(itrace_logger_handle_t logger_handle, uint32_t domain, size_t log_size, itrace_profiler_handle_t *profiler_handle_ptr)
Open profiler instance.
itrace_return_t itrace_open_logger(int domain, itrace_logger_handle_t *logger_handle_ptr)
Open logger instance.
itrace_return_t itrace_set_target_files(itrace_logger_handle_t logger_handle, uint32_t file_types)
Specify the types of files generated by the logger.
uint32_t itrace_processing_mode_t
Definition: itrace_types.h:270
itrace_return_t itrace_add_event_by_id(itrace_profiler_handle_t profiler_handle, uint32_t event_id)
Add an event to be registered by specifying only its id.
itrace_return_t itrace_register_thread(itrace_profiler_handle_t profiler_handle, const char *thread_name)
Assign a name to a software thread and attempt to identify its parent thread id.
itrace_return_t itrace_close_files(itrace_logger_handle_t logger_handle)
Close the logger output files.
Definition: itrace_types.h:153
itrace_return_t itrace_start_periodic_events_reader(itrace_profiler_handle_t profiler_handle, uint32_t events_reader_period_us, uint32_t thread_priority)
Start a periodic event reader measuring registered events at regular intervals.
itrace_return_t itrace_register_events(itrace_profiler_handle_t profiler_handle, itrace_event_t *attempted_to_register_events, int *num_attempted_to_register_events)
Register new events.
itrace_return_t itrace_configure_pmu_policy(itrace_profiler_handle_t profiler_handle, uint32_t min_num_pmu_events_to_register, uint32_t max_num_pmu_events_to_register, uint32_t pmu_registration_timeout_us)
Configure PMU arbitration policy.
itrace_return_t itrace_set_processing_mode(itrace_profiler_handle_t profiler_handle, itrace_processing_mode_t processing_mode)
Set processing mode to use for all events at registration time.
void * itrace_logger_handle_t
Definition: itrace_types.h:199
itrace_return_t itrace_set_default_profiler(itrace_profiler_handle_t profiler_handle)
Set the specified profiler instance as default.
Definition: itrace_types.h:323
void itrace_end_section_no_events(void)
Define the end of a section without monitoring registered events.
itrace_return_t itrace_get_domain(itrace_profiler_handle_t profiler_handle, uint32_t *domain_id)
Get the domain id of the profiler.
itrace_return_t itrace_set_root_filename(itrace_logger_handle_t logger_handle, const char *root_filename)
Specify the root name of the files created by the logger.
itrace_return_t itrace_deregister_events(itrace_profiler_handle_t profiler_handle)
Deregister all events currently registered with this profiler instance.
itrace_return_t itrace_add_event(itrace_profiler_handle_t profiler_handle, itrace_event_t *event)
Add an event to be registered.
uint64_t itrace_section_id_t
Definition: itrace_types.h:119
itrace_return_t itrace_close_logger(itrace_logger_handle_t logger_handle)
Close logger instance.
itrace_return_t itrace_setup_from_file(itrace_logger_handle_t *logger_handle_ptr, const char *setup_filename)
Setup itrace from a configuration file or using defaults.
itrace_return_t itrace_get_registered_events(itrace_profiler_handle_t profiler_handle, itrace_event_t *registered_events, int *num_registered_events)
Return the events currently registered.
itrace_return_t itrace_start_periodic_logs_flusher(itrace_logger_handle_t logger_handle, uint32_t flushing_period_us)
Create a background thread to periodically flush and parse the log buffers for each active profiler...
itrace_return_t
Definition: itrace_types.h:152
itrace_return_t itrace_teardown(itrace_logger_handle_t logger_handle)
Close itrace when utilizing CPU and/or DSP automation.
itrace_return_t itrace_get_root_filename(itrace_logger_handle_t logger_handle, char *root_filename)
Return the current root name being used by the logger.
itrace_return_t itrace_add_events_from_file(itrace_profiler_handle_t profiler_handle, const char *events_filename)
Add events to be registered from a file.
itrace_return_t itrace_close_profiler(itrace_profiler_handle_t profiler_handle)
Close profiler instance.
itrace_return_t itrace_add_events(itrace_profiler_handle_t profiler_handle, itrace_event_t *events, int num_events)
Add multiple events to be registered.
itrace_return_t itrace_flush_logs(itrace_logger_handle_t logger_handle)
Flush the logs of all opened profilers.
itrace_return_t itrace_get_itrace_version(itrace_profiler_handle_t profiler_handle, uint32_t *version)
Return the itrace library version running on the specified domain.
uint32_t itrace_stid_t
Definition: itrace_types.h:294
void itrace_start_section_no_events(itrace_section_id_t section_id)
Define the start of a section without monitoring registered events.
itrace_return_t itrace_end_periodic_logs_flusher(itrace_logger_handle_t logger_handle)
Destroy the thread that is flushing and parsing the log buffers for each active profiler.
itrace_return_t itrace_read_events(itrace_profiler_handle_t profiler_handle, itrace_measured_events_t *measured_events)
Read events.
itrace_return_t itrace_remote_open(itrace_logger_handle_t *logger_handle_ptr, int is_blocking_call)
Enable client to control itrace remotely.
itrace_return_t itrace_add_all_pmu_events(itrace_profiler_handle_t profiler_handle)
Add all published PMU events supported on the current domain.
itrace_return_t itrace_start_section_with_section_id(itrace_profiler_handle_t profiler_handle, itrace_section_id_t section_id, itrace_measured_events_t *measured_events)
Define the start of a section for which all registered events will be monitored. This section is iden...
Definition: itrace_types.h:311
itrace_return_t itrace_flush_log(itrace_profiler_handle_t profiler_handle)
Flush the log of the current profiler.
itrace_return_t itrace_remote_close(void)
Disable client from controlling itrace remotely.
void * itrace_profiler_handle_t
Definition: itrace_types.h:205
itrace_return_t itrace_get_dsp_version(itrace_profiler_handle_t profiler_handle, char *dsp_version)
Get the DSP Version index of the profiler.