diff options
author | kevin <kevin.li@mapbox.com> | 2018-12-07 11:37:18 +0800 |
---|---|---|
committer | kevin <kevin.li@mapbox.com> | 2018-12-07 11:44:52 +0800 |
commit | c3f3223a2c764bc6977ab063b4d984666dd296ae (patch) | |
tree | 78f95600fd37aa8f63f09ccf83e5e80b4a0792f6 | |
parent | 0cc4492db8609b82585f9be2eceee30e7ca6b04e (diff) | |
download | qtlocation-mapboxgl-c3f3223a2c764bc6977ab063b4d984666dd296ae.tar.gz |
update sleep logic
-rw-r--r-- | platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/renderer/MapRenderer.java | 36 |
1 files changed, 15 insertions, 21 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/renderer/MapRenderer.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/renderer/MapRenderer.java index 9947fd3bc5..449ba3b93e 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/renderer/MapRenderer.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/renderer/MapRenderer.java @@ -27,7 +27,7 @@ public abstract class MapRenderer implements MapRendererScheduler { // Holds the pointer to the native peer after initialisation private long nativePtr = 0; - private int preferredFramesPerSecond = Integer.MAX_VALUE; + private double expectedRenderTime = 0; private MapboxMap.OnFpsChangedListener onFpsChangedListener; public MapRenderer(@NonNull Context context, String localIdeographFontFamily) { @@ -76,11 +76,20 @@ public abstract class MapRenderer implements MapRendererScheduler { @CallSuper protected void onDrawFrame(GL10 gl) { + long startTime = System.nanoTime(); try { nativeRender(); } catch (java.lang.Error error) { Logger.e(TAG, error.getMessage()); } + long renderTime = System.nanoTime() - startTime; + if (renderTime < expectedRenderTime) { + try { + Thread.sleep((long) ((expectedRenderTime - renderTime) / 1E6)); + } catch (InterruptedException ex) { + ex.printStackTrace(); + } + } if (onFpsChangedListener != null) { updateFps(); } @@ -122,25 +131,10 @@ public abstract class MapRenderer implements MapRendererScheduler { private void updateFps() { frames++; long currentTime = System.nanoTime(); - long timeCost = currentTime - timeElapsed; - - if (timeCost >= 1) { - double fps = frames / ((timeCost) / 1E9); - if (fps > preferredFramesPerSecond) { - try { - long millis = (long) (timeCost / 1E6 * (fps - preferredFramesPerSecond) / fps); - Thread.sleep(millis); - } catch (InterruptedException ex) { - ex.printStackTrace(); - } - long newCurrentTime = System.nanoTime(); - timeCost = newCurrentTime - timeElapsed; - fps = frames / ((timeCost) / 1E9); - } - onFpsChangedListener.onFpsChanged(fps); - timeElapsed = currentTime; - frames = 0; - } + double fps = frames / ((currentTime - timeElapsed) / 1E9); + onFpsChangedListener.onFpsChanged(fps); + timeElapsed = currentTime; + frames = 0; } /** @@ -154,6 +148,6 @@ public abstract class MapRenderer implements MapRendererScheduler { // Not valid, just return return; } - this.preferredFramesPerSecond = preferredFramesPerSecond; + expectedRenderTime = 1E9 / preferredFramesPerSecond; } } |