diff --git a/services/core/java/com/android/server/tv/TvInputManagerService.java b/services/core/java/com/android/server/tv/TvInputManagerService.java index 608012e4a3109..1754e593914dc 100755 --- a/services/core/java/com/android/server/tv/TvInputManagerService.java +++ b/services/core/java/com/android/server/tv/TvInputManagerService.java @@ -84,6 +84,7 @@ import android.view.InputChannel; import android.view.Surface; import com.android.internal.annotations.GuardedBy; +import com.android.internal.annotations.VisibleForTesting; import com.android.internal.content.PackageMonitor; import com.android.internal.os.SomeArgs; import com.android.internal.util.DumpUtils; @@ -1442,8 +1443,8 @@ public final class TvInputManagerService extends SystemService { if (sessionState != null) { int state = surface == null ? - FrameworkStatsLog.TIF_TUNE_STATE_CHANGED__STATE__SURFACE_ATTACHED - : FrameworkStatsLog.TIF_TUNE_STATE_CHANGED__STATE__SURFACE_DETACHED; + FrameworkStatsLog.TIF_TUNE_STATE_CHANGED__STATE__SURFACE_DETACHED + : FrameworkStatsLog.TIF_TUNE_STATE_CHANGED__STATE__SURFACE_ATTACHED; logTuneStateChanged(state, sessionState, TvInputManagerService.getTvInputState(sessionState, userState)); } @@ -2972,15 +2973,7 @@ public final class TvInputManagerService extends SystemService { getUserStateLocked(mCurrentUserId)); try { mSessionState.client.onVideoUnavailable(reason, mSessionState.seq); - int loggedReason = reason + FrameworkStatsLog - .TIF_TUNE_STATE_CHANGED__STATE__VIDEO_UNAVAILABLE_REASON_UNKNOWN; - if (loggedReason < FrameworkStatsLog - .TIF_TUNE_STATE_CHANGED__STATE__VIDEO_UNAVAILABLE_REASON_UNKNOWN - || loggedReason > FrameworkStatsLog - .TIF_TUNE_STATE_CHANGED__STATE__VIDEO_UNAVAILABLE_REASON_CAS_UNKNOWN) { - loggedReason = FrameworkStatsLog - .TIF_TUNE_STATE_CHANGED__STATE__VIDEO_UNAVAILABLE_REASON_UNKNOWN; - } + int loggedReason = getVideoUnavailableReasonForStatsd(reason); logTuneStateChanged(loggedReason, mSessionState, tvInputState); } catch (RemoteException e) { Slog.e(TAG, "error in onVideoUnavailable", e); @@ -3167,6 +3160,21 @@ public final class TvInputManagerService extends SystemService { } } + @VisibleForTesting + static int getVideoUnavailableReasonForStatsd( + @TvInputManager.VideoUnavailableReason int reason) { + int loggedReason = reason + FrameworkStatsLog + .TIF_TUNE_STATE_CHANGED__STATE__VIDEO_UNAVAILABLE_REASON_UNKNOWN; + if (loggedReason < FrameworkStatsLog + .TIF_TUNE_STATE_CHANGED__STATE__VIDEO_UNAVAILABLE_REASON_UNKNOWN + || loggedReason > FrameworkStatsLog + .TIF_TUNE_STATE_CHANGED__STATE__VIDEO_UNAVAILABLE_REASON_CAS_UNKNOWN) { + loggedReason = FrameworkStatsLog + .TIF_TUNE_STATE_CHANGED__STATE__VIDEO_UNAVAILABLE_REASON_UNKNOWN; + } + return loggedReason; + } + private UserState getUserStateLocked(int userId) { return mUserStates.get(userId); } diff --git a/services/tests/servicestests/src/com/android/server/tv/TvInputServiceManagerTest.java b/services/tests/servicestests/src/com/android/server/tv/TvInputServiceManagerTest.java new file mode 100644 index 0000000000000..229e27b9a438f --- /dev/null +++ b/services/tests/servicestests/src/com/android/server/tv/TvInputServiceManagerTest.java @@ -0,0 +1,101 @@ +/* + * Copyright (C) 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.android.server.tv; + +import static android.media.tv.TvInputManager.VIDEO_UNAVAILABLE_REASON_BUFFERING; +import static android.media.tv.TvInputManager.VIDEO_UNAVAILABLE_REASON_CAS_UNKNOWN; +import static android.media.tv.TvInputManager.VIDEO_UNAVAILABLE_REASON_TUNING; +import static android.media.tv.TvInputManager.VIDEO_UNAVAILABLE_REASON_UNKNOWN; + +import static com.google.common.truth.Truth.assertThat; + +import android.platform.test.annotations.Presubmit; + +import com.android.internal.util.FrameworkStatsLog; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + + +/** + * Tests for {@link TvInputManagerService}. + */ +@Presubmit +@RunWith(JUnit4.class) +public class TvInputServiceManagerTest { + + @Test + public void getVideoUnavailableReasonForStatsd_tuning() { + assertThat(TvInputManagerService.getVideoUnavailableReasonForStatsd( + VIDEO_UNAVAILABLE_REASON_TUNING + )).isEqualTo( + FrameworkStatsLog.TIF_TUNE_STATE_CHANGED__STATE__VIDEO_UNAVAILABLE_REASON_TUNING); + } + + @Test + public void getVideoUnavailableReasonForStatsd_unknown() { + assertThat(TvInputManagerService.getVideoUnavailableReasonForStatsd( + VIDEO_UNAVAILABLE_REASON_UNKNOWN + )).isEqualTo( + FrameworkStatsLog.TIF_TUNE_STATE_CHANGED__STATE__VIDEO_UNAVAILABLE_REASON_UNKNOWN); + } + + + @Test + public void getVideoUnavailableReasonForStatsd_casBuffering() { + assertThat(TvInputManagerService.getVideoUnavailableReasonForStatsd( + VIDEO_UNAVAILABLE_REASON_BUFFERING + )).isEqualTo( + FrameworkStatsLog + .TIF_TUNE_STATE_CHANGED__STATE__VIDEO_UNAVAILABLE_REASON_BUFFERING); + } + + @Test + public void getVideoUnavailableReasonForStatsd_casUnknown() { + assertThat(TvInputManagerService.getVideoUnavailableReasonForStatsd( + VIDEO_UNAVAILABLE_REASON_CAS_UNKNOWN + )).isEqualTo( + FrameworkStatsLog + .TIF_TUNE_STATE_CHANGED__STATE__VIDEO_UNAVAILABLE_REASON_CAS_UNKNOWN); + } + + @Test + public void getVideoUnavailableReasonForStatsd_negative() { + assertThat(TvInputManagerService.getVideoUnavailableReasonForStatsd( + -1 + )).isEqualTo( + FrameworkStatsLog.TIF_TUNE_STATE_CHANGED__STATE__VIDEO_UNAVAILABLE_REASON_UNKNOWN); + } + + @Test + public void getVideoUnavailableReasonForStatsd_oneBelow() { + assertThat(TvInputManagerService.getVideoUnavailableReasonForStatsd( + VIDEO_UNAVAILABLE_REASON_UNKNOWN - 1 + )).isEqualTo( + FrameworkStatsLog.TIF_TUNE_STATE_CHANGED__STATE__VIDEO_UNAVAILABLE_REASON_UNKNOWN); + } + + @Test + public void getVideoUnavailableReasonForStatsd_oneAbove() { + assertThat(TvInputManagerService.getVideoUnavailableReasonForStatsd( + VIDEO_UNAVAILABLE_REASON_CAS_UNKNOWN + 1 + )).isEqualTo( + FrameworkStatsLog.TIF_TUNE_STATE_CHANGED__STATE__VIDEO_UNAVAILABLE_REASON_UNKNOWN); + } + +}