mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2025-12-31 20:36:25 +00:00
libsysprof: join libsysprof-analyze and libsysprof-profile
This brings together the two libraries back into one now that the whole design is pretty well sorted out. They depend on roughly the same libraries anyway and it's way easier of the single library can both read and write the capture files (along with bringing in libsysprof-capture symbols in a single place).
This commit is contained in:
147
src/libsysprof/tests/test-capture-model.c
Normal file
147
src/libsysprof/tests/test-capture-model.c
Normal file
@ -0,0 +1,147 @@
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#include <sysprof.h>
|
||||
|
||||
#include "sysprof-document-private.h"
|
||||
|
||||
int
|
||||
main (int argc,
|
||||
char *argv[])
|
||||
{
|
||||
g_autoptr(SysprofDocumentLoader) loader = NULL;
|
||||
g_autoptr(SysprofDocument) document = NULL;
|
||||
g_autoptr(GError) error = NULL;
|
||||
const char *filename;
|
||||
guint n_items;
|
||||
|
||||
sysprof_clock_init ();
|
||||
|
||||
if (argc < 2)
|
||||
{
|
||||
g_printerr ("usage: %s FILENAME\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
filename = argv[1];
|
||||
|
||||
loader = sysprof_document_loader_new (filename);
|
||||
sysprof_document_loader_set_symbolizer (loader, sysprof_no_symbolizer_get ());
|
||||
|
||||
if (!(document = sysprof_document_loader_load (loader, NULL, &error)))
|
||||
{
|
||||
g_printerr ("Failed to load %s: %s\n",
|
||||
filename, error->message);
|
||||
return 1;
|
||||
}
|
||||
|
||||
n_items = g_list_model_get_n_items (G_LIST_MODEL (document));
|
||||
|
||||
for (guint i = 0; i < n_items; i++)
|
||||
{
|
||||
SysprofDocumentFrame *frame = g_list_model_get_item (G_LIST_MODEL (document), i);
|
||||
|
||||
g_print ("%"G_GINT64_FORMAT" [pid %d] [cpu %d] (type %s)",
|
||||
sysprof_document_frame_get_time (frame),
|
||||
sysprof_document_frame_get_pid (frame),
|
||||
sysprof_document_frame_get_cpu (frame),
|
||||
G_OBJECT_TYPE_NAME (frame));
|
||||
|
||||
if (0) {}
|
||||
else if (SYSPROF_IS_DOCUMENT_LOG (frame))
|
||||
g_print (" domain=%s message=%s",
|
||||
sysprof_document_log_get_domain (SYSPROF_DOCUMENT_LOG (frame)),
|
||||
sysprof_document_log_get_message (SYSPROF_DOCUMENT_LOG (frame)));
|
||||
else if (SYSPROF_IS_DOCUMENT_MARK (frame))
|
||||
g_print (" group=%s name=%s message=%s",
|
||||
sysprof_document_mark_get_group (SYSPROF_DOCUMENT_MARK (frame)),
|
||||
sysprof_document_mark_get_name (SYSPROF_DOCUMENT_MARK (frame)),
|
||||
sysprof_document_mark_get_message (SYSPROF_DOCUMENT_MARK (frame)));
|
||||
else if (SYSPROF_IS_DOCUMENT_PROCESS (frame))
|
||||
g_print (" cmdline=%s", sysprof_document_process_get_command_line (SYSPROF_DOCUMENT_PROCESS (frame)));
|
||||
else if (SYSPROF_IS_DOCUMENT_METADATA (frame))
|
||||
g_print (" id=%s value=%s",
|
||||
sysprof_document_metadata_get_id (SYSPROF_DOCUMENT_METADATA (frame)),
|
||||
sysprof_document_metadata_get_value (SYSPROF_DOCUMENT_METADATA (frame)));
|
||||
else if (SYSPROF_IS_DOCUMENT_FILE_CHUNK (frame))
|
||||
g_print (" file-chunk path=%s len=%u",
|
||||
sysprof_document_file_chunk_get_path (SYSPROF_DOCUMENT_FILE_CHUNK (frame)),
|
||||
sysprof_document_file_chunk_get_size (SYSPROF_DOCUMENT_FILE_CHUNK (frame)));
|
||||
else if (SYSPROF_IS_DOCUMENT_FORK (frame))
|
||||
g_print (" child-pid=%d",
|
||||
sysprof_document_fork_get_child_pid (SYSPROF_DOCUMENT_FORK (frame)));
|
||||
else if (SYSPROF_IS_DOCUMENT_OVERLAY (frame))
|
||||
g_print (" layer=%u source=%s destination=%s",
|
||||
sysprof_document_overlay_get_layer (SYSPROF_DOCUMENT_OVERLAY (frame)),
|
||||
sysprof_document_overlay_get_source (SYSPROF_DOCUMENT_OVERLAY (frame)),
|
||||
sysprof_document_overlay_get_destination (SYSPROF_DOCUMENT_OVERLAY (frame)));
|
||||
else if (SYSPROF_IS_DOCUMENT_MMAP (frame))
|
||||
g_print (" begin=0x%"G_GINT64_MODIFIER"x end=0x%"G_GINT64_MODIFIER"x offset=0x%"G_GINT64_MODIFIER"x path=%s",
|
||||
sysprof_document_mmap_get_start_address (SYSPROF_DOCUMENT_MMAP (frame)),
|
||||
sysprof_document_mmap_get_end_address (SYSPROF_DOCUMENT_MMAP (frame)),
|
||||
sysprof_document_mmap_get_file_offset (SYSPROF_DOCUMENT_MMAP (frame)),
|
||||
sysprof_document_mmap_get_file (SYSPROF_DOCUMENT_MMAP (frame)));
|
||||
else if (SYSPROF_IS_DOCUMENT_JITMAP (frame))
|
||||
g_print (" n_jitmaps=%u",
|
||||
sysprof_document_jitmap_get_size (SYSPROF_DOCUMENT_JITMAP (frame)));
|
||||
else if (SYSPROF_IS_DOCUMENT_CTRDEF (frame))
|
||||
{
|
||||
guint n_counters = sysprof_document_ctrdef_get_n_counters (SYSPROF_DOCUMENT_CTRDEF (frame));
|
||||
|
||||
g_print (" n_counters=%u", n_counters);
|
||||
|
||||
for (guint j = 0; j < n_counters; j++)
|
||||
{
|
||||
const char *category, *name;
|
||||
guint id, type;
|
||||
|
||||
sysprof_document_ctrdef_get_counter (SYSPROF_DOCUMENT_CTRDEF (frame),
|
||||
j, &id, &type, &category, &name, NULL);
|
||||
g_print (" [%u<%s>:%s.%s]",
|
||||
id,
|
||||
type == SYSPROF_CAPTURE_COUNTER_INT64 ? "i64" : "f64",
|
||||
category, name);
|
||||
}
|
||||
}
|
||||
else if (SYSPROF_IS_DOCUMENT_CTRSET (frame))
|
||||
{
|
||||
guint n_values = sysprof_document_ctrset_get_n_values (SYSPROF_DOCUMENT_CTRSET (frame));
|
||||
|
||||
g_print (" counters=[");
|
||||
for (guint j = 0; j < n_values; j++)
|
||||
{
|
||||
guint id;
|
||||
guint8 raw[8];
|
||||
|
||||
sysprof_document_ctrset_get_raw_value (SYSPROF_DOCUMENT_CTRSET (frame), j, &id, raw);
|
||||
|
||||
g_print ("%u", id);
|
||||
if (j+1 != n_values)
|
||||
g_print (", ");
|
||||
}
|
||||
g_print ("]");
|
||||
}
|
||||
else if (SYSPROF_IS_DOCUMENT_ALLOCATION (frame))
|
||||
{
|
||||
if (sysprof_document_allocation_is_free (SYSPROF_DOCUMENT_ALLOCATION (frame)))
|
||||
g_print (" 0x%016"G_GINT64_MODIFIER"x: free",
|
||||
sysprof_document_allocation_get_address (SYSPROF_DOCUMENT_ALLOCATION (frame)));
|
||||
else
|
||||
g_print (" 0x%016"G_GINT64_MODIFIER"x: allocate %"G_GUINT64_FORMAT,
|
||||
sysprof_document_allocation_get_address (SYSPROF_DOCUMENT_ALLOCATION (frame)),
|
||||
sysprof_document_allocation_get_size (SYSPROF_DOCUMENT_ALLOCATION (frame)));
|
||||
}
|
||||
|
||||
if (SYSPROF_IS_DOCUMENT_TRACEABLE (frame))
|
||||
g_print (" stack-depth=%u",
|
||||
sysprof_document_traceable_get_stack_depth (SYSPROF_DOCUMENT_TRACEABLE (frame)));
|
||||
|
||||
g_print ("\n");
|
||||
|
||||
g_clear_object (&frame);
|
||||
}
|
||||
|
||||
g_printerr ("%u frames\n", n_items);
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user