1 // Copyright (c) 2012 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 "content/public/app/android_library_loader_hooks.h" 6 7 #include "base/android/base_jni_registrar.h" 8 #include "base/android/command_line_android.h" 9 #include "base/android/jni_android.h" 10 #include "base/android/jni_registrar.h" 11 #include "base/android/jni_string.h" 12 #include "base/base_switches.h" 13 #include "base/command_line.h" 14 #include "base/debug/trace_event.h" 15 #include "base/files/file_path.h" 16 #include "base/logging.h" 17 #include "base/strings/string_util.h" 18 #include "base/tracked_objects.h" 19 #include "content/app/android/app_jni_registrar.h" 20 #include "content/browser/android/browser_jni_registrar.h" 21 #include "content/common/android/common_jni_registrar.h" 22 #include "content/common/content_constants_internal.h" 23 #include "content/public/common/content_switches.h" 24 #include "content/public/common/result_codes.h" 25 #include "media/base/android/media_jni_registrar.h" 26 #include "net/android/net_jni_registrar.h" 27 #include "ui/base/android/ui_base_jni_registrar.h" 28 #include "ui/gfx/android/gfx_jni_registrar.h" 29 #include "ui/gl/android/gl_jni_registrar.h" 30 #include "ui/shell_dialogs/android/shell_dialogs_jni_registrar.h" 31 32 namespace content { 33 34 bool EnsureJniRegistered(JNIEnv* env) { 35 static bool g_jni_init_done = false; 36 37 if (!g_jni_init_done) { 38 if (!base::android::RegisterJni(env)) 39 return false; 40 41 if (!gfx::android::RegisterJni(env)) 42 return false; 43 44 if (!net::android::RegisterJni(env)) 45 return false; 46 47 if (!ui::android::RegisterJni(env)) 48 return false; 49 50 if (!ui::gl::android::RegisterJni(env)) 51 return false; 52 53 if (!ui::shell_dialogs::RegisterJni(env)) 54 return false; 55 56 if (!content::android::RegisterCommonJni(env)) 57 return false; 58 59 if (!content::android::RegisterBrowserJni(env)) 60 return false; 61 62 if (!content::android::RegisterAppJni(env)) 63 return false; 64 65 if (!media::RegisterJni(env)) 66 return false; 67 68 g_jni_init_done = true; 69 } 70 71 return true; 72 } 73 74 bool LibraryLoaded(JNIEnv* env, jclass clazz) { 75 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); 76 77 if (command_line->HasSwitch(switches::kTraceStartup)) { 78 base::debug::CategoryFilter category_filter( 79 command_line->GetSwitchValueASCII(switches::kTraceStartup)); 80 base::debug::TraceLog::GetInstance()->SetEnabled( 81 category_filter, 82 base::debug::TraceLog::RECORDING_MODE, 83 base::debug::TraceOptions()); 84 } 85 86 // Android's main browser loop is custom so we set the browser 87 // name here as early as possible. 88 TRACE_EVENT_BEGIN_ETW("BrowserMain", 0, ""); 89 base::debug::TraceLog::GetInstance()->SetProcessName("Browser"); 90 base::debug::TraceLog::GetInstance()->SetProcessSortIndex( 91 kTraceEventBrowserProcessSortIndex); 92 93 // Can only use event tracing after setting up the command line. 94 TRACE_EVENT0("jni", "JNI_OnLoad continuation"); 95 96 logging::LoggingSettings settings; 97 settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG; 98 logging::InitLogging(settings); 99 // To view log output with IDs and timestamps use "adb logcat -v threadtime". 100 logging::SetLogItems(false, // Process ID 101 false, // Thread ID 102 false, // Timestamp 103 false); // Tick count 104 VLOG(0) << "Chromium logging enabled: level = " << logging::GetMinLogLevel() 105 << ", default verbosity = " << logging::GetVlogVerbosity(); 106 107 return EnsureJniRegistered(env); 108 } 109 110 } // namespace content 111