sortlistmodel: Use timsort

Simply replace the old qsort() call with a timsort() call.

This is ultimately relevant because timsort is a LOT faster in merging
to already sorted lists (think items-chaged adding some items) or
reversing an existing list (think columnview sort order changes).

Benchmarks:

    initially sorting the model
                    qsort  timsort
    128,000 items   124ms    111ms
    256,000 items   264ms    250ms
This commit is contained in:
Benjamin Otte 2020-07-17 02:47:22 +02:00
parent 97c5cb3514
commit 800170b47d

View File

@ -23,6 +23,7 @@
#include "gtkintl.h"
#include "gtkprivate.h"
#include "gtktimsortprivate.h"
typedef struct _SortItem SortItem;
struct _SortItem
@ -176,11 +177,11 @@ sort_func (gconstpointer a,
static void
gtk_sort_list_model_resort (GtkSortListModel *self)
{
g_qsort_with_data (sort_array_get_data (&self->items),
sort_array_get_size (&self->items),
sizeof (SortItem),
sort_func,
self->sorter);
gtk_tim_sort (sort_array_get_data (&self->items),
sort_array_get_size (&self->items),
sizeof (SortItem),
sort_func,
self->sorter);
}
static void