library_loader_hooks.cc revision 010d83a9304c5a91596085d917d248abff47903a
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 3// found in the LICENSE file. 4 5#include "base/android/library_loader/library_loader_hooks.h" 6 7#include "base/android/jni_string.h" 8#include "base/at_exit.h" 9#include "base/metrics/histogram.h" 10#include "jni/LibraryLoader_jni.h" 11 12namespace base { 13namespace android { 14 15namespace { 16 17base::AtExitManager* g_at_exit_manager = NULL; 18const char* g_library_version_number = ""; 19LibraryLoadedHook* g_registration_callback = NULL; 20 21} // namespace 22 23void SetLibraryLoadedHook(LibraryLoadedHook* func) { 24 g_registration_callback = func; 25} 26 27static jboolean LibraryLoaded(JNIEnv* env, jclass clazz, 28 jobjectArray init_command_line) { 29 if(g_registration_callback == NULL) { 30 return true; 31 } 32 return g_registration_callback(env, clazz, init_command_line); 33} 34 35static void RecordChromiumAndroidLinkerHistogram( 36 JNIEnv* env, 37 jclass clazz, 38 jboolean loaded_at_fixed_address_failed, 39 jboolean is_low_memory_device) { 40 UMA_HISTOGRAM_BOOLEAN("ChromiumAndroidLinker.LoadedAtFixedAddressFailed", 41 loaded_at_fixed_address_failed); 42 UMA_HISTOGRAM_BOOLEAN("ChromiumAndroidLinker.IsLowMemoryDevice", 43 is_low_memory_device); 44} 45 46void LibraryLoaderExitHook() { 47 if (g_at_exit_manager) { 48 delete g_at_exit_manager; 49 g_at_exit_manager = NULL; 50 } 51} 52 53bool RegisterLibraryLoaderEntryHook(JNIEnv* env) { 54 // We need the AtExitManager to be created at the very beginning. 55 g_at_exit_manager = new base::AtExitManager(); 56 57 return RegisterNativesImpl(env); 58} 59 60void SetVersionNumber(const char* version_number) { 61 g_library_version_number = strdup(version_number); 62} 63 64jstring GetVersionNumber(JNIEnv* env, jclass clazz) { 65 return ConvertUTF8ToJavaString(env, g_library_version_number).Release(); 66} 67 68static void RecordNativeLibraryHack(JNIEnv*, jclass, jboolean usedHack) { 69 UMA_HISTOGRAM_BOOLEAN("LibraryLoader.NativeLibraryHack", usedHack); 70} 71 72} // namespace android 73} // namespace base 74