Commit graph

68 commits

Author SHA1 Message Date
Marc Durdin
909d833474 fix(web): improve keyboard switch performance
Summary of these changes:

Two targeted improvements; more optimization is possible but IMO this is
a significant enough improvement to go through test:

1. In oskView.ts, avoid calling `VisualKeyboard.refreshLayout` twice
   from `OSKView.refreshLayout`. This roughly halves the time spent in
   `VisualKeyboard.refreshLayout` for a keyboard switch.
2. In modelManager.ts, we avoid a very expensive `unloadModel` /
   `loadModel` sequence from `registerModel` by checking to see if the
   model spec we are passed is already registered. This avoids an
   expensive callback to Keyman for Android which causes the banner to
   'bounce'.

Longer notes:

So `VisualKeyboard.refreshLayout` is called 20+ times during a keyboard
switch. It is a very expensive call. It is the bulk of the time spent
when you press the globe key in Keyman for Android. This seems ripe for
optimization; see the following functions in keyboard.html:

* `setKeymanLanguage` -> `setActiveKeyboard` -> 6 calls
* `enableSuggestions` -> `registerModel` -> 8 calls
* `stateChange` -> 6+ calls

`OSKView.refreshLayout` always seems to call
`VisualKeyboard.refreshLayout` twice: first with `setSize`, and then
again itself.

Keyman for Android and KeymanWeb seem to fight over who is responsible
for selecting models (KMW first calls `loadModel`, then Keyman for
Android calls `unloadModel`, `loadModel`, through `enableSuggestions`).

The fix for rotation (`correctOSKTextSize()`), as called from
`stateChange()`, is expensive as well, because it rebuilds the entire
keyboard from scratch.

Along with that, we have the size of the webview changing as the model
is unloaded and reloaded and lots of back-and-forth between the
KeymanWeb and KMEA which seems unnecessary.

