This introduces some infrastructure to start tracking the program state more carefully. Currently
it only tracks the program because UseProgram was showing up the most in profiles, but more
state could also be added as needed.
--HG--
extra : rebase_source : 289ab867ef63032f7604a6cbe6d0230fd0a9411a
Calling AcquireSync on textures created with
D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX appears to be really slow, this really
bites us with the number of textures involved when tiling.
I've also tested using ID3D11Query to check when work is completed, this also
appears to be pretty slow.
This instead just uses a single texture with a keyedmutex, and makes sure we
draw to it last and lock it first. It's pretty hacky, but seems to work really
well so far.
--HG--
extra : rebase_source : bf5f56751f993e507fcd1e5c386fb1fc9a3f73af
For proper hit-testing we need to deal with situations where the initial touch
input falls on a dispatch-to-content region of an APZC, and the main thread
later tells us that it actually hit another APZC. This patch allows input blocks
to have an "unconfirmed" APZC target for the initially-found target that can
then be replaced with a different target. Input blocks without a confirmed
target are not ready for processing.
Previously we output of APZ hit testing was an APZC instance and an "in
overscroll" flag. Now we need to also distinguish between the hit region and the
dispatch-to-content region for an APZC, so this patch introduces an enum that
makes this more explicit.
Until bug 1082594 is fixed, the area occupied by inactive scrollable subframes
don't get added to their layer's dispatch-to-content region. Therefore the APZ
code doesn't know what area corresponds to the subframe, even though it knows
there is a subframe because of the scrollinfo layer. This change inserts a small
workaround to deal with the scrollinfo layers specially, so that the composition
bounds from the scrollinfo layer is used to obtain the area. Once bug 1082594
is fixed this can probably be removed.
When the event-regions are provided by layout, use them to populate the APZ-side
hit testing regions. The existing code is still used when event-regions are not
provided by layout.
This simply swaps out the existing nsIntRegion used in APZ hit-testing for
an EventRegion object. The dispatch-to-content region inside the EventRegions
is kept empty, and there are no functional changes here.
The only user is in layers/opengl. This is needed to do better state tracking
in the compositor.
--HG--
rename : gfx/gl/GLBlitTextureImageHelper.cpp => gfx/layers/opengl/GLBlitTextureImageHelper.cpp
rename : gfx/gl/GLBlitTextureImageHelper.h => gfx/layers/opengl/GLBlitTextureImageHelper.h
extra : rebase_source : bba00cbfac9253ca933721659dadbda2bfbe65c5
This makes APZ behave nicely with most uses of a css transform:scale.
Summary of changes:
- FrameMetrics::mCumulativeResolution now includes the css-driven resolution
in addition to the pres-shell resolution.
- Displayports are now stored in Screen pixels rather than Layer pixels.
This is what we want anyways (as we'd like the displayport size to remain
constant as a fraction of the screen size), but it was necessary to make
this change as part of this patch because continuing to store them in
Layer pixels in the presence of a css-driven resolution would have
required a bunch of infrastructure to implement correctly.
Remaining work:
- Layout painting a scrollable layer at a resolution different from the
scale induced by the css transform causes problems. These will go away
with bug 1076192.
- Different resolutions on the x and y axes are not supported. This is
tracked by bug 1039967.
This makes APZ behave nicely with most uses of a css transform:scale.
Summary of changes:
- FrameMetrics::mCumulativeResolution now includes the css-driven resolution
in addition to the pres-shell resolution.
- Displayports are now stored in Screen pixels rather than Layer pixels.
This is what we want anyways (as we'd like the displayport size to remain
constant as a fraction of the screen size), but it was necessary to make
this change as part of this patch because continuing to store them in
Layer pixels in the presence of a css-driven resolution would have
required a bunch of infrastructure to implement correctly.
Remaining work:
- Layout painting a scrollable layer at a resolution different from the
scale induced by the css transform causes problems. These will go away
with bug 1076192.
- Different resolutions on the x and y axes are not supported. This is
tracked by bug 1039967.
We already reset the shadow transform to the layer transform in
SetShadowProperties() before compositing every frame, so this is redundant.
--HG--
extra : rebase_source : bef51e6a918ffaab134a4b53fb6f2ec6c45d9d6d
Currently only pinch gesture events getting created in the GestureEventListener
code will make it to AsyncPanZoomController::HandleGestureEvent. Any pinch
gesture events that the widget code dispatches into the APZCTreeManager get
ignored, which shouldn't be happening. We don't have any production code that
exercises these code paths at the moment, but fixing it up also reduces the
APIs exposed into the testing code.
This patch unifies the physics governing the overscroll phase of a fling
with the snap-back animation. The unified physics are spring-based, like the
physics governing the snap-back animation before, except we allow for
oscillations.
This currently does nothing because the ANGLE we're using doesn't have keyed mutex
support.
--HG--
extra : rebase_source : 9ab74710c22c5330809206f1bb16677af5944bad