OLD | NEW |
---|---|
(Empty) | |
1 /* | |
2 * Copyright 2017 The WebRTC project authors. All Rights Reserved. | |
3 * | |
4 * Use of this source code is governed by a BSD-style license | |
5 * that can be found in the LICENSE file in the root of the source | |
6 * tree. An additional intellectual property rights grant can be found | |
7 * in the file PATENTS. All contributing project authors may | |
8 * be found in the AUTHORS file in the root of the source tree. | |
9 */ | |
10 | |
11 #include <pthread.h> | |
brandtr
2017/02/13 12:40:26
This file is inspired by
https://cs.chromium.org/c
| |
12 | |
13 #include "webrtc/base/ignore_wundef.h" | |
14 #include "webrtc/modules/video_coding/codecs/test/android_test_initializer.h" | |
15 #include "webrtc/sdk/android/src/jni/classreferenceholder.h" | |
16 #include "webrtc/sdk/android/src/jni/jni_helpers.h" | |
17 | |
18 // Note: this dependency is dangerous since it reaches into Chromium's base. | |
19 // There's a risk of e.g. macro clashes. This file may only be used in tests. | |
20 // Since we use Chrome's build system for creating the gtest binary, this should | |
21 // be fine. | |
22 RTC_PUSH_IGNORING_WUNDEF() | |
23 #include "base/android/jni_android.h" | |
24 RTC_POP_IGNORING_WUNDEF() | |
25 | |
26 #include "webrtc/base/checks.h" | |
27 | |
28 namespace webrtc { | |
29 | |
30 namespace { | |
31 | |
32 static pthread_once_t g_initialize_once = PTHREAD_ONCE_INIT; | |
33 static pthread_once_t g_free_once = PTHREAD_ONCE_INIT; | |
34 | |
35 // There can only be one JNI_OnLoad in each binary. So since this is a GTEST | |
36 // C++ runner binary, we want to initialize the same global objects we normally | |
37 // do if this had been a Java binary. | |
38 void EnsureInitializedOnce() { | |
39 RTC_CHECK(::base::android::IsVMInitialized()); | |
40 JNIEnv* jni = ::base::android::AttachCurrentThread(); | |
41 JavaVM* jvm = NULL; | |
42 RTC_CHECK_EQ(0, jni->GetJavaVM(&jvm)); | |
43 | |
44 jint ret = webrtc_jni::InitGlobalJniVariables(jvm); | |
45 RTC_DCHECK_GE(ret, 0); | |
46 | |
47 webrtc_jni::LoadGlobalClassReferenceHolder(); | |
48 } | |
49 | |
50 void EnsureFreedOnce() { | |
51 webrtc_jni::FreeGlobalClassReferenceHolder(); | |
52 } | |
53 | |
54 } // namespace | |
55 | |
56 void InitializeAndroidObjects() { | |
57 RTC_CHECK_EQ(0, pthread_once(&g_initialize_once, &EnsureInitializedOnce)); | |
58 } | |
59 | |
60 void FreeAndroidObjects() { | |
61 RTC_CHECK_EQ(0, pthread_once(&g_free_once, &EnsureFreedOnce)); | |
62 } | |
63 | |
64 } // namespace webrtc | |
OLD | NEW |