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

Side by Side Diff: components/cronet/android/cronet_library_loader.cc

Issue 2812963002: [Cronet] Move initialization to a new thread rather than the UI thread. (Closed)
Patch Set: mostly renaming Created 3 years, 8 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 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "components/cronet/android/cronet_library_loader.h" 5 #include "components/cronet/android/cronet_library_loader.h"
6 6
7 #include <jni.h> 7 #include <jni.h>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/android/base_jni_onload.h" 10 #include "base/android/base_jni_onload.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 {"CronetBidirectionalStreamAdapter", 45 {"CronetBidirectionalStreamAdapter",
46 CronetBidirectionalStreamAdapter::RegisterJni}, 46 CronetBidirectionalStreamAdapter::RegisterJni},
47 {"CronetLibraryLoader", RegisterNativesImpl}, 47 {"CronetLibraryLoader", RegisterNativesImpl},
48 {"CronetUploadDataStreamAdapter", CronetUploadDataStreamAdapterRegisterJni}, 48 {"CronetUploadDataStreamAdapter", CronetUploadDataStreamAdapterRegisterJni},
49 {"CronetUrlRequestAdapter", CronetUrlRequestAdapterRegisterJni}, 49 {"CronetUrlRequestAdapter", CronetUrlRequestAdapterRegisterJni},
50 {"CronetUrlRequestContextAdapter", 50 {"CronetUrlRequestContextAdapter",
51 CronetUrlRequestContextAdapterRegisterJni}, 51 CronetUrlRequestContextAdapterRegisterJni},
52 {"NetAndroid", net::android::RegisterJni}, 52 {"NetAndroid", net::android::RegisterJni},
53 }; 53 };
54 54
55 // MessageLoop on the main thread, which is where objects that receive Java 55 // MessageLoop on the init thread, which is where objects that receive Java
56 // notifications generally live. 56 // notifications generally live.
57 base::MessageLoop* g_main_message_loop = nullptr; 57 base::MessageLoop* g_init_message_loop = nullptr;
58 58
59 net::NetworkChangeNotifier* g_network_change_notifier = nullptr; 59 net::NetworkChangeNotifier* g_network_change_notifier = nullptr;
60 60
61 bool RegisterJNI(JNIEnv* env) { 61 bool RegisterJNI(JNIEnv* env) {
62 return base::android::RegisterNativeMethods( 62 return base::android::RegisterNativeMethods(
63 env, kCronetRegisteredMethods, arraysize(kCronetRegisteredMethods)); 63 env, kCronetRegisteredMethods, arraysize(kCronetRegisteredMethods));
64 } 64 }
65 65
66 bool NativeInit() { 66 bool NativeInit() {
67 if (!base::android::OnJNIOnLoadInit()) 67 if (!base::android::OnJNIOnLoadInit())
68 return false; 68 return false;
69 url::Initialize(); 69 url::Initialize();
70 return true; 70 return true;
71 } 71 }
72 72
73 } // namespace 73 } // namespace
74 74
75 bool OnInitThread() {
xunjieli 2017/04/13 18:44:54 This global static function will return true if g_
pauljensen 2017/05/01 15:35:53 Done.
76 return g_init_message_loop == base::MessageLoop::current();
77 }
78
75 // Checks the available version of JNI. Also, caches Java reflection artifacts. 79 // Checks the available version of JNI. Also, caches Java reflection artifacts.
76 jint CronetOnLoad(JavaVM* vm, void* reserved) { 80 jint CronetOnLoad(JavaVM* vm, void* reserved) {
77 base::android::InitVM(vm); 81 base::android::InitVM(vm);
78 JNIEnv* env = base::android::AttachCurrentThread(); 82 JNIEnv* env = base::android::AttachCurrentThread();
79 if (!base::android::OnJNIOnLoadRegisterJNI(env) || !RegisterJNI(env) || 83 if (!base::android::OnJNIOnLoadRegisterJNI(env) || !RegisterJNI(env) ||
80 !NativeInit()) { 84 !NativeInit()) {
81 return -1; 85 return -1;
82 } 86 }
83 return JNI_VERSION_1_6; 87 return JNI_VERSION_1_6;
84 } 88 }
85 89
86 void CronetOnUnLoad(JavaVM* jvm, void* reserved) { 90 void CronetOnUnLoad(JavaVM* jvm, void* reserved) {
87 base::android::LibraryLoaderExitHook(); 91 base::android::LibraryLoaderExitHook();
88 } 92 }
89 93
90 void CronetInitOnMainThread(JNIEnv* env, const JavaParamRef<jclass>& jcaller) { 94 void CronetInitOnInitThread(JNIEnv* env, const JavaParamRef<jclass>& jcaller) {
91 #if !BUILDFLAG(USE_PLATFORM_ICU_ALTERNATIVES) 95 #if !BUILDFLAG(USE_PLATFORM_ICU_ALTERNATIVES)
92 base::i18n::InitializeICU(); 96 base::i18n::InitializeICU();
93 #endif 97 #endif
94 98
95 base::FeatureList::InitializeInstance(std::string(), std::string()); 99 base::FeatureList::InitializeInstance(std::string(), std::string());
96 // TODO(bengr): Remove once Data Reduction Proxy no longer needs this for 100 // TODO(bengr): Remove once Data Reduction Proxy no longer needs this for
97 // configuration information. 101 // configuration information.
98 base::CommandLine::Init(0, nullptr); 102 base::CommandLine::Init(0, nullptr);
99 DCHECK(!base::MessageLoop::current()); 103 DCHECK(!base::MessageLoop::current());
100 DCHECK(!g_main_message_loop); 104 DCHECK(!g_init_message_loop);
101 g_main_message_loop = new base::MessageLoopForUI(); 105 g_init_message_loop = new base::MessageLoop();
102 base::MessageLoopForUI::current()->Start();
103 DCHECK(!g_network_change_notifier); 106 DCHECK(!g_network_change_notifier);
104 net::NetworkChangeNotifier::SetFactory( 107 net::NetworkChangeNotifier::SetFactory(
105 new net::NetworkChangeNotifierFactoryAndroid()); 108 new net::NetworkChangeNotifierFactoryAndroid());
106 g_network_change_notifier = net::NetworkChangeNotifier::Create(); 109 g_network_change_notifier = net::NetworkChangeNotifier::Create();
107 } 110 }
108 111
109 ScopedJavaLocalRef<jstring> GetCronetVersion( 112 ScopedJavaLocalRef<jstring> GetCronetVersion(
110 JNIEnv* env, 113 JNIEnv* env,
111 const JavaParamRef<jclass>& jcaller) { 114 const JavaParamRef<jclass>& jcaller) {
112 return base::android::ConvertUTF8ToJavaString(env, CRONET_VERSION); 115 return base::android::ConvertUTF8ToJavaString(env, CRONET_VERSION);
113 } 116 }
114 117
115 } // namespace cronet 118 } // namespace cronet
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698