mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2025-12-31 20:36:25 +00:00
Add array resizing code
This commit is contained in:
64
tracker.c
64
tracker.c
@ -1,22 +1,32 @@
|
||||
#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 union time_line_entry_t time_line_entry_t;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
NEW_PROCESS,
|
||||
NEW_MAP,
|
||||
SAMPLE
|
||||
} event_type;
|
||||
|
||||
struct new_process_t
|
||||
{
|
||||
pid_t pid;
|
||||
char command_line[64];
|
||||
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];
|
||||
pid_t pid;
|
||||
uint64_t start;
|
||||
uint64_t end;
|
||||
uint64_t offset;
|
||||
@ -25,25 +35,49 @@ struct new_map_t
|
||||
|
||||
struct sample_t
|
||||
{
|
||||
pid_t pid;
|
||||
StackNode *trace;
|
||||
};
|
||||
|
||||
union time_line_entry_t
|
||||
{
|
||||
new_process_t new_process;
|
||||
new_map_t new_map;
|
||||
sample_t sample;
|
||||
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
|
||||
@ -73,5 +107,5 @@ tracker_add_sample (tracker_t *tracker,
|
||||
Profile *
|
||||
tracker_create_profile (tracker_t *tracker)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user