aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Salido <salidoa@google.com>2018-07-09 13:31:11 -0700
committerAdrian Salido <salidoa@google.com>2018-07-09 16:28:12 -0700
commitc5371788edf2e8d8cea7365475ce89ed786c6320 (patch)
tree913e1b5b348ceba02989eae9bc6d8dac5334ecd4
parent8965152a5b26a0063c9070d42f95769ddc5b97c3 (diff)
downloadlibdrm-pie-b4s4-release.tar.gz
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. Bug: 111047515 Change-Id: I043db1e7608b0a606adf1a6e468c90734372f363
-rw-r--r--xf86drmMode.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/xf86drmMode.c b/xf86drmMode.c
index e1c99742..2876b422 100644
--- a/xf86drmMode.c
+++ b/xf86drmMode.c
@@ -1507,7 +1507,7 @@ 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;
}
@@ -1566,12 +1566,13 @@ 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;