diff options
author | Adrian Salido <salidoa@google.com> | 2018-07-09 13:31:11 -0700 |
---|---|---|
committer | Adrian Salido <salidoa@google.com> | 2018-07-09 16:28:12 -0700 |
commit | c5371788edf2e8d8cea7365475ce89ed786c6320 (patch) | |
tree | 913e1b5b348ceba02989eae9bc6d8dac5334ecd4 | |
parent | 8965152a5b26a0063c9070d42f95769ddc5b97c3 (diff) | |
download | libdrm-pie-b4s4-dev.tar.gz |
libdrm: reduce number of reallocations in drmModeAtomicAddPropertyandroid-9.0.0_r47android-9.0.0_r46android-9.0.0_r45android-9.0.0_r44android-9.0.0_r43android-9.0.0_r42android-9.0.0_r41android-9.0.0_r40android-9.0.0_r39android-9.0.0_r38android-9.0.0_r37android-9.0.0_r36android-9.0.0_r35android-9.0.0_r34android-9.0.0_r33android-9.0.0_r32android-9.0.0_r31android-9.0.0_r30android-9.0.0_r22android-9.0.0_r21android-9.0.0_r20android-9.0.0_r19android-9.0.0_r16pie-qpr3-s1-releasepie-qpr3-releasepie-qpr3-b-releasepie-qpr2-releasepie-qpr1-s3-releasepie-qpr1-s2-releasepie-qpr1-s1-releasepie-qpr1-releasepie-dr1-devpie-b4s4-releasepie-b4s4-dev
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.c | 7 |
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; |