New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 672311 link

Starred by 1 user

Issue metadata

Status: Assigned
Owner:
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: ----
Pri: 3
Type: Bug


Sign in to add a comment

[meta] mus/oopif event targeting

Project Member Reported by rjkroege@chromium.org, Dec 8 2016

Issue description

Efficiently and correctly handle event targeting in mus to all clients. Update once the implementation path is clarified.

 
Components: Internals>MUS
Labels: Proj-Mustash-Mus Proj-Mustash
Labels: mustash-2
For mushrome, we only need parity with CrOS.

Comment 3 by sadrul@chromium.org, Apr 12 2017

Blockedon: 710016

Comment 4 by sky@chromium.org, Jun 8 2017

Blocking: 731255
Cc: gklassen@chromium.org sadrul@chromium.org riajiang@chromium.org
Labels: Proj-Mustash-Mus-GPU
This is a meta bug wrapping all work needed to deliver new-style event-targeting with the display compositor relocated to the viz process. In particular: events need to be targeted correctly including when an OOPIF is occluded by a squashed layer.

Backgrounder: https://docs.google.com/document/d/1f-zVezQvaaQjdbmLj5l2qLfq_yZPR_27H8K2ZxsOJMQ/edit
Blockedon: 732392
Blockedon: 732394
Blockedon: 732395
Blockedon: 732396
Blockedon: 732398
Blockedon: 732399
Blockedon: 732400
Blockedon: 732402
Blockedon: 732405
Blockedon: 732417
Labels: event-targeting
Blocking: 732572
Blocking: -731255

Comment 19 by sky@chromium.org, Jun 23 2017

Blocking: 731255
Blockedon: 746396
Cc: varkha@chromium.org
Blockedon: -746396
Blockedon: 766174

Comment 24 by msw@chromium.org, Oct 16 2017

Blocking: 775223
Blocking: 763452
Blockedon: 785015
Blocking: 787097

Comment 28 by sky@chromium.org, Nov 27 2017

Blocking: -731255
Blocking: 789734
Blockedon: 790044

Comment 31 by sky@chromium.org, Dec 13 2017

Blocking: -775223
Blockedon: 804888
Blockedon: 805581
Blockedon: 806144
Project Member

Comment 35 by bugdroid1@chromium.org, Feb 7 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/2c346fb3a729d7df6357988b9cbe68c1fa22c7dd

commit 2c346fb3a729d7df6357988b9cbe68c1fa22c7dd
Author: Gary Klassen <gklassen@chromium.org>
Date: Wed Feb 07 18:08:40 2018

Use basic bounds to provide simple hit test information.

Creates a single HitTestRegion for each CompositorFrame based on its bounds.

Use kHitTestAsk flag if it contains an embedded OOPIF - this will cause
HitTestQuery to send a message to resolve the target.

With this approach we can use and test HitTestAggregator independently of
changes in development that will create full HitTestRegion data.

