Teams‎ > ‎Input Team‎ > ‎

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 Q3 

Eventing Sub-team

Improve Smoothness and Predictability of Events 

Align Events with Appropriate Lifecycle P2 
[0.2] Analysis and handle the extra latency
[0.4] Run a Finch Trial
[0.4] Ship Vsync aligned gestures in M62
Resample input events on main thread and compositor P2 
[0.3] Draft design doc for resampling algorithm and matrix
[0.3] Implement resampling behind a flag
[0.2] Launch Finch Trial and analysis data
[0.2] Enable input resampling by default  in ToT
Predicted points P3 
[0.5] Achieve consensus and spec the API for predicted points
[0.5] Use resampling algorithm to predict the future points

Add Richness to Web Platform 

Implement a simple user activation model that is good for cross-browser implementation P1 
[0.3] Modify key clients of existing UGI API to use an uniform interface.
[0.1] Implement the proposed “simple user activation” model behind a flag.
[0.1] Perform sxs lab-tests for the key user activation behaviors.
[0.2] Expand the new interface to the rest of the UGI clients.
[0.2] Experimentally enable the new model in M62 beta.
[0.1] Publish a report on observed regressions and next steps.
Define input events for Workers P1 
[0.3] Propose & reach consensus on an event model for general Workers.
[0.2] Prototype an offscreen canvas drawing app based on a polyfill for stylus events.
[0.2] Create a demo/polyfill for timeline-input for Animation Worklet from general input events.
[0.3] Complete an experimental plumbing to route input events to a worker thread.
Support low latency stylus P1 
[0.5] Spec a mechanism to allow low latency pointer events on the Web
[0.5] Implement and Ship ability to dispatch pointer events for low latency
Move Pointer Event spec to CR P3 
[0.6] All wpt tests have at least two passing implementation or a doc explaining why some tests don't have
[0.4] Address all blocking issues and move the spec to CR
Add Richness to Editing events P3 
[0.5] Rewrite all InputEvent layout tests into WPT through Input Automation API
[0.5] Follow and fix post-shipping bugs
Enable Input Automation in WPT P4 
[0.4] Implement Blink shortcut over plumbing in wpt
[0.3] Support adding synthetic pointer actions in ChromeDriver
[0.3] Get consensus for synthetic pointer action APIs in wpt testing


Hold the line on Input Performance P1 
No regressions in key metrics that last a milestone
Rappor and UKM metrics P1 
[0.4] Analyze UKM data and come up with a workflow (docs/scripts) for doing it regularly
[0.4] Analyze RAPPOR data and come up with a workflow (docs/scripts) for doing it regularly
[0.2] Compare the UKm and RAPPOR data and whether they add values different from each other
Ship Direct Manipulation Stylus on Windows P1 
[0.5] Convert Windows to use touch events for stylus instead of mouse events
[0.5] Ensure text selection works excellent with stylus

Product Excellence 

Be Responsive to our Users P1 
[0.5] Triage all new issues within 7 days
[0.2] Triage all open issues that have not been modified in 180 days
[0.3] Fix 7 top starred > 10 stars issues
Solve non-consistent target issues with Touch Adjustment P1 
[0.4] Implement hit-test based adjustment behind a flag
[0.2] Run Finch Trial
[0.3] Ship new Touch Adjustment
[0.1] Propose a metric to measure if we can disable adjustment on mobile optimized sites
Take over ownership of Blink>Input>PointerLock issues  
[0.3] Fix 3 Blink>Input>PointerLock issues
[0.4] Triage and prioritize all issues.
[0.3] Draft a doc about PointerLock procedure and possible refactorings
Mus Input Routing P2 
[0.3] Finalize the hit testing API
[0.3] Design the APIs for communicating the pointer capture
[0.4] Implement the capture APIs in browser and Blink

Code Health 

Complete mojofication of input pipeline P1 
[0.3] Land WidgetInputHandler interface to route mojo messages
[0.2] Run finch trial on Windows, ChromeOS (Canary & Dev) to compare stability
[0.3] Implement synchronous compositing interface for mojo
[0.2] Implement Host mojo interface
Complete switch to pointer events input flow in Blink Code P1 
[0.2] Replace remaining WebTouchEvent/Point with WebPointerEvent in Blink
[0.3] Replace WebMouseEvent with WebPointerEvent in Blink
[0.5] Unify the code path for mouse and touch in Blink
Latency Info Cleanup P2 
[0.3] Remove sequence number
[0.3] Remove multiple timestamp per component
[0.3] Simplify LatencyComponent to a single timestamp
[0.1] Move from a dynamic map to a plain struct
Fix 5 low-hanging input-dev issues with Hotlist-CodeHealth P2 
BOQ count: 25
[0.3] Avoid unnecessary memory allocations thru EventDispatchMediator.
[0.3] Make coordinate fields of all WebInputEvents uniform.
[0.4] Fix 3 other code health issues.
Fractional Mouse Coordinates P3 
[0.5] Plumb fractional mouse co-ordinates in each platform
[0.5] Ship fractional co-ordinates for pointer events

