Chromium Code Reviews| Index: base/android/library_loader/library_loader_hooks.cc |
| diff --git a/base/android/library_loader/library_loader_hooks.cc b/base/android/library_loader/library_loader_hooks.cc |
| index 87f791090b0a4cb6607e8457e33adeab1e311aeb..a8c75e1310dc9c93f27f6f95b0f84fd6778de6d8 100644 |
| --- a/base/android/library_loader/library_loader_hooks.cc |
| +++ b/base/android/library_loader/library_loader_hooks.cc |
| @@ -19,8 +19,78 @@ base::AtExitManager* g_at_exit_manager = NULL; |
| const char* g_library_version_number = ""; |
| LibraryLoadedHook* g_registration_callback = NULL; |
| +enum RendererHistogramCode { |
| + // Renderer load at fixed address success, fail, or not attempted. |
| + // Renderers do not attempt to load at at fixed address if on a |
| + // low-memory device on which browser load at fixed address has already |
| + // failed. |
| + LFA_SUCCESS = 0, |
| + LFA_BACKOFF_USED = 1, |
| + LFA_NOT_ATTEMPTED = 2, |
| + |
| + // End sentinel, also used as nothing-pending indicator. |
| + MAX_RENDERER_HISTOGRAM_CODE = 3, |
| + NO_PENDING_HISTOGRAM_CODE = MAX_RENDERER_HISTOGRAM_CODE |
| +}; |
| + |
| +enum BrowserHistogramCode { |
| + // Non-low-memory random address browser loads. |
| + NORMAL_LRA_SUCCESS = 0, |
| + |
| + // Low-memory browser loads at fixed address, success or fail. |
| + LOW_MEMORY_LFA_SUCCESS = 1, |
| + LOW_MEMORY_LFA_BACKOFF_USED = 2, |
| + |
| + MAX_BROWSER_HISTOGRAM_CODE = 3, |
| +}; |
| + |
| +RendererHistogramCode g_renderer_histogram_code = NO_PENDING_HISTOGRAM_CODE; |
| + |
| } // namespace |
| +static void RegisterChromiumAndroidLinkerRendererHistogram( |
| + JNIEnv* env, |
| + jclass clazz, |
| + jboolean requested_shared_relro, |
| + jboolean load_at_fixed_address_failed) { |
| + // Note a pending histogram value for later recording. |
| + if (requested_shared_relro) { |
| + g_renderer_histogram_code = load_at_fixed_address_failed |
| + ? LFA_BACKOFF_USED : LFA_SUCCESS; |
| + } else { |
| + g_renderer_histogram_code = LFA_NOT_ATTEMPTED; |
| + } |
| +} |
| + |
| +void RecordChromiumAndroidLinkerRendererHistogram() { |
| + if (g_renderer_histogram_code == NO_PENDING_HISTOGRAM_CODE) |
| + return; |
| + // Record and release the pending histogram value. |
| + UMA_HISTOGRAM_ENUMERATION("ChromiumAndroidLinker.RendererStates", |
| + g_renderer_histogram_code, |
| + MAX_RENDERER_HISTOGRAM_CODE); |
| + g_renderer_histogram_code = NO_PENDING_HISTOGRAM_CODE; |
| +} |
|
Ilya Sherman
2014/10/02 20:53:57
Why do you need the pending histogram value, rathe
simonb (inactive)
2014/10/03 11:51:42
The value appears when loading libchrome.so, and t
|
| + |
| +static void RecordChromiumAndroidLinkerBrowserHistogram( |
| + JNIEnv* env, |
| + jclass clazz, |
| + jboolean is_using_browser_shared_relros, |
| + jboolean load_at_fixed_address_failed) { |
| + // For low-memory devices, record whether or not we successfully loaded the |
| + // browser at a fixed address. Otherwise just record a normal invocation. |
| + BrowserHistogramCode histogram_code; |
| + if (is_using_browser_shared_relros) { |
| + histogram_code = load_at_fixed_address_failed |
| + ? LOW_MEMORY_LFA_BACKOFF_USED : LOW_MEMORY_LFA_SUCCESS; |
| + } else { |
| + histogram_code = NORMAL_LRA_SUCCESS; |
| + } |
| + UMA_HISTOGRAM_ENUMERATION("ChromiumAndroidLinker.BrowserStates", |
| + histogram_code, |
| + MAX_BROWSER_HISTOGRAM_CODE); |
| +} |
| + |
| void SetLibraryLoadedHook(LibraryLoadedHook* func) { |
| g_registration_callback = func; |
| } |
| @@ -31,23 +101,12 @@ static void InitCommandLine(JNIEnv* env, jclass clazz, |
| } |
| static jboolean LibraryLoaded(JNIEnv* env, jclass clazz) { |
| - if(g_registration_callback == NULL) { |
| + if (g_registration_callback == NULL) { |
| return true; |
| } |
| return g_registration_callback(env, clazz); |
| } |
| -static void RecordChromiumAndroidLinkerHistogram( |
| - JNIEnv* env, |
| - jclass clazz, |
| - jboolean loaded_at_fixed_address_failed, |
| - jboolean is_low_memory_device) { |
| - UMA_HISTOGRAM_BOOLEAN("ChromiumAndroidLinker.LoadedAtFixedAddressFailed", |
| - loaded_at_fixed_address_failed); |
| - UMA_HISTOGRAM_BOOLEAN("ChromiumAndroidLinker.IsLowMemoryDevice", |
| - is_low_memory_device); |
|
Ilya Sherman
2014/10/02 20:53:57
Please mark the corresponding histograms as <obsol
simonb (inactive)
2014/10/03 11:51:42
Done.
|
| -} |
| - |
| void LibraryLoaderExitHook() { |
| if (g_at_exit_manager) { |
| delete g_at_exit_manager; |