Shouldn't KeymanWeb be responsible for loading and unloading models,
once they are all registered? We should only need to register the models
once at page load time (when config changes, do we just reload the
page?).
2021-11-22 10:47:05 +11:00
jahorton
4a96254cbc fix(web): allows refresh of currently-loaded model 2021-03-19 11:40:58 +07:00
jahorton
5c709f9468 chore(web/engine): post-rebase cleanup 2020-04-24 14:35:52 +07:00
jahorton
add1e32b17 change(web/engine): splits off input-processor into own module 2020-04-24 14:35:48 +07:00
jahorton
1eed004296 change(web): package rename + patchup 2020-04-24 13:53:39 +07:00
jahorton
373196dded change(web/engine): splits off the core/web/keyboard-processor module 2020-04-24 13:45:04 +07:00
jahorton
1125c3ba3e refactor(web/engine): successful web-core compilation 2020-04-17 11:33:03 +07:00
Joshua Horton
9135c41a05
Merge pull request #2982 from keymanapp/refactor/web/engine/web-core-build-prep
refactor(web/engine): web-core build prep
2020-04-17 08:36:56 +07:00
jahorton
3347014e0f refactor(web/engine): removes no-longer-used static var 2020-04-17 08:30:29 +07:00
jahorton
8c0f81f8ba refactor(web/engine): headless LanguageProcessor (aside from lmlayer) 2020-04-09 14:51:49 +07:00
jahorton
7ec426541c refactor(web/engine): a bit of extra headless-prep reorg, script start 2020-04-09 14:19:29 +07:00
jahorton
68dc9a7ddc feat(web/engine): LanguageProcessor events now EventEmitter-backed 2020-04-09 14:05:30 +07:00
jahorton
e363542c9e refactor(web/engine): returns prediction Promise on RuleBehavior 2020-04-09 13:16:08 +07:00
jahorton
f9a9810ee3 refactor(web/engine): modelchange -> statechange event 2020-04-09 12:29:40 +07:00
jahorton
9f3ccffe2b refactor(web/engine): changes model load + mayPredict interactions 2020-04-09 12:14:27 +07:00
jahorton
6020ffee0c refactor(web/engine): LanguageProcessor.canEnable 2020-04-09 09:50:35 +07:00
jahorton
2f6e1e42af refactor(web/engine): initial ModelManager split 2020-04-09 09:22:35 +07:00
jahorton
227062ba56 refactor(web/engine): InputProcessor/KeyboardProcessor split 2020-04-03 10:50:58 +07:00
jahorton
8fa4b1eaf1 refactor(web/engine): moves getOutputTarget() => DOM space 2020-03-31 11:48:14 +07:00
jahorton
e6788e2ad9 refactor(web/engine): wraps active keyboard 2020-03-21 14:30:33 +07:00
jahorton
e1bc6cfdd0 refactor(web/engine): starts com.keyman.keyboards TS namespace 2020-03-21 13:41:52 +07:00
jahorton
215eda7206 change(web): more modelManager enablement touch-ups 2020-02-13 15:03:07 +07:00
jahorton
6e81d59d59 fix(web): blocks fat-finger generation when no model present 2020-02-13 13:58:31 +07:00
jahorton
e9a05af8b8 fix(web): Fixes #2516; forgot a few changes in #2477 2020-01-23 09:44:30 +07:00
jahorton
19bb5e07d7 change(web): api compat with LMLayer SMP fixes 2020-01-15 12:24:12 +07:00
jahorton
cfeb1377de mayPredict now sole factor in enabling LMLayer 2019-08-09 11:59:03 +07:00
Joshua Horton
17103d2de9
Removes recently-replaced member state field. 2019-07-08 15:07:32 +07:00
jahorton
7e06033bda Bug-fixes for Android settings integration 2019-07-05 11:45:49 +07:00
jahorton
304b94c7db Merge branch 'master' into web-correct-predict-toggle 2019-07-05 09:35:50 +07:00
jahorton
f3990aed1f Option name adjustment. Android verified, not iOS 2019-07-04 09:33:52 +07:00
jahorton
514bae3c1c Simplifies consistency for LMEngine enablement 2019-07-04 09:14:18 +07:00
jahorton
6ff431fb62 Starts predict v correct options in KMW. 2019-07-03 11:00:56 +07:00
jahorton
bbb1301b55 Initial implementation of revert suggestion option 2019-07-02 09:00:18 +07:00
jahorton
549dcb33d0 KMW wordbreak request for reversion option 2019-07-01 16:02:44 +07:00
jahorton
f25c5efaaa Swapping of models for active kbd in settings 2019-06-27 09:11:15 +07:00
Joshua Horton
c1c5af3508
Merge pull request #1802 from keymanapp/web-fat-finger-integration
[Web] Fat-finger language modeling
2019-05-31 14:32:52 +07:00
jahorton
c8aa355209 Integrates fat-finger alternates with LMLayer. 2019-05-27 15:26:43 +07:00
jahorton
2f2ba2de00 Creates fat-finger 'alternates' for use in LMLayer 2019-05-24 15:20:16 +07:00
Joshua A. Horton
0bf410597b Disables the LMLayer when IE active and < 11. 2019-05-23 08:58:28 +07:00
Darcy Wong
3411462961
Merge pull request #1770 from keymanapp/android-language-settings
[Android] Add "Language Settings" menu stub
2019-05-16 16:10:33 +07:00
jahorton
9add2a90ef Allows model deregistration. 2019-05-16 14:30:17 +07:00
Darcy Wong
ec0508e315 Add code for deleting model 2019-05-16 14:02:00 +07:00
jahorton
85f9e93324 invalidateContext check for prediction reqts 2019-05-14 15:57:31 +07:00
jahorton
efb0350bac Adds support for rotating suggestions in KMW. 2019-05-14 15:00:48 +07:00
jahorton
5ae3341741 Prevents bug in predictive state management with null suggestion. 2019-05-08 09:36:03 +07:00
jahorton
83e7d58757 A more intuitive 'keep' UX. 2019-04-26 13:43:52 +07:00
jahorton
b68d030a81 Init + acceptance trigger new predictions 2019-04-26 12:40:09 +07:00
jahorton
e6caa70f1b Suggestion UX features: bksp revert, space accept 2019-04-26 12:11:51 +07:00
jahorton
348f4547ee Starts support for key-based UI with suggestions 2019-04-25 12:20:49 +07:00
jahorton
24dca0e6a6 Adds documentation, integrates partially for iOS. 2019-04-23 09:16:42 +07:00