Bug 988800 - Catch and ignore situations where we try to composite on a destroyed LayerRenderer instance. r=Cwiiis

This commit is contained in:
Kartikaya Gupta 2014-04-03 11:01:07 -04:00
parent e2501186d2
commit c57736de6f
3 changed files with 14 additions and 5 deletions

View File

@ -727,7 +727,12 @@ public class GeckoLayerClient implements LayerView.Listener, PanZoomTarget
mLayerRendererInitialized = true;
}
return mLayerRenderer.createFrame(mFrameMetrics);
try {
return mLayerRenderer.createFrame(mFrameMetrics);
} catch (Exception e) {
Log.w(LOGTAG, e);
return null;
}
}
@WrapElementForJNI(allowMultithread = true)

View File

@ -326,6 +326,9 @@ public class LayerRenderer implements Tabs.OnTabsChangedListener {
}
private RenderContext createContext(RectF viewport, RectF pageRect, float zoomFactor, PointF offset) {
if (mCoordBuffer == null) {
throw new IllegalStateException();
}
return new RenderContext(viewport, pageRect, zoomFactor, offset, mPositionHandle, mTextureHandle,
mCoordBuffer);
}

View File

@ -2396,9 +2396,8 @@ nsWindow::DrawWindowUnderlay(LayerManagerComposite* aManager, nsIntRect aRect)
}
jobject frameObj = client->CreateFrame();
NS_ABORT_IF_FALSE(frameObj, "No frame object!");
if (!frameObj) {
ALOG_BRIDGE("Exceptional Exit: %s", __PRETTY_FUNCTION__);
NS_WARNING("Warning: unable to obtain a LayerRenderer frame; aborting window underlay draw");
return;
}
@ -2425,8 +2424,10 @@ nsWindow::DrawWindowOverlay(LayerManagerComposite* aManager, nsIntRect aRect)
AutoLocalJNIFrame jniFrame(env);
NS_ABORT_IF_FALSE(!mLayerRendererFrame.isNull(),
"Frame should have been created in DrawWindowUnderlay()!");
if (mLayerRendererFrame.isNull()) {
NS_WARNING("Warning: do not have a LayerRenderer frame; aborting window overlay draw");
return;
}
mozilla::widget::android::GeckoLayerClient* client = AndroidBridge::Bridge()->GetLayerClient();