diff --git a/src/libsysprof-analyze/sysprof-document.c b/src/libsysprof-analyze/sysprof-document.c index aab61967..b236d0d6 100644 --- a/src/libsysprof-analyze/sysprof-document.c +++ b/src/libsysprof-analyze/sysprof-document.c @@ -1492,12 +1492,12 @@ sysprof_document_catalog_marks (SysprofDocument *self) 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(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); } - 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); } diff --git a/src/libsysprof-analyze/sysprof-mark-catalog-private.h b/src/libsysprof-analyze/sysprof-mark-catalog-private.h index de86f1c7..94089d4e 100644 --- a/src/libsysprof-analyze/sysprof-mark-catalog-private.h +++ b/src/libsysprof-analyze/sysprof-mark-catalog-private.h @@ -26,7 +26,8 @@ G_BEGIN_DECLS -SysprofMarkCatalog *_sysprof_mark_catalog_new (const char *name, - GListModel *items); +SysprofMarkCatalog *_sysprof_mark_catalog_new (const char *name, + GListModel *items, + SysprofMarkCatalogKind kind); G_END_DECLS diff --git a/src/libsysprof-analyze/sysprof-mark-catalog.c b/src/libsysprof-analyze/sysprof-mark-catalog.c index dd7c83e7..8f8615b8 100644 --- a/src/libsysprof-analyze/sysprof-mark-catalog.c +++ b/src/libsysprof-analyze/sysprof-mark-catalog.c @@ -27,11 +27,13 @@ struct _SysprofMarkCatalog GObject parent_instance; GListModel *items; char *name; + SysprofMarkCatalogKind kind : 1; } SysprofMarkCatalogPrivate; enum { PROP_0, PROP_NAME, + PROP_KIND, N_PROPS }; @@ -88,6 +90,10 @@ sysprof_mark_catalog_get_property (GObject *object, switch (prop_id) { + case PROP_KIND: + g_value_set_enum (value, sysprof_mark_catalog_get_kind (self)); + break; + case PROP_NAME: g_value_set_string (value, sysprof_mark_catalog_get_name (self)); break; @@ -105,6 +111,12 @@ sysprof_mark_catalog_class_init (SysprofMarkCatalogClass *klass) object_class->dispose = sysprof_mark_catalog_dispose; 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] = g_param_spec_string ("name", NULL, NULL, NULL, @@ -127,8 +139,9 @@ sysprof_mark_catalog_get_name (SysprofMarkCatalog *self) } SysprofMarkCatalog * -_sysprof_mark_catalog_new (const char *name, - GListModel *items) +_sysprof_mark_catalog_new (const char *name, + GListModel *items, + SysprofMarkCatalogKind kind) { SysprofMarkCatalog *self; @@ -138,6 +151,19 @@ _sysprof_mark_catalog_new (const char *name, self = g_object_new (SYSPROF_TYPE_MARK_CATALOG, NULL); self->name = g_strdup (name); self->items = g_object_ref (items); + self->kind = kind; 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")) diff --git a/src/libsysprof-analyze/sysprof-mark-catalog.h b/src/libsysprof-analyze/sysprof-mark-catalog.h index 9ed89093..33756481 100644 --- a/src/libsysprof-analyze/sysprof-mark-catalog.h +++ b/src/libsysprof-analyze/sysprof-mark-catalog.h @@ -27,11 +27,22 @@ G_BEGIN_DECLS #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 G_DECLARE_FINAL_TYPE (SysprofMarkCatalog, sysprof_mark_catalog, SYSPROF, MARK_CATALOG, GObject) 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 diff --git a/src/libsysprof-analyze/tests/test-mark-catalog.c b/src/libsysprof-analyze/tests/test-mark-catalog.c index ed57c2e4..74422e76 100644 --- a/src/libsysprof-analyze/tests/test-mark-catalog.c +++ b/src/libsysprof-analyze/tests/test-mark-catalog.c @@ -58,6 +58,7 @@ main (int argc, g_assert (SYSPROF_IS_MARK_CATALOG (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); @@ -67,8 +68,9 @@ main (int argc, const char *name = sysprof_mark_catalog_get_name (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 (G_IS_LIST_MODEL (catalog)); + g_assert (SYSPROF_IS_MARK_CATALOG (name_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);