[android] re-implemented the fps listener api
This commit is contained in:
committed by
Ivo van Dongen
parent
bef58c38a8
commit
b0c06c764b
@@ -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.
|
||||
|
||||
@@ -1711,6 +1711,7 @@ public final class MapboxMap {
|
||||
*/
|
||||
public void setOnFpsChangedListener(@Nullable OnFpsChangedListener listener) {
|
||||
onFpsChangedListener = listener;
|
||||
nativeMapView.setOnFpsChangedListener(listener);
|
||||
}
|
||||
|
||||
// used by MapView
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user