libsysprof-analyze: add mark catalog kind

We can use this to separate catalogs for names vs groups when building
tree models of them.
This commit is contained in:
Christian Hergert
2023-06-15 11:52:15 -07:00
parent 8b4ab761ab
commit 9a762fa1d4
5 changed files with 49 additions and 9 deletions

View File

@ -1492,12 +1492,12 @@ sysprof_document_catalog_marks (SysprofDocument *self)
while (g_hash_table_iter_next (&name_iter, (gpointer *)&name, (gpointer *)&marks)) while (g_hash_table_iter_next (&name_iter, (gpointer *)&name, (gpointer *)&marks))
{ {
g_autoptr(GListModel) model = _sysprof_document_bitset_index_new (G_LIST_MODEL (self), marks); g_autoptr(GListModel) model = _sysprof_document_bitset_index_new (G_LIST_MODEL (self), marks);
g_autoptr(SysprofMarkCatalog) names_catalog = _sysprof_mark_catalog_new (name, model); g_autoptr(SysprofMarkCatalog) names_catalog = _sysprof_mark_catalog_new (name, model, SYSPROF_MARK_CATALOG_KIND_NAME);
g_list_store_append (names_store, names_catalog); g_list_store_append (names_store, names_catalog);
} }
group = _sysprof_mark_catalog_new (group_name, G_LIST_MODEL (names_store)); group = _sysprof_mark_catalog_new (group_name, G_LIST_MODEL (names_store), SYSPROF_MARK_CATALOG_KIND_GROUP);
g_list_store_append (store, group); g_list_store_append (store, group);
} }

View File

@ -26,7 +26,8 @@
G_BEGIN_DECLS G_BEGIN_DECLS
SysprofMarkCatalog *_sysprof_mark_catalog_new (const char *name, SysprofMarkCatalog *_sysprof_mark_catalog_new (const char *name,
GListModel *items); GListModel *items,
SysprofMarkCatalogKind kind);
G_END_DECLS G_END_DECLS

View File

