From 1fae8162233bca1fe881daa4e93b5a199b1964a4 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 21 Apr 2018 21:29:42 -0700 Subject: [PATCH] Remove the spinner threads (and battery saver option to disable them) --- .../video/MediaCodecDecoderRenderer.java | 86 ------------------- .../preferences/PreferenceConfiguration.java | 3 - app/src/main/res/values-it/strings.xml | 2 - app/src/main/res/values-ru/strings.xml | 2 - app/src/main/res/values/strings.xml | 2 - app/src/main/res/xml/preferences.xml | 5 -- 6 files changed, 100 deletions(-) diff --git a/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java b/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java index 4f1e9f74..0f945ba7 100644 --- a/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java +++ b/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java @@ -1,7 +1,6 @@ package com.limelight.binding.video; import java.nio.ByteBuffer; -import java.util.Arrays; import java.util.Locale; import org.jcodec.codecs.h264.H264Utils; @@ -41,7 +40,6 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer { private MediaCodec videoDecoder; private Thread rendererThread; - private Thread[] spinnerThreads; private boolean needsSpsBitstreamFixup, isExynos4; private boolean adaptivePlayback, directSubmit; private boolean constrainedHighProfile; @@ -132,14 +130,6 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer { this.consecutiveCrashCount = consecutiveCrashCount; this.glRenderer = glRenderer; - // Disable spinner threads in battery saver mode or 4K - if (prefs.batterySaver || prefs.height >= 2160) { - spinnerThreads = new Thread[0]; - } - else { - spinnerThreads = new Thread[Runtime.getRuntime().availableProcessors()]; - } - avcDecoder = findAvcDecoder(); if (avcDecoder != null) { LimeLog.info("Selected AVC decoder: "+avcDecoder.getName()); @@ -217,15 +207,10 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer { } public void notifyVideoForeground() { - startSpinnerThreads(); foreground = true; } public void notifyVideoBackground() { - // Signal the spinner threads to stop but - // don't wait for them to terminate to avoid - // delaying the state transition - signalSpinnerStop(); foreground = false; } @@ -462,73 +447,6 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer { rendererThread.start(); } - private void startSpinnerThread(final int i) { - spinnerThreads[i] = new Thread() { - @Override - public void run() { - // This thread exists to keep the CPU at a higher DVFS state on devices - // where the governor scales clock speed sporadically, causing dropped frames. - // - // Run until we notice our thread has been removed from the spinner threads - // array. Even if we don't notice immediately, we'll notice soon enough. - // This will also ensure we terminate even if someone has restarted spinning - // before we realized we should stop. - while (this == spinnerThreads[i]) { - try { - Thread.sleep(0, 1); - } catch (InterruptedException e) { - break; - } - } - } - }; - spinnerThreads[i].setName("Spinner-"+i); - spinnerThreads[i].setPriority(Thread.MIN_PRIORITY); - spinnerThreads[i].start(); - } - - private void startSpinnerThreads() { - LimeLog.info("Using "+spinnerThreads.length+" spinner threads"); - for (int i = 0; i < spinnerThreads.length; i++) { - if (spinnerThreads[i] != null) { - continue; - } - - startSpinnerThread(i); - } - } - - private Thread[] signalSpinnerStop() { - // Capture current running threads - Thread[] runningThreads = Arrays.copyOf(spinnerThreads, spinnerThreads.length); - - // Clear the spinner threads to signal their termination - for (int i = 0; i < spinnerThreads.length; i++) { - spinnerThreads[i] = null; - } - - // Interrupt the threads - for (int i = 0; i < runningThreads.length; i++) { - if (runningThreads[i] != null) { - runningThreads[i].interrupt(); - } - } - - return runningThreads; - } - - private void stopSpinnerThreads() { - // Signal and wait for the threads to stop - Thread[] runningThreads = signalSpinnerStop(); - for (int i = 0; i < runningThreads.length; i++) { - if (runningThreads[i] != null) { - try { - runningThreads[i].join(); - } catch (InterruptedException ignored) { } - } - } - } - private int dequeueInputBuffer() { int index = -1; long startTime; @@ -570,7 +488,6 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer { @Override public void start() { startRendererThread(); - startSpinnerThreads(); } // !!! May be called even if setup()/start() fails !!! @@ -593,9 +510,6 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer { try { rendererThread.join(); } catch (InterruptedException ignored) { } - - // Halt the spinner threads - stopSpinnerThreads(); } @Override diff --git a/app/src/main/java/com/limelight/preferences/PreferenceConfiguration.java b/app/src/main/java/com/limelight/preferences/PreferenceConfiguration.java index ba751023..b1b47b23 100644 --- a/app/src/main/java/com/limelight/preferences/PreferenceConfiguration.java +++ b/app/src/main/java/com/limelight/preferences/PreferenceConfiguration.java @@ -24,7 +24,6 @@ public class PreferenceConfiguration { private static final String VIDEO_FORMAT_PREF_STRING = "video_format"; private static final String ONSCREEN_CONTROLLER_PREF_STRING = "checkbox_show_onscreen_controls"; private static final String ONLY_L3_R3_PREF_STRING = "checkbox_only_show_L3R3"; - private static final String BATTERY_SAVER_PREF_STRING = "checkbox_battery_saver"; private static final String DISABLE_FRAME_DROP_PREF_STRING = "checkbox_disable_frame_drop"; private static final String ENABLE_HDR_PREF_STRING = "checkbox_enable_hdr"; private static final String ENABLE_PIP_PREF_STRING = "checkbox_enable_pip"; @@ -75,7 +74,6 @@ public class PreferenceConfiguration { public boolean listMode, smallIconMode, multiController, enable51Surround, usbDriver; public boolean onscreenController; public boolean onlyL3R3; - public boolean batterySaver; public boolean disableFrameDrop; public boolean enableHdr; public boolean enablePip; @@ -244,7 +242,6 @@ public class PreferenceConfiguration { config.usbDriver = prefs.getBoolean(USB_DRIVER_PREF_SRING, DEFAULT_USB_DRIVER); config.onscreenController = prefs.getBoolean(ONSCREEN_CONTROLLER_PREF_STRING, ONSCREEN_CONTROLLER_DEFAULT); config.onlyL3R3 = prefs.getBoolean(ONLY_L3_R3_PREF_STRING, ONLY_L3_R3_DEFAULT); - config.batterySaver = prefs.getBoolean(BATTERY_SAVER_PREF_STRING, DEFAULT_BATTERY_SAVER); config.disableFrameDrop = prefs.getBoolean(DISABLE_FRAME_DROP_PREF_STRING, DEFAULT_DISABLE_FRAME_DROP); config.enableHdr = prefs.getBoolean(ENABLE_HDR_PREF_STRING, DEFAULT_ENABLE_HDR); config.enablePip = prefs.getBoolean(ENABLE_PIP_PREF_STRING, DEFAULT_ENABLE_PIP); diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 783c716b..73c8d82b 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -110,8 +110,6 @@ Forza video a schermo intero Disabilita messaggi di warning Disabilita i messaggi di warning sullo schermo durante lo streaming - Risparmio batteria - Usa meno batteria, ma può aumentare lo stuttering Abilita modalità spettatore Picture-in-Picture Permette di osservare (ma non di controllare) la stream in multitasking diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 8915c69d..f40517d4 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -142,8 +142,6 @@ Видео декодер Вашего устройства давал сбои с выбранными настройками. Настройки трансляции были сброшены до значений по умолчанию. USB доступ запрещен администратором устройства. Проверьте настройки Knox или MDM. Адрес указан неверно. Вы должны ввести публичный IP-адрес Вашего роутера для передачи через интернет. - Экономия батареи - Использует меньше заряда батареи, но может увеличить зависания Включить просмотр в режиме \"Картинка в картинке\" Позволяет просматривать трансляцию (но не управлять ей) во время работы в других приложениях Переопределить поддержку контроллеров Android diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9743fd02..cec76b72 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -113,8 +113,6 @@ Stretch video to full-screen Disable warning messages Disable on-screen connection warning messages while streaming - Battery saver - Uses less battery, but may increase stuttering Enable Picture-in-Picture observer mode Allows the stream to be viewed (but not controlled) while multitasking diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 5590d474..8e6c7cd6 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -24,11 +24,6 @@ android:key="checkbox_stretch_video" android:title="@string/title_checkbox_stretch_video" android:defaultValue="false" /> -