OLD | NEW |
---|---|
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 "base/android/library_loader/library_loader_hooks.h" | 5 #include "base/android/library_loader/library_loader_hooks.h" |
6 | 6 |
7 #include "base/android/command_line_android.h" | 7 #include "base/android/command_line_android.h" |
8 #include "base/android/jni_string.h" | 8 #include "base/android/jni_string.h" |
9 #include "base/android/library_loader/library_load_from_apk_status_codes.h" | 9 #include "base/android/library_loader/library_load_from_apk_status_codes.h" |
10 #include "base/android/library_loader/library_prefetcher.h" | 10 #include "base/android/library_loader/library_prefetcher.h" |
11 #include "base/at_exit.h" | 11 #include "base/at_exit.h" |
12 #include "base/metrics/histogram.h" | 12 #include "base/metrics/histogram.h" |
13 #include "base/metrics/sparse_histogram.h" | |
13 #include "jni/LibraryLoader_jni.h" | 14 #include "jni/LibraryLoader_jni.h" |
14 | 15 |
15 namespace base { | 16 namespace base { |
16 namespace android { | 17 namespace android { |
17 | 18 |
18 namespace { | 19 namespace { |
19 | 20 |
20 base::AtExitManager* g_at_exit_manager = NULL; | 21 base::AtExitManager* g_at_exit_manager = NULL; |
21 const char* g_library_version_number = ""; | 22 const char* g_library_version_number = ""; |
22 LibraryLoadedHook* g_registration_callback = NULL; | 23 LibraryLoadedHook* g_registration_callback = NULL; |
(...skipping 18 matching lines...) Expand all Loading... | |
41 | 42 |
42 // Low-memory browser loads at fixed address, success or fail. | 43 // Low-memory browser loads at fixed address, success or fail. |
43 LOW_MEMORY_LFA_SUCCESS = 1, | 44 LOW_MEMORY_LFA_SUCCESS = 1, |
44 LOW_MEMORY_LFA_BACKOFF_USED = 2, | 45 LOW_MEMORY_LFA_BACKOFF_USED = 2, |
45 | 46 |
46 MAX_BROWSER_HISTOGRAM_CODE = 3, | 47 MAX_BROWSER_HISTOGRAM_CODE = 3, |
47 }; | 48 }; |
48 | 49 |
49 RendererHistogramCode g_renderer_histogram_code = NO_PENDING_HISTOGRAM_CODE; | 50 RendererHistogramCode g_renderer_histogram_code = NO_PENDING_HISTOGRAM_CODE; |
50 | 51 |
52 // Indicate whether g_library_preloader_renderer_histogram_code is valid | |
53 bool g_library_preloader_renderer_histogram_code_registered = false; | |
54 | |
55 // The return value of NativeLibraryPreloader.loadLibrary() in child processes. | |
56 int g_library_preloader_renderer_histogram_code = 0; | |
57 | |
51 // The amount of time, in milliseconds, that it took to load the shared | 58 // The amount of time, in milliseconds, that it took to load the shared |
52 // libraries in the renderer. Set in | 59 // libraries in the renderer. Set in |
53 // RegisterChromiumAndroidLinkerRendererHistogram. | 60 // RegisterChromiumAndroidLinkerRendererHistogram. |
54 long g_renderer_library_load_time_ms = 0; | 61 long g_renderer_library_load_time_ms = 0; |
55 | 62 |
56 } // namespace | 63 } // namespace |
57 | 64 |
58 static void RegisterChromiumAndroidLinkerRendererHistogram( | 65 static void RegisterChromiumAndroidLinkerRendererHistogram( |
59 JNIEnv* env, | 66 JNIEnv* env, |
60 const JavaParamRef<jobject>& jcaller, | 67 const JavaParamRef<jobject>& jcaller, |
61 jboolean requested_shared_relro, | 68 jboolean requested_shared_relro, |
62 jboolean load_at_fixed_address_failed, | 69 jboolean load_at_fixed_address_failed, |
63 jlong library_load_time_ms) { | 70 jlong library_load_time_ms) { |
64 // Note a pending histogram value for later recording. | 71 // Note a pending histogram value for later recording. |
65 if (requested_shared_relro) { | 72 if (requested_shared_relro) { |
66 g_renderer_histogram_code = load_at_fixed_address_failed | 73 g_renderer_histogram_code = load_at_fixed_address_failed |
67 ? LFA_BACKOFF_USED : LFA_SUCCESS; | 74 ? LFA_BACKOFF_USED : LFA_SUCCESS; |
68 } else { | 75 } else { |
69 g_renderer_histogram_code = LFA_NOT_ATTEMPTED; | 76 g_renderer_histogram_code = LFA_NOT_ATTEMPTED; |
70 } | 77 } |
71 | 78 |
72 g_renderer_library_load_time_ms = library_load_time_ms; | 79 g_renderer_library_load_time_ms = library_load_time_ms; |
73 } | 80 } |
74 | 81 |
75 void RecordChromiumAndroidLinkerRendererHistogram() { | 82 static void RecordChromiumAndroidLinkerRendererHistogram() { |
76 if (g_renderer_histogram_code == NO_PENDING_HISTOGRAM_CODE) | 83 if (g_renderer_histogram_code != NO_PENDING_HISTOGRAM_CODE) |
77 return; | 84 return; |
78 // Record and release the pending histogram value. | 85 // Record and release the pending histogram value. |
79 UMA_HISTOGRAM_ENUMERATION("ChromiumAndroidLinker.RendererStates", | 86 UMA_HISTOGRAM_ENUMERATION("ChromiumAndroidLinker.RendererStates", |
80 g_renderer_histogram_code, | 87 g_renderer_histogram_code, |
81 MAX_RENDERER_HISTOGRAM_CODE); | 88 MAX_RENDERER_HISTOGRAM_CODE); |
82 g_renderer_histogram_code = NO_PENDING_HISTOGRAM_CODE; | 89 g_renderer_histogram_code = NO_PENDING_HISTOGRAM_CODE; |
83 | 90 |
84 // Record how long it took to load the shared libraries. | 91 // Record how long it took to load the shared libraries. |
85 UMA_HISTOGRAM_TIMES("ChromiumAndroidLinker.RendererLoadTime", | 92 UMA_HISTOGRAM_TIMES("ChromiumAndroidLinker.RendererLoadTime", |
86 base::TimeDelta::FromMilliseconds(g_renderer_library_load_time_ms)); | 93 base::TimeDelta::FromMilliseconds(g_renderer_library_load_time_ms)); |
(...skipping 22 matching lines...) Expand all Loading... | |
109 // Record the device support for loading a library directly from the APK file. | 116 // Record the device support for loading a library directly from the APK file. |
110 UMA_HISTOGRAM_ENUMERATION("ChromiumAndroidLinker.LibraryLoadFromApkStatus", | 117 UMA_HISTOGRAM_ENUMERATION("ChromiumAndroidLinker.LibraryLoadFromApkStatus", |
111 library_load_from_apk_status, | 118 library_load_from_apk_status, |
112 LIBRARY_LOAD_FROM_APK_STATUS_CODES_MAX); | 119 LIBRARY_LOAD_FROM_APK_STATUS_CODES_MAX); |
113 | 120 |
114 // Record how long it took to load the shared libraries. | 121 // Record how long it took to load the shared libraries. |
115 UMA_HISTOGRAM_TIMES("ChromiumAndroidLinker.BrowserLoadTime", | 122 UMA_HISTOGRAM_TIMES("ChromiumAndroidLinker.BrowserLoadTime", |
116 base::TimeDelta::FromMilliseconds(library_load_time_ms)); | 123 base::TimeDelta::FromMilliseconds(library_load_time_ms)); |
117 } | 124 } |
118 | 125 |
126 static void RecordLibraryPreloaderBrowserHistogram( | |
127 JNIEnv* env, | |
128 const JavaParamRef<jobject>& jcaller, | |
129 jint status) { | |
130 UMA_HISTOGRAM_SPARSE_SLOWLY( | |
131 "ChromiumAndroidNativeLibraryPreloader.BrowserStates", | |
132 status); | |
133 } | |
134 | |
135 static void RegisterLibraryPreloaderRendererHistogram( | |
136 JNIEnv* env, | |
137 const JavaParamRef<jobject>& jcaller, | |
138 jint status) { | |
139 g_library_preloader_renderer_histogram_code = status; | |
140 g_library_preloader_renderer_histogram_code_registered = true; | |
141 } | |
142 | |
143 static void RecordLibraryPreloaderRendereHistogram() { | |
144 if (g_library_preloader_renderer_histogram_code_registered) { | |
145 UMA_HISTOGRAM_SPARSE_SLOWLY( | |
146 "ChromiumAndroidNativeLibraryPreloader.RendererStates", | |
Alexei Svitkine (slow)
2016/05/26 14:56:29
I suggest not adding a new histogram prefix unless
michaelbai
2016/05/26 19:10:35
Done.
| |
147 g_library_preloader_renderer_histogram_code); | |
148 } | |
149 } | |
150 | |
151 void RecordChromiumAndroidLibraryLoaderRendererHistogram() { | |
152 RecordChromiumAndroidLinkerRendererHistogram(); | |
153 RecordLibraryPreloaderRendereHistogram(); | |
154 } | |
155 | |
119 void SetLibraryLoadedHook(LibraryLoadedHook* func) { | 156 void SetLibraryLoadedHook(LibraryLoadedHook* func) { |
120 g_registration_callback = func; | 157 g_registration_callback = func; |
121 } | 158 } |
122 | 159 |
123 static void InitCommandLine( | 160 static void InitCommandLine( |
124 JNIEnv* env, | 161 JNIEnv* env, |
125 const JavaParamRef<jobject>& jcaller, | 162 const JavaParamRef<jobject>& jcaller, |
126 const JavaParamRef<jobjectArray>& init_command_line) { | 163 const JavaParamRef<jobjectArray>& init_command_line) { |
127 InitNativeCommandLineFromJavaArray(env, init_command_line); | 164 InitNativeCommandLineFromJavaArray(env, init_command_line); |
128 } | 165 } |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
172 return static_cast<LibraryProcessType>( | 209 return static_cast<LibraryProcessType>( |
173 Java_LibraryLoader_getLibraryProcessType(env)); | 210 Java_LibraryLoader_getLibraryProcessType(env)); |
174 } | 211 } |
175 | 212 |
176 void InitAtExitManager() { | 213 void InitAtExitManager() { |
177 g_at_exit_manager = new base::AtExitManager(); | 214 g_at_exit_manager = new base::AtExitManager(); |
178 } | 215 } |
179 | 216 |
180 } // namespace android | 217 } // namespace android |
181 } // namespace base | 218 } // namespace base |
OLD | NEW |