Commit Graph

850 Commits

Author SHA1 Message Date
Gerald Squelart
76961b51c0 Bug 1675409 - Migrated ContentBuildPayload and ContentFullPaintPayload to Markers 2.0 API - r=gregtatum
In this case, the same marker type "CONTENT_FULL_PAINT_TIME" is used in separate places, so it makes sense to put the marker type definition in a common location.

Differential Revision: https://phabricator.services.mozilla.com/D96042
2020-11-17 11:33:31 +00:00
Nicolas Silva
7b47c78015 Bug 1673387 - Don't use texture arrays for shared and standalone texture cache entries. r=gw
The patch ended up more complicated than I anticipated due to a lot of places in webrender assuming texture arrays unless specified otherwise.
The patch also merges TextureTarget into ImageBufferKind, and removes the realloc code path ing the texture cache (which is supposed to be dead code since because of performance issues on windows+intel).

Differential Revision: https://phabricator.services.mozilla.com/D95562
2020-11-12 22:25:59 +00:00
Butkovits Atila
360ba36424 Backed out 2 changesets (bug 1673387) for bustage on gradient_cache_hardstop_clip.yaml. CLOSED TREE
Backed out changeset a315ba98577f (bug 1673387)
Backed out changeset 591c4143921f (bug 1673387)
2020-11-12 15:31:08 +02:00
Nicolas Silva
ed9df8e67b Bug 1673387 - Don't use texture arrays for shared and standalone texture cache entries. r=gw
The patch ended up more complicated than I anticipated due to a lot of places in webrender assuming texture arrays unless specified otherwise.
The patch also merges TextureTarget into ImageBufferKind, and removes the realloc code path ing the texture cache (which is supposed to be dead code since because of performance issues on windows+intel).

Differential Revision: https://phabricator.services.mozilla.com/D95562
2020-11-12 11:54:47 +00:00
Andrew Osmond
e4258af47b Bug 1655584 - Flush rendering for popup window configuration changes with GTK. r=sotaro
This backs out part of bug 1656211 which turned out to be insufficient.
The invalidate rendered frame transaction races with the initial frame
rendering of the popup. If it comes in too soon, we will only draw the
frame once, and the frame corruption remains. This patch makes us flush
the rendering pipeline to ensure we get two separate generate frame
events.

Differential Revision: https://phabricator.services.mozilla.com/D96157
2020-11-06 11:56:13 +00:00
Bogdan Tara
b1a44a1319 Backed out 2 changesets (bug 1673387) for wrench/reftests/ failures CLOSED TREE DONTBUILD
Backed out changeset a755e87bf875 (bug 1673387)
Backed out changeset e4cf743d6916 (bug 1673387)
2020-11-05 20:00:08 +02:00
Nicolas Silva
0c9f4ccc78 Bug 1673387 - Don't use texture arrays for shared and standalone texture cache entries. r=gw
The patch ended up more complicated than I anticipated due to a lot of places in webrender assuming texture arrays unless specified otherwise.
The patch also merges TextureTarget into ImageBufferKind, and removes the realloc code path ing the texture cache (which is supposed to be dead code since because of performance issues on windows+intel).

Differential Revision: https://phabricator.services.mozilla.com/D95562
2020-11-05 16:31:46 +00:00
Matt Woodrow
b4541e6213 Bug 1674878 - Expose more detailed WR backend information to TextureFactoryIdentifier. r=jrmuizel
Differential Revision: https://phabricator.services.mozilla.com/D95588
2020-11-03 18:24:43 +00:00
Matt Woodrow
667c4b3309 Bug 1673906 - Use FrameRendered notifications for releasing animated shared surfaces when using SWGL. r=aosmond
Depends on D95103

Differential Revision: https://phabricator.services.mozilla.com/D95104
2020-10-29 19:08:12 +00:00
Matt Woodrow
2d5590878c Bug 1673906 - Generate a WR epoch for RecvUpdateResources. r=sotaro
Differential Revision: https://phabricator.services.mozilla.com/D95103
2020-10-29 19:08:12 +00:00
sotaro
c7919e35e5 Bug 1672565 - Use ScheduleForcedGenerateFrame() in WebRenderBridgeParent::RecvForceComposite() r=nical
Bug 1656211 added WebRenderBridgeParent::RecvForceComposite(). It triggers generate frame even when widget is not ready for rendering.

