Граф коммитов

13 Коммитов

Автор SHA1 Сообщение Дата
Matt Woodrow 43bc692c89 Bug 1509226 - Avoid allocations to serialize clips. r=jrmuizel
MozReview-Commit-ID: CetmS5cZCMP

Differential Revision: https://phabricator.services.mozilla.com/D12721

--HG--
extra : moz-landing-system : lando
2018-11-26 02:32:15 +00:00
Dzmitry Malyshau f076ce43c0 Bug 1503447 - Remove the clip->ASR == item->ASR hacky code path r=kats
Previously, WebRender ignored clip_node_id on the clip/scroll stack
when pushing clips or reference frames. This got fixed to be more consistent in:
https://github.com/servo/webrender/pull/3315

Now Gecko can use the clip chains generated for display items naturally,
instead of smuggling the last clip through the scroll_node_id, which is what
was happening in this hacky code branch being removed.

Differential Revision: https://phabricator.services.mozilla.com/D12216

--HG--
extra : moz-landing-system : lando
2018-11-17 15:44:40 +00:00
Dzmitry Malyshau aa76de2aae Bug 1503447 - Remove Nothing() semantic from ASR overrides r=kats
Previously, the ASR overrides contained Maybe<ClipId>, where Nothing() corresponded to taking the top of the clip/scroll stack instead of overriding. This change removes the associated complexity by ensuring that we always provide the ClipId.

Differential Revision: https://phabricator.services.mozilla.com/D11813

--HG--
extra : moz-landing-system : lando
2018-11-14 14:15:16 +00:00
Ryan Hunt 2226bcc8a3 Bug 1504220 - Move ScrollableLayerGuid, ViewID, ZoomConstraints from FrameMetrics.h r=botond
This commit attempts to lower the pain of modifying FrameMetrics.h.

It looks like most includes really only want ViewID or
ScrollableLayerGuid, so this commit factors them out into a separate
header. In the process FrameMetrics::ViewID is changed to
ScrollableLayerGuid::ViewID, which personally seems like a better
place for it now that we have RepaintRequest. Unfortunately that
requires a lot of places to be updated.

After this commit there are still a couple of major places that
FrameMetrics is included.
 * nsDisplayList.h
 * nsIScrollableFrame.h
 * Layers.h

Those are going to be more tricky or impossible to fix so they're
not in this commit.

Differential Revision: https://phabricator.services.mozilla.com/D10722

--HG--
rename : gfx/layers/FrameMetrics.h => gfx/layers/ScrollableLayerGuid.h
rename : gfx/layers/FrameMetrics.h => gfx/layers/ZoomConstraints.h
extra : rebase_source : 29ac79f91460a181bf7437af5c371207e22858e2
extra : source : c2e70e531075493fc6e374dcec862827f0bc6e77
2018-11-01 15:15:46 -05:00
Andrew Osmond fb274b0684 Bug 1502454 - Ensure we are consistent in how we define and use scroll IDs with WebRender. r=kats
In ClipManager::DefineScrollLayers, we don't always create a scroll ID
for each ASR. We may fail to get the scroll metadata, or it may not be
scrollable, in which case we should use the scroll ID of its ancestor
(or the root scroll ID if there is no ancestor). This should fix a crash
where we simply assumed the leaf of an ASR tree will always have a valid
scroll ID.

Differential Revision: https://phabricator.services.mozilla.com/D10708
2018-11-02 13:08:58 -04:00
Andrew Osmond 3370375e1c Bug 1471671 - Avoid crash with WebRender when the scroll metadata is unavailable. r=kats
We are seeing crash reports in the wild where there is no scroll
metadata available for an ASR for a display item and its clip. It
appears that in the non-WR path, it skips such items, so we should
probably do the same thing with WebRender. If the scrolling ends up
being wrong, hopefully a reproducible use case will make its way to use
to further debug, as the crash reports have not yielded anything to date.

Differential Revision: https://phabricator.services.mozilla.com/D9699
2018-10-25 13:39:28 -04:00
Kartikaya Gupta a971a37e5f Bug 1485834 - Allow recomputing the cumulative resolution in ComputeScrollMetadata. r=botond
We need to correctly populate the cumulative resolution field in the
ScrollMetadata in order to support zooming. Without this, the cumulative
resolution doesn't include the presShell resolution, and that results in
APZ getting into an inconsistent state.

