Closed Bug 1005751 Opened 10 years ago Closed 10 years ago

[Keyboard] Make keyboard not to wait for settings db when showing up

Categories

(Firefox OS Graveyard :: Gaia::Keyboard, defect, P1)

ARM
Gonk (Firefox OS)
defect

Tracking

(Not tracked)

RESOLVED FIXED
2.0 S2 (23may)

People

(Reporter: timdream, Assigned: timdream)

References

Details

(Whiteboard: [save=~69ms][p=3])

Attachments

(1 file)

+++ This bug was initially created as a clone of Bug #970188 +++

The keyboard cold launch patch currently wait for Settings database to return the settings. It should not do that.
Whiteboard: [save=~250ms]
Assignee: nobody → timdream
Status: NEW → ASSIGNED
Target Milestone: --- → 2.0 S1 (9may)
My WIP, it saves about 110ms when launching, see the log below for the timestamp of "doShowKeyboard"
https://github.com/timdream/gaia/tree/keyboard-startup-settings

This however it's not ready.
This takes a lot longer than I expected because I was hit by a unreported bug; for some reasons, although I didn't do call path change beyond doShowKeyboard, the faster keyboard will receive onResize event of unknown origin. It will trigger extra stuff that actually makes keyboard launch slower.

Rudy, would you be able to fix this and find the cause of the above behavior next week while I am OOO? The keyboard app is really not in a good shape where we understand it fully.

=======================

With only the PerformanceTimer:

[Keyboard Manager kbd] resizeKeyboard: 236
[Keyboard Manager kbd] updateHeight: 236
I/GeckoDump( 4087): [kbdTime] BLOCKING IMERender.draw:callback, 2516, 2790, 124
[Keyboard Manager kbd] set layout to display: type=text index=0
[Keyboard Manager kbd] setLayoutFrameActive: undefinedundefined, active: false
[Keyboard Manager kbd] setLayoutFrameActive: app://keyboard.gaiamobile.org/manifest.webapp/index.html#en, active: true
[Keyboard Manager kbd] hideKeyboard display transitionend
[kbdTime] keyboard.js, 0, 287
[kbdTime] getSettings, 1, 288
[kbdTime] gotSettings, 178, 465
[kbdTime] initKeyboard, 180, 467
[kbdTime] initKeyboard->setKeyboardName->showKeyboard, 188, 475, 8
[kbdTime] setKeyboardName, 189, 476
[kbdTime] loadLayout, 189, 476
[kbdTime] setLayout, 220, 507
[kbdTime] loadIMEngine, 221, 508
[kbdTime] setInputMethod, 290, 577
[kbdTime] showKeyboard, 292, 579
[kbdTime] showKeyboard:inputContext.getText, 322, 609
[kbdTime] doShowKeyboard, 339, 626
[kbdTime] glue.sendCandidates, 345, 632
[kbdTime] renderKeyboard, 345, 632
[kbdTime] BLOCKING renderKeyboard, 485, 772, 140
[kbdTime] dimensionsObserver:callback, 486, 773
[kbdTime] updateTargetWindowHeight, 487, 774
[Keyboard Manager kbd] resizeKeyboard: 236
[Keyboard Manager kbd] showKeyboard display transitionend
[Keyboard Manager kbd] updateHeight: 236
[kbdTime] IMERender.draw:callback, 1542, 1829
[kbdTime] glue.sendCandidates, 1616, 1903
[kbdTime] BLOCKING IMERender.draw:callback, 1620, 1907, 73

With other commits:

