123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- //
- // Taken from https://github.com/llvm-mirror/lldb/blob/master/tools/debugserver/source/MacOSX/DarwinLog/ActivityStreamSPI.h
- // by Tanner Bennett on 03/03/2019 with minimal modifications.
- //
- //===-- ActivityStreamAPI.h -------------------------------------*- C++ -*-===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- #ifndef ActivityStreamSPI_h
- #define ActivityStreamSPI_h
- #include <Foundation/Foundation.h>
- #include <sys/time.h>
- // #include <xpc/xpc.h>
- /* By default, XPC objects are declared as Objective-C types when building with
- * an Objective-C compiler. This allows them to participate in ARC, in RR
- * management by the Blocks runtime and in leaks checking by the static
- * analyzer, and enables them to be added to Cocoa collections.
- *
- * See <os/object.h> for details.
- */
- #if !TARGET_OS_MACCATALYST
- #if OS_OBJECT_USE_OBJC
- OS_OBJECT_DECL(xpc_object);
- #else
- typedef void * xpc_object_t;
- #endif
- #endif
- #define OS_ACTIVITY_MAX_CALLSTACK 32
- // Enums
- typedef NS_ENUM(uint32_t, os_activity_stream_flag_t) {
- OS_ACTIVITY_STREAM_PROCESS_ONLY = 0x00000001,
- OS_ACTIVITY_STREAM_SKIP_DECODE = 0x00000002,
- OS_ACTIVITY_STREAM_PAYLOAD = 0x00000004,
- OS_ACTIVITY_STREAM_HISTORICAL = 0x00000008,
- OS_ACTIVITY_STREAM_CALLSTACK = 0x00000010,
- OS_ACTIVITY_STREAM_DEBUG = 0x00000020,
- OS_ACTIVITY_STREAM_BUFFERED = 0x00000040,
- OS_ACTIVITY_STREAM_NO_SENSITIVE = 0x00000080,
- OS_ACTIVITY_STREAM_INFO = 0x00000100,
- OS_ACTIVITY_STREAM_PROMISCUOUS = 0x00000200,
- OS_ACTIVITY_STREAM_PRECISE_TIMESTAMPS = 0x00000200
- };
- typedef NS_ENUM(uint32_t, os_activity_stream_type_t) {
- OS_ACTIVITY_STREAM_TYPE_ACTIVITY_CREATE = 0x0201,
- OS_ACTIVITY_STREAM_TYPE_ACTIVITY_TRANSITION = 0x0202,
- OS_ACTIVITY_STREAM_TYPE_ACTIVITY_USERACTION = 0x0203,
-
- OS_ACTIVITY_STREAM_TYPE_TRACE_MESSAGE = 0x0300,
-
- OS_ACTIVITY_STREAM_TYPE_LOG_MESSAGE = 0x0400,
- OS_ACTIVITY_STREAM_TYPE_LEGACY_LOG_MESSAGE = 0x0480,
-
- OS_ACTIVITY_STREAM_TYPE_SIGNPOST_BEGIN = 0x0601,
- OS_ACTIVITY_STREAM_TYPE_SIGNPOST_END = 0x0602,
- OS_ACTIVITY_STREAM_TYPE_SIGNPOST_EVENT = 0x0603,
-
- OS_ACTIVITY_STREAM_TYPE_STATEDUMP_EVENT = 0x0A00,
- };
- typedef NS_ENUM(uint32_t, os_activity_stream_event_t) {
- OS_ACTIVITY_STREAM_EVENT_STARTED = 1,
- OS_ACTIVITY_STREAM_EVENT_STOPPED = 2,
- OS_ACTIVITY_STREAM_EVENT_FAILED = 3,
- OS_ACTIVITY_STREAM_EVENT_CHUNK_STARTED = 4,
- OS_ACTIVITY_STREAM_EVENT_CHUNK_FINISHED = 5,
- };
- // Types
- typedef uint64_t os_activity_id_t;
- typedef struct os_activity_stream_s *os_activity_stream_t;
- typedef struct os_activity_stream_entry_s *os_activity_stream_entry_t;
- #define OS_ACTIVITY_STREAM_COMMON() \
- uint64_t trace_id; \
- uint64_t timestamp; \
- uint64_t thread; \
- const uint8_t *image_uuid; \
- const char *image_path; \
- struct timeval tv_gmt; \
- struct timezone tz; \
- uint32_t offset
- typedef struct os_activity_stream_common_s {
- OS_ACTIVITY_STREAM_COMMON();
- } * os_activity_stream_common_t;
- struct os_activity_create_s {
- OS_ACTIVITY_STREAM_COMMON();
- const char *name;
- os_activity_id_t creator_aid;
- uint64_t unique_pid;
- };
- struct os_activity_transition_s {
- OS_ACTIVITY_STREAM_COMMON();
- os_activity_id_t transition_id;
- };
- typedef struct os_log_message_s {
- OS_ACTIVITY_STREAM_COMMON();
- const char *format;
- const uint8_t *buffer;
- size_t buffer_sz;
- const uint8_t *privdata;
- size_t privdata_sz;
- const char *subsystem;
- const char *category;
- uint32_t oversize_id;
- uint8_t ttl;
- bool persisted;
- } * os_log_message_t;
- typedef struct os_trace_message_v2_s {
- OS_ACTIVITY_STREAM_COMMON();
- const char *format;
- const void *buffer;
- size_t bufferLen;
- xpc_object_t __unsafe_unretained payload;
- } * os_trace_message_v2_t;
- typedef struct os_activity_useraction_s {
- OS_ACTIVITY_STREAM_COMMON();
- const char *action;
- bool persisted;
- } * os_activity_useraction_t;
- typedef struct os_signpost_s {
- OS_ACTIVITY_STREAM_COMMON();
- const char *format;
- const uint8_t *buffer;
- size_t buffer_sz;
- const uint8_t *privdata;
- size_t privdata_sz;
- const char *subsystem;
- const char *category;
- uint64_t duration_nsec;
- uint32_t callstack_depth;
- uint64_t callstack[OS_ACTIVITY_MAX_CALLSTACK];
- } * os_signpost_t;
- typedef struct os_activity_statedump_s {
- OS_ACTIVITY_STREAM_COMMON();
- char *message;
- size_t message_size;
- char image_path_buffer[PATH_MAX];
- } * os_activity_statedump_t;
- struct os_activity_stream_entry_s {
- os_activity_stream_type_t type;
-
- // information about the process streaming the data
- pid_t pid;
- uint64_t proc_id;
- const uint8_t *proc_imageuuid;
- const char *proc_imagepath;
-
- // the activity associated with this streamed event
- os_activity_id_t activity_id;
- os_activity_id_t parent_id;
-
- union {
- struct os_activity_stream_common_s common;
- struct os_activity_create_s activity_create;
- struct os_activity_transition_s activity_transition;
- struct os_log_message_s log_message;
- struct os_trace_message_v2_s trace_message;
- struct os_activity_useraction_s useraction;
- struct os_signpost_s signpost;
- struct os_activity_statedump_s statedump;
- };
- };
- // Blocks
- typedef bool (^os_activity_stream_block_t)(os_activity_stream_entry_t entry,
- int error);
- typedef void (^os_activity_stream_event_block_t)(
- os_activity_stream_t stream, os_activity_stream_event_t event);
- // SPI entry point prototypes
- typedef os_activity_stream_t (*os_activity_stream_for_pid_t)(
- pid_t pid, os_activity_stream_flag_t flags,
- os_activity_stream_block_t stream_block);
- typedef void (*os_activity_stream_resume_t)(os_activity_stream_t stream);
- typedef void (*os_activity_stream_cancel_t)(os_activity_stream_t stream);
- typedef char *(*os_log_copy_formatted_message_t)(os_log_message_t log_message);
- typedef void (*os_activity_stream_set_event_handler_t)(
- os_activity_stream_t stream, os_activity_stream_event_block_t block);
- #endif /* ActivityStreamSPI_h */
|