summaryrefslogtreecommitdiff
path: root/LoopbackApp/app/src/main/java/org/drrickorang/loopback/BufferPeriod.java
diff options
context:
space:
mode:
Diffstat (limited to 'LoopbackApp/app/src/main/java/org/drrickorang/loopback/BufferPeriod.java')
-rw-r--r--LoopbackApp/app/src/main/java/org/drrickorang/loopback/BufferPeriod.java103
1 files changed, 103 insertions, 0 deletions
diff --git a/LoopbackApp/app/src/main/java/org/drrickorang/loopback/BufferPeriod.java b/LoopbackApp/app/src/main/java/org/drrickorang/loopback/BufferPeriod.java
new file mode 100644
index 0000000..71e82ff
--- /dev/null
+++ b/LoopbackApp/app/src/main/java/org/drrickorang/loopback/BufferPeriod.java
@@ -0,0 +1,103 @@
+package org.drrickorang.loopback;
+
+/**
+ * Created by ninatai on 5/12/15.
+ */
+
+import android.util.Log;
+
+import org.drrickorang.loopback.LoopbackAudioThread.RecorderRunnable;
+
+import java.util.Arrays;
+import java.util.HashMap;
+
+// TODO add record for native audio thread
+public class BufferPeriod {
+ private static long mPreviousTime = 0;
+ private static long mCurrentTime = 0;
+ private static final int range = 102; //TODO adjust this value
+ private static int mMaxBufferPeriod = 0;
+ private static boolean exceedRange = false;
+ private static int mCount = 0;
+ private static int mDiscard = 5; // discard the first few buffer period values
+
+ private static int[] mJavaBufferPeriod = new int[range];
+
+
+ public static void collectBufferPeriod() {
+ mCurrentTime = System.nanoTime();
+ mCount += 1;
+
+ // if = 0 it's the first time the thread runs, so don't record the interval
+ if (mPreviousTime != 0 && mCurrentTime != 0 && mCount > mDiscard) {
+ long diffInNano = mCurrentTime - mPreviousTime;
+ int diffInMilli = (int) Math.ceil(( ((double)diffInNano / 1000000))); // round up
+
+ if (diffInMilli > mMaxBufferPeriod) {
+ mMaxBufferPeriod = diffInMilli;
+ }
+
+ // from 0 ms to 1000 ms, plus a sum of all instances > 1000ms
+ if (diffInMilli >= 0 && diffInMilli < (range - 1)) {
+ mJavaBufferPeriod[diffInMilli] += 1;
+ } else if (diffInMilli >= (range - 1)) {
+ mJavaBufferPeriod[range-1] += 1;
+ } else if (diffInMilli < 0) {
+ // throw new IllegalBufferPeriodException("BufferPeriod must be >= 0");
+ errorLog("Having negative BufferPeriod.");
+ }
+
+ }
+
+ mPreviousTime = mCurrentTime;
+ }
+
+ // Check if max BufferPeriod exceeds the range of latencies that are going to be displayed on histogram
+ public static void setExceedRange() {
+ if (mMaxBufferPeriod > (range - 2)) {
+ exceedRange = true;
+ } else {
+ exceedRange = false;
+ }
+ }
+
+ public static void resetRecord() {
+ mPreviousTime = 0;
+ mCurrentTime = 0;
+ Arrays.fill(mJavaBufferPeriod, 0);
+ mMaxBufferPeriod = 0;
+ mCount = 0;
+
+ }
+
+ public static int[] getBufferPeriodArray() {
+ return mJavaBufferPeriod;
+
+ }
+
+ public static int getMaxBufferPeriod() {
+ return mMaxBufferPeriod;
+ }
+
+
+
+
+ private static void errorLog(String msg) {
+ Log.e("BufferPeriodTracker", msg);
+ }
+
+ private static void log(String msg) {
+ Log.v("BufferPeriodTracker", msg);
+ }
+
+ public static class IllegalBufferPeriodException extends Exception {
+
+ public IllegalBufferPeriodException(String message)
+ {
+ super(message);
+ }
+ }
+
+
+
+}