libsysprof: allow specifying type in index model

This commit is contained in:
Christian Hergert
2023-08-14 21:48:51 -07:00
parent 999e0a69e9
commit c576df92db
3 changed files with 26 additions and 8 deletions

View File

@ -29,7 +29,10 @@ G_BEGIN_DECLS
G_DECLARE_FINAL_TYPE (SysprofDocumentBitsetIndex, sysprof_document_bitset_index, SYSPROF, DOCUMENT_BITSET_INDEX, GObject) G_DECLARE_FINAL_TYPE (SysprofDocumentBitsetIndex, sysprof_document_bitset_index, SYSPROF, DOCUMENT_BITSET_INDEX, GObject)
GListModel *_sysprof_document_bitset_index_new (GListModel *model, GListModel *_sysprof_document_bitset_index_new (GListModel *model,
EggBitset *bitset); EggBitset *bitset);
GListModel *_sysprof_document_bitset_index_new_full (GListModel *model,
EggBitset *bitset,
GType type);
G_END_DECLS G_END_DECLS

View File

@ -27,6 +27,7 @@ struct _SysprofDocumentBitsetIndex
GObject parent_instance; GObject parent_instance;
GListModel *model; GListModel *model;
EggBitset *bitset; EggBitset *bitset;
GType type;
}; };
static GType static GType
@ -34,6 +35,9 @@ sysprof_document_bitset_index_get_item_type (GListModel *model)
{ {
SysprofDocumentBitsetIndex *self = SYSPROF_DOCUMENT_BITSET_INDEX (model); SysprofDocumentBitsetIndex *self = SYSPROF_DOCUMENT_BITSET_INDEX (model);
if (self->type)
return self->type;
if (self->model != NULL) if (self->model != NULL)
return g_list_model_get_item_type (self->model); return g_list_model_get_item_type (self->model);
@ -138,8 +142,9 @@ sysprof_document_bitset_index_init (SysprofDocumentBitsetIndex *self)
} }
GListModel * GListModel *
_sysprof_document_bitset_index_new (GListModel *model, _sysprof_document_bitset_index_new_full (GListModel *model,
EggBitset *bitset) EggBitset *bitset,
GType type)
{ {
SysprofDocumentBitsetIndex *self; SysprofDocumentBitsetIndex *self;
@ -149,6 +154,14 @@ _sysprof_document_bitset_index_new (GListModel *model,
self = g_object_new (SYSPROF_TYPE_DOCUMENT_BITSET_INDEX, NULL); self = g_object_new (SYSPROF_TYPE_DOCUMENT_BITSET_INDEX, NULL);
self->model = g_object_ref (model); self->model = g_object_ref (model);
self->bitset = egg_bitset_ref (bitset); self->bitset = egg_bitset_ref (bitset);
self->type = type;
return G_LIST_MODEL (self); return G_LIST_MODEL (self);
} }
GListModel *
_sysprof_document_bitset_index_new (GListModel *model,
EggBitset *bitset)
{
return _sysprof_document_bitset_index_new_full (model, bitset, G_TYPE_INVALID);
}

View File

@ -32,6 +32,7 @@
#include "sysprof-bundled-symbolizer-private.h" #include "sysprof-bundled-symbolizer-private.h"
#include "sysprof-callgraph-private.h" #include "sysprof-callgraph-private.h"
#include "sysprof-cpu-info-private.h" #include "sysprof-cpu-info-private.h"
#include "sysprof-document-allocation.h"
#include "sysprof-document-bitset-index-private.h" #include "sysprof-document-bitset-index-private.h"
#include "sysprof-document-counter-private.h" #include "sysprof-document-counter-private.h"
#include "sysprof-document-ctrdef.h" #include "sysprof-document-ctrdef.h"
@ -43,6 +44,7 @@
#include "sysprof-document-mmap.h" #include "sysprof-document-mmap.h"
#include "sysprof-document-overlay.h" #include "sysprof-document-overlay.h"
#include "sysprof-document-process-private.h" #include "sysprof-document-process-private.h"
#include "sysprof-document-sample.h"
#include "sysprof-document-symbols-private.h" #include "sysprof-document-symbols-private.h"
#include "sysprof-mark-catalog-private.h" #include "sysprof-mark-catalog-private.h"
#include "sysprof-mount-private.h" #include "sysprof-mount-private.h"
@ -1789,7 +1791,7 @@ sysprof_document_list_allocations (SysprofDocument *self)
{ {
g_return_val_if_fail (SYSPROF_IS_DOCUMENT (self), NULL); g_return_val_if_fail (SYSPROF_IS_DOCUMENT (self), NULL);
return _sysprof_document_bitset_index_new (G_LIST_MODEL (self), self->allocations); return _sysprof_document_bitset_index_new_full (G_LIST_MODEL (self), self->allocations, SYSPROF_TYPE_DOCUMENT_ALLOCATION);
} }
/** /**
@ -1806,7 +1808,7 @@ sysprof_document_list_samples (SysprofDocument *self)
{ {
g_return_val_if_fail (SYSPROF_IS_DOCUMENT (self), NULL); g_return_val_if_fail (SYSPROF_IS_DOCUMENT (self), NULL);
return _sysprof_document_bitset_index_new (G_LIST_MODEL (self), self->samples); return _sysprof_document_bitset_index_new_full (G_LIST_MODEL (self), self->samples, SYSPROF_TYPE_DOCUMENT_SAMPLE);
} }
/** /**
@ -1823,7 +1825,7 @@ sysprof_document_list_samples_with_context_switch (SysprofDocument *self)
{ {
g_return_val_if_fail (SYSPROF_IS_DOCUMENT (self), NULL); g_return_val_if_fail (SYSPROF_IS_DOCUMENT (self), NULL);
return _sysprof_document_bitset_index_new (G_LIST_MODEL (self), self->samples_with_context_switch); return _sysprof_document_bitset_index_new_full (G_LIST_MODEL (self), self->samples_with_context_switch, SYSPROF_TYPE_DOCUMENT_SAMPLE);
} }
/** /**
@ -1845,7 +1847,7 @@ sysprof_document_list_samples_without_context_switch (SysprofDocument *self)
bitset = egg_bitset_copy (self->samples); bitset = egg_bitset_copy (self->samples);
egg_bitset_subtract (bitset, self->samples_with_context_switch); egg_bitset_subtract (bitset, self->samples_with_context_switch);
return _sysprof_document_bitset_index_new (G_LIST_MODEL (self), bitset); return _sysprof_document_bitset_index_new_full (G_LIST_MODEL (self), bitset, SYSPROF_TYPE_DOCUMENT_SAMPLE);
} }
/** /**