[Keyboard Manager kbd] set layout to display: type=text index=0
[Keyboard Manager kbd] setLayoutFrameActive: undefinedundefined, active: false
[Keyboard Manager kbd] setLayoutFrameActive: app://keyboard.gaiamobile.org/manifest.webapp/index.html#en, active: true
[Keyboard Manager kbd] hideKeyboard display transitionend
[kbdTime] keyboard.js, 0, 274
[kbdTime] initKeyboard, 2, 276
[kbdTime] initKeyboard->setKeyboardName->showKeyboard, 50, 324, 48
[kbdTime] setKeyboardName, 51, 325
[kbdTime] loadLayout, 51, 325
[kbdTime] setLayout, 170, 444
[kbdTime] loadIMEngine, 170, 444
[kbdTime] setInputMethod, 236, 510
[kbdTime] showKeyboard, 236, 510
[kbdTime] showKeyboard:inputContext.getText, 248, 522
[kbdTime] doShowKeyboard, 270, 544
[kbdTime] glue.sendCandidates, 303, 577
[kbdTime] renderKeyboard, 303, 577
[kbdTime] BLOCKING renderKeyboard, 421, 695, 117
[kbdTime] dimensionsObserver:callback, 422, 696
[kbdTime] updateTargetWindowHeight, 423, 697
[Keyboard Manager kbd] resizeKeyboard: 236
[Keyboard Manager kbd] showKeyboard display transitionend
[Keyboard Manager kbd] updateHeight: 236
[kbdTime] onResize, 1451, 1725
[kbdTime] updateTargetWindowHeight, 1483, 1757
[Keyboard Manager kbd] resizeKeyboard: 236
[Keyboard Manager kbd] updateHeight: 236
[kbdTime] glue.sendCandidates, 1741, 2015
[kbdTime] dimensionsObserver:callback, 1746, 2020
[kbdTime] updateTargetWindowHeight, 1747, 2021
[kbdTime] onResize, 1761, 2035
[kbdTime] updateTargetWindowHeight, 1800, 2074
[kbdTime] dimensionsObserver:callback, 1818, 2092
[kbdTime] updateTargetWindowHeight, 1825, 2099
[Keyboard Manager kbd] resizeKeyboard: 236
[Keyboard Manager kbd] updateHeight: 236
[Keyboard Manager kbd] resizeKeyboard: 236
[Keyboard Manager kbd] updateHeight: 236
[kbdTime] IMERender.draw:callback, 2089, 2363
[Keyboard Manager kbd] resizeKeyboard: 236
[Keyboard Manager kbd] updateHeight: 236
[kbdTime] glue.sendCandidates, 2199, 2473
[kbdTime] BLOCKING IMERender.draw:callback, 2210, 2484, 105
[kbdTime] doShowKeyboard, 2230, 2504
[kbdTime] glue.sendCandidates, 2260, 2534
[kbdTime] renderKeyboard, 2266, 2540
[kbdTime] BLOCKING renderKeyboard, 2269, 2543, 3
[kbdTime] dimensionsObserver:callback, 2274, 2548
[kbdTime] updateTargetWindowHeight, 2275, 2549
[kbdTime] IMERender.draw:callback, 2386, 2660
[Keyboard Manager kbd] resizeKeyboard: 236
[Keyboard Manager kbd] updateHeight: 236
[kbdTime] BLOCKING IMERender.draw:callback, 2516, 2790, 124
Flags: needinfo?(rlu)
Whiteboard: [save=~250ms] → [save=~110ms][p=3]
Target Milestone: 2.0 S1 (9may) → 2.0 S2 (23may)
Update the second log:

