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

Side by Side Diff: base/android/library_loader/library_loader_hooks.cc

Issue 2015533005: Record the return value of NativeLibraryPreloader.loadLibrary in UMA (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: add histogram.xml Created 4 years, 6 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 "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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698