From d8b80f961aa07f4ea250df156c50bef1023acfcd Mon Sep 17 00:00:00 2001 From: Redirion Date: Mon, 4 Mar 2019 15:45:59 +0100 Subject: [PATCH] Improved performance of getTimeString This pull requests complements pull request #2178 by reducing general computational time for the method getTimeString. On my local machine (Desktop PC with Java) my tests with a sample size of 10000 calls to the method with param 86400001 showed a performance improvement of about 50%. See sample code below to reproduce: private static final StringBuilder stringBuilder = new StringBuilder(); private static final Formatter stringFormatter = new Formatter(stringBuilder, Locale.getDefault()); public static String getTimeString(int milliSeconds) { int seconds = (milliSeconds % 60000) / 1000; int minutes = (milliSeconds % 3600000) / 60000; int hours = (milliSeconds % 86400000) / 3600000; int days = (milliSeconds % (86400000 * 7)) / 86400000; stringBuilder.setLength(0); return days > 0 ? stringFormatter.format("%d:%02d:%02d:%02d", days, hours, minutes, seconds).toString() : hours > 0 ? stringFormatter.format("%d:%02d:%02d", hours, minutes, seconds).toString() : stringFormatter.format("%02d:%02d", minutes, seconds).toString(); } public static String getTimeStringL(int milliSeconds) { long seconds = (milliSeconds % 60000L) / 1000L; long minutes = (milliSeconds % 3600000L) / 60000L; long hours = (milliSeconds % 86400000L) / 3600000L; long days = (milliSeconds % (86400000L * 7L)) / 86400000L; stringBuilder.setLength(0); return days > 0 ? stringFormatter.format("%d:%02d:%02d:%02d", days, hours, minutes, seconds).toString() : hours > 0 ? stringFormatter.format("%d:%02d:%02d", hours, minutes, seconds).toString() : stringFormatter.format("%02d:%02d", minutes, seconds).toString(); } public static void main(String[] args) throws Exception { final int SAMPLE_SIZE = 25000; long[] results = new long[SAMPLE_SIZE]; for(int i = 0; i < SAMPLE_SIZE; i++) { long now = System.nanoTime(); getTimeString(86400001); results[i] = System.nanoTime() - now; } long sum = 0; for(int i = 0; i < SAMPLE_SIZE; i++) { sum += results[i]; } System.out.println("Average execution time: " + (sum/SAMPLE_SIZE)); results = new long[SAMPLE_SIZE]; for(int i = 0; i < SAMPLE_SIZE; i++) { long now = System.nanoTime(); getTimeStringL(86400001); results[i] = System.nanoTime() - now; } sum = 0; for(int i = 0; i < SAMPLE_SIZE; i++) { sum += results[i]; } System.out.println("Average execution time: " + (sum/SAMPLE_SIZE)); --- .../org/schabi/newpipe/player/helper/PlayerHelper.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java b/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java index e1960247e..7752295d7 100644 --- a/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java +++ b/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java @@ -70,10 +70,10 @@ public class PlayerHelper { //////////////////////////////////////////////////////////////////////////// public static String getTimeString(int milliSeconds) { - long seconds = (milliSeconds % 60000L) / 1000L; - long minutes = (milliSeconds % 3600000L) / 60000L; - long hours = (milliSeconds % 86400000L) / 3600000L; - long days = (milliSeconds % (86400000L * 7L)) / 86400000L; + int seconds = (milliSeconds % 60000) / 1000; + int minutes = (milliSeconds % 3600000) / 60000; + int hours = (milliSeconds % 86400000) / 3600000; + int days = (milliSeconds % (86400000 * 7)) / 86400000; stringBuilder.setLength(0); return days > 0 ? stringFormatter.format("%d:%02d:%02d:%02d", days, hours, minutes, seconds).toString()