Bug 711333 - Fix race condition when moving and updating textures. r=kats

This commit is contained in:
Patrick Walton 2011-12-30 14:08:58 -08:00
parent afc84c287e
commit 17740715b0

View file

@ -180,22 +180,20 @@ public class GeckoSoftwareLayerClient extends LayerClient implements GeckoEventL
mGeckoViewport.setSize(viewportSize); mGeckoViewport.setSize(viewportSize);
LayerController controller = getLayerController(); LayerController controller = getLayerController();
synchronized (controller) { PointF displayportOrigin = mGeckoViewport.getDisplayportOrigin();
PointF displayportOrigin = mGeckoViewport.getDisplayportOrigin(); mTileLayer.setOrigin(PointUtils.round(displayportOrigin));
mTileLayer.setOrigin(PointUtils.round(displayportOrigin)); mTileLayer.setResolution(mGeckoViewport.getZoomFactor());
mTileLayer.setResolution(mGeckoViewport.getZoomFactor());
if (onlyUpdatePageSize) { if (onlyUpdatePageSize) {
// Don't adjust page size when zooming unless zoom levels are // Don't adjust page size when zooming unless zoom levels are
// approximately equal. // approximately equal.
if (FloatUtils.fuzzyEquals(controller.getZoomFactor(), if (FloatUtils.fuzzyEquals(controller.getZoomFactor(),
mGeckoViewport.getZoomFactor())) mGeckoViewport.getZoomFactor()))
controller.setPageSize(mGeckoViewport.getPageSize()); controller.setPageSize(mGeckoViewport.getPageSize());
} else { } else {
Log.d(LOGTAG, "Received viewport update from gecko"); Log.d(LOGTAG, "Received viewport update from gecko");
controller.setViewportMetrics(mGeckoViewport); controller.setViewportMetrics(mGeckoViewport);
controller.abortPanZoomAnimation(); controller.abortPanZoomAnimation();
}
} }
} catch (JSONException e) { } catch (JSONException e) {
Log.e(LOGTAG, "Bad viewport description: " + viewportDescription); Log.e(LOGTAG, "Bad viewport description: " + viewportDescription);
@ -208,15 +206,17 @@ public class GeckoSoftwareLayerClient extends LayerClient implements GeckoEventL
* a little more JNI magic. * a little more JNI magic.
*/ */
public void endDrawing(int x, int y, int width, int height, String metadata) { public void endDrawing(int x, int y, int width, int height, String metadata) {
try { synchronized (getLayerController()) {
updateViewport(metadata, !mUpdateViewportOnEndDraw); try {
mUpdateViewportOnEndDraw = false; updateViewport(metadata, !mUpdateViewportOnEndDraw);
Rect rect = new Rect(x, y, x + width, y + height); mUpdateViewportOnEndDraw = false;
Rect rect = new Rect(x, y, x + width, y + height);
if (mTileLayer instanceof SingleTileLayer) if (mTileLayer instanceof SingleTileLayer)
((SingleTileLayer)mTileLayer).invalidate(rect); ((SingleTileLayer)mTileLayer).invalidate(rect);
} finally { } finally {
endTransaction(mTileLayer); endTransaction(mTileLayer);
}
} }
} }