[kbdTime] keyboard.js, 0, 267
[kbdTime] initKeyboard, 2, 269
[kbdTime] initKeyboard->setKeyboardName->showKeyboard, 54, 321, 53
[kbdTime] setKeyboardName, 54, 321
[kbdTime] loadLayout, 55, 322
[kbdTime] setLayout, 160, 427
[kbdTime] loadIMEngine, 161, 428
[kbdTime] setInputMethod, 240, 507
[kbdTime] showKeyboard, 243, 510
[kbdTime] doShowKeyboard, 258, 525
[kbdTime] glue.sendCandidates, 273, 540
[kbdTime] renderKeyboard, 289, 556
[kbdTime] BLOCKING renderKeyboard, 404, 671, 115
[kbdTime] dimensionsObserver:callback, 405, 672
[kbdTime] updateTargetWindowHeight, 406, 673
[Keyboard Manager kbd] resizeKeyboard: 236
[Keyboard Manager kbd] showKeyboard display transitionend
[Keyboard Manager kbd] updateHeight: 236
[kbdTime] onResize, 1450, 1717
[kbdTime] updateTargetWindowHeight, 1479, 1746
[Keyboard Manager kbd] resizeKeyboard: 236
[Keyboard Manager kbd] updateHeight: 236
[kbdTime] glue.sendCandidates, 1735, 2002
[kbdTime] dimensionsObserver:callback, 1747, 2014
[kbdTime] updateTargetWindowHeight, 1749, 2016
[kbdTime] onResize, 1771, 2038
[kbdTime] updateTargetWindowHeight, 1806, 2073
[kbdTime] dimensionsObserver:callback, 1825, 2092
[kbdTime] updateTargetWindowHeight, 1830, 2097
[kbdTime] IMERender.draw:callback, 1864, 2131
[Keyboard Manager kbd] resizeKeyboard: 236
[Keyboard Manager kbd] updateHeight: 236
[Keyboard Manager kbd] resizeKeyboard: 236
[Keyboard Manager kbd] updateHeight: 236
[kbdTime] glue.sendCandidates, 1955, 2222
[kbdTime] BLOCKING IMERender.draw:callback, 1958, 2225, 80
[Keyboard Manager kbd] resizeKeyboard: 236
[Keyboard Manager kbd] updateHeight: 236
See bug 1007595 comment 5. This is a mozbrowser platform issue. I am going to workaround it in this bug.
Flags: needinfo?(rlu)
https://github.com/timdream/gaia/compare/mozilla-b2g:master...timdream:keyboard-startup-settings?expand=1

Here is what I have now. I will starting adding tests tomorrow.
Rudy, what's your feedback? Let's move everything out of keyboard.js piece by piece.
Flags: needinfo?(rlu)
Compare to comment 1 the patch wins about 487-418 = 96ms when comparing when |updateTargetWindowHeight| is called.

===

I/GeckoDump( 6341): [kbdTime] keyboard.js, 0, 265
I/GeckoDump( 6341): [kbdTime] initKeyboard, 2, 267
I/GeckoDump( 6341): [kbdTime] initKeyboard->setKeyboardName->showKeyboard, 80, 345, 78
I/GeckoDump( 6341): [kbdTime] setKeyboardName, 81, 346
I/GeckoDump( 6341): [kbdTime] loadLayout, 81, 346
I/GeckoDump( 6341): [kbdTime] setLayout, 184, 449
I/GeckoDump( 6341): [kbdTime] loadIMEngine, 185, 450
I/GeckoDump( 6341): [kbdTime] setInputMethod, 238, 503
I/GeckoDump( 6341): [kbdTime] showKeyboard, 239, 504
I/GeckoDump( 6341): [kbdTime] doShowKeyboard, 257, 522
I/GeckoDump( 6341): [kbdTime] glue.sendCandidates, 281, 546
I/GeckoDump( 6341): [kbdTime] renderKeyboard, 282, 547
I/GeckoDump( 6341): [kbdTime] BLOCKING renderKeyboard, 416, 681, 133
I/GeckoDump( 6341): [kbdTime] dimensionsObserver:callback, 417, 682
I/GeckoDump( 6341): [kbdTime] updateTargetWindowHeight, 418, 683
I/GeckoDump( 6341): [kbdTime] IMERender.draw:callback, 1777, 2042
I/GeckoDump( 6341): [kbdTime] glue.sendCandidates, 1868, 2133
I/GeckoDump( 6341): [kbdTime] BLOCKING IMERender.draw:callback, 1907, 2172, 111
I/GeckoDump( 6341): [kbdTime] attachResizeListener, 1908, 2173
s/96ms/69ms/
Whiteboard: [save=~110ms][p=3] → [save=~69ms][p=3]
bug 1007595 looks like the same issue that hit me when I was testing the launch time of the new keyboard, i.e. demo-keyboard.

I agree that we could workaround this first.
BTW, can we add the eventListener for resize after the keyboard is shown?
Thanks for looking into this.
Flags: needinfo?(rlu)
Attachment #8419960 - Flags: review?(rlu)
Numbers:

With Part 1 only:

