forked from mirrors/gecko-dev
		
	Bug 711333 - Fix race condition when moving and updating textures. r=kats
This commit is contained in:
		
							parent
							
								
									afc84c287e
								
							
						
					
					
						commit
						17740715b0
					
				
					 1 changed files with 23 additions and 23 deletions
				
			
		| 
						 | 
					@ -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);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue