[android] re-implemented the fps listener api

This commit is contained in:
Ivo van Dongen
2017-09-18 19:00:34 +03:00
committed by Ivo van Dongen
parent bef58c38a8
commit b0c06c764b
8 changed files with 77 additions and 80 deletions

View File

@@ -435,21 +435,6 @@ public class MapView extends FrameLayout {
nativeMapView.onLowMemory();
}
// Called when debug mode is enabled to update a FPS counter
// Called via JNI from NativeMapView
// Forward to any listener
protected void onFpsChanged(final double fps) {
final MapboxMap.OnFpsChangedListener listener = mapboxMap.getOnFpsChangedListener();
if (listener != null) {
post(new Runnable() {
@Override
public void run() {
listener.onFpsChanged(fps);
}
});
}
}
/**
* <p>
* Loads a new map style from the specified URL.

View File

@@ -1711,6 +1711,7 @@ public final class MapboxMap {
*/
public void setOnFpsChangedListener(@Nullable OnFpsChangedListener listener) {
onFpsChangedListener = listener;
nativeMapView.setOnFpsChangedListener(listener);
}
// used by MapView

View File

@@ -20,7 +20,6 @@ import com.mapbox.mapboxsdk.geometry.LatLng;
import com.mapbox.mapboxsdk.geometry.LatLngBounds;
import com.mapbox.mapboxsdk.geometry.ProjectedMeters;
import com.mapbox.mapboxsdk.maps.renderer.MapRenderer;
import com.mapbox.mapboxsdk.maps.renderer.MapRendererScheduler;
import com.mapbox.mapboxsdk.storage.FileSource;
import com.mapbox.mapboxsdk.style.layers.CannotAddLayerException;
import com.mapbox.mapboxsdk.style.layers.Filter;
@@ -54,7 +53,7 @@ final class NativeMapView {
private final FileSource fileSource;
// Used to schedule work on the MapRenderer Thread
private MapRendererScheduler scheduler;
private MapRenderer mapRenderer;
// Device density
private final float pixelRatio;
@@ -71,7 +70,7 @@ final class NativeMapView {
//
public NativeMapView(final MapView mapView, MapRenderer mapRenderer) {
this.scheduler = mapRenderer;
this.mapRenderer = mapRenderer;
this.mapView = mapView;
Context context = mapView.getContext();
@@ -106,7 +105,7 @@ final class NativeMapView {
return;
}
scheduler.requestRender();
mapRenderer.requestRender();
}
public void resizeView(int width, int height) {
@@ -510,13 +509,6 @@ final class NativeMapView {
return nativeGetDebug();
}
public void setEnableFps(boolean enable) {
if (isDestroyedOn("setEnableFps")) {
return;
}
nativeSetEnableFps(enable);
}
public boolean isFullyLoaded() {
if (isDestroyedOn("isFullyLoaded")) {
return false;
@@ -835,13 +827,6 @@ final class NativeMapView {
}
}
protected void onFpsChanged(double fps) {
if (isDestroyedOn("OnFpsChanged")) {
return;
}
mapView.onFpsChanged(fps);
}
protected void onSnapshotReady(Bitmap mapContent) {
if (isDestroyedOn("OnSnapshotReady")) {
return;
@@ -947,8 +932,6 @@ final class NativeMapView {
private native boolean nativeGetDebug();
private native void nativeSetEnableFps(boolean enable);
private native boolean nativeIsFullyLoaded();
private native void nativeSetReachability(boolean status);
@@ -1076,4 +1059,28 @@ final class NativeMapView {
nativeTakeSnapshot();
}
public void setOnFpsChangedListener(final MapboxMap.OnFpsChangedListener listener) {
mapRenderer.queueEvent(new Runnable() {
@Override
public void run() {
mapRenderer.setOnFpsChangedListener(new MapboxMap.OnFpsChangedListener() {
@Override
public void onFpsChanged(final double fps) {
mapView.post(new Runnable() {
@Override
public void run() {
listener.onFpsChanged(fps);
}
});
}
});
}
});
}
}

View File

@@ -3,6 +3,7 @@ package com.mapbox.mapboxsdk.maps.renderer;
import android.content.Context;
import android.opengl.GLSurfaceView;
import com.mapbox.mapboxsdk.maps.MapboxMap;
import com.mapbox.mapboxsdk.storage.FileSource;
import javax.microedition.khronos.egl.EGLConfig;
@@ -22,6 +23,8 @@ public class MapRenderer implements GLSurfaceView.Renderer, MapRendererScheduler
private final GLSurfaceView glSurfaceView;
private MapboxMap.OnFpsChangedListener onFpsChangedListener;
public MapRenderer(Context context, GLSurfaceView glSurfaceView) {
this.glSurfaceView = glSurfaceView;
@@ -33,6 +36,10 @@ public class MapRenderer implements GLSurfaceView.Renderer, MapRendererScheduler
nativeInitialize(this, fileSource, pixelRatio, programCacheDir);
}
public void setOnFpsChangedListener(MapboxMap.OnFpsChangedListener listener) {
onFpsChangedListener = listener;
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
nativeOnSurfaceCreated();
@@ -65,6 +72,10 @@ public class MapRenderer implements GLSurfaceView.Renderer, MapRendererScheduler
@Override
public void onDrawFrame(GL10 gl) {
nativeRender();
if (onFpsChangedListener != null) {
updateFps();
}
}
/**
@@ -116,4 +127,19 @@ public class MapRenderer implements GLSurfaceView.Renderer, MapRendererScheduler
private native void nativeRender();
private long frames;
private long timeElapsed;
private void updateFps() {
frames++;
long currentTime = System.nanoTime();
double fps = 0;
if (currentTime - timeElapsed >= 1) {
fps = frames / ((currentTime - timeElapsed) / 1E9);
onFpsChangedListener.onFpsChanged(fps);
timeElapsed = currentTime;
frames = 0;
}
}
}