Commit Graph
32 Commits
Author SHA1 Message Date
Jamie Nicol a76b0bdd13 Bug 1741156 - Initial GPU process implementation on Android. r=aosmond,agi
Declare a GPU process and corresponding Service in the
AndroidManifest. This is of a new class GeckoServiceGpuProcess which
inherits from GeckoServiceChildProcess, and provides a binder
interface ICompositorSurfaceManager which allows the parent process to
set the compositor Surface for a given widget ID, and the compositor
in the GPU process to look up the Surface for a widget ID. The
ICompositorSurfaceManager interface is exposed to the parent process
through a new method getCompositorSurfaceManager() in the
IChildProcess interface.

Add a new connection type for GPU processes to GeckoProcessManager,
along with a function to look up the GPU process connection and fetch
the ICompositorSurfaceManager binder. When the GPU process is launched
we store the returned binder in the GPUProcessHost, and when each
widget's compositor is created we store a reference to the binder in
the UiCompositorControllerChild.

Each nsWindow is given a unique ID, and whenever the Surface changes
due to an Android resume event, it sends the new surface for that ID
to the GPU process (if enabled) by calling
ICompositorSurfaceManager.onSurfaceChanged().

Stop inheriting AndroidCompositorWidget from InProcessCompositorWidget
and instead inherit from CompositorWidget directly. This class holds a
reference to the Surface that will be rendered in to. The
CompositorBridgeParent notifies the CompositorWidget whenever it has
been resumed, allowing it to fetch the new Surface. For the
cross-process CompositorWidgetParent implementation it fetches that
Surface from the CompositorSurfaceManagerService, whereas the
InProcessAndroidCompositorWidget can read it directly from the real
widget.

AndroidCompositorWidget::GetClientSize() can now calculate its size
from the Surface, rather than racily reading the value from the
nsWindow. This means RenderCompositorEGL and RenderCompositorOGLSWGL
can now use GetClientSize() again rather than querying their own size
from the Surface.

With this patch, setting layers.gpu-process.enabled to true will cause
us to launch a GPU process and render from it. We do not yet
gracefully recover from a GPU process crash, nor can we render
anything using SurfaceTextures (eg video or webgl). Those will come in
future patches.

Differential Revision: https://phabricator.services.mozilla.com/D131231
2021-11-29 20:52:31 +00:00
Brad Werth 4ca4f98ecf Bug 1674142: Add additional checks to find a crash in InProcessCompositorWidget::PreRender. r=jrmuizel
There are decreasingly-plausible explanations for how mWidget becomes  NULL in
the crash reports we are seeing. This patch closes one of the possible -- but
still unlikely -- reasons by checking for a NULL pointer after a static_cast.
The contract for static_cast should not allow it to return NULL with non-NULL
input, but it would trigger the crashes we are seeing.

Another possibility is that dangling pointers to InProcessCompositorWidget
objects are being held. The patch adds a canary pointer and a sanity-checking
function that's called in all member functions that dereference mWidget.

Differential Revision: https://phabricator.services.mozilla.com/D106672
2021-03-10 00:45:49 +00:00
Lee Salzman 09c77bf86b Bug 1690216 - Clarify that StartRemoteDrawingInRegion does not actually modify the region. r=mattwoodrow
It caused us substantial confusion investigating this bug under the belief that
StartRemoteDrawingInRegion may have been modifying the dirty region. None of our
existing widget code anymore uses the API in this way, so it makes sense to just
force this dirty region to be const so that we no longer support the assumption
and alleviate confusion in the future about how our widget code actually behaves.

Depends on D106246

Differential Revision: https://phabricator.services.mozilla.com/D106247
2021-02-24 18:34:52 +00:00
Brad Werth 056954e4a3 Bug 1674142 Part 2: Upgrade to a release assert in CompositorWidget::CreateLocal. r=jrmuizel
Differential Revision: https://phabricator.services.mozilla.com/D103943
2021-02-03 22:10:24 +00:00
Brad Werth 5f9076f4a4 Bug 1674142: Add a runtime assert to InProcessCompositorWidget constructor. r=jrmuizel
Differential Revision: https://phabricator.services.mozilla.com/D98982
2020-12-10 16:24:24 +00:00
Markus Stange f5504f5089 Bug 1592739 - Stop using the vibrant region as the transparent region. r=mattwoodrow
This code was assuming that the only non-opaque parts of compositor rendering would be the
parts of the window that had vibrancy. But now that the default window background is transparent,
we can have non-vibrant parts where we render into transparency. Dialog windows such as sheet
windows are an example of this.
So instead of using the non-vibrant region of the window as its opaque region, we now use
the region that is covered by opaque Gecko layers. This region is a lot more conservative:
For example, the main browser chrome is now entirely transparent, because the chrome's opaque
parts share a layer with its transparent parts.
As a result, this change slightly affects the CALayer partitioning in the main browser window:
The entire browser chrome is now transparent, not just the tab bar.
The web content area is still opaque.

