Putting the mouse on the omnibox gives us blinking cursor, which submits a new compositor frame and a new hit-test data list all the time. This is a special case but it might make sense to check hit-test data list diff in HitTestProviderAura in general and don't send a new list if it's the same as the old one.
I guess the proposal here is: empty hit-test data implies the latest hit-test should be used instead. I like this. I think supporting this in the service-side would be easy. On the client side, however, this may be tricky. We do not currently have a mechanism for tracking when hit-test data has changed, so we would need to add something there. It's probably not overly difficult, e.g. any change in window-hierarchy, bounds, visibility, and shape should invalidate the hit-test region. But there may be edge cases we need to be careful about.
Sadrul and I discussed about this offline, summary here: we think supporting it in ClientLayerTreeFrameSink/ HitTestDataProviderAura would be a good first-step, i.e. keep the previous list and check the new list against the old one before submitting, do not submit the list if it's the same as the old one. This way we save all the transporting time, and checking against the list should cost the same or less compared to aggregating the list in HitTestAggregator.
Actually, do we know how often we are sending unchanged hit-test region list? Is it true that this cursor case is one of the only few that does that? If it's far more common to send updated hit-test region list, then checking against the previous list every time would be unnecessarily expensive. In that case maybe supporting it on the client side is indeed required?
We will be sending hittest data for each visual update (e.g. hover update on buttons, menus etc.). So, n the worst case, for each mouse move, which can be fairly frequent.
The right-est thing to do of course would be to not have to generate the hittest data at all if nothing changes.
😿 Pinpoint job stopped with an error.
https://pinpoint-dot-chromeperf.appspot.com/job/1002fa88140000
All of the runs failed. The most common error (10/20 runs) was:
HTTPException: HTTP status code 400: {"error": {"message": "CIPD package path is required. Use \".\" to install to run dir."}}
😿 Pinpoint job stopped with an error.
https://pinpoint-dot-chromeperf.appspot.com/job/16c4ba20140000
All of the runs failed. The most common error (1/20 runs) was:
IOError: [Errno 2] No such file or directory: 'c:\\b\\s\\w\\ity16chx\\tmpxtq9zftelemetry\\histograms.json'
😿 Pinpoint job stopped with an error.
https://pinpoint-dot-chromeperf.appspot.com/job/170e6517e40000
All of the runs failed. The most common error (1/20 runs) was:
IOError: [Errno 2] No such file or directory: 'c:\\b\\s\\w\\it653lxg\\tmpslu1mrtelemetry\\histograms.json'
Comment 1 by sadrul@chromium.org
, Sep 5 2017