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