I/GeckoDump( 6783): [kbdTime] keyboard.js, 0, 257
I/GeckoDump( 6783): [kbdTime] getSettings, 1, 258
I/GeckoDump( 6783): [kbdTime] gotSettings, 209, 466
I/GeckoDump( 6783): [kbdTime] initKeyboard, 209, 466
I/GeckoDump( 6783): [kbdTime] initKeyboard->setKeyboardName->showKeyboard, 218, 475, 9
I/GeckoDump( 6783): [kbdTime] setKeyboardName, 218, 475
I/GeckoDump( 6783): [kbdTime] loadLayout, 219, 476
I/GeckoDump( 6783): [kbdTime] setLayout, 242, 499
I/GeckoDump( 6783): [kbdTime] loadIMEngine, 243, 500
I/GeckoDump( 6783): [kbdTime] setInputMethod, 276, 533
I/GeckoDump( 6783): [kbdTime] showKeyboard, 280, 537
I/GeckoDump( 6783): [kbdTime] showKeyboard:inputContext.getText, 311, 568
I/GeckoDump( 6783): [kbdTime] doShowKeyboard, 320, 577
I/GeckoDump( 6783): [kbdTime] glue.sendCandidates, 325, 582
I/GeckoDump( 6783): [kbdTime] renderKeyboard, 326, 583
I/GeckoDump( 6783): [kbdTime] drawKeyboard, 340, 597
I/GeckoDump( 6783): [kbdTime] BLOCKING renderKeyboard, 429, 686, 103
I/GeckoDump( 6783): [kbdTime] dimensionsObserver:callback, 430, 687
I/GeckoDump( 6783): [kbdTime] updateTargetWindowHeight, 431, 688
I/GeckoDump( 6783): [kbdTime] IMERender.draw:callback, 1482, 1739
I/GeckoDump( 6783): [kbdTime] glue.sendCandidates, 1553, 1810
I/GeckoDump( 6783): [kbdTime] BLOCKING IMERender.draw:callback, 1571, 1828, 84


With everything:

I/GeckoDump( 6847): [kbdTime] keyboard.js, 0, 264
I/GeckoDump( 6847): [kbdTime] initKeyboard, 2, 266
I/GeckoDump( 6847): [kbdTime] initKeyboard->setKeyboardName->showKeyboard, 69, 333, 67
I/GeckoDump( 6847): [kbdTime] setKeyboardName, 70, 334
I/GeckoDump( 6847): [kbdTime] loadLayout, 70, 334
I/GeckoDump( 6847): [kbdTime] setLayout, 208, 472
I/GeckoDump( 6847): [kbdTime] loadIMEngine, 209, 473
I/GeckoDump( 6847): [kbdTime] setInputMethod, 244, 508
I/GeckoDump( 6847): [kbdTime] showKeyboard, 244, 508
I/GeckoDump( 6847): [kbdTime] doShowKeyboard, 309, 573
I/GeckoDump( 6847): [kbdTime] glue.sendCandidates, 317, 581
I/GeckoDump( 6847): [kbdTime] renderKeyboard, 320, 584
I/GeckoDump( 6847): [kbdTime] BLOCKING renderKeyboard, 417, 681, 96
I/GeckoDump( 6847): [kbdTime] dimensionsObserver:callback, 418, 682
I/GeckoDump( 6847): [kbdTime] updateTargetWindowHeight, 419, 683
I/GeckoDump( 6847): [kbdTime] IMERender.draw:callback, 1475, 1739
I/GeckoDump( 6847): [kbdTime] glue.sendCandidates, 1558, 1822
I/GeckoDump( 6847): [kbdTime] BLOCKING IMERender.draw:callback, 1591, 1855, 99
I/GeckoDump( 6847): [kbdTime] attachResizeListener, 1591, 1855
Comment on attachment 8419960 [details] [review]
mozilla-b2g:master PR#19096

Looks good, so r=me.

Thank you.
Attachment #8419960 - Flags: review?(rlu) → review+
master: https://github.com/mozilla-b2g/gaia/commit/2f89c43e798ccba631025bedc47a1fb24e830cf2
Status: ASSIGNED → RESOLVED
Closed: 10 years ago
Resolution: --- → FIXED
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: