Chromium Code Reviews| Index: media/base/android/java/src/org/chromium/media/MediaServerCrashListener.java |
| diff --git a/media/base/android/java/src/org/chromium/media/MediaServerCrashListener.java b/media/base/android/java/src/org/chromium/media/MediaServerCrashListener.java |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..1c34c368fd4e2f3cb2a968da979d179166e70e51 |
| --- /dev/null |
| +++ b/media/base/android/java/src/org/chromium/media/MediaServerCrashListener.java |
| @@ -0,0 +1,82 @@ |
| +// Copyright 2016 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +package org.chromium.media; |
| + |
| +import android.content.Context; |
| +import android.media.MediaPlayer; |
| + |
| +import org.chromium.base.Log; |
| +import org.chromium.base.annotations.CalledByNative; |
| +import org.chromium.base.annotations.JNINamespace; |
| +import org.chromium.base.annotations.MainDex; |
| +import org.chromium.content.R; |
| + |
| +/** |
| + * Class for listening to Android MediaServer Crashes to throttle media decoding |
|
watk
2016/11/12 04:22:16
s/Crashes/crashes
tguilbert
2016/11/14 23:18:07
Done.
|
| + * when needed. |
| + */ |
| +@MainDex |
| +@JNINamespace("media") |
| +public class MediaServerCrashListener implements MediaPlayer.OnErrorListener { |
| + private static final String TAG = "crMediaCrashListener"; |
| + |
| + // Watch dog player. Used to listen to all media server crashes. |
|
watk
2016/11/12 04:22:16
watchdog
tguilbert
2016/11/14 23:18:07
Done.
|
| + private MediaPlayer mPlayer; |
| + // Application context. |
|
DaleCurtis
2016/11/11 23:32:15
Not useful
tguilbert
2016/11/14 23:18:07
Done.
|
| + private final Context mContext; |
| + |
| + private long mNativeMediaServerCrashListener; |
| + |
| + @CalledByNative |
| + private static MediaServerCrashListener create( |
| + Context context, long nativeMediaServerCrashListener) { |
| + return new MediaServerCrashListener(context, nativeMediaServerCrashListener); |
| + } |
| + |
| + private MediaServerCrashListener(Context context, long nativeMediaServerCrashListener) { |
| + mContext = context; |
| + mNativeMediaServerCrashListener = nativeMediaServerCrashListener; |
| + } |
| + |
| + @CalledByNative |
| + public void releaseWatchdog() { |
| + if (mPlayer == null) return; |
| + |
| + mPlayer.release(); |
| + mPlayer = null; |
| + } |
| + |
| + @CalledByNative |
| + public boolean startListening() { |
| + if (mPlayer != null) return true; |
| + |
| + try { |
| + mPlayer = MediaPlayer.create(mContext, R.raw.empty); |
| + } catch (IllegalStateException e) { |
| + Log.e(TAG, "Exception happens while creating the watch dog player.", e); |
|
sandersd (OOO until July 31)
2016/11/11 18:55:14
Nits: remove 'happens', 'watch dog' -> 'watchdog'.
tguilbert
2016/11/14 23:18:07
Done.
|
| + } catch (RuntimeException e) { |
|
watk
2016/11/12 04:22:16
You can catch both exceptions in one block with |
tguilbert
2016/11/14 23:18:07
Dale had the same comment last iteration. Copy pas
|
| + Log.e(TAG, "Exception happens while creating the watch dog player.", e); |
| + } |
| + |
| + if (mPlayer != null) { |
| + mPlayer.setOnErrorListener(MediaServerCrashListener.this); |
| + return true; |
| + } |
| + |
| + Log.e(TAG, "Unable to create watch dog player, treat it as server crash."); |
|
watk
2016/11/12 04:22:16
watchdog
tguilbert
2016/11/14 23:18:07
Done.
|
| + nativeOnMediaServerCrashDetected(mNativeMediaServerCrashListener); |
| + return false; |
| + } |
| + |
| + @Override |
| + public boolean onError(MediaPlayer mp, int what, int extra) { |
| + if (what == MediaPlayer.MEDIA_ERROR_SERVER_DIED) { |
| + nativeOnMediaServerCrashDetected(mNativeMediaServerCrashListener); |
| + } |
| + return true; |
| + } |
| + |
| + private native void nativeOnMediaServerCrashDetected(long nativeMediaServerCrashListener); |
| +} |