I think this will be fine. The thing I'm most concerned about is that scrolling inside web
content might cause invalidations of pixels from the chrome, because then we'd recomposite
the CALayers that cover the vibrant tab bar. This doesn't seem to happen most of the time
though, from what I can tell.

Differential Revision: https://phabricator.services.mozilla.com/D51466
2020-06-11 18:46:04 +00:00
Markus Stange f238925e45 Back out bug 1592739 due to multiple regressions (bug 1599366, bug 1601183, bug 1602193). a=backout
Differential Revision: https://phabricator.services.mozilla.com/D62753
2020-02-13 14:26:51 +00:00
Markus Stange c4d8377aa4 Bug 1576390 - Remove now-unused DrawWindowOverlay and WindowOverlayChanged methods. r=mattwoodrow
Differential Revision: https://phabricator.services.mozilla.com/D52748
2019-11-13 02:24:06 +00:00
Markus Stange 625a1e2008 Bug 1592739 - Stop using the vibrant region as the transparent region. r=mattwoodrow
This code was assuming that the only non-opaque parts of compositor rendering would be the
parts of the window that had vibrancy. But now that the default window background is transparent,
we can have non-vibrant parts where we render into transparency. Dialog windows such as sheet
windows are an example of this.
So instead of using the non-vibrant region of the window as its opaque region, we now use
the region that is covered by opaque Gecko layers. This region is a lot more conservative:
For example, the main browser chrome is now entirely transparent, because the chrome's opaque
parts share a layer with its transparent parts.
As a result, this change slightly affects the CALayer partitioning in the main browser window:
The entire browser chrome is now transparent, not just the tab bar.
The web content area is still opaque.

I think this will be fine. The thing I'm most concerned about is that scrolling inside web
content might cause invalidations of pixels from the chrome, because then we'd recomposite
the CALayers that cover the vibrant tab bar. This doesn't seem to happen most of the time
though, from what I can tell.

Differential Revision: https://phabricator.services.mozilla.com/D51466
2019-11-05 19:04:14 +00:00
Markus Stange a7fdc6db3c Bug 1574592 - Remove unused CompositorWidget::DrawWindowUnderlay. r=mattwoodrow
Differential Revision: https://phabricator.services.mozilla.com/D42404
2019-08-25 17:11:11 +00:00
Markus Stange 849c0259aa Bug 1574592 - Remove now-unused CompositorWidget::DoCompositorCleanup again. r=mattwoodrow
Differential Revision: https://phabricator.services.mozilla.com/D42403
2019-08-25 17:11:02 +00:00
Markus Stange 1d858632a1 Bug 1574592 - Add CompositorWidget::GetOpaqueWidgetRegion. r=mattwoodrow
This lets LayerManagerComposite and RendererOGL set the correct opaque region
on the native layer.

Differential Revision: https://phabricator.services.mozilla.com/D42401
2019-08-25 21:41:58 +00:00
Markus Stange 78a3d95516 Bug 1574592 - Add CompositorWidget::GetNativeLayerRoot. r=mattwoodrow
This will give the layer manager direct access to the native layers.

Differential Revision: https://phabricator.services.mozilla.com/D42400
2019-08-25 17:10:52 +00:00
Markus Stange 45285588d1 Bug 1573343 - Make the aInvalidRegion parameter of EndRemoteDrawing a const reference rather than a regular reference. r=mattwoodrow
There's no point in mutating it, and nobody does.

