Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(482)

Side by Side Diff: webrtc/modules/utility/include/jvm_android.h

Issue 1924443002: Revert of Replace the remaining scoped_ptr with unique_ptr in webrtc/modules/ (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 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 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 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #ifndef WEBRTC_MODULES_UTILITY_INCLUDE_JVM_ANDROID_H_ 11 #ifndef WEBRTC_MODULES_UTILITY_INCLUDE_JVM_ANDROID_H_
12 #define WEBRTC_MODULES_UTILITY_INCLUDE_JVM_ANDROID_H_ 12 #define WEBRTC_MODULES_UTILITY_INCLUDE_JVM_ANDROID_H_
13 13
14 #include <jni.h> 14 #include <jni.h>
15
16 #include <memory>
17 #include <string> 15 #include <string>
18 16
17 #include "webrtc/base/scoped_ptr.h"
19 #include "webrtc/base/thread_checker.h" 18 #include "webrtc/base/thread_checker.h"
20 #include "webrtc/modules/utility/include/helpers_android.h" 19 #include "webrtc/modules/utility/include/helpers_android.h"
21 20
22 namespace webrtc { 21 namespace webrtc {
23 22
24 // The JNI interface pointer (JNIEnv) is valid only in the current thread. 23 // The JNI interface pointer (JNIEnv) is valid only in the current thread.
25 // Should another thread need to access the Java VM, it must first call 24 // Should another thread need to access the Java VM, it must first call
26 // AttachCurrentThread() to attach itself to the VM and obtain a JNI interface 25 // AttachCurrentThread() to attach itself to the VM and obtain a JNI interface
27 // pointer. The native thread remains attached to the VM until it calls 26 // pointer. The native thread remains attached to the VM until it calls
28 // DetachCurrentThread() to detach. 27 // DetachCurrentThread() to detach.
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 jclass const j_class_; 69 jclass const j_class_;
71 }; 70 };
72 71
73 // Adds support of the NewObject factory method to the JavaClass class. 72 // Adds support of the NewObject factory method to the JavaClass class.
74 // See example in JVM for more details on how to use it. 73 // See example in JVM for more details on how to use it.
75 class NativeRegistration : public JavaClass { 74 class NativeRegistration : public JavaClass {
76 public: 75 public:
77 NativeRegistration(JNIEnv* jni, jclass clazz); 76 NativeRegistration(JNIEnv* jni, jclass clazz);
78 ~NativeRegistration(); 77 ~NativeRegistration();
79 78
80 std::unique_ptr<GlobalRef> NewObject( 79 rtc::scoped_ptr<GlobalRef> NewObject(
81 const char* name, const char* signature, ...); 80 const char* name, const char* signature, ...);
82 81
83 private: 82 private:
84 JNIEnv* const jni_; 83 JNIEnv* const jni_;
85 }; 84 };
86 85
87 // This class is created by the JVM class and is used to expose methods that 86 // This class is created by the JVM class and is used to expose methods that
88 // needs the JNI interface pointer but its main purpose is to create a 87 // needs the JNI interface pointer but its main purpose is to create a
89 // NativeRegistration object given name of a Java class and a list of native 88 // NativeRegistration object given name of a Java class and a list of native
90 // methods. See example in JVM for more details. 89 // methods. See example in JVM for more details.
91 class JNIEnvironment { 90 class JNIEnvironment {
92 public: 91 public:
93 explicit JNIEnvironment(JNIEnv* jni); 92 explicit JNIEnvironment(JNIEnv* jni);
94 ~JNIEnvironment(); 93 ~JNIEnvironment();
95 94
96 // Registers native methods with the Java class specified by |name|. 95 // Registers native methods with the Java class specified by |name|.
97 // Note that the class name must be one of the names in the static 96 // Note that the class name must be one of the names in the static
98 // |loaded_classes| array defined in jvm_android.cc. 97 // |loaded_classes| array defined in jvm_android.cc.
99 // This method must be called on the construction thread. 98 // This method must be called on the construction thread.
100 std::unique_ptr<NativeRegistration> RegisterNatives( 99 rtc::scoped_ptr<NativeRegistration> RegisterNatives(
101 const char* name, const JNINativeMethod *methods, int num_methods); 100 const char* name, const JNINativeMethod *methods, int num_methods);
102 101
103 // Converts from Java string to std::string. 102 // Converts from Java string to std::string.
104 // This method must be called on the construction thread. 103 // This method must be called on the construction thread.
105 std::string JavaToStdString(const jstring& j_string); 104 std::string JavaToStdString(const jstring& j_string);
106 105
107 private: 106 private:
108 rtc::ThreadChecker thread_checker_; 107 rtc::ThreadChecker thread_checker_;
109 JNIEnv* const jni_; 108 JNIEnv* const jni_;
110 }; 109 };
111 110
112 // Main class for working with Java from C++ using JNI in WebRTC. 111 // Main class for working with Java from C++ using JNI in WebRTC.
113 // 112 //
114 // Example usage: 113 // Example usage:
115 // 114 //
116 // // At initialization (e.g. in JNI_OnLoad), call JVM::Initialize. 115 // // At initialization (e.g. in JNI_OnLoad), call JVM::Initialize.
117 // JNIEnv* jni = ::base::android::AttachCurrentThread(); 116 // JNIEnv* jni = ::base::android::AttachCurrentThread();
118 // JavaVM* jvm = NULL; 117 // JavaVM* jvm = NULL;
119 // jni->GetJavaVM(&jvm); 118 // jni->GetJavaVM(&jvm);
120 // jobject context = ::base::android::GetApplicationContext(); 119 // jobject context = ::base::android::GetApplicationContext();
121 // webrtc::JVM::Initialize(jvm, context); 120 // webrtc::JVM::Initialize(jvm, context);
122 // 121 //
123 // // Header (.h) file of example class called User. 122 // // Header (.h) file of example class called User.
124 // std::unique_ptr<JNIEnvironment> env; 123 // rtc::scoped_ptr<JNIEnvironment> env;
125 // std::unique_ptr<NativeRegistration> reg; 124 // rtc::scoped_ptr<NativeRegistration> reg;
126 // std::unique_ptr<GlobalRef> obj; 125 // rtc::scoped_ptr<GlobalRef> obj;
127 // 126 //
128 // // Construction (in .cc file) of User class. 127 // // Construction (in .cc file) of User class.
129 // User::User() { 128 // User::User() {
130 // // Calling thread must be attached to the JVM. 129 // // Calling thread must be attached to the JVM.
131 // env = JVM::GetInstance()->environment(); 130 // env = JVM::GetInstance()->environment();
132 // reg = env->RegisterNatives("org/webrtc/WebRtcTest", ,); 131 // reg = env->RegisterNatives("org/webrtc/WebRtcTest", ,);
133 // obj = reg->NewObject("<init>", ,); 132 // obj = reg->NewObject("<init>", ,);
134 // } 133 // }
135 // 134 //
136 // // Each User method can now use |reg| and |obj| and call Java functions 135 // // Each User method can now use |reg| and |obj| and call Java functions
(...skipping 13 matching lines...) Expand all
150 // Clears handles stored in Initialize(). Must be called on same thread as 149 // Clears handles stored in Initialize(). Must be called on same thread as
151 // Initialize(). 150 // Initialize().
152 static void Uninitialize(); 151 static void Uninitialize();
153 // Gives access to the global Java VM interface pointer, which then can be 152 // Gives access to the global Java VM interface pointer, which then can be
154 // used to create a valid JNIEnvironment object or to get a JavaClass object. 153 // used to create a valid JNIEnvironment object or to get a JavaClass object.
155 static JVM* GetInstance(); 154 static JVM* GetInstance();
156 155
157 // Creates a JNIEnvironment object. 156 // Creates a JNIEnvironment object.
158 // This method returns a NULL pointer if AttachCurrentThread() has not been 157 // This method returns a NULL pointer if AttachCurrentThread() has not been
159 // called successfully. Use the AttachCurrentThreadIfNeeded class if needed. 158 // called successfully. Use the AttachCurrentThreadIfNeeded class if needed.
160 std::unique_ptr<JNIEnvironment> environment(); 159 rtc::scoped_ptr<JNIEnvironment> environment();
161 160
162 // Returns a JavaClass object given class |name|. 161 // Returns a JavaClass object given class |name|.
163 // Note that the class name must be one of the names in the static 162 // Note that the class name must be one of the names in the static
164 // |loaded_classes| array defined in jvm_android.cc. 163 // |loaded_classes| array defined in jvm_android.cc.
165 // This method must be called on the construction thread. 164 // This method must be called on the construction thread.
166 JavaClass GetClass(const char* name); 165 JavaClass GetClass(const char* name);
167 166
168 // TODO(henrika): can we make these private? 167 // TODO(henrika): can we make these private?
169 JavaVM* jvm() const { return jvm_; } 168 JavaVM* jvm() const { return jvm_; }
170 jobject context() const { return context_; } 169 jobject context() const { return context_; }
171 170
172 protected: 171 protected:
173 JVM(JavaVM* jvm, jobject context); 172 JVM(JavaVM* jvm, jobject context);
174 ~JVM(); 173 ~JVM();
175 174
176 private: 175 private:
177 JNIEnv* jni() const { return GetEnv(jvm_); } 176 JNIEnv* jni() const { return GetEnv(jvm_); }
178 177
179 rtc::ThreadChecker thread_checker_; 178 rtc::ThreadChecker thread_checker_;
180 JavaVM* const jvm_; 179 JavaVM* const jvm_;
181 jobject context_; 180 jobject context_;
182 }; 181 };
183 182
184 } // namespace webrtc 183 } // namespace webrtc
185 184
186 #endif // WEBRTC_MODULES_UTILITY_INCLUDE_JVM_ANDROID_H_ 185 #endif // WEBRTC_MODULES_UTILITY_INCLUDE_JVM_ANDROID_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698