mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2026-02-12 16:10:54 +00:00
libsysprof: provide escape patch for listing traceables
We don't want this to get out of hand, so limit it to 1000 for now.
This commit is contained in:
@ -323,6 +323,7 @@ typedef struct _FilterByPrefix
|
|||||||
GListModel *traceables;
|
GListModel *traceables;
|
||||||
GPtrArray *prefix;
|
GPtrArray *prefix;
|
||||||
EggBitset *bitset;
|
EggBitset *bitset;
|
||||||
|
guint max_results;
|
||||||
} FilterByPrefix;
|
} FilterByPrefix;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -347,6 +348,7 @@ filter_by_prefix_worker (GTask *task,
|
|||||||
GListModel *model;
|
GListModel *model;
|
||||||
GPtrArray *prefix;
|
GPtrArray *prefix;
|
||||||
EggBitsetIter iter;
|
EggBitsetIter iter;
|
||||||
|
guint n_results = 0;
|
||||||
guint i;
|
guint i;
|
||||||
|
|
||||||
g_assert (G_IS_TASK (task));
|
g_assert (G_IS_TASK (task));
|
||||||
@ -371,9 +373,13 @@ filter_by_prefix_worker (GTask *task,
|
|||||||
g_autoptr(SysprofDocumentTraceable) traceable = g_list_model_get_item (model, i);
|
g_autoptr(SysprofDocumentTraceable) traceable = g_list_model_get_item (model, i);
|
||||||
|
|
||||||
if (traceable_has_prefix (document, traceable, prefix))
|
if (traceable_has_prefix (document, traceable, prefix))
|
||||||
egg_bitset_add (bitset, i);
|
{
|
||||||
|
egg_bitset_add (bitset, i);
|
||||||
|
n_results++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
while (egg_bitset_iter_next (&iter, &i));
|
while (n_results < state->max_results &&
|
||||||
|
egg_bitset_iter_next (&iter, &i));
|
||||||
}
|
}
|
||||||
|
|
||||||
g_task_return_pointer (task,
|
g_task_return_pointer (task,
|
||||||
@ -483,6 +489,7 @@ sysprof_callgraph_frame_list_traceables_async (SysprofCallgraphFrame *self,
|
|||||||
state->traceables = g_object_ref (self->callgraph->traceables);
|
state->traceables = g_object_ref (self->callgraph->traceables);
|
||||||
state->prefix = g_steal_pointer (&prefix);
|
state->prefix = g_steal_pointer (&prefix);
|
||||||
state->bitset = g_steal_pointer (&bitset);
|
state->bitset = g_steal_pointer (&bitset);
|
||||||
|
state->max_results = 1000;
|
||||||
|
|
||||||
g_task_set_task_data (task, state, (GDestroyNotify)filter_by_prefix_free);
|
g_task_set_task_data (task, state, (GDestroyNotify)filter_by_prefix_free);
|
||||||
g_task_run_in_thread (task, filter_by_prefix_worker);
|
g_task_run_in_thread (task, filter_by_prefix_worker);
|
||||||
|
|||||||
Reference in New Issue
Block a user