mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2025-12-31 20:36:25 +00:00
libsysprof-analyze: add plumbing to track overlays
This just gets the plumbing into place, we'll still need to use it to do the path translations.
This commit is contained in:
@ -146,6 +146,9 @@ _sysprof_document_process_info (SysprofDocument *self,
|
||||
|
||||
g_return_val_if_fail (SYSPROF_IS_DOCUMENT (self), NULL);
|
||||
|
||||
if (pid < 0)
|
||||
return NULL;
|
||||
|
||||
process_info = g_hash_table_lookup (self->pid_to_process_info, GINT_TO_POINTER (pid));
|
||||
|
||||
if (process_info == NULL && may_create)
|
||||
@ -394,6 +397,29 @@ sysprof_document_load_mountinfos (SysprofDocument *self)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
sysprof_document_load_overlays (SysprofDocument *self)
|
||||
{
|
||||
GtkBitsetIter iter;
|
||||
guint i;
|
||||
|
||||
g_assert (SYSPROF_IS_DOCUMENT (self));
|
||||
|
||||
if (gtk_bitset_iter_init_first (&iter, self->overlays, &i))
|
||||
{
|
||||
do
|
||||
{
|
||||
g_autoptr(SysprofDocumentOverlay) overlay = g_list_model_get_item (G_LIST_MODEL (self), i);
|
||||
int pid = sysprof_document_frame_get_pid (SYSPROF_DOCUMENT_FRAME (overlay));
|
||||
SysprofProcessInfo *process_info = _sysprof_document_process_info (self, pid, TRUE);
|
||||
|
||||
if (process_info != NULL)
|
||||
sysprof_mount_namespace_add_overlay (process_info->mount_namespace, overlay);
|
||||
}
|
||||
while (gtk_bitset_iter_next (&iter, &i));
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
sysprof_document_load_worker (GTask *task,
|
||||
gpointer source_object,
|
||||
@ -492,6 +518,7 @@ sysprof_document_load_worker (GTask *task,
|
||||
sysprof_document_load_mounts (self);
|
||||
sysprof_document_load_mountinfos (self);
|
||||
sysprof_document_load_memory_maps (self);
|
||||
sysprof_document_load_overlays (self);
|
||||
|
||||
g_task_return_pointer (task, g_steal_pointer (&self), g_object_unref);
|
||||
}
|
||||
|
||||
@ -24,6 +24,7 @@
|
||||
|
||||
#include "sysprof-mount-private.h"
|
||||
#include "sysprof-mount-device-private.h"
|
||||
#include "sysprof-document-overlay.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
@ -32,12 +33,14 @@ G_BEGIN_DECLS
|
||||
G_DECLARE_FINAL_TYPE (SysprofMountNamespace, sysprof_mount_namespace, SYSPROF, MOUNT_NAMESPACE, GObject)
|
||||
|
||||
SysprofMountNamespace *sysprof_mount_namespace_new (void);
|
||||
SysprofMountNamespace *sysprof_mount_namespace_copy (SysprofMountNamespace *self);
|
||||
void sysprof_mount_namespace_add_device (SysprofMountNamespace *self,
|
||||
SysprofMountDevice *mount);
|
||||
void sysprof_mount_namespace_add_mount (SysprofMountNamespace *self,
|
||||
SysprofMount *mount);
|
||||
char **sysprof_mount_namespace_translate (SysprofMountNamespace *self,
|
||||
const char *path);
|
||||
SysprofMountNamespace *sysprof_mount_namespace_copy (SysprofMountNamespace *self);
|
||||
void sysprof_mount_namespace_add_device (SysprofMountNamespace *self,
|
||||
SysprofMountDevice *mount);
|
||||
void sysprof_mount_namespace_add_mount (SysprofMountNamespace *self,
|
||||
SysprofMount *mount);
|
||||
void sysprof_mount_namespace_add_overlay (SysprofMountNamespace *self,
|
||||
SysprofDocumentOverlay *overlay);
|
||||
char **sysprof_mount_namespace_translate (SysprofMountNamespace *self,
|
||||
const char *path);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
@ -147,6 +147,16 @@ sysprof_mount_namespace_add_mount (SysprofMountNamespace *self,
|
||||
g_ptr_array_add (self->mounts, mount);
|
||||
}
|
||||
|
||||
void
|
||||
sysprof_mount_namespace_add_overlay (SysprofMountNamespace *self,
|
||||
SysprofDocumentOverlay *overlay)
|
||||
{
|
||||
g_return_if_fail (SYSPROF_IS_MOUNT_NAMESPACE (self));
|
||||
g_return_if_fail (SYSPROF_IS_DOCUMENT_OVERLAY (overlay));
|
||||
|
||||
/* TODO */
|
||||
}
|
||||
|
||||
static SysprofMountDevice *
|
||||
sysprof_mount_namespace_find_device (SysprofMountNamespace *self,
|
||||
SysprofMount *mount,
|
||||
|
||||
Reference in New Issue
Block a user