Keyman cross platform input methods system running on Android, iOS, Linux, macOS, Windows and mobile and desktop web
Find a file
Marc Durdin d2acfdec5c fix(developer): improve kmcmplib/kmw compiler performance
Fixes #9154.

Improves performance in both kmcmplib and in kmc-kmn/kmw-compiler. After
these changes are applied, vietnamese_telex keyboard builds in around 6
seconds on my machine (down from over 2 minutes). This is certainly only
the surface of performance improvements we could make.

Addresses excessive memory reallocations in kmcmplib, by reallocating
store and key arrays in large chunks of 100 items rather than
reallocating on each new item added. This resulted in a 250x speed-up on
functions such as `AddStore` in WASM build.

Some careful modulus arithmetic was needed for resizing the key array,
which can be grown in larger increments.

Resolved excessive zeroing out of destination buffer in u16ncpy, which
was being called with an 8kb destination buffer on every line of the
file.

In the kmw side, vast majority of the performance cost was in copying of
buffers while loading a .kmx into memory, rather than creating views
into the memory. Essentially replaced this pattern:

```
return this.rString.fromBuffer(source.slice(offset));
```

with:

```
const data = new Uint8Array(source.buffer, source.byteOffset + offset);
return this.rString.fromBuffer(data);
```
2023-07-04 14:36:25 +07:00
.github chore(common): Bump crowdin github action to 1.3.2 2023-06-16 05:55:25 -05:00
android Merge branch 'master' into feature-esmodule-web-engine 2023-06-26 09:09:43 +07:00
common fix(developer): improve kmcmplib/kmw compiler performance 2023-07-04 14:36:25 +07:00
core Merge pull request #9049 from keymanapp/feat/core-7377-reorder-parse-epic-ldml 2023-06-23 12:45:48 -05:00
developer fix(developer): improve kmcmplib/kmw compiler performance 2023-07-04 14:36:25 +07:00
docs Merge branch 'master' into feature-esmodule-web-engine 2023-06-26 09:09:43 +07:00
ios Merge branch 'master' into feature-esmodule-web-engine 2023-06-26 09:09:43 +07:00
linux chore(common): Update crowdin strings for Spanish - Latin America 2023-06-19 12:35:45 -05:00
mac chore(mac): updates mac platform with 'es' l10n 2023-06-20 13:40:28 +07:00
oem/firstvoices chore(ios): replace fv cert 2023-06-01 07:07:00 +07:00
resources Merge branch 'master' into feature-esmodule-web-engine 2023-06-26 09:09:43 +07:00
web Merge pull request #9036 from keymanapp/docs/web/public-api-clarity 2023-06-21 10:20:48 +07:00
windows chore: Merge branch 'feature-kmc-kmw' into chore/merge-master-into-feature-kmc-kmw-a17s16-start 2023-06-26 14:33:20 +07:00
.clang-format chore(common): Add C++ formatting rules 2021-07-29 18:50:25 +02:00
.editorconfig chore(linux): Address a few more lintian warnings 2022-03-15 15:32:10 +01:00
.eslintrc.cjs chore(developer): add eslint devDependency for kmc 2023-04-25 13:44:56 +07:00
.flake8 chore(linux): Add integration tests for ibus-keyman 2021-11-04 09:22:28 +01:00
.gitignore chore(developer): fixup tests and build process 2023-03-17 04:31:03 +07:00
.nycrc.json feat(developer): fixup and prepare build scripts and docs for kmc 2022-09-19 06:36:06 +10:00
.shellcheckrc chore(linux): Properly fix shellcheck SC1091 warnings 2023-05-11 11:59:15 +02:00
CODE_OF_CONDUCT.md Create CODE_OF_CONDUCT.md 2021-10-08 10:46:53 +11:00
configure-repo.sh chore: update docs and non-standard readlink refs 2023-02-22 10:41:54 +07:00
CONTRIBUTING.md chore(linux): Fix lintian warnings 2022-03-10 20:30:44 +01:00
crowdin.yml chore(common): Update Kannada strings 2023-02-07 21:39:23 +07:00
HISTORY.md auto: increment master version to 17.0.130 2023-06-23 14:41:44 -04:00
LICENSE.md chore: license date 2022-03-15 13:59:27 +11:00
package-lock.json chore: Merge branch 'feature-kmc-kmw' into chore/merge-master-into-feature-kmc-kmw-a17s16-start 2023-06-26 14:33:20 +07:00
package.json chore: Merge branch 'feature-kmc-kmw' into chore/merge-master-into-feature-kmc-kmw-a17s16-start 2023-06-26 14:33:20 +07:00
README.md Update README.md 2021-10-08 18:06:46 +11:00
TIER.md chore: restore TIER and VERSION to 16 alpha 2022-03-15 15:09:17 +11:00
tsconfig-base.json chore(web): Merge branch 'change/web/element-wrapper-modularization' into change/web/osk-modularization 2023-02-03 08:49:02 +07:00
tsconfig.cjs.json chore: base-repo tsconfig cleanup attempt 2023-05-23 13:21:18 +07:00
tsconfig.esm-base.json fix(developer): updates kmc, web/types module resolution, adds missing type import/exports 2023-03-14 08:41:29 +07:00
tsconfig.esm.json chore: Merge branch 'feature-kmc-kmw' into chore/merge-master-into-feature-kmc-kmw-a17s16-start 2023-06-26 14:33:20 +07:00
VERSION.md auto: increment master version to 17.0.130 2023-06-23 14:41:44 -04:00

Keyman

Keyman makes it possible for you to type in any language on Windows, macOS, Linux, iPhone, iPad, Android tablets and phones, and even instantly in your web browser. Create keyboard layouts with Keyman Developer and share them with the community in the keyboards repository. The Keyman Community have already contributed keyboard layouts for over 2,000 languages!

License

Copyright (c) SIL International.

Keyman is an open source project distributed under the MIT license.

Get Involved

Development Status

Important Links