diff options
Diffstat (limited to 'chromium/base/android/library_loader/library_loader_hooks.cc')
-rw-r--r-- | chromium/base/android/library_loader/library_loader_hooks.cc | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/chromium/base/android/library_loader/library_loader_hooks.cc b/chromium/base/android/library_loader/library_loader_hooks.cc new file mode 100644 index 00000000000..79470108eb3 --- /dev/null +++ b/chromium/base/android/library_loader/library_loader_hooks.cc @@ -0,0 +1,73 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/android/library_loader/library_loader_hooks.h" + +#include "base/android/jni_string.h" +#include "base/at_exit.h" +#include "base/metrics/histogram.h" +#include "jni/LibraryLoader_jni.h" + +namespace base { +namespace android { + +namespace { + +base::AtExitManager* g_at_exit_manager = NULL; +const char* g_library_version_number = ""; +LibraryLoadedHook* g_registration_callback = NULL; + +} // namespace + +void SetLibraryLoadedHook(LibraryLoadedHook* func) { + g_registration_callback = func; +} + +static jboolean LibraryLoaded(JNIEnv* env, jclass clazz, + jobjectArray init_command_line) { + if(g_registration_callback == NULL) { + return true; + } + return g_registration_callback(env, clazz, init_command_line); +} + +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); +} + +void LibraryLoaderExitHook() { + if (g_at_exit_manager) { + delete g_at_exit_manager; + g_at_exit_manager = NULL; + } +} + +bool RegisterLibraryLoaderEntryHook(JNIEnv* env) { + // We need the AtExitManager to be created at the very beginning. + g_at_exit_manager = new base::AtExitManager(); + + return RegisterNativesImpl(env); +} + +void SetVersionNumber(const char* version_number) { + g_library_version_number = strdup(version_number); +} + +jstring GetVersionNumber(JNIEnv* env, jclass clazz) { + return ConvertUTF8ToJavaString(env, g_library_version_number).Release(); +} + +static void RecordNativeLibraryHack(JNIEnv*, jclass, jboolean usedHack) { + UMA_HISTOGRAM_BOOLEAN("LibraryLoader.NativeLibraryHack", usedHack); +} + +} // namespace android +} // namespace base |