@ -27,11 +27,13 @@ struct _SysprofMarkCatalog
GObject parent_instance; GObject parent_instance;
GListModel *items; GListModel *items;
char *name; char *name;
SysprofMarkCatalogKind kind : 1;
} SysprofMarkCatalogPrivate; } SysprofMarkCatalogPrivate;
enum { enum {
PROP_0, PROP_0,
PROP_NAME, PROP_NAME,
PROP_KIND,
N_PROPS N_PROPS
}; };
@ -88,6 +90,10 @@ sysprof_mark_catalog_get_property (GObject *object,
switch (prop_id) switch (prop_id)
{ {
case PROP_KIND:
g_value_set_enum (value, sysprof_mark_catalog_get_kind (self));
break;
case PROP_NAME: case PROP_NAME:
g_value_set_string (value, sysprof_mark_catalog_get_name (self)); g_value_set_string (value, sysprof_mark_catalog_get_name (self));
break; break;
@ -105,6 +111,12 @@ sysprof_mark_catalog_class_init (SysprofMarkCatalogClass *klass)
object_class->dispose = sysprof_mark_catalog_dispose; object_class->dispose = sysprof_mark_catalog_dispose;
object_class->get_property = sysprof_mark_catalog_get_property; object_class->get_property = sysprof_mark_catalog_get_property;
properties[PROP_KIND] =
g_param_spec_enum ("kind", NULL, NULL,
SYSPROF_TYPE_MARK_CATALOG_KIND,
SYSPROF_MARK_CATALOG_KIND_GROUP,
(G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
properties[PROP_NAME] = properties[PROP_NAME] =
g_param_spec_string ("name", NULL, NULL, g_param_spec_string ("name", NULL, NULL,
NULL, NULL,
@ -127,8 +139,9 @@ sysprof_mark_catalog_get_name (SysprofMarkCatalog *self)
} }
SysprofMarkCatalog * SysprofMarkCatalog *
_sysprof_mark_catalog_new (const char *name, _sysprof_mark_catalog_new (const char *name,
GListModel *items) GListModel *items,
SysprofMarkCatalogKind kind)
{ {
SysprofMarkCatalog *self; SysprofMarkCatalog *self;
@ -138,6 +151,19 @@ _sysprof_mark_catalog_new (const char *name,
self = g_object_new (SYSPROF_TYPE_MARK_CATALOG, NULL); self = g_object_new (SYSPROF_TYPE_MARK_CATALOG, NULL);
self->name = g_strdup (name); self->name = g_strdup (name);
self->items = g_object_ref (items); self->items = g_object_ref (items);
self->kind = kind;
return self; return self;
} }
SysprofMarkCatalogKind
sysprof_mark_catalog_get_kind (SysprofMarkCatalog *self)
{
g_return_val_if_fail (SYSPROF_IS_MARK_CATALOG (self), 0);
return self->kind;
}
G_DEFINE_ENUM_TYPE (SysprofMarkCatalogKind, sysprof_mark_catalog_kind,
G_DEFINE_ENUM_VALUE (SYSPROF_MARK_CATALOG_KIND_GROUP, "group"),
G_DEFINE_ENUM_VALUE (SYSPROF_MARK_CATALOG_KIND_NAME, "name"))

View File

@ -27,11 +27,22 @@
G_BEGIN_DECLS G_BEGIN_DECLS
#define SYSPROF_TYPE_MARK_CATALOG (sysprof_mark_catalog_get_type()) #define SYSPROF_TYPE_MARK_CATALOG (sysprof_mark_catalog_get_type())
#define SYSPROF_TYPE_MARK_CATALOG_KIND (sysprof_mark_catalog_kind_get_type())
typedef enum _SysprofMarkCatalogKind
{
SYSPROF_MARK_CATALOG_KIND_GROUP,
SYSPROF_MARK_CATALOG_KIND_NAME,
} SysprofMarkCatalogKind;
SYSPROF_AVAILABLE_IN_ALL SYSPROF_AVAILABLE_IN_ALL
G_DECLARE_FINAL_TYPE (SysprofMarkCatalog, sysprof_mark_catalog, SYSPROF, MARK_CATALOG, GObject) G_DECLARE_FINAL_TYPE (SysprofMarkCatalog, sysprof_mark_catalog, SYSPROF, MARK_CATALOG, GObject)
SYSPROF_AVAILABLE_IN_ALL SYSPROF_AVAILABLE_IN_ALL
const char *sysprof_mark_catalog_get_name (SysprofMarkCatalog *self); GType sysprof_mark_catalog_kind_get_type (void) G_GNUC_CONST;
SYSPROF_AVAILABLE_IN_ALL
const char *sysprof_mark_catalog_get_name (SysprofMarkCatalog *self);
SYSPROF_AVAILABLE_IN_ALL
SysprofMarkCatalogKind sysprof_mark_catalog_get_kind (SysprofMarkCatalog *self);
G_END_DECLS G_END_DECLS

View File

@ -58,6 +58,7 @@ main (int argc,
g_assert (SYSPROF_IS_MARK_CATALOG (catalog)); g_assert (SYSPROF_IS_MARK_CATALOG (catalog));
g_assert (G_IS_LIST_MODEL (catalog)); g_assert (G_IS_LIST_MODEL (catalog));
g_assert (sysprof_mark_catalog_get_kind (catalog) == SYSPROF_MARK_CATALOG_KIND_GROUP);
g_print ("%s\n", group); g_print ("%s\n", group);
@ -67,8 +68,9 @@ main (int argc,
const char *name = sysprof_mark_catalog_get_name (name_catalog); const char *name = sysprof_mark_catalog_get_name (name_catalog);
guint n_marks = g_list_model_get_n_items (G_LIST_MODEL (name_catalog)); guint n_marks = g_list_model_get_n_items (G_LIST_MODEL (name_catalog));
g_assert (SYSPROF_IS_MARK_CATALOG (catalog)); g_assert (SYSPROF_IS_MARK_CATALOG (name_catalog));
g_assert (G_IS_LIST_MODEL (catalog)); g_assert (G_IS_LIST_MODEL (name_catalog));
g_assert (sysprof_mark_catalog_get_kind (name_catalog) == SYSPROF_MARK_CATALOG_KIND_NAME);
g_print (" %s\n", name); g_print (" %s\n", name);