Currently, the cumulative resolution is populated from the
ContainerLayerParameters object's scale, but in the case of WebRender,
we call ComputeScrollMetadata with an empty ContainerLayerParameters
since don't actually do layer building or rasterization in Gecko.
This patch makes this more explicit by changing the argument to a
Maybe<ContainerLayerParameters> and passing Nothing() from the WebRender
call sites.

In this scenario, we just use the cumulative presShell resolution as
the cumulative resolution, which should be correct for WebRender as
we won't have an "extra" CSS-derived resolution applied on the Gecko
side.

Depends on D9120

Differential Revision: https://phabricator.services.mozilla.com/D9121

--HG--
extra : moz-landing-system : lando
2018-10-19 14:24:50 +00:00
Andrew Osmond 75ee4d6a42 Bug 1496726 - Fix how some display item containers were missing from the clip optimization exclusion list. r=mstange
Differential Revision: https://phabricator.services.mozilla.com/D7966
2018-10-09 13:09:08 -04:00
Andrew Osmond 86d7bb0dde Bug 1485420 - Part 2. Make ClipManager trim clip chains which can be merged with the display item. r=mstange 2018-09-14 10:42:23 -04:00
Kartikaya Gupta 8b47047d0c No Bug - Fix logging now that clip ids are size_t. r=me and DONTBUILD 2018-06-20 16:30:13 -04:00
Kartikaya Gupta 63feb7051a Bug 1425565 - Use the container ASR for sticky items when building WebRender clips. r=mstange
Even if the sticky item has a fixed descendant, we want to use the
sticky container item's "real" ASR when computing the WR clips because
otherwise the WR item doesn't get attached to the correct scrolling
layer.

MozReview-Commit-ID: JVnzEIBeLKp

--HG--
extra : rebase_source : 806e43eb65d46eb5151e21b0a5eb09168b2df82d
2018-05-18 15:19:47 -04:00
Kartikaya Gupta b19c697041 Bug 1458598 - Override scrollframes with their descendant reference frames. r=mstange
The test case has a fixed item A inside a scrollframe B which is inside
a reference frame C which is inside the root scrollframe D. The
ClipManager code currently uses D's scrollid as the scrolling ancestor
for A, because the gecko display list's ASR is set up that way. However,
we really want to set C as the scrolling ancestor, because otherwise the
item A gets hoisted out of C and the transform from C doesn't get
applied to it. This patch ensures that when we enter C, we install an
override so that anything that would have used D's scrollid ends up
using C's, which results in the correct behaviour.

MozReview-Commit-ID: 31tscfT4xWW

--HG--
extra : rebase_source : 03df2fa5519b2592a2c9f598af0f3f1500773718
2018-05-08 09:16:29 -04:00
Kartikaya Gupta 1eb717ccf5 Bug 1377187 - Rewrite the clipping code to use the new clipchain API. r=mstange
The clip chain API in webrender allows us to build the clip state in WR
so that it matches the gecko display list more closely. This patch throws
away ScrollingLayersHelper.* and introduces ClipManager.* which pushes
the clip state to WR using the new method. A quick summary of the new
method is below.

Each display item in gecko has a DisplayItemClipChain which is a chain
of individual clips. The individual clips are defined in WR, and the
clip ids for those clips are put into a WR clip chain using the new
define_clip_chain API. Furthermore, each clip chain can also have a
parent chain, which is used to link a DisplayItemClipChain to the parent
display item's DisplayItemClipChain. This allows the WR clip state to
closely match the structure of the gecko display list clip state,
resulting in more correct behaviour.

There are a few other major changes that are lumped into this patch and
that were tricky to separate into their own patches:
- The collapsing of WrScrollId and WrStickyId into WrClipId. On the WR
  side all the clip ids are treated the same anyway. Trying to preserve
  the arbitrary distinction on the gecko side was resulting in
  increasingly convoluted code, with different kinds of Variant<..>
  types in the method signatures. It was much simpler and resulted in a
  bunch of code deletion to just collapse the types.
- Moving the "override" mechanism from WebRenderAPI to ClipManager. The
  override mechanism (explained in ClipManager.h) was simplified by
  moving it into ClipManager, because it removed the need for tracking
  additional clip stack state in WebRenderAPI.

MozReview-Commit-ID: GGbdFyJGprK

--HG--
extra : rebase_source : baa56ff179e917b0ab5a5c186a3a415761f8050a
2018-05-08 09:08:39 -04:00