These new methods will be automatically used by ARM targets for image
decoding. Specifically it should reduce the time required to decode GIFs
and opaque PNGs.
Differential Revision: https://phabricator.services.mozilla.com/D56030
--HG--
extra : moz-landing-system : lando
wr::WebRenderPipelineInfo needs to be handled even when WR rendering does not happen.
Differential Revision: https://phabricator.services.mozilla.com/D55899
--HG--
extra : moz-landing-system : lando
The inclusions were removed with the following very crude script and the
resulting breakage was fixed up by hand. The manual fixups did either
revert the changes done by the script, replace a generic header with a more
specific one or replace a header with a forward declaration.
find . -name "*.idl" | grep -v web-platform | grep -v third_party | while read path; do
interfaces=$(grep "^\(class\|interface\).*:.*" "$path" | cut -d' ' -f2)
if [ -n "$interfaces" ]; then
if [[ "$interfaces" == *$'\n'* ]]; then
regexp="\("
for i in $interfaces; do regexp="$regexp$i\|"; done
regexp="${regexp%%\\\|}\)"
else
regexp="$interfaces"
fi
interface=$(basename "$path")
rg -l "#include.*${interface%%.idl}.h" . | while read path2; do
hits=$(grep -v "#include.*${interface%%.idl}.h" "$path2" | grep -c "$regexp" )
if [ $hits -eq 0 ]; then
echo "Removing ${interface} from ${path2}"
grep -v "#include.*${interface%%.idl}.h" "$path2" > "$path2".tmp
mv -f "$path2".tmp "$path2"
fi
done
fi
done
Differential Revision: https://phabricator.services.mozilla.com/D55443
--HG--
extra : moz-landing-system : lando
We're vendoring it already so no reason not to. Only a couple dependencies left
after these to get rid of 0.6.
Differential Revision: https://phabricator.services.mozilla.com/D56044
--HG--
extra : moz-landing-system : lando
With the native compositor enabled, try runs were occasionally
hitting an assertion failure where a compositor surface was
being drawn, but hadn't been created (so the id was unknown).
This was occurring when the MemoryPressure event occurs in some
situations during shutdown. When this occurs, the active_documents
list is cleared. This could result in the native surface updates
list (which was stored in the Frame of a Document) not being
applied, meaning the new surface was not created. If a subsequent
frame then tried to composite that surface, this assert would
occur.
This is fixed by moving compositor surface management to be handled
via the resource cache, in the same way as texture cache updates.
This ensures that even in the presence of a memory pressure event,
any pending native surface updates are applied to the renderer.
Differential Revision: https://phabricator.services.mozilla.com/D55910
--HG--
extra : moz-landing-system : lando
Some OpenGL ES implementations do not like how we overflow a signed
32-bit integer when masking what are otherwise really unsigned 32-bit
integers. This patch avoids the problematic mask and instead just
does an equivalent shift.
Differential Revision: https://phabricator.services.mozilla.com/D55733
--HG--
extra : moz-landing-system : lando
In bug 1531142 we made it so that when a spatial node is being pinch-zoomed we
use a local raster-space to avoid rerasterizing glyphs for every slight change
in zoom level. This makes it so that we also apply the same trick when
being asynchronously zoomed by a double-tap gesture.
Differential Revision: https://phabricator.services.mozilla.com/D55699
--HG--
extra : moz-landing-system : lando
The implementation for identifying which nodes in the dirty tracker
tree to merge was incorrect. Each leaf node identifies if it is
static (hasn't invalidated for some time), regularly invalidating,
or somewhere in between.
The previous logic would merge the nodes if all of the children
were (static OR invalidating). The original intent of the algorithm
is to merge the nodes if (all static) OR (all invalidating).
This patch fixes the implementation, which fixes the oscillating
behavior in some cases, and describes in more detail the reasoning
for the heuristic.
Differential Revision: https://phabricator.services.mozilla.com/D55767
--HG--
extra : moz-landing-system : lando
Using Rect() will work properly when mDrawTarget does not have 0,0
origin. It also makes the code's intention more clear.
Differential Revision: https://phabricator.services.mozilla.com/D55337
--HG--
extra : moz-landing-system : lando
In future, WR will consider this when deciding whether an image
should be promoted to be a native compositor surface.
Differential Revision: https://phabricator.services.mozilla.com/D55406
--HG--
extra : moz-landing-system : lando
We now assume that most snapping is done during scene building. This
means that nearly every point and rect used in the shaders are
pre-snapped and nothing more need be done. The text shader is an
exception, but it also effectively pre-snaps because when it calculates
its local rect for a glyph, it takes into account any snapping
requirements, rather than adjusting for snapping after its local rect
interacts with other elements.
As such, we can remove any need for generic snap offsets from the
shaders.
Differential Revision: https://phabricator.services.mozilla.com/D55436
--HG--
extra : moz-landing-system : lando
* The existing code to detect if an image is dirty fails in some
cases. For external images, they were not being added to the
list of dirty images when update was called. Further, since
the dirty image keys hash set was cleared each frame, it was
possible for an image to become dirty, but this detection to be
missed if it is not queried until a subsequent frame (due to
it being off-screen.
Instead, each image template has a generation identifier that
is incremented whenever an image template is updated. The picture
caching code stores the generation of the image key when it was
rasterized, and compares that to the current image key generation
when comparing dependencies. This fixes both cases above.
* Remove the is_cacheable logic that was previously used to
invalidate picture cache tiles for external images. This would
result in picture cache images that intersect with videos being
invalidated every frame unconditionally. However, this code path
is no longer required, due to the change above. By relying on
the true image dirty check, we can skip invalidating tiles
affected by video if the video frame has not advanced (e.g. it
is paused, or advancing at a lower frame rate than we are
currently compositing at).
Differential Revision: https://phabricator.services.mozilla.com/D55061
--HG--
extra : source : 93ccc760c4dd69f63d6ac171ace357b0dd31412a
By bug 1597619 change, MakeCurrent() became not called before calling eglSwapInterval. The comment already mentioned this requirement.
Differential Revision: https://phabricator.services.mozilla.com/D55272
--HG--
extra : moz-landing-system : lando
* The existing code to detect if an image is dirty fails in some
cases. For external images, they were not being added to the
list of dirty images when update was called. Further, since
the dirty image keys hash set was cleared each frame, it was
possible for an image to become dirty, but this detection to be
missed if it is not queried until a subsequent frame (due to
it being off-screen.
Instead, each image template has a generation identifier that
is incremented whenever an image template is updated. The picture
caching code stores the generation of the image key when it was
rasterized, and compares that to the current image key generation
when comparing dependencies. This fixes both cases above.
* Remove the is_cacheable logic that was previously used to
invalidate picture cache tiles for external images. This would
result in picture cache images that intersect with videos being
invalidated every frame unconditionally. However, this code path
is no longer required, due to the change above. By relying on
the true image dirty check, we can skip invalidating tiles
affected by video if the video frame has not advanced (e.g. it
is paused, or advancing at a lower frame rate than we are
currently compositing at).
Differential Revision: https://phabricator.services.mozilla.com/D55061
--HG--
extra : moz-landing-system : lando