OLD | NEW |
1 /* | 1 /* |
2 * libjingle | 2 * libjingle |
3 * Copyright 2015 Google Inc. | 3 * Copyright 2015 Google Inc. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
44 void LoadClass(JNIEnv* jni, const std::string& name); | 44 void LoadClass(JNIEnv* jni, const std::string& name); |
45 | 45 |
46 std::map<std::string, jclass> classes_; | 46 std::map<std::string, jclass> classes_; |
47 }; | 47 }; |
48 | 48 |
49 // Allocated in LoadGlobalClassReferenceHolder(), | 49 // Allocated in LoadGlobalClassReferenceHolder(), |
50 // freed in FreeGlobalClassReferenceHolder(). | 50 // freed in FreeGlobalClassReferenceHolder(). |
51 static ClassReferenceHolder* g_class_reference_holder = nullptr; | 51 static ClassReferenceHolder* g_class_reference_holder = nullptr; |
52 | 52 |
53 void LoadGlobalClassReferenceHolder() { | 53 void LoadGlobalClassReferenceHolder() { |
54 CHECK(g_class_reference_holder == nullptr); | 54 RTC_CHECK(g_class_reference_holder == nullptr); |
55 g_class_reference_holder = new ClassReferenceHolder(GetEnv()); | 55 g_class_reference_holder = new ClassReferenceHolder(GetEnv()); |
56 } | 56 } |
57 | 57 |
58 void FreeGlobalClassReferenceHolder() { | 58 void FreeGlobalClassReferenceHolder() { |
59 g_class_reference_holder->FreeReferences(AttachCurrentThreadIfNeeded()); | 59 g_class_reference_holder->FreeReferences(AttachCurrentThreadIfNeeded()); |
60 delete g_class_reference_holder; | 60 delete g_class_reference_holder; |
61 g_class_reference_holder = nullptr; | 61 g_class_reference_holder = nullptr; |
62 } | 62 } |
63 | 63 |
64 ClassReferenceHolder::ClassReferenceHolder(JNIEnv* jni) { | 64 ClassReferenceHolder::ClassReferenceHolder(JNIEnv* jni) { |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
107 LoadClass(jni, "org/webrtc/SessionDescription"); | 107 LoadClass(jni, "org/webrtc/SessionDescription"); |
108 LoadClass(jni, "org/webrtc/SessionDescription$Type"); | 108 LoadClass(jni, "org/webrtc/SessionDescription$Type"); |
109 LoadClass(jni, "org/webrtc/StatsReport"); | 109 LoadClass(jni, "org/webrtc/StatsReport"); |
110 LoadClass(jni, "org/webrtc/StatsReport$Value"); | 110 LoadClass(jni, "org/webrtc/StatsReport$Value"); |
111 LoadClass(jni, "org/webrtc/VideoRenderer$I420Frame"); | 111 LoadClass(jni, "org/webrtc/VideoRenderer$I420Frame"); |
112 LoadClass(jni, "org/webrtc/VideoCapturer"); | 112 LoadClass(jni, "org/webrtc/VideoCapturer"); |
113 LoadClass(jni, "org/webrtc/VideoTrack"); | 113 LoadClass(jni, "org/webrtc/VideoTrack"); |
114 } | 114 } |
115 | 115 |
116 ClassReferenceHolder::~ClassReferenceHolder() { | 116 ClassReferenceHolder::~ClassReferenceHolder() { |
117 CHECK(classes_.empty()) << "Must call FreeReferences() before dtor!"; | 117 RTC_CHECK(classes_.empty()) << "Must call FreeReferences() before dtor!"; |
118 } | 118 } |
119 | 119 |
120 void ClassReferenceHolder::FreeReferences(JNIEnv* jni) { | 120 void ClassReferenceHolder::FreeReferences(JNIEnv* jni) { |
121 for (std::map<std::string, jclass>::const_iterator it = classes_.begin(); | 121 for (std::map<std::string, jclass>::const_iterator it = classes_.begin(); |
122 it != classes_.end(); ++it) { | 122 it != classes_.end(); ++it) { |
123 jni->DeleteGlobalRef(it->second); | 123 jni->DeleteGlobalRef(it->second); |
124 } | 124 } |
125 classes_.clear(); | 125 classes_.clear(); |
126 } | 126 } |
127 | 127 |
128 jclass ClassReferenceHolder::GetClass(const std::string& name) { | 128 jclass ClassReferenceHolder::GetClass(const std::string& name) { |
129 std::map<std::string, jclass>::iterator it = classes_.find(name); | 129 std::map<std::string, jclass>::iterator it = classes_.find(name); |
130 CHECK(it != classes_.end()) << "Unexpected GetClass() call for: " << name; | 130 RTC_CHECK(it != classes_.end()) << "Unexpected GetClass() call for: " << name; |
131 return it->second; | 131 return it->second; |
132 } | 132 } |
133 | 133 |
134 void ClassReferenceHolder::LoadClass(JNIEnv* jni, const std::string& name) { | 134 void ClassReferenceHolder::LoadClass(JNIEnv* jni, const std::string& name) { |
135 jclass localRef = jni->FindClass(name.c_str()); | 135 jclass localRef = jni->FindClass(name.c_str()); |
136 CHECK_EXCEPTION(jni) << "error during FindClass: " << name; | 136 CHECK_EXCEPTION(jni) << "error during FindClass: " << name; |
137 CHECK(localRef) << name; | 137 RTC_CHECK(localRef) << name; |
138 jclass globalRef = reinterpret_cast<jclass>(jni->NewGlobalRef(localRef)); | 138 jclass globalRef = reinterpret_cast<jclass>(jni->NewGlobalRef(localRef)); |
139 CHECK_EXCEPTION(jni) << "error during NewGlobalRef: " << name; | 139 CHECK_EXCEPTION(jni) << "error during NewGlobalRef: " << name; |
140 CHECK(globalRef) << name; | 140 RTC_CHECK(globalRef) << name; |
141 bool inserted = classes_.insert(std::make_pair(name, globalRef)).second; | 141 bool inserted = classes_.insert(std::make_pair(name, globalRef)).second; |
142 CHECK(inserted) << "Duplicate class name: " << name; | 142 RTC_CHECK(inserted) << "Duplicate class name: " << name; |
143 } | 143 } |
144 | 144 |
145 // Returns a global reference guaranteed to be valid for the lifetime of the | 145 // Returns a global reference guaranteed to be valid for the lifetime of the |
146 // process. | 146 // process. |
147 jclass FindClass(JNIEnv* jni, const char* name) { | 147 jclass FindClass(JNIEnv* jni, const char* name) { |
148 return g_class_reference_holder->GetClass(name); | 148 return g_class_reference_holder->GetClass(name); |
149 } | 149 } |
150 | 150 |
151 } // namespace webrtc_jni | 151 } // namespace webrtc_jni |
OLD | NEW |