Differential Revision: https://phabricator.services.mozilla.com/D94553
2020-10-23 10:29:00 +00:00
Andrew Osmond
1c89e64020 Bug 1656211 - Force recompositing frames on GTK when popup window configuration changes. r=nical
Similar to bug 1280653, it appears that GLX invalidates the back buffer
while we are drawing. The only indication we get of this are resize and
configure events from X. We suppress the configure event for popups for
various reasons, so this patch explicitly generates a forced recomposite
of the frame. It does it immediately so that most of the time it should
beat the presentation of the buffer and avoid displaying of the bad
frame to the user; popups generally are not complicated and should have
plenty of budget to perform the second composite.

Differential Revision: https://phabricator.services.mozilla.com/D93862
2020-10-19 07:44:59 +00:00
Nicolas Silva
7bb3623086 Bug 1671289 - Improve WebRender's integrated profiler. r=gw
In a (large-ish) nutshell:

 - Consolidate all counters under a single type.
 - Counters are all arranged in an array and referred to via index.
 - All counters can be displayed as average+max (float/int), graph, and change indicator.
 - Specify what to show and in what form via a pref.
 - All counters and visualizations support not having values every frame.
 - GPU time queries visualization is easier to read relative to the frame budget:
  - If the maximum value is under 16ms, the right side of the graph is fixed at 16ms.
  - If the maximum value is above 16ms, draw a vertical bar at 16ms.
 - Added a few new profile counters:
  - Total frame CPU time (from API send to the end of GPU command submission).
  - Visibility, Prepare, Batching and Glyph resolve times.

The main change is how profile counters are represented. Instead of having different types for different visualizations, every counter is represented the same way, tracking average/max values over half a ms and optionally recording a graph over a number of frames. Counters are stored in a vector and referred to via index (See constants at the top of profiler.rs).
The main motivation for this storage is to facilitate adding counters without having to think too much about where to store them and how to pass them to the renderer.

The profiler's UI is defined by a string with with a single syntax:
 - Comma separated list of tokens (leading and trailing spaces ignored), which can be:
  - A counter name:
   - If prefixed with a '#' character, the counter is shown as a graph.
   - If prefixed with a '*' character, the counter is shown as a change indicator
   - By default (counter name without prefix), the counter is shown as average and max over half a second.
  - A preset name:
   - A preset is a builtin UI string in the same syntax that can be nested in the main UI string.
   - Presets are defined towards the top of profiler.rs and can also refer to other presets.
  - An empty token adds a  bit of vertical space.
  - A '|' token begins a new column.
  - A '_' token begins a new row.

Differential Revision: https://phabricator.services.mozilla.com/D93603
2020-10-20 08:54:04 +00:00
Narcis Beleuzu
a80c3a6da1 Backed out 1 changesets (bug 1671289) for wrench bustages on profiler.rs . CLOSED TREE
Backed out changeset db80ac24d32f (bug 1671289)
2020-10-19 23:58:05 +03:00
Nicolas Silva
af00138764 Bug 1671289 - Improve WebRender's integrated profiler. r=gw
In a (large-ish) nutshell:

 - Consolidate all counters under a single type.
 - Counters are all arranged in an array and referred to via index.
 - All counters can be displayed as average+max (float/int), graph, and change indicator.
 - Specify what to show and in what form via a pref.
 - All counters and visualizations support not having values every frame.
 - GPU time queries visualization is easier to read relative to the frame budget:
  - If the maximum value is under 16ms, the right side of the graph is fixed at 16ms.
  - If the maximum value is above 16ms, draw a vertical bar at 16ms.
 - Added a few new profile counters:
  - Total frame CPU time (from API send to the end of GPU command submission).
  - Visibility, Prepare, Batching and Glyph resolve times.

The main change is how profile counters are represented. Instead of having different types for different visualizations, every counter is represented the same way, tracking average/max values over half a ms and optionally recording a graph over a number of frames. Counters are stored in a vector and referred to via index (See constants at the top of profiler.rs).
The main motivation for this storage is to facilitate adding counters without having to think too much about where to store them and how to pass them to the renderer.

The profiler's UI is defined by a string with with a single syntax:
 - Comma separated list of tokens (leading and trailing spaces ignored), which can be:
  - A counter name:
   - If prefixed with a '#' character, the counter is shown as a graph.
   - If prefixed with a '*' character, the counter is shown as a change indicator
   - By default (counter name without prefix), the counter is shown as average and max over half a second.
  - A preset name:
   - A preset is a builtin UI string in the same syntax that can be nested in the main UI string.
   - Presets are defined towards the top of profiler.rs and can also refer to other presets.
  - An empty token adds a  bit of vertical space.
  - A '|' token begins a new column.
  - A '_' token begins a new row.

