[RFC][PATCH 4/5] libdrm: reduce number of reallocations in drmModeAtomicAddProperty
Alex Deucher
alexdeucher at gmail.com
Mon Apr 22 15:06:12 UTC 2019
On Sat, Apr 20, 2019 at 12:25 AM John Stultz <john.stultz at linaro.org> wrote:
>
> From: Adrian Salido <salidoa at google.com>
>
> When calling drmModeAtomicAddProperty allocation of memory happens as
> needed in increments of 16 elements. This can be very slow if there are
> multiple properties to be updated in an Atomic Commit call.
>
> Increase this to as many as can fit in a memory PAGE to avoid having to
> reallocate memory too often.
>
> Cc: Emil Velikov <emil.velikov at collabora.com>
> Cc: Sean Paul <seanpaul at chromium.org>
> Cc: Alistair Strachan <astrachan at google.com>
> Cc: Marissa Wall <marissaw at google.com>
> Signed-off-by: John Stultz <john.stultz at linaro.org>
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
> ---
> xf86drmMode.c | 7 ++++---
> 1 file changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/xf86drmMode.c b/xf86drmMode.c
> index 8f8633e..c878d9e 100644
> --- a/xf86drmMode.c
> +++ b/xf86drmMode.c
> @@ -1259,7 +1259,7 @@ drm_public drmModeAtomicReqPtr drmModeAtomicDuplicate(drmModeAtomicReqPtr old)
> return NULL;
> }
> memcpy(new->items, old->items,
> - old->size_items * sizeof(*new->items));
> + old->cursor * sizeof(*new->items));
> } else {
> new->items = NULL;
> }
> @@ -1322,12 +1322,13 @@ drm_public int drmModeAtomicAddProperty(drmModeAtomicReqPtr req,
> return -EINVAL;
>
> if (req->cursor >= req->size_items) {
> + const uint32_t item_size_inc = getpagesize() / sizeof(*req->items);
> drmModeAtomicReqItemPtr new;
>
> - req->size_items += 16;
> + req->size_items += item_size_inc;
> new = realloc(req->items, req->size_items * sizeof(*req->items));
> if (!new) {
> - req->size_items -= 16;
> + req->size_items -= item_size_inc;
> return -ENOMEM;
> }
> req->items = new;
> --
> 2.7.4
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
More information about the dri-devel
mailing list