| //===-- ActivitySPI.h -------------------------------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef __GenealogySPI_h__ |
| #define __GenealogySPI_h__ |
| |
| #include <xpc/xpc.h> |
| |
| typedef void *os_activity_process_list_t; |
| typedef void *os_activity_list_t; |
| typedef void *os_trace_message_list_t; |
| typedef struct os_activity_watch_s *os_activity_watch_t; |
| typedef uint64_t os_activity_t; |
| |
| struct os_activity_breadcrumb_s { |
| uint32_t breadcrumb_id; |
| uint64_t activity_id; |
| uint64_t timestamp; |
| const char *name; |
| }; |
| |
| typedef struct os_activity_breadcrumb_s *os_activity_breadcrumb_t; |
| |
| typedef struct os_trace_message_s { |
| uint64_t trace_id; |
| uint64_t thread; |
| uint64_t timestamp; |
| uint32_t offset; |
| xpc_object_t __unsafe_unretained payload; |
| const uint8_t *image_uuid; |
| const char *image_path; |
| const char *format; |
| const void *buffer; |
| size_t bufferLen; |
| } * os_trace_message_t; |
| |
| typedef struct os_activity_process_s { |
| os_activity_process_list_t child_procs; |
| os_trace_message_list_t messages; |
| os_activity_list_t activities; |
| void *breadcrumbs; |
| uint64_t proc_id; |
| const uint8_t *image_uuid; |
| const char *image_path; |
| pid_t pid; |
| } * os_activity_process_t; |
| |
| typedef struct os_activity_entry_s { |
| uint64_t activity_start; |
| os_activity_t activity_id; |
| os_activity_t parent_id; |
| const char *activity_name; |
| const char *reason; |
| os_trace_message_list_t messages; |
| } * os_activity_entry_t; |
| |
| enum { |
| OS_ACTIVITY_DIAGNOSTIC_DEFAULT = 0x00000000, |
| OS_ACTIVITY_DIAGNOSTIC_PROCESS_ONLY = 0x00000001, |
| OS_ACTIVITY_DIAGNOSTIC_SKIP_DECODE = 0x00000002, |
| OS_ACTIVITY_DIAGNOSTIC_FLATTENED = 0x00000004, |
| OS_ACTIVITY_DIAGNOSTIC_ALL_ACTIVITIES = 0x00000008, |
| OS_ACTIVITY_DIAGNOSTIC_MAX = 0x0000000f |
| }; |
| typedef uint32_t os_activity_diagnostic_flag_t; |
| |
| enum { |
| OS_ACTIVITY_WATCH_DEFAULT = 0x00000000, |
| OS_ACTIVITY_WATCH_PROCESS_ONLY = 0x00000001, |
| OS_ACTIVITY_WATCH_SKIP_DECODE = 0x00000002, |
| OS_ACTIVITY_WATCH_PAYLOAD = 0x00000004, |
| OS_ACTIVITY_WATCH_ERRORS = 0x00000008, |
| OS_ACTIVITY_WATCH_FAULTS = 0x00000010, |
| OS_ACTIVITY_WATCH_MAX = 0x0000001f |
| }; |
| typedef uint32_t os_activity_watch_flag_t; |
| |
| // Return values from os_trace_get_type() |
| #define OS_TRACE_TYPE_RELEASE (1u << 0) |
| #define OS_TRACE_TYPE_DEBUG (1u << 1) |
| #define OS_TRACE_TYPE_ERROR ((1u << 6) | (1u << 0)) |
| #define OS_TRACE_TYPE_FAULT ((1u << 7) | (1u << 6) | (1u << 0)) |
| |
| typedef void (^os_activity_watch_block_t)(os_activity_watch_t watch, |
| os_activity_process_t process_info, |
| bool canceled); |
| typedef void (^os_diagnostic_block_t)(os_activity_process_list_t processes, |
| int error); |
| |
| #endif |