Bug 1335895 - part 34: remove PanZoomController.java and LayerRenderer.java r=jchen,kats draft
authorRandall Barker <rbarker@mozilla.com>
Mon, 27 Mar 2017 13:58:10 -0700
changeset 558776 be93941d78c6f2f55a29393f586805e9ef4061af
parent 558775 b17c5dac5baf5fb8f377c312f8525f3cd3bb4104
child 558777 8df570b82ec62d84e44c1e34bf20410be9168a0a
push id52941
push userbmo:rbarker@mozilla.com
push dateFri, 07 Apr 2017 23:43:33 +0000
reviewersjchen, kats
bugs1335895
milestone55.0a1
Bug 1335895 - part 34: remove PanZoomController.java and LayerRenderer.java r=jchen,kats
mobile/android/base/moz.build
mobile/android/geckoview/src/main/java/org/mozilla/gecko/gfx/LayerRenderer.java
mobile/android/geckoview/src/main/java/org/mozilla/gecko/gfx/PanZoomController.java
mobile/android/geckoview/src/main/java/org/mozilla/gecko/gfx/PanZoomTarget.java
--- a/mobile/android/base/moz.build
+++ b/mobile/android/base/moz.build
@@ -265,24 +265,22 @@ gvjar.sources += [geckoview_source_dir +
     'gfx/BufferedImage.java',
     'gfx/BufferedImageGLInfo.java',
     'gfx/DynamicToolbarAnimator.java',
     'gfx/FloatSize.java',
     'gfx/FullScreenState.java',
     'gfx/GeckoLayerClient.java',
     'gfx/ImmutableViewportMetrics.java',
     'gfx/IntSize.java',
-    'gfx/LayerRenderer.java',
     'gfx/LayerView.java',
     'gfx/NativePanZoomController.java',
     'gfx/Overscroll.java',
     'gfx/OverscrollEdgeEffect.java',
     'gfx/PanningPerfAPI.java',
     'gfx/PanZoomController.java',
-    'gfx/PanZoomTarget.java',
     'gfx/PointUtils.java',
     'gfx/RectUtils.java',
     'gfx/RenderTask.java',
     'gfx/StackScroller.java',
     'gfx/SurfaceTextureListener.java',
     'gfx/ViewTransform.java',
     'gfx/VsyncSource.java',
     'InputConnectionListener.java',
deleted file mode 100644
--- a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/gfx/LayerRenderer.java
+++ /dev/null
@@ -1,274 +0,0 @@
-/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-package org.mozilla.gecko.gfx;
-
-import org.mozilla.gecko.GeckoAppShell;
-import org.mozilla.gecko.mozglue.DirectBufferAllocator;
-
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Matrix;
-import android.graphics.PointF;
-import android.graphics.Rect;
-import android.graphics.RectF;
-import android.opengl.GLES20;
-import android.os.SystemClock;
-import android.util.Log;
-
-import org.mozilla.gecko.annotation.WrapForJNI;
-import org.mozilla.gecko.util.ThreadUtils;
-
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.nio.FloatBuffer;
-import java.nio.IntBuffer;
-import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.microedition.khronos.egl.EGLConfig;
-
-/**
- * The layer renderer implements the rendering logic for a layer view.
- */
-public class LayerRenderer {
-    private static final String LOGTAG = "GeckoLayerRenderer";
-
-    /*
-     * The amount of time a frame is allowed to take to render before we declare it a dropped
-     * frame.
-     */
-    private static final int MAX_FRAME_TIME = 16;   /* 1000 ms / 60 FPS */
-    private static final long NANOS_PER_MS = 1000000;
-    private static final int MAX_SCROLL_SPEED_TO_REQUEST_ZOOM_RENDER = 5;
-
-    private final LayerView mView;
-    private ByteBuffer mCoordByteBuffer;
-    private FloatBuffer mCoordBuffer;
-    private int mMaxTextureSize;
-
-    private long mLastFrameTime;
-    private final CopyOnWriteArrayList<RenderTask> mTasks;
-
-    // Dropped frames display
-    private final int[] mFrameTimings;
-    private int mCurrentFrame, mFrameTimingsSum, mDroppedFrames;
-
-    private IntBuffer mPixelBuffer;
-    private List<LayerView.ZoomedViewListener> mZoomedViewListeners;
-    private float mLastViewLeft;
-    private float mLastViewTop;
-
-    public LayerRenderer(LayerView view) {
-        mView = view;
-
-        mTasks = new CopyOnWriteArrayList<RenderTask>();
-        mLastFrameTime = System.nanoTime();
-
-        mFrameTimings = new int[60];
-        mCurrentFrame = mFrameTimingsSum = mDroppedFrames = 0;
-
-        mZoomedViewListeners = new ArrayList<LayerView.ZoomedViewListener>();
-    }
-
-    public void destroy() {
-        if (mCoordByteBuffer != null) {
-            DirectBufferAllocator.free(mCoordByteBuffer);
-            mCoordByteBuffer = null;
-            mCoordBuffer = null;
-        }
-        mZoomedViewListeners.clear();
-    }
-
-    void onSurfaceCreated(EGLConfig config) {
-        createDefaultProgram();
-    }
-
-    public void createDefaultProgram() {
-        int maxTextureSizeResult[] = new int[1];
-        GLES20.glGetIntegerv(GLES20.GL_MAX_TEXTURE_SIZE, maxTextureSizeResult, 0);
-        mMaxTextureSize = maxTextureSizeResult[0];
-    }
-
-    public int getMaxTextureSize() {
-        return mMaxTextureSize;
-    }
-
-    public void postRenderTask(RenderTask aTask) {
-        mTasks.add(aTask);
-        mView.requestRender();
-    }
-
-    public void removeRenderTask(RenderTask aTask) {
-        mTasks.remove(aTask);
-    }
-
-    private void runRenderTasks(CopyOnWriteArrayList<RenderTask> tasks, boolean after, long frameStartTime) {
-        for (RenderTask task : tasks) {
-            if (task.runAfter != after) {
-                continue;
-            }
-
-            boolean stillRunning = task.run(frameStartTime - mLastFrameTime, frameStartTime);
-
-            // Remove the task from the list if its finished
-            if (!stillRunning) {
-                tasks.remove(task);
-            }
-        }
-    }
-
-    /** Used by robocop for testing purposes. Not for production use! */
-    IntBuffer getPixels() {
-        IntBuffer pixelBuffer = IntBuffer.allocate(mView.getWidth() * mView.getHeight());
-        synchronized (pixelBuffer) {
-            mPixelBuffer = pixelBuffer;
-            mView.requestRender();
-            try {
-                pixelBuffer.wait();
-            } catch (InterruptedException ie) {
-            }
-            mPixelBuffer = null;
-        }
-        return pixelBuffer;
-    }
-
-    private void updateDroppedFrames(long frameStartTime) {
-        int frameElapsedTime = (int)((System.nanoTime() - frameStartTime) / NANOS_PER_MS);
-
-        /* Update the running statistics. */
-        mFrameTimingsSum -= mFrameTimings[mCurrentFrame];
-        mFrameTimingsSum += frameElapsedTime;
-        mDroppedFrames -= (mFrameTimings[mCurrentFrame] + 1) / MAX_FRAME_TIME;
-        mDroppedFrames += (frameElapsedTime + 1) / MAX_FRAME_TIME;
-
-        mFrameTimings[mCurrentFrame] = frameElapsedTime;
-        mCurrentFrame = (mCurrentFrame + 1) % mFrameTimings.length;
-
-        int averageTime = mFrameTimingsSum / mFrameTimings.length;
-    }
-
-    public Frame createFrame(ImmutableViewportMetrics metrics) {
-        return new Frame(metrics);
-    }
-
-    public class Frame {
-        // The timestamp recording the start of this frame.
-        private long mFrameStartTime;
-        // A fixed snapshot of the viewport metrics that this frame is using to render content.
-        private final ImmutableViewportMetrics mFrameMetrics;
-
-        public Frame(ImmutableViewportMetrics metrics) {
-            mFrameMetrics = metrics;
-        }
-
-        /** This function is invoked via JNI; be careful when modifying signature. */
-        @WrapForJNI
-        public void beginDrawing() {
-            mFrameStartTime = System.nanoTime();
-
-            // Run through pre-render tasks
-            runRenderTasks(mTasks, false, mFrameStartTime);
-        }
-
-
-        private void maybeRequestZoomedViewRender() {
-            // Concurrently update of mZoomedViewListeners should not be an issue here
-            // because the following line is just a short-circuit
-            if (mZoomedViewListeners.size() == 0) {
-                return;
-            }
-
-            // When scrolling fast, do not request zoomed view render to avoid to slow down
-            // the scroll in the main view.
-            // Speed is estimated using the offset changes between 2 display frame calls
-            final float viewLeft = Math.round(mFrameMetrics.getViewport().left);
-            final float viewTop = Math.round(mFrameMetrics.getViewport().top);
-            boolean shouldWaitToRender = false;
-
-            if (Math.abs(mLastViewLeft - viewLeft) > MAX_SCROLL_SPEED_TO_REQUEST_ZOOM_RENDER ||
-                Math.abs(mLastViewTop - viewTop) > MAX_SCROLL_SPEED_TO_REQUEST_ZOOM_RENDER) {
-                shouldWaitToRender = true;
-            }
-
-            mLastViewLeft = viewLeft;
-            mLastViewTop = viewTop;
-
-            if (shouldWaitToRender) {
-                return;
-            }
-
-            ThreadUtils.postToUiThread(new Runnable() {
-                @Override
-                public void run() {
-                    for (LayerView.ZoomedViewListener listener : mZoomedViewListeners) {
-                        listener.requestZoomedViewRender();
-                    }
-                }
-            });
-        }
-
-
-        /** This function is invoked via JNI; be careful when modifying signature. */
-        @WrapForJNI
-        public void endDrawing() {
-            PanningPerfAPI.recordFrameTime();
-
-            runRenderTasks(mTasks, true, mFrameStartTime);
-            maybeRequestZoomedViewRender();
-
-            /* Used by robocop for testing purposes */
-            IntBuffer pixelBuffer = mPixelBuffer;
-            if (pixelBuffer != null) {
-                synchronized (pixelBuffer) {
-                    pixelBuffer.position(0);
-                    GLES20.glReadPixels(0, 0, Math.round(mFrameMetrics.getWidth()),
-                                        Math.round(mFrameMetrics.getHeight()), GLES20.GL_RGBA,
-                                        GLES20.GL_UNSIGNED_BYTE, pixelBuffer);
-                    pixelBuffer.notify();
-                }
-            }
-
-            // Remove background color once we've painted. GeckoLayerClient is
-            // responsible for setting this flag before current document is
-            // composited.
-            if (mView.getPaintState() == LayerView.PAINT_BEFORE_FIRST) {
-                mView.post(new Runnable() {
-                    @Override
-                    public void run() {
-                        mView.setSurfaceBackgroundColor(Color.TRANSPARENT);
-                    }
-                });
-                mView.setPaintState(LayerView.PAINT_AFTER_FIRST);
-            }
-            mLastFrameTime = mFrameStartTime;
-        }
-    }
-
-    public void updateZoomedView(final ByteBuffer data) {
-        ThreadUtils.postToUiThread(new Runnable() {
-            @Override
-            public void run() {
-                for (LayerView.ZoomedViewListener listener : mZoomedViewListeners) {
-                    data.position(0);
-                    listener.updateView(data);
-                }
-            }
-        });
-    }
-
-    public void addZoomedViewListener(LayerView.ZoomedViewListener listener) {
-        ThreadUtils.assertOnUiThread();
-        mZoomedViewListeners.add(listener);
-    }
-
-    public void removeZoomedViewListener(LayerView.ZoomedViewListener listener) {
-        ThreadUtils.assertOnUiThread();
-        mZoomedViewListeners.remove(listener);
-    }
-}
--- a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/gfx/PanZoomController.java
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/gfx/PanZoomController.java
@@ -12,18 +12,18 @@ import android.view.KeyEvent;
 import android.view.MotionEvent;
 import android.view.View;
 
 public interface PanZoomController {
     // Threshold for sending touch move events to content
     public static final float CLICK_THRESHOLD = 1 / 50f * GeckoAppShell.getDpi();
 
     static class Factory {
-        static PanZoomController create(PanZoomTarget target, View view) {
-            return new NativePanZoomController(target, view);
+        static PanZoomController create(View view) {
+            return new NativePanZoomController(view);
         }
     }
 
     public void destroy();
     public void attach();
 
     public boolean onTouchEvent(MotionEvent event);
     public boolean onMotionEvent(MotionEvent event);
deleted file mode 100644
--- a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/gfx/PanZoomTarget.java
+++ /dev/null
@@ -1,15 +0,0 @@
-/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-package org.mozilla.gecko.gfx;
-
-import android.graphics.Matrix;
-import android.graphics.PointF;
-
-public interface PanZoomTarget {
-    public void panZoomStopped();
-    public boolean isGeckoReady();
-    public void setScrollingRootContent(boolean isRootContent);
-}