Differential Revision: https://phabricator.services.mozilla.com/D93603
2020-10-19 20:07:54 +00:00
Matt Woodrow
bf8c8b3e29 Bug 1670793 - Hold animated shared surface until the end of the composite when using software GL. r=sotaro
Differential Revision: https://phabricator.services.mozilla.com/D93463
2020-10-14 21:02:40 +00:00
Jamie Nicol
dc6885fb0d Bug 1670313 - Avoid crash in CompositorVsyncScheduler::CompositeToTarget() r=mattwoodrow
Differential Revision: https://phabricator.services.mozilla.com/D93220
2020-10-12 19:30:54 +00:00
Jamie Nicol
5e32567b0e Bug 1668878 - Stop doing catch-up composites on webrender. r=mattwoodrow
Currently, when webrender fails to render a frame on time, it will
attempt to catch up by rendering the next frame immediately (part way
through the vsync period) rather than delaying until the next
vsync. The idea is that even though the first frame missed vsync, the
next frame can hopefully still be rendered on time.

However, on Android, because of the default EGL swap interval of zero,
the driver blocks rather than allowing 2 frames to be rendered in a
single vsync. This guarantees that the next frame will also miss its
vsync, and so on. Other platforms may avoid this by setting the swap
interval to zero. While that was an option on Android too, it was felt
that the premise of catch up composites was still flawed: a
late-started composite is unlikely to meet its deadline, even if the
driver does not block. Better to cut our losses and wait for the next
vsync.

Differential Revision: https://phabricator.services.mozilla.com/D92958
2020-10-08 19:16:00 +00:00
Matt Woodrow
6d9ff78d92 Bug 1668302 - Expose SWGL state to TextureFactoryIdentifier. r=jrmuizel
This is mostly preparing for the future state where we might have SWGL WR mixed with real hardware webrender, and want a way to lookup the state per-compositor.

Differential Revision: https://phabricator.services.mozilla.com/D92009
2020-10-01 22:19:15 +00:00
Bogdan Tara
5967275f06 Backed out 2 changesets (bug 1668302) for swr reftest failures CLOSED TREE
Backed out changeset 8434906c98c4 (bug 1668302)
Backed out changeset ea6160902594 (bug 1668302)
2020-10-01 16:06:19 +03:00
Gerald Squelart
313fddf4f9 Bug 1667915 - Separate marker category from marker options - r=gregtatum
The `category.WithOptions(...)` syntax was a bit strange and difficult to explain.

Now the category and options are separate parameters. Default options can be specified with `MarkerOptions{}` or just `{}`.

As a special case, defaulted-NoPayload functions don't need `<>`, and defaulted-NoPayload functions and macros don't even need `{}` for default options, e.g.:
`profiler_add_marker("name", OTHER); PROFILER_MARKER_UNTYPED("name", OTHER);`

Differential Revision: https://phabricator.services.mozilla.com/D91680
2020-10-01 11:02:23 +00:00
Bogdan Tara
6fe40f83f1 Backed out 2 changesets (bug 1667915) for platform related bustage CLOSED TREE
Backed out changeset e7a0788a1741 (bug 1667915)
Backed out changeset d34505b2d81b (bug 1667915)
2020-10-01 12:34:39 +03:00
Matt Woodrow
62379a617b Bug 1668302 - Expose SWGL state to TextureFactoryIdentifier. r=jrmuizel
This is mostly preparing for the future state where we might have SWGL WR mixed with real hardware webrender, and want a way to lookup the state per-compositor.

Depends on D92008

Differential Revision: https://phabricator.services.mozilla.com/D92009
2020-10-01 02:56:31 +00:00
Gerald Squelart
4eb5bd3574 Bug 1667915 - Separate marker category from marker options - r=gregtatum
The `category.WithOptions(...)` syntax was a bit strange and difficult to explain.

Now the category and options are separate parameters. Default options can be specified with `MarkerOptions{}` or just `{}`.

As a special case, defaulted-NoPayload functions don't need `<>`, and defaulted-NoPayload functions and macros don't even need `{}` for default options, e.g.:
`profiler_add_marker("name", OTHER); PROFILER_MARKER_UNTYPED("name", OTHER);`

Differential Revision: https://phabricator.services.mozilla.com/D91680
2020-10-01 01:44:47 +00:00
J. Ryan Stinnett
6d5ed91467 Bug 1580117 - Remove invalid assertion from RecvGetSnapshot. r=mattwoodrow
Since the compositor can be paused at any time (due to window state changes),
it's possible (and tests confirm it can happen) that `RecvGetSnapshot` is called
while the compositor is paused. This change removes the assertion and instead
skips the snapshot work in this case.

Depends on D85955

