mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2025-12-31 20:36:25 +00:00
libsysprof-analyze: add some common tags
It's nice to have various labels on subsystems used on the desktop, so add some common ones here that are part of the platform.
This commit is contained in:
@ -35,6 +35,7 @@ SysprofElf *sysprof_elf_new (const char *filename,
|
||||
gboolean sysprof_elf_matches (SysprofElf *self,
|
||||
guint64 file_inode,
|
||||
const char *build_id);
|
||||
const char *sysprof_elf_get_nick (SysprofElf *self);
|
||||
const char *sysprof_elf_get_file (SysprofElf *self);
|
||||
const char *sysprof_elf_get_build_id (SysprofElf *self);
|
||||
const char *sysprof_elf_get_debug_link (SysprofElf *self);
|
||||
|
||||
@ -100,7 +100,7 @@ sysprof_elf_symbolizer_symbolize (SysprofSymbolizer *symbolizer,
|
||||
goto fallback;
|
||||
|
||||
return _sysprof_symbol_new (sysprof_strings_get (strings, name),
|
||||
NULL,
|
||||
sysprof_strings_get (strings, sysprof_elf_get_nick (elf)),
|
||||
sysprof_strings_get (strings, path),
|
||||
start_address + (begin_address - file_offset),
|
||||
start_address + (end_address - file_offset));
|
||||
|
||||
@ -27,6 +27,7 @@
|
||||
struct _SysprofElf
|
||||
{
|
||||
GObject parent_instance;
|
||||
const char *nick;
|
||||
char *build_id;
|
||||
char *file;
|
||||
SysprofElf *debug_link_elf;
|
||||
@ -46,6 +47,51 @@ enum {
|
||||
G_DEFINE_FINAL_TYPE (SysprofElf, sysprof_elf, G_TYPE_OBJECT)
|
||||
|
||||
static GParamSpec *properties [N_PROPS];
|
||||
static GHashTable *nicks;
|
||||
static const struct {
|
||||
const char *library;
|
||||
const char *nick;
|
||||
} nick_table[] = {
|
||||
{ "libEGL.so", "EGL" },
|
||||
{ "libEGL_mesa.so", "Mesa EGL" },
|
||||
{ "libGL.so", "GL" },
|
||||
{ "libX11-xcb.so", "X11" },
|
||||
{ "libX11.so", "X11" },
|
||||
{ "libc.so", "libc" },
|
||||
{ "libcairo-gobject.so", "Cairo" },
|
||||
{ "libcairo.so", "Cairo" },
|
||||
{ "libclutter-1.0.so", "Clutter" },
|
||||
{ "libclutter-glx-1.0.so", "Clutter" },
|
||||
{ "libffi.so", "libffi" },
|
||||
{ "libgdk-3.so", "GDK 3" },
|
||||
{ "libgio-2.0.so", "Gio" },
|
||||
{ "libgirepository-1.0.so", "Introspection" },
|
||||
{ "libgjs.so", "GJS" },
|
||||
{ "libglib-2.0.so", "GLib" },
|
||||
{ "libgobject-2.0.so", "GObject" },
|
||||
{ "libgstreamer-1-0.so", "GStreamer" },
|
||||
{ "libgtk-3.so", "GTK 3" },
|
||||
{ "libgtk-4.so", "GTK 4" },
|
||||
{ "libgtksourceview-3.0.so", "GtkSourceView 3" },
|
||||
{ "libgtksourceview-4.so", "GtkSourceView 4" },
|
||||
{ "libgtksourceview-5.so", "GtkSourceView 5" },
|
||||
{ "libharfbuzz-cairo.so", "Harfbuzz" },
|
||||
{ "libharfbuzz-gobject.so", "Harfbuzz" },
|
||||
{ "libharfbuzz-icu.so", "Harfbuzz" },
|
||||
{ "libharfbuzz-subset.so", "Harfbuzz" },
|
||||
{ "libharfbuzz.so", "Harfbuzz" },
|
||||
{ "libinput.so", "Mutter" },
|
||||
{ "libmutter-12.so", "Mutter" },
|
||||
{ "libpango-1.0.so", "Pango" },
|
||||
{ "libpangocairo-1.0.so", "Pango" },
|
||||
{ "libpipewire-0.3.so", "Pipewire" },
|
||||
{ "libpixman-1.so", "Pixman" },
|
||||
{ "libstdc++.so", "libc" },
|
||||
{ "libwayland-client.so", "Wayland Client" },
|
||||
{ "libwayland-cursor.so", "Wayland Cursor" },
|
||||
{ "libwayland-egl.so", "Wayland EGL" },
|
||||
{ "libwayland-server.so", "Wayland Server" },
|
||||
};
|
||||
|
||||
static void
|
||||
sysprof_elf_finalize (GObject *object)
|
||||
@ -140,6 +186,12 @@ sysprof_elf_class_init (SysprofElfClass *klass)
|
||||
(G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
||||
|
||||
g_object_class_install_properties (object_class, N_PROPS, properties);
|
||||
|
||||
nicks = g_hash_table_new (g_str_hash, g_str_equal);
|
||||
for (guint i = 0; i < G_N_ELEMENTS (nick_table); i++)
|
||||
g_hash_table_insert (nicks,
|
||||
(char *)nick_table[i].library,
|
||||
(char *)nick_table[i].nick);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -147,6 +199,25 @@ sysprof_elf_init (SysprofElf *self)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
guess_nick (SysprofElf *self,
|
||||
const char *name,
|
||||
const char *endptr)
|
||||
{
|
||||
char key[32];
|
||||
|
||||
if (endptr <= name)
|
||||
return;
|
||||
|
||||
if (endptr - name >= sizeof key)
|
||||
return;
|
||||
|
||||
memcpy (key, name, endptr-name);
|
||||
key[endptr-name] = 0;
|
||||
|
||||
self->nick = g_hash_table_lookup (nicks, key);
|
||||
}
|
||||
|
||||
SysprofElf *
|
||||
sysprof_elf_new (const char *filename,
|
||||
GMappedFile *mapped_file,
|
||||
@ -166,6 +237,20 @@ sysprof_elf_new (const char *filename,
|
||||
self->parser = g_steal_pointer (&parser);
|
||||
self->file_inode = file_inode;
|
||||
|
||||
if (filename != NULL)
|
||||
{
|
||||
const char *base;
|
||||
const char *endptr;
|
||||
|
||||
if ((base = strrchr (filename, '/')))
|
||||
{
|
||||
endptr = strstr (++base, ".so");
|
||||
|
||||
if (endptr != NULL && (endptr[3] == 0 || endptr[3] == '.'))
|
||||
guess_nick (self, base, &endptr[3]);
|
||||
}
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
@ -284,3 +369,11 @@ sysprof_elf_matches (SysprofElf *self,
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
const char *
|
||||
sysprof_elf_get_nick (SysprofElf *self)
|
||||
{
|
||||
g_return_val_if_fail (SYSPROF_IS_ELF (self), NULL);
|
||||
|
||||
return self->nick;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user