Differential Revision: https://phabricator.services.mozilla.com/D41679
2019-08-19 22:40:39 +00:00
Markus Stange 697c0fac3e Bug 1491442 - Add CompositorWidget::DoCompositorCleanup() to give the widget a chance to clean up any state from PreRender/PostRender on the correct thread. r=mattwoodrow
Differential Revision: https://phabricator.services.mozilla.com/D40514
2019-08-16 01:09:26 +00:00
Ryan Hunt dbea16f87d Bug 1523969 part 26 - Move method definition inline comments to new line in 'widget/'. r=mstange
Differential Revision: https://phabricator.services.mozilla.com/D21130
2019-02-25 16:13:48 -06:00
Ehsan Akhgari 498e2df734 Bug 1521000 - Part 2: Adjust our clang-format rules to include spaces after the hash for nested preprocessor directives r=sylvestre
# ignore-this-changeset
2019-01-18 10:16:18 +01:00
Sylvestre Ledru e5a134f73a Bug 1511181 - Reformat everything to the Google coding style r=ehsan a=clang-format
# ignore-this-changeset
2018-11-30 11:46:48 +01:00
Jonathan Watt 90b6f15254 Bug 1413217 - Fix some includes etc. in widget code. r=jimm
MozReview-Commit-ID: 8bW6WIPMun4
2017-10-12 17:03:35 +01:00
David Anderson f66c19353f Remove Composer2D remnants. (bug 1339353, r=kats) 2017-02-14 12:29:39 -08:00
Kartikaya Gupta 6813d1843d Bug 1330037 - Propagate the CompositorOptions to all CompositorWidget instances. r=dvander
MozReview-Commit-ID: DFeeo2WNmhZ
2017-01-12 17:29:42 -05:00
Kartikaya Gupta 0c8045c0a3 Bug 1315706 - Pass a wrapper struct to various CompositorWidget functions. r=dvander
This is the first step in using these functions without having a
LayerManagerComposite at all.

MozReview-Commit-ID: 2zkuB7Ox4Ut
2016-11-07 21:16:52 -05:00
Jim Chen e32ed5b400 Bug 1306083 - 1. Use AndroidCompositorWidget to access GeckoLayerClient; r=kats
Add AndroidCompositorWidget to act as the intermediary between gfx code
and GeckoLayerClient, in place of AndroidBridge. AndroidCompositorWidget
currently inherits from InProcessCompositorWidget, but when Android
eventually supports OOP compositing, it will be made to inherit from
CompositorWidget directly.
2016-10-03 12:26:00 -04:00
David Anderson 4462345acb Fix vsync sometimes not firing after the GPU process crashes. (bug 1305628, r=mattwoodrow) 2016-09-30 01:23:52 -07:00
David Anderson 0fe9776024 Don't expose CompositorVsyncDispatcher from CompositorWidget. (bug 1285625 part 2, r=mchang) 2016-07-19 11:56:07 -07:00
David Anderson d6157cc6d2 Implement remote CompositorWidgets on Windows. (bug 1281998 part 7, r=billm) 2016-07-01 01:15:16 -07:00
David Anderson c70cd6b6e2 Move CompositorWidget construction out of nsIWidget. (bug 1281998 part 5, r=jimm) 2016-07-01 01:15:16 -07:00
David Anderson 039e80e39c Move InProcessCompositorWidget to its own file. (bug 1281998 part 3, r=jimm) 2016-07-01 01:15:16 -07:00
Phil Ringnalda 89deea28e2 Back out 7 changesets (bug 1281998) for Windows Marionette crashes
Backed out changeset d806fac2c856 (bug 1281998)
Backed out changeset b8d4fedfd7eb (bug 1281998)
Backed out changeset a72929c0c3ec (bug 1281998)
Backed out changeset 74198f88fa37 (bug 1281998)
Backed out changeset 54a0e73f6906 (bug 1281998)
Backed out changeset 99d1da1293b7 (bug 1281998)
Backed out changeset a5a9585754b1 (bug 1281998)
2016-06-29 19:35:24 -07:00
David Anderson 091656144c Implement remote CompositorWidgets on Windows. (bug 1281998 part 7, r=billm) 2016-06-29 16:47:23 -04:00
David Anderson 27793b9f88 Move CompositorWidget construction out of nsIWidget. (bug 1281998 part 5, r=jimm) 2016-06-29 16:47:22 -04:00
David Anderson bec1f2780f Move InProcessCompositorWidget to its own file. (bug 1281998 part 3, r=jimm) 2016-06-29 16:47:22 -04:00