Commit Graph

12 Commits (693ffb073b92907730c987320558ff668707d8a9)

Author SHA1 Message Date
Ran Benita 5d297c5012 scripts: update license note in perfect_hash.py
Ref: https://github.com/ilanschnell/perfect-hash/issues/5

Signed-off-by: Ran Benita <ran@unusedvar.com>
2021-04-08 10:14:15 +03:00
Ran Benita 45b1ca2205 keysym: speed up the perfect hash function
Make it use a bit operation instead of an expensive modulo.

perf diff:

    Baseline  Delta Abs  Shared Object      Symbol
    ........  .........  .................  ...................................

      28.15%     -6.57%  bench-compose      [.] xkb_keysym_from_name

Signed-off-by: Ran Benita <ran@unusedvar.com>
2021-04-01 22:52:59 +03:00
Ran Benita 68e69b7deb keysym: use a perfect hash function for case sensitive xkb_keysym_from_name
In 7d84809fdc I added a fast path for the
case-sensitive case, but it is still slowing down Compose parsing.

Instead of the binary search, use a perfect hash function, computed with
a simple python module I found (vendored).

It is faster -- perf diff is:

   Baseline  Delta Abs  Shared Object      Symbol
   ........  .........  .................  ...................................

     22.35%    -14.04%  libc-2.33.so       [.] __strcmp_avx2
     16.75%    +10.28%  bench-compose      [.] xkb_keysym_from_name
     20.72%     +2.40%  bench-compose      [.] parse.constprop.0
      2.29%     -1.97%  bench-compose      [.] strcmp@plt
      2.56%     +1.81%  bench-compose      [.] resolve_name
      2.37%     +0.92%  libc-2.33.so       [.] __GI_____strtoull_l_internal
     26.19%     -0.63%  bench-compose      [.] lex
      1.45%     +0.56%  libc-2.33.so       [.] __memchr_avx2
      1.13%     -0.31%  libc-2.33.so       [.] __strcpy_avx2

Also reduces the binary size:

Before:

      text    data     bss     dec     hex filename
    341111    5064       8  346183   54847 build/libxkbcommon.so.0.0.0

After:

      text    data     bss     dec     hex filename
    330215    5064       8  335287   51db7 build/libxkbcommon.so.0.0.0

Note however that it's still larger than before 7d84809fdccbb5898d08388:

      text    data     bss     dec     hex filename
    320617    5168       8  325793   4f8a1 build/libxkbcommon.so.0.0.0

Signed-off-by: Ran Benita <ran@unusedvar.com>
2021-04-01 20:06:59 +03:00
Ran Benita 7d84809fdc keysym: fast path for case sensitive xkb_keysym_from_name
xkb_keysym_from_name() is called a lot in Compose file parsing. The
lower case handling slows things down a lot (particularly given we can't
use the optimized strcasecmp() due to locale issues). So add separate
handling for the non-case-sensitive case which is used by Compose.

To do this we need to add another version of the ks_tables table. This
adds ~20kb to the shared library binary. We can probably do something
better here but I think it's fine.

Signed-off-by: Ran Benita <ran@unusedvar.com>
2021-03-28 16:11:36 +03:00
Ran Benita 2dd391b66e scripts: remove meson-junit-report.py
Not used since ed5a0b4fed.

Signed-off-by: Ran Benita <ran@unusedvar.com>
2021-02-27 21:38:02 +02:00
Peter Hutterer 3852106a8e scripts: update makeheader script for the _EVDEVK keysym defines
As of xorgproto commit 5dbb5b76597f [1], the 0x10081XXX keycode range is defined
for direct evdev kernel keycode mapping. For example, KEY_MACRO1 (0x290) is
mapped to 0x10081290. The format of the #define lines for these keys is
stable to allow for parsing:

  #define XF86XK_FooBar _EVDEVK(0x123) /* optional comment */

Update our script so we detect these new lines. Our keysym generation is a
two-step process: makeheader and then makekeys. Replacing the key with its full
value in the makeheader script means we don't have to update makekeys to handle
the _EVDEVK macro and our header file is fully resolved.

[1] https://gitlab.freedesktop.org/xorg/proto/xorgproto/-/merge_requests/23

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2021-02-22 13:43:16 +02:00
Ran Benita 670566f0d4 Only add GCC diagnostic pragmas when compiler is GCC compatible
Avoid "unknown pragma" warnings on other compilers.

Signed-off-by: Ran Benita <ran@unusedvar.com>
2019-12-27 15:20:25 +02:00
Ran Benita 90497b84f8 scripts/makeheader: slight simplification
Signed-off-by: Ran Benita <ran@unusedvar.com>
2019-10-31 21:21:35 +02:00
Sebastian Wick f0c0cb8074 scripts/makeheader: allow overriding the prefix path of the X11 headers
with X11_HEADERS_PREFIX

Signed-off-by: Sebastian Wick <sebastian@sebastianwick.net>
2019-10-31 21:20:08 +02:00
Adrian Perez de Castro c408adc229 CI: Publish test results from Meson 2019-08-09 23:01:27 +03:00
Ran Benita 41bea9ab2b build: make doxygen run from the source tree
I couldn't find any other way to make this work!

Signed-off-by: Ran Benita <ran234@gmail.com>
2017-08-01 23:32:15 +03:00
Ran Benita 0a19267f30 build: move custom targets to scripts/ and remove from makefile
These scripts generate source code that is committed to git and hence do
not really belong in the build system. A maintainer runs them as needed.

Signed-off-by: Ran Benita <ran234@gmail.com>
2017-07-31 15:55:48 +03:00