mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2025-12-31 20:36:25 +00:00
112 lines
1.8 KiB
C
112 lines
1.8 KiB
C
#include <glib.h>
|
|
#include <string.h>
|
|
|
|
#include "tracker.h"
|
|
#include "stackstash.h"
|
|
|
|
typedef struct new_process_t new_process_t;
|
|
typedef struct new_map_t new_map_t;
|
|
typedef struct sample_t sample_t;
|
|
|
|
typedef enum
|
|
{
|
|
NEW_PROCESS,
|
|
NEW_MAP,
|
|
SAMPLE
|
|
} event_type;
|
|
|
|
struct new_process_t
|
|
{
|
|
event_type type;
|
|
int32_t pid;
|
|
char command_line[256];
|
|
};
|
|
|
|
struct new_map_t
|
|
{
|
|
event_type type;
|
|
int32_t pid;
|
|
char file_name[PATH_MAX];
|
|
uint64_t start;
|
|
uint64_t end;
|
|
uint64_t offset;
|
|
uint64_t inode;
|
|
};
|
|
|
|
struct sample_t
|
|
{
|
|
event_type type;
|
|
int32_t pid;
|
|
StackNode * trace;
|
|
};
|
|
|
|
struct tracker_t
|
|
{
|
|
size_t n_event_bytes;
|
|
size_t n_allocated_bytes;
|
|
uint8_t *events;
|
|
};
|
|
|
|
#define DEFAULT_SIZE (1024 * 1024 * 4)
|
|
|
|
static void
|
|
tracker_append (tracker_t *tracker,
|
|
void *event,
|
|
int n_bytes)
|
|
{
|
|
if (tracker->n_allocated_bytes - tracker->n_event_bytes < n_bytes)
|
|
{
|
|
size_t new_size = tracker->n_allocated_bytes * 2;
|
|
|
|
tracker->events = g_realloc (tracker->events, new_size);
|
|
|
|
tracker->n_allocated_bytes = new_size;
|
|
}
|
|
|
|
g_assert (tracker->n_allocated_bytes - tracker->n_event_bytes >= n_bytes);
|
|
|
|
memcpy (tracker->events + tracker->n_event_bytes, event, n_bytes);
|
|
}
|
|
|
|
tracker_t *
|
|
tracker_new (void)
|
|
{
|
|
tracker_t *tracker = g_new0 (tracker_t, 1);
|
|
|
|
tracker->n_event_bytes = 0;
|
|
tracker->n_allocated_bytes = DEFAULT_SIZE;
|
|
tracker->events = g_malloc (DEFAULT_SIZE);
|
|
|
|
return tracker;
|
|
}
|
|
|
|
void
|
|
tracker_free (tracker_t *tracker)
|
|
{
|
|
|
|
}
|
|
|
|
void
|
|
tracker_add_process (tracker_t *tracker)
|
|
{
|
|
}
|
|
|
|
void
|
|
tracker_add_map (tracker_t *tracker)
|
|
{
|
|
}
|
|
|
|
void
|
|
tracker_add_sample (tracker_t *tracker,
|
|
pid_t pid,
|
|
uint64_t *ips,
|
|
int n_ips)
|
|
{
|
|
}
|
|
|
|
Profile *
|
|
tracker_create_profile (tracker_t *tracker)
|
|
{
|
|
|
|
}
|