private void updateViewport(final boolean onlyUpdatePageSize) {
    // save and restore the viewport size stored in java; never let the
    // JS-side viewport dimensions override the java-side ones because
    // java is the One True Source of this information, and allowing JS
    // to override can lead to race conditions where this data gets clobbered.
    FloatSize viewportSize = getLayerController().getViewportSize();
    mGeckoViewport = mNewGeckoViewport;
    mGeckoViewport.setSize(viewportSize);

    LayerController controller = getLayerController();
    PointF displayportOrigin = mGeckoViewport.getDisplayportOrigin();
    mTileLayer.setOrigin(PointUtils.round(displayportOrigin));
    mTileLayer.setResolution(mGeckoViewport.getZoomFactor());

    if (onlyUpdatePageSize) {
      // Don't adjust page size when zooming unless zoom levels are
      // approximately equal.
      if (FloatUtils.fuzzyEquals(controller.getZoomFactor(), mGeckoViewport.getZoomFactor()))
        controller.setPageSize(mGeckoViewport.getPageSize());
    } else {
      controller.setViewportMetrics(mGeckoViewport);
      controller.abortPanZoomAnimation();
    }
  }