tools: don't resolve unless requested

It can be way to slow to be useful for quick things.
This commit is contained in:
Christian Hergert
2023-06-27 13:39:06 -07:00
parent 30dc327f02
commit ab12f6a18a

View File

@ -30,8 +30,10 @@
#include <sysprof.h> #include <sysprof.h>
static gboolean list_files = FALSE; static gboolean list_files = FALSE;
static gboolean resolve = FALSE;
static const GOptionEntry main_entries[] = { static const GOptionEntry main_entries[] = {
{ "list-files", 'l', 0, G_OPTION_ARG_NONE, &list_files, "List files within the capture" }, { "list-files", 'l', 0, G_OPTION_ARG_NONE, &list_files, "List files within the capture" },
{ "resolve", 'r', 0, G_OPTION_ARG_NONE, &resolve, "Resolve symbols" },
{ 0 } { 0 }
}; };
@ -108,17 +110,19 @@ main (gint argc,
} }
resolvers = g_ptr_array_new_with_free_func (g_object_unref); resolvers = g_ptr_array_new_with_free_func (g_object_unref);
if (resolve)
{
g_ptr_array_add (resolvers, sysprof_capture_symbol_resolver_new ()); g_ptr_array_add (resolvers, sysprof_capture_symbol_resolver_new ());
g_ptr_array_add (resolvers, sysprof_kernel_symbol_resolver_new ()); g_ptr_array_add (resolvers, sysprof_kernel_symbol_resolver_new ());
g_ptr_array_add (resolvers, sysprof_elf_symbol_resolver_new ()); g_ptr_array_add (resolvers, sysprof_elf_symbol_resolver_new ());
for (guint i = 0; i < resolvers->len; i++) for (guint i = 0; i < resolvers->len; i++)
{ {
sysprof_capture_reader_reset (reader);
sysprof_symbol_resolver_load (g_ptr_array_index (resolvers, i), reader); sysprof_symbol_resolver_load (g_ptr_array_index (resolvers, i), reader);
}
sysprof_capture_reader_reset (reader); sysprof_capture_reader_reset (reader);
}
}
ctrtypes = g_hash_table_new (NULL, NULL); ctrtypes = g_hash_table_new (NULL, NULL);
@ -292,11 +296,17 @@ main (gint argc,
s->frame.pid, s->tid, s->frame.time, ptime); s->frame.pid, s->tid, s->frame.time, ptime);
for (guint i = 0; i < s->n_addrs; i++) for (guint i = 0; i < s->n_addrs; i++)
{
if (resolve)
{ {
g_autofree char *name = symbolize (resolvers, &s->frame, &context, s->addrs[i]); g_autofree char *name = symbolize (resolvers, &s->frame, &context, s->addrs[i]);
g_print (" " SYSPROF_CAPTURE_ADDRESS_FORMAT " (%s)\n", s->addrs[i], name); g_print (" " SYSPROF_CAPTURE_ADDRESS_FORMAT " (%s)\n", s->addrs[i], name);
} }
else
{
g_print (" " SYSPROF_CAPTURE_ADDRESS_FORMAT "\n", s->addrs[i]);
}
}
break; break;
} }
@ -312,11 +322,17 @@ main (gint argc,
s->entering ? "ENTER" : "EXIT"); s->entering ? "ENTER" : "EXIT");
for (guint i = 0; i < s->n_addrs; i++) for (guint i = 0; i < s->n_addrs; i++)
{
if (resolve)
{ {
g_autofree char *name = symbolize (resolvers, &s->frame, &context, s->addrs[i]); g_autofree char *name = symbolize (resolvers, &s->frame, &context, s->addrs[i]);
g_print (" " SYSPROF_CAPTURE_ADDRESS_FORMAT " (%s)\n", s->addrs[i], name); g_print (" " SYSPROF_CAPTURE_ADDRESS_FORMAT " (%s)\n", s->addrs[i], name);
} }
else
{
g_print (" " SYSPROF_CAPTURE_ADDRESS_FORMAT "\n", s->addrs[i]);
}
}
break; break;
} }
@ -399,11 +415,17 @@ main (gint argc,
ev->frame.time, ptime); ev->frame.time, ptime);
for (guint i = 0; i < ev->n_addrs; i++) for (guint i = 0; i < ev->n_addrs; i++)
{
if (resolve)
{ {
g_autofree char *name = symbolize (resolvers, &ev->frame, &context, ev->addrs[i]); g_autofree char *name = symbolize (resolvers, &ev->frame, &context, ev->addrs[i]);
g_print (" " SYSPROF_CAPTURE_ADDRESS_FORMAT " (%s)\n", ev->addrs[i], name); g_print (" " SYSPROF_CAPTURE_ADDRESS_FORMAT " (%s)\n", ev->addrs[i], name);
} }
else
{
g_print (" " SYSPROF_CAPTURE_ADDRESS_FORMAT "\n", ev->addrs[i]);
}
}
} }
break; break;