Bug 1472140 - 1. Set first paint flag when resuming and resizing composition; r?rbarker
When resuming composition in a new GeckoView, we wait for the first
paint signal in order to uncover the SurfaceView. This patch makes sure
that we always send the first paint signal.
MozReview-Commit-ID: EZeOR80d8HY
--- a/gfx/layers/ipc/UiCompositorControllerParent.cpp
+++ b/gfx/layers/ipc/UiCompositorControllerParent.cpp
@@ -69,16 +69,18 @@ UiCompositorControllerParent::RecvResume
}
mozilla::ipc::IPCResult
UiCompositorControllerParent::RecvResumeAndResize(const int32_t& aWidth,
const int32_t& aHeight)
{
CompositorBridgeParent* parent = CompositorBridgeParent::GetCompositorBridgeParentFromLayersId(mRootLayerTreeId);
if (parent) {
+ // Front-end expects a first paint callback upon resume/resize.
+ parent->RecvForceIsFirstPaint();
parent->ResumeCompositionAndResize(aWidth, aHeight);
}
return IPC_OK();
}
mozilla::ipc::IPCResult
UiCompositorControllerParent::RecvInvalidateAndRender()
{
--- a/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoView.java
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoView.java
@@ -203,16 +203,19 @@ public class GeckoView extends FrameLayo
}
}
public GeckoSession releaseSession() {
if (mSession == null) {
return null;
}
+ // Cover the view while we are not drawing to the surface.
+ coverUntilFirstPaint(Color.WHITE);
+
GeckoSession session = mSession;
mSession.releaseDisplay(mDisplay.release());
mSession.getOverscrollEdgeEffect().setInvalidationCallback(null);
mSession.getCompositorController().setFirstPaintCallback(null);
if (session.getSelectionActionDelegate() == mSelectionActionDelegate) {
mSession.setSelectionActionDelegate(null);
}
mSession = null;
--- a/widget/android/nsWindow.cpp
+++ b/widget/android/nsWindow.cpp
@@ -1259,21 +1259,16 @@ nsWindow::GeckoViewSupport::Transfer(con
u"GeckoView:UpdateInitData");
}
DispatchToUiThread(
"GeckoViewSupport::Transfer",
[compositor = LayerSession::Compositor::GlobalRef(compositor)] {
compositor->OnCompositorAttached();
});
-
- // Set the first-paint flag so that we refresh viewports, etc.
- if (RefPtr<CompositorBridgeChild> bridge = window.GetCompositorBridgeChild()) {
- bridge->SendForceIsFirstPaint();
- }
}
void
nsWindow::GeckoViewSupport::AttachEditable(const GeckoSession::Window::LocalRef& inst,
jni::Object::Param aEditableParent,
jni::Object::Param aEditableChild)
{
java::GeckoEditableChild::LocalRef editableChild(inst.Env());