Input Objectives

At Google we define and track progress against our goals using "OKRs" (Objectives and Key Results).  Here are most of the OKRs for the input-dev team (a couple minor KRs relating to internal projects such as future Android releases have been omitted for confidentiality reasons).  Note that these are intentionally aggressive and so we will be happy if we deliver 60%-70% of them.

2017 Q1 

Eventing Related

Improve Smoothness and Predictability of Input Events 

Align Events with Appropriate Lifecycle P1 
0.3 Interpolate touchmove events on the main thread
0.2 Analyze rAF Aligned finch trial data
0.2 Ship rAF Aligned Input
0.3 Compositor vsync aligned input finch trial
Intervene to improve scroll performance P2 
#wp-alignment #wp-performance
0.2 - Decrease fraction of page views which prevent default touch events without having a touch-action from 0.66 to 0.57%
0.8 - Land and evaluate finch trial forcing event listeners to be passive if the main thread is unresponsive. (
Hold the line on input performance P2 
0.7 No regressions in key metrics that last a milestone
0.3 Monitor usage of touch-action
Measure Latency of Keyboard Input P2 
Report Latency of Keyboard Input via UMA
Handle Input Events as soon as possible P3 
0.5 Place all non event based IPC messages in the main thread event queue so we don’t have to rely on message pumps to process input events
0.5 Coordinate with the blink scheduler so it can ask the main thread event queue if it has work to do.

Add Richness to Web Platform 

Ship Coalesced Points API P1 
0.5 Ship Coalesced Points API in M58
0.5 Adding at least 3 tests in WPT for different aspect of the feature
Drive Pointer Events L2 to Recommendation P1 
0.5 Drive solving all the new L2 Blocking issues; end quarter with zero issues
0.5 Prepare the full test result for all vendors and the explainer doc for the failures
Make mouse a first-class event in Android P1 
0.1 Address major user concerns around mouse rerouting by M56 release.
0.3 Fix text selection triggering with mouse.
0.2 Enable page zoom through mouse.
0.2 Update old-style mouse click code.
0.2 Unify mouse & gesture triggered text selection in Android.
Input Automation for testing P2 
0.5 Get consensus on input automation APIs
0.3 Implement the plumbing to use the input automation in wpt serve
0.2 Make all Pointer Event tests to make use of this API
Round out stylus support on all platforms P2 
0.3 Ship PointerEvent.twist and .tangential on Mac
0.1 Complete Wacom Intuos Pro support for Mac
0.4 Switch Windows (>= 8) low-level path to use WM_POINTER
0.2 Add missing plumbing for stylus properties in Windows
Add Richness to Editing events P2 
0.3 Get a consensus how to ship beforeinput/input
0.4 Finish cleanup and remaining bugs
0.3 Intent to Ship
Drive Adoption of auxclick P3 
0.5 Auxclick is implemented by at least one other vendor
0.5 Click event is no longer fired for middle button by at least one other vendor
Consensus on inputmode design P3 
0.5 Write up options, distribute and build consensus
0.5 Build consensus in external WICG;

Product Excellence 

Be responsive to our users P1 
Triage all new Input, Scroll issues within 7 days
Triage all Hotlist-Input-Dev > 10 starred issues every 90 days to ensure we drive resolutions.
Fix 5 top starred issues specifically,,
Fix touch interactions hiccups with PointerEvent P1 
0.5 Fix multi-finger panning with touch-action
0.5 Disable touch slop suppression for touch-action:none.
Address misc implementation issues with PointerEvents P2 
0.3 Video default event handler problem with PointerEvents.
0.3 PointerEvent should set movementX & movementY.
0.4 Fix 5 other chromium bugs with PointerEvents.
Address long standing mouse event quirks P3 
0.5 Consistent behavior of zero-movement mousemoves plus hover states.
0.5 MouseLeave on all platforms working correctly.

Code Health and Future Design 

Simplify event processing P2 
0.5 Remove touchmove throttling in the touch event queue
0.5 Remove fling curve generation from the main thread
Continue removing artificial layering in event pipeline P2 
0.6 Remove PlatformMouseEvent and PlatformTouchEvent
0.4 Cleanup PageWidgetEventDelegate
Improve Blink event bookkeeping P2 
0.4 Event-handling states on frame vs page.
0.4 InputRouter event queue cleanup:, 
0.2 Design doc on PointerEvent driven event handling in Blink:
Make coordinates consistent for all Web pointer-type events P3 
0.4 Make WebMouseEvent coordinates fractional
0.4 Remove refs to deprecated location data in WebMouseEvent
0.2 Normalize coordinate systems between WebMouseEvent and WebTouchPoint.
Update pointer/hover media query API & internal usage P3 
0.5 Collect data & possibly drop support for hover:on-demand.
0.5 Update mouse/touch detection code to use media queries.
MUS Main Thread Hit Testing P3 
Support MUS team by providing API for hit testing against the blink tree.
Touch-action hit testing P3 
#wp-architecture, #wp-performance
Have a concrete design of how SPV2 will information necessary for touch-action hit testing on the compositor.

Scrolling Related 

Eliminate key developer pain points 

Polish document.rootScroller design P1 
[0.5] Ship document.rootScroller origin trial in M57
[0.2] Provide demos and motivating cases on how to use document.rootScroller
[0.2] Create WICG repo to host standardization process and engage with other vendors
[0.1] Publicize the experiment via developer outreach channels #wp-devx
Fix layout vs visual viewport discrepancy in window APIs P2 
Description: #wp-predictability
[0.2] Publish doc describing the issue and summarizing the current situation
[0.4] Get feedback from a senior Safari engineer on whether they’re likely to change their viewport model and if they like the “inert” viewport mode.
[0.4] Ship either “inert visual viewport” or change “client” coordinates to be visual in M58
Ship Overscroll​ ​Action​ ​API P1 
[0.4] Land drafted overscroll-action API in M58 behind a flag
 [0.2] Get consensus for new scroll-boundary API
 [0.3] Implement new scroll-boundary API
 [0.1] Ship a final API in M58.
Ship unified OSK model on Android in M58 P3 
[0.2] Document behavior of other browsers
[0.3] Verify interactions with fullscreen, orientation, split screen, web app mode. Fix bugs and write web-platform style tests.
[0.5] Ship in M58

Improve wheel scroll performance 

Support of touchpad scroll latching on all platforms behind a flag. P1 
[0.5] Implement touchpad latching behind a flag on all platforms in M58
[0.5] Ship a finch trial by EOQ
Support of async wheel events with only the first event cancellable behind a flag. P2 
[0.7] Implement async wheel events behind a flag in M58
[0.3] Ship a finch trial by EOQ

Code Health 

Remove scrollbar code duplication P3 
[0.5] Mac Scrollbars painted in same paths as Aura/Android (
[0.5] Move scrollbars out of ScrollableArea (

Understand how users scroll 

Collect UMA stats for how users scroll P1 
[0.5] Measure how often users scroll with scrollbars in M57.
[0.3] Measure how often users scroll using keyboard, wheel, touch in M58.
[0.2] Measure how often users scroll with auto scroll in M58.
Process is in place to analyze Rappor metric results for scroll latency P1 
[0.4] Get Rappor metric data analyzed and aggregated in UMA or some other database
[0.4] Generating appropriate charts in the Rappor dashboard or Locally
[0.2] Use Rappor data to investigate at least one related issue if anything comes up

Reliable Web Platform Scrolling 

End quarter with 5 fewer Pri=0,1,2 scrolling bugs P2 
Currently at 99

Threaded Rendering Related 

Accelerate more CSS animations 

Accelerate transform animations containing percentages P2
Accelerate independent transform properties P2 
Accelerate background-position P3 

Enable more rich scroll effects 

Polish position sticky P1 
0.7 - all P1 bugs older than 30 days fixed in M58
0.3 - shared test suite uploaded to csswg-tests
Implement Scroll Snap Points for composited scrolling in M58 behind a flag P2 
0.2 - design what information needs to be sent to CC
0.2 - match the new CSS properties and box alignment model
0.2 - Implement snap info on main and send to CC
0.4 - Implement snapping for touch scrolling on compositor
Scroll-linked animation polyfill P2 
Polyfill of proposed API written to support / inform the spec.
Support main thread scroll customization P3 
Implement declarative API to allow main thread scroll customization without affecting all scrolling. This is required for an original trial experiment.
Implement CSSOM Smooth Scroll P2 
Implement CSSOM Smooth Scroll and collect UMA metrics along with implementation

Improve performance-isolation on the web. 

Fix known bugs in existing AnimationWorklet / Compositor Worker implementation P1 
Fix any remaining bugs and polish the interface and performance.
Batch property updates to compositor proxies enabling running on a different thread. P1 
Fix known bugs in AnimationWorklet spec P1 
We have a number of ship-blocking issues outstanding. Drive resolution to have an MVP animation worklet draft spec by EOQ
Implement new AnimationWorklet API P3 
This is gated on resolving specification issues and is therefore marked as stretch (we can use the polyfill in the interim).
[stretch] Document / share plan for receiving input in animation worklet P4 
With plans for how this will work in Salamander

Improve Threaded Rendering Code Health 

Factor cc scrolling logic out of LTHI P3 
It should be possible to factor scrolling logic out of LTHI 

0.5 Write design doc and create consensus around doing this clean up
0.5 Implement ScrollingHost to be responsible for scrolling logic in LTHI
Investigate flakiness in threaded-rendering tests P3 
We have heard from animation team that some test are failing when used with threaded compositing. We need to investigate why and decide if it is worth more effort and formulate a solution
Refactor AnimationWorklet plumbing to use animation machinery  
Adapt existing machinery for web-animation where appropriate reaching stage #3

Make compositing excellent 

Fix 16 open Hotlist-Threaded-Rendering bugs P1 
Track whether we'rd closing more Hotlist-Threaded-Rendering bugs than are opened P1 
Scroll on compositor thread more frequently on desktop. P1 
Increase the percentage of scrolls on the compositor thread by 5%. Ideas include making it possible to promote opaque fixed position elements, non text containing elements , border-radius (without memory hit).
Experiment not compositing small scrollers P2 
We have seen during perf parties that small composited scrollers can cause layer explosion. We should launch a Finch trial tracking memory and performance tradeoff.

Identify / demonstrate best performance web practices 

Implement and publish 2 new UI patterns P1 
Identify effects used in 5 native applications which should be web apps P2 
Analyze one existing framework and identify potential pitfalls / improvements [stretch] P3 

Improve understanding of the limitations and tradeoffs of threaded rendering in the wild. 

Analyze CPU costs as layer count increases based on UMA data P2 
Fix metric measuring difference between compositor frame rate and main thread frame rate P2 
tdresser@ found that scheduling.browser.mainandimplframetimedelta2 was not accurate. We should fix this so we can accurately track the upper bound on slippage.
Measure time to move compositor frame from renderer to display compositor P2 
Perf Party: compositing edition P2 
Case study specific to GPU/compositing w/ write-up and action items. 2 this quarter.
Measure additional GPU cost due to layer promotion P3 
Ensure we can track regressions due to layer explosion.

Subpages (2): 2015 OKRs 2016 OKRs