Differential Revision: https://phabricator.services.mozilla.com/D90587
2020-09-17 19:59:15 +00:00
Markus Stange
1383ce1f62 Bug 1664049 - Move the creation of the WebRenderCompositionRecorder into RenderThread. r=barret
Differential Revision: https://phabricator.services.mozilla.com/D89865
2020-09-18 01:24:57 +00:00
Jamie Nicol
6dbe65b324 Bug 1663732 - Hook up GeckoView's CompositorController.setClearColor() to webrender. r=nical
Differential Revision: https://phabricator.services.mozilla.com/D90098
2020-09-15 13:22:24 +00:00
Gerald Squelart
8c49ce00f7 Bug 1663554 - Convert PROFILER_ADD_TEXT_MARKER and friends to PROFILER_MARKER_TEXT - r=gregtatum
Mostly mechanical changes, with some work needed to convert the different payloads (with optional timestamps, inner window id, and/or backtrace) to the equivalent MarkerOptions.

Differential Revision: https://phabricator.services.mozilla.com/D89587
2020-09-11 00:41:27 +00:00
Andrew Osmond
8b68b2b0a8 Bug 1663923 - Cover more WebRender initialization failure paths with explicit reasons. r=kvark
Differential Revision: https://phabricator.services.mozilla.com/D89596
2020-09-09 15:47:46 +00:00
Andrew Osmond
272f98121e Bug 1662836 - Expose detailed initialization failure reason for WebRender. r=kvark
We don't know why we see initialization failures in the telemetry which
makes it hard to investigate why users aren't getting WebRender and
instead fallback to basic. Let's expose the detailed error message
WebRender already generates and puts in the critical log.

Differential Revision: https://phabricator.services.mozilla.com/D89185
2020-09-08 02:03:26 +00:00
Gerald Squelart
1b5d0a5806 Bug 1659404 - Fix non-MOZ_GECKO_PROFILER build - r=canaltinova
Differential Revision: https://phabricator.services.mozilla.com/D88375
2020-08-27 14:41:46 +00:00
Botond Ballo
dd1c4642f3 Bug 1635256 - Avoid unnecessary array copies in NotifyLayerTransforms and SetConfirmedTargetAPZC. r=kats
Differential Revision: https://phabricator.services.mozilla.com/D88083
2020-08-25 02:17:06 +00:00
Matt Woodrow
71b4f73582 Bug 1656818 - Move decision to flip WebRender readback closer to the source, and make it correct for SWGL. r=lsalzman,geckoview-reviewers,snorp
Differential Revision: https://phabricator.services.mozilla.com/D86892
2020-08-14 18:40:09 +00:00
Csoregi Natalia
d3dd708533 Backed out 4 changesets (bug 1656817, bug 1656818, bug 1658858) for bustage on RendererOGL.cpp. CLOSED TREE
Backed out changeset 9c8e4ec4e47c (bug 1656818)
Backed out changeset 92252cfd26de (bug 1656818)
Backed out changeset 1bebb79150d6 (bug 1656817)
Backed out changeset e1becb3a2fb5 (bug 1658858)
2020-08-14 00:25:44 +03:00
Matt Woodrow
3ab6d4a907 Bug 1656818 - Move decision to flip WebRender readback closer to the source, and make it correct for SWGL. r=lsalzman
Differential Revision: https://phabricator.services.mozilla.com/D86892
2020-08-13 20:43:35 +00:00
Lee Salzman
b754aa0add Bug 1652894 - add SWGL RenderTextureHosts. r=mattwoodrow
Differential Revision: https://phabricator.services.mozilla.com/D86340
2020-08-12 21:25:17 +00:00
Mihai Alexandru Michis
49b0cb84ec Backed out 4 changesets (bug 1652894) for causing multiple reftest failures.
CLOSED TREE