Bug: 672311
Cq-Include-Trybots: master.tryserver.chromium.android:android_optional_gpu_tests_rel
Change-Id: I5a17c03cfe18585cdf4780b90c252cc0e7e5a332
Reviewed-on: https://chromium-review.googlesource.com/806688
Reviewed-by: Charlie Reis <creis@chromium.org>
Reviewed-by: Sadrul Chowdhury <sadrul@chromium.org>
Reviewed-by: Robert Kroeger <rjkroege@chromium.org>
Reviewed-by: Ria Jiang <riajiang@chromium.org>
Reviewed-by: kylechar <kylechar@chromium.org>
Commit-Queue: Gary Klassen <gklassen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#535061}
[modify] https://crrev.com/2c346fb3a729d7df6357988b9cbe68c1fa22c7dd/components/viz/client/BUILD.gn
[modify] https://crrev.com/2c346fb3a729d7df6357988b9cbe68c1fa22c7dd/components/viz/client/client_layer_tree_frame_sink.cc
[modify] https://crrev.com/2c346fb3a729d7df6357988b9cbe68c1fa22c7dd/components/viz/client/hit_test_data_provider.h
[add] https://crrev.com/2c346fb3a729d7df6357988b9cbe68c1fa22c7dd/components/viz/client/hit_test_data_provider_simple_bounds.cc
[add] https://crrev.com/2c346fb3a729d7df6357988b9cbe68c1fa22c7dd/components/viz/client/hit_test_data_provider_simple_bounds.h
[add] https://crrev.com/2c346fb3a729d7df6357988b9cbe68c1fa22c7dd/components/viz/client/hit_test_data_provider_simple_bounds_unittest.cc
[modify] https://crrev.com/2c346fb3a729d7df6357988b9cbe68c1fa22c7dd/content/renderer/mus/renderer_window_tree_client.cc
[modify] https://crrev.com/2c346fb3a729d7df6357988b9cbe68c1fa22c7dd/content/renderer/render_thread_impl.cc
[modify] https://crrev.com/2c346fb3a729d7df6357988b9cbe68c1fa22c7dd/ui/aura/hit_test_data_provider_aura.cc
[modify] https://crrev.com/2c346fb3a729d7df6357988b9cbe68c1fa22c7dd/ui/aura/hit_test_data_provider_aura.h
[modify] https://crrev.com/2c346fb3a729d7df6357988b9cbe68c1fa22c7dd/ui/aura/hit_test_data_provider_aura_unittest.cc

Blocking: -787097
Blockedon: 810121
Blockedon: 759309
Blockedon: 812012
Components: -Internals>MUS Internals>Services>WindowService
Blockedon: 817673
Labels: -Proj-Mustash-Mus
Migrating Proj-Mustash-Mus to components Internals>Services>WindowService and Internals>Services>Ash

Labels: -Proj-Mustash
Currently we have events being sent to the browser, and from the browser to the renderers. I'm assuming this bug only matters for the window-service once we have it directly sending events to renderers. Do I have that right Rob?
Labels: -Proj-Mustash-Mus-GPU
Cleaning up old Proj-Mustash labels.
In ws2, does the browser submit its own CFs independent of Ash's CF? And Ash/WS2 embeds the browser which embeds the renderer?

Oop/Ash in either single/multi-process mode will need to resolve the following issue: the viz event targeting in viz host (HitTestQuery running in Ash) will look up the FrameSync corresponding to a particular pixel and use that for event dispatching. HTQ was not designed to be run twice (in ash and browser) so I would expect that event targeting might be confused. I don't recall how we fixed this in mustash. Something will need to be adjusted. I think having ash/ws2 send the events directly might be the cleanest path forward.
In mustash, each oopif used to have a corresponding window in the window-service. So window-service was able to find an OOPIF as the target. In ws2, that is no longer the case I believe.
So in an ideal oop-ash implementation, how are events suppose to be targeted? We must only have one viz host and that suggests only one HTQ.


Right, there should only be a single HTQ in the viz-host (i.e. in ash). HTQ will find the correct target frame-sink. ash would then need to:
 (1) find the closest ancestor frame-sink that is associated with a Window it knows about. HostFrameSinkManager can provide the ancestor information for the frame-sinks.
 (2) dispatch the event, the target frame-sink (OOPIF), and the ancestor Window (RenderWidgetHostViewAura) to the browser. That window (RWHVAura) then should be able to find the correct RenderWidgetHostViewChildFrame from the frame-sink.
When the events reach the browser, will content there know to do the right thing or will it once again try to reach into HTQ for event targeting to the renderers? It's this part of the flow that is my primary concern in an oopash context.
If the frame-sink is correctly plumbed through from ash/ws2 to browser, and browser would not need to reach into HTQ (which it shouldn't do in single-process, and can't do in multi-proc). I think we should fairly strongly restrict access to HTQ from browser in this mode.
I'm super confused. It's not clear to me how the browser routes? It gets the target FrameSinkId?
There are two targeting steps in the browser: first in aura, and then in content. ash/ws2 needs to provide both targets, so the browser doesn't need to do either.

Sign in to add a comment