Skip to content

Commit 848eac5

Browse files
committed
BufferingDetector upd
1 parent 036804a commit 848eac5

2 files changed

Lines changed: 26 additions & 45 deletions

File tree

common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/other/DebugInfoManager.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import com.liskovsoft.smartyoutubetv2.common.exoplayer.versions.ExoUtils;
3838
import com.liskovsoft.smartyoutubetv2.common.misc.MediaServiceManager;
3939
import com.liskovsoft.smartyoutubetv2.common.prefs.AppPrefs;
40+
import com.liskovsoft.smartyoutubetv2.common.prefs.PlayerData;
4041
import com.liskovsoft.smartyoutubetv2.common.prefs.PlayerTweaksData;
4142
import com.liskovsoft.smartyoutubetv2.common.utils.Utils;
4243
import com.liskovsoft.youtubeapi.app.models.AppInfo;
@@ -315,8 +316,9 @@ private void appendPlayerState() {
315316
}
316317
//appendRow("Playback state", state);
317318
float boost = mPlayerInitializer.getVolumeBoost();
318-
appendRow("Playback info",
319-
String.format("paused=%s;state=%s;vol=%s", !mPlayer.getPlayWhenReady(), state, Helpers.formatFloat(boost * mPlayer.getVolume())));
319+
appendRow("Playback info", String.format("paused=%s;state=%s", !mPlayer.getPlayWhenReady(), state));
320+
appendRow("Volume",
321+
String.format("original=%s;normalized=%s", PlayerData.instance(mContext).getPlayerVolume(), Helpers.formatFloat(boost * mPlayer.getVolume())));
320322
}
321323

322324
private void appendDisplayModeId() {
Lines changed: 22 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,74 +1,53 @@
11
package com.liskovsoft.smartyoutubetv2.common.misc;
22

3-
import android.util.Pair;
3+
import androidx.annotation.NonNull;
44

55
import com.liskovsoft.smartyoutubetv2.common.utils.Utils;
66

77
public class BufferingDetector {
8-
private static final long BUFFERING_THRESHOLD_MS = 3_000;
98
private static final long BUFFERING_WINDOW_MS = 60_000;
10-
private static final long BUFFERING_RECURRENCE_COUNT = 2;
11-
private static final long BUFFERING_CONTINUATION_MS = 20_000;
12-
13-
private Pair<Integer, Long> mBufferingCount;
14-
private final Runnable mOnLongBuffering = this::updateBufferingCountIfNeeded;
9+
private static final long BUFFERING_DURATION_MS = 20_000;
10+
11+
private long mBeginTimeMs;
12+
private long mStartTimeMs;
13+
private long mTotalDurationMs;
14+
private final Runnable mOnLongBuffering = this::onLongBuffering;
1515
private final OnLongBuffering mCallback;
1616

1717
public interface OnLongBuffering {
1818
void onLongBuffering();
1919
}
2020

21-
public BufferingDetector(OnLongBuffering callback) {
21+
public BufferingDetector(@NonNull OnLongBuffering callback) {
2222
mCallback = callback;
2323
}
2424

2525
public void onStartBuffering() {
26-
Utils.postDelayed(mOnLongBuffering, BUFFERING_THRESHOLD_MS);
26+
long currentTimeMs = System.currentTimeMillis();
27+
if (currentTimeMs - mBeginTimeMs > BUFFERING_WINDOW_MS) {
28+
mBeginTimeMs = currentTimeMs;
29+
mTotalDurationMs = 0;
30+
}
31+
mStartTimeMs = currentTimeMs;
32+
Utils.postDelayed(mOnLongBuffering, BUFFERING_DURATION_MS - mTotalDurationMs);
2733
}
2834

2935
public void onStopBuffering() {
3036
Utils.removeCallbacks(mOnLongBuffering);
37+
long stopTimeMs = System.currentTimeMillis();
38+
mTotalDurationMs += (stopTimeMs - mStartTimeMs);
3139
}
3240

3341
/**
3442
* Reset buffering stats
3543
*/
3644
public void reset() {
37-
mBufferingCount = null;
38-
onStopBuffering();
39-
}
40-
41-
private void updateBufferingCountIfNeeded() {
42-
updateBufferingCount();
43-
if (isBufferingRecurrent()) {
44-
mBufferingCount = null;
45-
mCallback.onLongBuffering();
46-
} else {
47-
// Count continuous buffering as a new occurrences....
48-
Utils.postDelayed(mOnLongBuffering, BUFFERING_CONTINUATION_MS);
49-
}
50-
}
51-
52-
private void updateBufferingCount() {
53-
final long currentTimeMs = System.currentTimeMillis();
54-
int bufferingCount = 0;
55-
long previousTimeMs = 0;
56-
57-
if (mBufferingCount != null) {
58-
bufferingCount = mBufferingCount.first;
59-
previousTimeMs = mBufferingCount.second;
60-
}
61-
62-
if (currentTimeMs - previousTimeMs < BUFFERING_WINDOW_MS) {
63-
bufferingCount++;
64-
} else {
65-
bufferingCount = 1;
66-
}
67-
68-
mBufferingCount = new Pair<>(bufferingCount, currentTimeMs);
45+
mBeginTimeMs = mStartTimeMs = mTotalDurationMs = 0;
46+
Utils.removeCallbacks(mOnLongBuffering);
6947
}
7048

71-
private boolean isBufferingRecurrent() {
72-
return mBufferingCount != null && mBufferingCount.first > BUFFERING_RECURRENCE_COUNT;
49+
private void onLongBuffering() {
50+
reset();
51+
mCallback.onLongBuffering();
7352
}
7453
}

0 commit comments

Comments
 (0)