Backed out changeset d6786fcf717b (bug 1652894)
Backed out changeset 97df16d3b738 (bug 1652894)
Backed out changeset 8a1f8b9e2524 (bug 1652894)
Backed out changeset 96bca5729430 (bug 1652894)
2020-08-12 02:08:28 +03:00
Lee Salzman
dca51388e1 Bug 1652894 - add SWGL RenderTextureHosts. r=mattwoodrow
Differential Revision: https://phabricator.services.mozilla.com/D86340
2020-08-11 15:53:15 +00:00
Csoregi Natalia
71ee51a3de Backed out 4 changesets (bug 1652894) for texture related crashes. CLOSED TREE
Backed out changeset 714ad1b01cb2 (bug 1652894)
Backed out changeset e3b4753fd09c (bug 1652894)
Backed out changeset 8abaf47071d8 (bug 1652894)
Backed out changeset 175df7659c3f (bug 1652894)
2020-08-11 15:50:07 +03:00
Lee Salzman
f3981d51c5 Bug 1652894 - add SWGL RenderTextureHosts. r=mattwoodrow
Differential Revision: https://phabricator.services.mozilla.com/D86340
2020-08-11 07:38:10 +00:00
Csoregi Natalia
3cf113b7a8 Backed out 4 changesets (bug 1652894) for bustages on RenderThread.cpp. CLOSED TREE
Backed out changeset 0e0107226c9e (bug 1652894)
Backed out changeset ff5e4bffb497 (bug 1652894)
Backed out changeset 2e4c7cced692 (bug 1652894)
Backed out changeset a8b850455c90 (bug 1652894)
2020-08-11 08:52:47 +03:00
Lee Salzman
9dd99a1647 Bug 1652894 - add SWGL RenderTextureHosts. r=mattwoodrow
Differential Revision: https://phabricator.services.mozilla.com/D86340
2020-08-11 05:24:04 +00:00
Gerald Squelart
c83ed0d762 Bug 1658230 - Deduplicate ProfileJSONWriter classes - r=gregtatum
The main change is removing ProfileJSONWriter.cpp, making ProfileJSONWriter.h point at BaseProfileJSONWriter.h, and exposing `mozilla::baseprofiler::` classes in the top namespace as expected by users of ProfileJSONWriter.h (to minimize changes).

These two headers are now always present in the "mozilla" include directory, independent of MOZ_GECKO_PROFILER settings.

The rest is just needed tweaks to match the above changes.

Differential Revision: https://phabricator.services.mozilla.com/D86504
2020-08-11 03:50:54 +00:00
Kartikaya Gupta
8833872dcb Bug 1653796 - Introduce a SampleTime class. r=botond
This makes the sample time more "strongly typed" by using a variant-style
class instead of a raw TimeStamp. The sample time can come from different
sources (vsync, testing, Now()) and it is useful to save that information
as we pass around the sample time. It would have been helpful with some
of the debugging I did recently, and it also is needed for the next patch.

Differential Revision: https://phabricator.services.mozilla.com/D86244
2020-08-10 20:14:05 +00:00
Matt Woodrow
46ec29c048 Bug 1657523 - Compute the scale from size for async image pipelines in the compositor process, so that we get the size matching the current texture. r=aosmond
Differential Revision: https://phabricator.services.mozilla.com/D86132
2020-08-06 21:09:55 +00:00
Kartikaya Gupta
54d9054dd1 Bug 1251612 - Support the GetFrameUniformity API in content processes. r=botond,froydnj
This moves the IPC mechanism from PCompositorBridge to PLayerTransaction/
PWebRenderBridge, so that it can be used by content processes like the other
test APIs. It still only produces actual data for the layers backend; for
WR it will just return empty datasets.

Differential Revision: https://phabricator.services.mozilla.com/D86016
2020-08-05 21:42:06 +00:00
Bogdan Tara
e25f6e0ce9 Backed out 2 changesets (bug 1653355) by mstange's request, for causing bug 1657239 and bug 1657241
Backed out changeset c05bf982e469 (bug 1653355)
Backed out changeset 8de5ba3d1c6f (bug 1653355)
2020-08-05 02:37:30 +03:00
Matt Woodrow
bf3bac9774 Bug 1653166 - Add rotation support to computed reference frames and use them for <video>. r=aosmond
Differential Revision: https://phabricator.services.mozilla.com/D85104
2020-08-04 01:15:04 +00:00
Glenn Watson
8978ee55ca Bug 1656820 - Remove content_size from scene pipeline. r=nical
Previously, the content_size was used when defining an iframe
to set the size of the root scrollable area.

However, this was never useful (the root pipeline scroll frame
is not considered a scroll root, it's more of a placeholder).
The scroll frame for content is typically defined within the
iframe display list (which also allows non-scrolled content
within the iframe, such as a background rectangle color).

The existing content_size was causing problems in Gecko because
there are some snapping / rounding inaccuracies with fractional
DPI ratios, resulting in root scroll frames with +/- 1 pixel
scrollable size.

The simplest fix for this is to remove content_size altogether
and rely on the iframe display item to define the content size
of the root scroll frame for a pipeline.

Differential Revision: https://phabricator.services.mozilla.com/D85719
2020-08-03 20:57:30 +00:00
Markus Stange
070cc1d706 Bug 1653355 - Pick video frames based on the vsync output time. r=nical
Differential Revision: https://phabricator.services.mozilla.com/D83830
2020-07-20 20:12:24 +00:00