OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "media/base/android/media_server_crash_listener.h" | 5 #include "media/base/android/media_server_crash_listener.h" |
6 | 6 |
7 #include "base/android/context_utils.h" | |
8 #include "base/android/jni_android.h" | 7 #include "base/android/jni_android.h" |
9 #include "base/memory/singleton.h" | 8 #include "base/memory/singleton.h" |
10 #include "jni/MediaServerCrashListener_jni.h" | 9 #include "jni/MediaServerCrashListener_jni.h" |
11 | 10 |
12 namespace media { | 11 namespace media { |
13 | 12 |
14 // static | 13 // static |
15 bool MediaServerCrashListener::RegisterMediaServerCrashListener(JNIEnv* env) { | 14 bool MediaServerCrashListener::RegisterMediaServerCrashListener(JNIEnv* env) { |
16 return RegisterNativesImpl(env); | 15 return RegisterNativesImpl(env); |
17 } | 16 } |
18 | 17 |
19 MediaServerCrashListener::MediaServerCrashListener( | 18 MediaServerCrashListener::MediaServerCrashListener( |
20 const OnMediaServerCrashCB& on_server_crash_cb, | 19 const OnMediaServerCrashCB& on_server_crash_cb, |
21 scoped_refptr<base::SingleThreadTaskRunner> callback_thread) | 20 scoped_refptr<base::SingleThreadTaskRunner> callback_thread) |
22 : on_server_crash_cb_(on_server_crash_cb), | 21 : on_server_crash_cb_(on_server_crash_cb), |
23 callback_task_runner_(std::move(callback_thread)) { | 22 callback_task_runner_(std::move(callback_thread)) { |
24 JNIEnv* env = base::android::AttachCurrentThread(); | 23 JNIEnv* env = base::android::AttachCurrentThread(); |
25 CHECK(env); | 24 CHECK(env); |
26 | 25 |
27 j_crash_listener_.Reset(Java_MediaServerCrashListener_create( | 26 j_crash_listener_.Reset(Java_MediaServerCrashListener_create( |
28 env, base::android::GetApplicationContext(), | 27 env, reinterpret_cast<intptr_t>(this))); |
29 reinterpret_cast<intptr_t>(this))); | |
30 Java_MediaServerCrashListener_startListening(env, j_crash_listener_); | 28 Java_MediaServerCrashListener_startListening(env, j_crash_listener_); |
31 } | 29 } |
32 | 30 |
33 MediaServerCrashListener::~MediaServerCrashListener() { | 31 MediaServerCrashListener::~MediaServerCrashListener() { |
34 ReleaseWatchdog(); | 32 ReleaseWatchdog(); |
35 } | 33 } |
36 | 34 |
37 void MediaServerCrashListener::ReleaseWatchdog() { | 35 void MediaServerCrashListener::ReleaseWatchdog() { |
38 JNIEnv* env = base::android::AttachCurrentThread(); | 36 JNIEnv* env = base::android::AttachCurrentThread(); |
39 Java_MediaServerCrashListener_releaseWatchdog(env, j_crash_listener_); | 37 Java_MediaServerCrashListener_releaseWatchdog(env, j_crash_listener_); |
40 } | 38 } |
41 | 39 |
42 void MediaServerCrashListener::EnsureListening() { | 40 void MediaServerCrashListener::EnsureListening() { |
43 JNIEnv* env = base::android::AttachCurrentThread(); | 41 JNIEnv* env = base::android::AttachCurrentThread(); |
44 Java_MediaServerCrashListener_startListening(env, j_crash_listener_); | 42 Java_MediaServerCrashListener_startListening(env, j_crash_listener_); |
45 } | 43 } |
46 | 44 |
47 void MediaServerCrashListener::OnMediaServerCrashDetected( | 45 void MediaServerCrashListener::OnMediaServerCrashDetected( |
48 JNIEnv* env, | 46 JNIEnv* env, |
49 const base::android::JavaParamRef<jobject>& obj, | 47 const base::android::JavaParamRef<jobject>& obj, |
50 jboolean watchdog_needs_release) { | 48 jboolean watchdog_needs_release) { |
51 callback_task_runner_->PostTask( | 49 callback_task_runner_->PostTask( |
52 FROM_HERE, base::Bind(on_server_crash_cb_, watchdog_needs_release)); | 50 FROM_HERE, base::Bind(on_server_crash_cb_, watchdog_needs_release)); |
53 } | 51 } |
54 | 52 |
55 } // namespace media | 53 } // namespace media |
OLD | NEW |