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

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: update tests to account for mRegistered change Created 3 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 // 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 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 {"CronetBidirectionalStreamAdapter", 46 {"CronetBidirectionalStreamAdapter",
47 CronetBidirectionalStreamAdapter::RegisterJni}, 47 CronetBidirectionalStreamAdapter::RegisterJni},
48 {"CronetLibraryLoader", RegisterNativesImpl}, 48 {"CronetLibraryLoader", RegisterNativesImpl},
49 {"CronetUploadDataStreamAdapter", CronetUploadDataStreamAdapterRegisterJni}, 49 {"CronetUploadDataStreamAdapter", CronetUploadDataStreamAdapterRegisterJni},
50 {"CronetUrlRequestAdapter", CronetUrlRequestAdapterRegisterJni}, 50 {"CronetUrlRequestAdapter", CronetUrlRequestAdapterRegisterJni},
51 {"CronetUrlRequestContextAdapter", 51 {"CronetUrlRequestContextAdapter",
52 CronetUrlRequestContextAdapterRegisterJni}, 52 CronetUrlRequestContextAdapterRegisterJni},
53 {"NetAndroid", net::android::RegisterJni}, 53 {"NetAndroid", net::android::RegisterJni},
54 }; 54 };
55 55
56 // MessageLoop on the main thread, which is where objects that receive Java 56 // MessageLoop on the init thread, which is where objects that receive Java
57 // notifications generally live. 57 // notifications generally live.
58 base::MessageLoop* g_main_message_loop = nullptr; 58 base::MessageLoop* g_init_message_loop = nullptr;
59 59
60 net::NetworkChangeNotifier* g_network_change_notifier = nullptr; 60 net::NetworkChangeNotifier* g_network_change_notifier = nullptr;
61 61
62 bool RegisterJNI(JNIEnv* env) { 62 bool RegisterJNI(JNIEnv* env) {
63 return base::android::RegisterNativeMethods( 63 return base::android::RegisterNativeMethods(
64 env, kCronetRegisteredMethods, arraysize(kCronetRegisteredMethods)); 64 env, kCronetRegisteredMethods, arraysize(kCronetRegisteredMethods));
65 } 65 }
66 66
67 bool NativeInit() { 67 bool NativeInit() {
68 if (!base::android::OnJNIOnLoadInit()) 68 if (!base::android::OnJNIOnLoadInit())
69 return false; 69 return false;
70 url::Initialize(); 70 url::Initialize();
71 // Initializes the statistics recorder system. This needs to be done before 71 // Initializes the statistics recorder system. This needs to be done before
72 // emitting histograms to prevent memory leaks (crbug.com/707836). 72 // emitting histograms to prevent memory leaks (crbug.com/707836).
73 base::StatisticsRecorder::Initialize(); 73 base::StatisticsRecorder::Initialize();
74 return true; 74 return true;
75 } 75 }
76 76
77 } // namespace 77 } // namespace
78 78
79 bool OnInitThread() {
80 DCHECK(g_init_message_loop);
81 return g_init_message_loop == base::MessageLoop::current();
82 }
83
79 // Checks the available version of JNI. Also, caches Java reflection artifacts. 84 // Checks the available version of JNI. Also, caches Java reflection artifacts.
80 jint CronetOnLoad(JavaVM* vm, void* reserved) { 85 jint CronetOnLoad(JavaVM* vm, void* reserved) {
81 base::android::InitVM(vm); 86 base::android::InitVM(vm);
82 JNIEnv* env = base::android::AttachCurrentThread(); 87 JNIEnv* env = base::android::AttachCurrentThread();
83 if (!base::android::OnJNIOnLoadRegisterJNI(env) || !RegisterJNI(env) || 88 if (!base::android::OnJNIOnLoadRegisterJNI(env) || !RegisterJNI(env) ||
84 !NativeInit()) { 89 !NativeInit()) {
85 return -1; 90 return -1;
86 } 91 }
87 return JNI_VERSION_1_6; 92 return JNI_VERSION_1_6;
88 } 93 }
89 94
90 void CronetOnUnLoad(JavaVM* jvm, void* reserved) { 95 void CronetOnUnLoad(JavaVM* jvm, void* reserved) {
91 base::android::LibraryLoaderExitHook(); 96 base::android::LibraryLoaderExitHook();
92 } 97 }
93 98
94 void CronetInitOnMainThread(JNIEnv* env, const JavaParamRef<jclass>& jcaller) { 99 void CronetInitOnInitThread(JNIEnv* env, const JavaParamRef<jclass>& jcaller) {
95 #if !BUILDFLAG(USE_PLATFORM_ICU_ALTERNATIVES) 100 #if !BUILDFLAG(USE_PLATFORM_ICU_ALTERNATIVES)
96 base::i18n::InitializeICU(); 101 base::i18n::InitializeICU();
97 #endif 102 #endif
98 103
99 base::FeatureList::InitializeInstance(std::string(), std::string()); 104 base::FeatureList::InitializeInstance(std::string(), std::string());
100 // TODO(bengr): Remove once Data Reduction Proxy no longer needs this for 105 // TODO(bengr): Remove once Data Reduction Proxy no longer needs this for
101 // configuration information. 106 // configuration information.
102 base::CommandLine::Init(0, nullptr); 107 base::CommandLine::Init(0, nullptr);
103 DCHECK(!base::MessageLoop::current()); 108 DCHECK(!base::MessageLoop::current());
104 DCHECK(!g_main_message_loop); 109 DCHECK(!g_init_message_loop);
105 g_main_message_loop = new base::MessageLoopForUI(); 110 g_init_message_loop = new base::MessageLoop();
106 base::MessageLoopForUI::current()->Start();
107 DCHECK(!g_network_change_notifier); 111 DCHECK(!g_network_change_notifier);
108 net::NetworkChangeNotifier::SetFactory( 112 net::NetworkChangeNotifier::SetFactory(
109 new net::NetworkChangeNotifierFactoryAndroid()); 113 new net::NetworkChangeNotifierFactoryAndroid());
110 g_network_change_notifier = net::NetworkChangeNotifier::Create(); 114 g_network_change_notifier = net::NetworkChangeNotifier::Create();
111 } 115 }
112 116
113 ScopedJavaLocalRef<jstring> GetCronetVersion( 117 ScopedJavaLocalRef<jstring> GetCronetVersion(
114 JNIEnv* env, 118 JNIEnv* env,
115 const JavaParamRef<jclass>& jcaller) { 119 const JavaParamRef<jclass>& jcaller) {
116 return base::android::ConvertUTF8ToJavaString(env, CRONET_VERSION); 120 return base::android::ConvertUTF8ToJavaString(env, CRONET_VERSION);
117 } 121 }
118 122
119 } // namespace cronet 123 } // namespace cronet
OLDNEW
« no previous file with comments | « components/cronet/android/cronet_library_loader.h ('k') | components/cronet/android/cronet_url_request_context_adapter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698