Bug 1749745 - Initialize AndroidCompositorWidget with initial size. r=aosmond,geckoview-reviewers,agi

Since bug 1747116 landed, if the compositor is reinitialized whilst
the Android Surface is invalid, we avoid crashing when querying the
window size and instead keep the compositor in a paused state.
However, in this case we will believe the widget size is 0x0 until the
compositor is eventually resumed. If webrender receives a display list
during this time, it will set an empty view rect. This means when the
compositor is subsequently resumed webrender believes it has nothing
to render, and we get stuck in a state where nothing is ever rendered
to the screen.

This patch initializes the AndroidCompositorWidget with an initial
size, which avoids the problem.

Differential Revision: https://phabricator.services.mozilla.com/D135711
This commit is contained in:
Jamie Nicol 2022-01-12 16:43:51 +00:00
parent f993cdb15f
commit 0ca5c9a304
3 changed files with 4 additions and 2 deletions

View file

@ -20,7 +20,7 @@ AndroidCompositorWidget::AndroidCompositorWidget(
mWidgetId(aInitData.widgetId()),
mNativeWindow(nullptr),
mFormat(WINDOW_FORMAT_RGBA_8888),
mClientSize(0, 0) {}
mClientSize(aInitData.clientSize()) {}
AndroidCompositorWidget::~AndroidCompositorWidget() {
if (mNativeWindow) {

View file

@ -14,6 +14,7 @@ namespace widget {
struct AndroidCompositorWidgetInitData
{
int32_t widgetId;
LayoutDeviceIntSize clientSize;
};
union CompositorWidgetInitData

View file

@ -2585,7 +2585,8 @@ void nsWindow::SetCompositorWidgetDelegate(CompositorWidgetDelegate* delegate) {
void nsWindow::GetCompositorWidgetInitData(
mozilla::widget::CompositorWidgetInitData* aInitData) {
*aInitData = mozilla::widget::AndroidCompositorWidgetInitData(mWidgetId);
*aInitData = mozilla::widget::AndroidCompositorWidgetInitData(
mWidgetId, GetClientSize());
}
bool nsWindow::WidgetPaintsBackground() {