Scrolling Sub-team 

Add Richness to Web Platform 

Smooth ViewportAPI/Inert Viewport Launch P1 
[0.3] Write blog post on Chrome blog about change
[0.2] Engage with authors in various forums (crbug, twitter, etc.) about change
[0.5] Fix any issues by the time M61 is stable
Prepare rootScroller for standardization P1 
[0.3] Editor’s Draft spec describing latest implementation
[0.3] Comprehensive web-platform-test suite
[0.2] Work with AMP on iterating design and fixing bugs
[0.2] Reach out to other vendors - get an idea of their thoughts
Unify ChromeOS and Android On-Screen Keyboard P2 
[0.3] Determine how a new API to control keyboard behavior should look
[0.3] Engage other vendors on this API, get agreement
[0.4] Implement new API
Ship ScrollBoundaryBehavior P2 
[0.4] Ship full ScrollBoundaryBehavior full API behind a flag in M62
[0.1] Reach out to Facebook people to see the effect
[0.5] Enable the property by Default in M63.


Wheel scroll latching and async wheel events P1 
[0.2] no flaky layouttests.
[0.2] Enable the latching flag on the waterfall by default and address any regression bugs.
[0.2] Enable the async flag on the waterfall by default and address any regression bugs.
[0.2] Ship a finch trial in M61. (Needed for new ChromeOS device in M61)
[0.2] Performance impact report.

Improve Scrolling UX 

Windows Precision Touchpad Support P1 
[0.4] Demo app shows how to integrate Windows Precision Touchpad
[0.3] Support horizontal swipe for navigation change
[0.3] Support pinch zoom
Support Overlay Scrollbar Launch P1 
[0.5] Fix all tractable bugs in M62
[0.5] Work with PMs to tweak behavior and UX to improve experience

Improve Product Polish 

Fix 6 important/long-standing user or developer-facing bugs P3 
[0.17] Smart Zoom Different than Safari on OS X
[0.17] Scroll restore after window.reload()
[0.17] Can't apply CSS scrollbar styling dynamically to overlay scrollbars
[0.17] Url bar hiding moves scroll position which breaks viewing wide images
[0.17] Accessibility zoom does not work for accelerated mobile pages
[0.17] 300ms tap delay is still present in iframes

Improve Code-Health 

Progress Scroll Unification P2 
[0.2] Produce design doc on implementing decoupled-scroll-hit-testing
[0.6] Implement decoupled-scroll-hit-testing behind a flag
[0.2] Produce design doc on decoupling input handling from impl thread
Fling on Browser Side P2 
[0.2] Produce design doc for implementing browser side fling for touch and touchpad.
[0.4] Implement experimental version of browser side fling for touchpad.
[0.4] Implement experimental version of browser side fling for touch. (TODO Milestone)
Keyboard Gesture Scrolling [stretch] P3 
[0.3] Produce design doc for implementing keyboard scrolling using gesture events.
[0.7] Implement experimental version of keyboard gesture scrolling.

Threaded Rendering Sub-team

Enable rich custom effects 

