mirror of
https://github.com/androidx/media.git
synced 2025-05-06 23:20:42 +08:00
Fix PlaybackStatsListener behavior when not keeping history
issue:#7160 PiperOrigin-RevId: 303747338
This commit is contained in:
parent
94ca84ff29
commit
fea0acd41a
@ -25,6 +25,8 @@
|
|||||||
* UI: Add an option to set whether to use the orientation sensor for rotation
|
* UI: Add an option to set whether to use the orientation sensor for rotation
|
||||||
in spherical playbacks
|
in spherical playbacks
|
||||||
([#6761](https://github.com/google/ExoPlayer/issues/6761)).
|
([#6761](https://github.com/google/ExoPlayer/issues/6761)).
|
||||||
|
* Analytics: Fix `PlaybackStatsListener` behavior when not keeping history
|
||||||
|
([#7160](https://github.com/google/ExoPlayer/issues/7160)).
|
||||||
* FFmpeg extension: Add support for x86_64.
|
* FFmpeg extension: Add support for x86_64.
|
||||||
* Opus extension: Fix parsing of negative gain values
|
* Opus extension: Fix parsing of negative gain values
|
||||||
([#7046](https://github.com/google/ExoPlayer/issues/7046)).
|
([#7046](https://github.com/google/ExoPlayer/issues/7046)).
|
||||||
|
@ -50,7 +50,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
|
|||||||
* <p>For accurate measurements, the listener should be added to the player before loading media,
|
* <p>For accurate measurements, the listener should be added to the player before loading media,
|
||||||
* i.e., {@link Player#getPlaybackState()} should be {@link Player#STATE_IDLE}.
|
* i.e., {@link Player#getPlaybackState()} should be {@link Player#STATE_IDLE}.
|
||||||
*
|
*
|
||||||
* <p>Playback stats are gathered separately for all playback session, i.e. each window in the
|
* <p>Playback stats are gathered separately for each playback session, i.e. each window in the
|
||||||
* {@link Timeline} and each single ad.
|
* {@link Timeline} and each single ad.
|
||||||
*/
|
*/
|
||||||
public final class PlaybackStatsListener
|
public final class PlaybackStatsListener
|
||||||
@ -931,6 +931,9 @@ public final class PlaybackStatsListener
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void maybeUpdateMediaTimeHistory(long realtimeMs, long mediaTimeMs) {
|
private void maybeUpdateMediaTimeHistory(long realtimeMs, long mediaTimeMs) {
|
||||||
|
if (!keepHistory) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (currentPlaybackState != PlaybackStats.PLAYBACK_STATE_PLAYING) {
|
if (currentPlaybackState != PlaybackStats.PLAYBACK_STATE_PLAYING) {
|
||||||
if (mediaTimeMs == C.TIME_UNSET) {
|
if (mediaTimeMs == C.TIME_UNSET) {
|
||||||
return;
|
return;
|
||||||
|
@ -0,0 +1,74 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2020 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package com.google.android.exoplayer2.analytics;
|
||||||
|
|
||||||
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||||
|
import com.google.android.exoplayer2.Player;
|
||||||
|
import com.google.android.exoplayer2.Timeline;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
|
/** Unit test for {@link PlaybackStatsListener}. */
|
||||||
|
@RunWith(AndroidJUnit4.class)
|
||||||
|
public final class PlaybackStatsListenerTest {
|
||||||
|
|
||||||
|
private static final AnalyticsListener.EventTime TEST_EVENT_TIME =
|
||||||
|
new AnalyticsListener.EventTime(
|
||||||
|
/* realtimeMs= */ 500,
|
||||||
|
Timeline.EMPTY,
|
||||||
|
/* windowIndex= */ 0,
|
||||||
|
/* mediaPeriodId= */ null,
|
||||||
|
/* eventPlaybackPositionMs= */ 0,
|
||||||
|
/* currentPlaybackPositionMs= */ 0,
|
||||||
|
/* totalBufferedDurationMs= */ 0);
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void playback_withKeepHistory_updatesStats() {
|
||||||
|
PlaybackStatsListener playbackStatsListener =
|
||||||
|
new PlaybackStatsListener(/* keepHistory= */ true, /* callback= */ null);
|
||||||
|
|
||||||
|
playbackStatsListener.onPlayerStateChanged(
|
||||||
|
TEST_EVENT_TIME, /* playWhenReady= */ true, Player.STATE_BUFFERING);
|
||||||
|
playbackStatsListener.onPlayerStateChanged(
|
||||||
|
TEST_EVENT_TIME, /* playWhenReady= */ true, Player.STATE_READY);
|
||||||
|
playbackStatsListener.onPlayerStateChanged(
|
||||||
|
TEST_EVENT_TIME, /* playWhenReady= */ true, Player.STATE_ENDED);
|
||||||
|
|
||||||
|
@Nullable PlaybackStats playbackStats = playbackStatsListener.getPlaybackStats();
|
||||||
|
assertThat(playbackStats).isNotNull();
|
||||||
|
assertThat(playbackStats.endedCount).isEqualTo(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void playback_withoutKeepHistory_updatesStats() {
|
||||||
|
PlaybackStatsListener playbackStatsListener =
|
||||||
|
new PlaybackStatsListener(/* keepHistory= */ false, /* callback= */ null);
|
||||||
|
|
||||||
|
playbackStatsListener.onPlayerStateChanged(
|
||||||
|
TEST_EVENT_TIME, /* playWhenReady= */ true, Player.STATE_BUFFERING);
|
||||||
|
playbackStatsListener.onPlayerStateChanged(
|
||||||
|
TEST_EVENT_TIME, /* playWhenReady= */ true, Player.STATE_READY);
|
||||||
|
playbackStatsListener.onPlayerStateChanged(
|
||||||
|
TEST_EVENT_TIME, /* playWhenReady= */ true, Player.STATE_ENDED);
|
||||||
|
|
||||||
|
@Nullable PlaybackStats playbackStats = playbackStatsListener.getPlaybackStats();
|
||||||
|
assertThat(playbackStats).isNotNull();
|
||||||
|
assertThat(playbackStats.endedCount).isEqualTo(1);
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user