Finish implementation of PaintWorklet on main thread P1 
[0.4] Implement two paint worklet global scope (
[0.4] Improve sub-pixel for paint worklet (
[0.1] Move remaining layout tests to wpt/
[0.1] Ship it by EOQ.
Finish implementation of Snap Points P1 
[0.4] Implement Snap Points on cc thread
[0.3] Implement Snap Points on main thread
[0.2] Ship behind a flag in M63
[0.1] Implement web platform test
Start a origin trial Main-Thread Scroll Customization P3 
[0.7] Implement "scroll-customization: pan-x, pan-y,.." on main and impl thread.
[0.2] Address memory leak issue using TraceWrapper
[0.1] Start an origin trial with at least one stakeholder

Make compositing excellent 

Promote opaque fixed/sticky position elements into composited layers. #wp-performance P1 
[0.7] Fix incorrect snapping of composited content w.r.t non-composited content (
[0.1] Turn on CompositeOpaqueFixed.
[0.2] Composite 5% more scrolls.
Finish touch action implementation && measure performance impact P1 
[0.5] Finish browser-side logic of using white-listed touch action implementation in M62
[0.5] Track performance improvement through UMA.
Close 25 non-feature bugs. P2 
Finish the experiment of not compositing small scrollers P2 
[0.3] Land metrics regarding memory usage and scroller size
[0.4] Launch finch trial
[0.3] Analyze the results and proceed (stop compositing qualified small scrollers)
Analyze main thread scrolling reasons P2 
[0.3] Help with enabling fix / sticky promotion
[0.2] Analyze the metrics and find top remaining reasons
[0.5] Try to promote the case of transform with non-integer offset
Finish upstreaming position:sticky tests to WPT P2 
[0.1] Agree on list of remaining tests to be upstreamed. (Done, decided on 28 tests).
[0.9] Upstream the remaining tests (currently 28).
Wheel listener rects P2 
[0.2] Data structure for wheel listener region in cc
[0.3] Pass wheel listener region to cc
[0.5] Scroll on main if scroll point falls into wheel listener region
Reduce number of composited layers created for correctness.  
Investigate reducing layer count by detecting promotion trigger corner cases rather than always promoting for correctness. (i.e. positioned content in non stacking context scroller)

Improve metrics and code health 

Fix regression bugs caused by composited border-radius scrolling P1 
[0.5] Investigate texture memory usage
[0.3] Make texture use less memory
[0.2] Fix regression bugs
Identify / define metrics to monitor continued threaded rendering performance excellence. P2 
Improve documentation of the animation code P2 
Add code-level documentation for at least  5 components (class, directory, etc.) related to animation. In particular we will document cc/animation, animation worklet and related classes, and position sticky related code.
Measure metrics without compositing thread. P3 
[0.5] Get --disable-threaded-rendering flag working
[0.5] Track user experience related metrics across key performance tests.
Remove all uses of layer ids or layer references in cc/animations  
We should look up the property tree nodes instead, finding them via element id.
Progress or regression of bug open/close rate is visible to the team.  
New issues are triaged within seven days.  

Enable performance isolated effects on the web 

Animation Worklet - Draft specification for API #wp-ergonomics P1 
Update specification/polyfill/demos to ensure we receive appropriate and positive feedback on working draft in Houdini WG
[0.3] Get required changes to web-animation spec upstreamed (WorkletGroupEffect, timeline attachment)
[0.3] Update AnimationWorklet specification and documentation.
[0.2] Prepare demo & polyfill to present at Houdini F2F.
[0.2] Get feedback from “developers” around the API.
AnimationWorklet - Land Milestone 1 P1 
[0.2] Implement cc::WorkletAnimationPlayer (Yi)
[0.2] Implement blink::WorkletAnimation (single timeline, multiple effects) (Stephen)
[0.1] Plumb WorkletAnimation blink => compositor => worklet (Stephen)
[0.1] Proxy Keyframe effects in Worklet scope and plumb local times worklet => compositor (Majid)
Prototype raster-inducing scroll ( 
[0.3] Create a dummy layer for a non-composited layer and unit tests
[0.5] Impl-side invalidation for the layer that has the actual contents
[0.2] Re-raster the actual content layer
AnimationWorklet - Land Milestone 2 P2 
[0.3] Enable WorkletAnimation to accept multiple timelines
[0.3] Implement ScrollTimeline and add support for them in worklet animations (Stephen)
[0.2] Plumb time values to main thread (majidvp)
[0.2] Support passing in a structure clonable options argument
Animation Worklet - Schedule and give animations a deadline to avoid janking compositor thread. #wp-ergonomics #wp-performance P2 
[0.3] Run animation worklet on dedicated thread.
[0.7] Schedule running these animations with a slippage deadline.
[stretch] Ship Animation Worklet origin trial P4 
Once we land both milestone 1 & 2 and move the work to a dedicated thread we should be able to
run an origin trial by EOQ.
[streatch] Ship PaintWorklet off thread P4 
Once we ship PaintWorklet on the main thread, and we have raster-inducing scrolling ready, we will be able to ship PaintWorklet off thread.

Historical Objectives and Results

Subpages (3): 2015 OKRs 2016 OKRs 2017 OKRS