void mozilla_sampler_init() { if (!tlsStack.init() || !tlsTicker.init()) { LOG("Failed to init."); return; } stack_key_initialized = true; ProfileStack *stack = new ProfileStack(); tlsStack.set(stack); #if defined(USE_LIBUNWIND) && defined(ANDROID) // Only try debug_frame and exidx unwinding putenv("UNW_ARM_UNWIND_METHOD=5"); // Allow the profiler to be started and stopped using signals OS::RegisterStartStopHandlers(); // On Android, this is too soon in order to start up the // profiler. return; #endif // We can't open pref so we use an environment variable // to know if we should trigger the profiler on startup // NOTE: Default const char *val = PR_GetEnv("MOZ_PROFILER_STARTUP"); if (!val || !*val) { return; } mozilla_sampler_start(PROFILE_DEFAULT_ENTRY, PROFILE_DEFAULT_INTERVAL, PROFILE_DEFAULT_FEATURES, PROFILE_DEFAULT_FEATURE_COUNT); }
void mozilla_sampler_init() { if (stack_key_initialized) return; if (!tlsStack.init() || !tlsTicker.init()) { LOG("Failed to init."); return; } stack_key_initialized = true; ProfileStack *stack = new ProfileStack(); tlsStack.set(stack); // Allow the profiler to be started using signals OS::RegisterStartHandler(); // We can't open pref so we use an environment variable // to know if we should trigger the profiler on startup // NOTE: Default const char *val = PR_GetEnv("MOZ_PROFILER_STARTUP"); if (!val || !*val) { return; } const char* features[] = {"js", "leaf" #if defined(XP_WIN) || defined(XP_MACOSX) , "stackwalk" #endif }; mozilla_sampler_start(PROFILE_DEFAULT_ENTRY, PROFILE_DEFAULT_INTERVAL, features, sizeof(features)/sizeof(const char*)); }
void mozilla_sampler_init(void* stackTop) { sInitCount++; if (stack_key_initialized) return; LOG("BEGIN mozilla_sampler_init"); if (!tlsPseudoStack.init() || !tlsTicker.init()) { LOG("Failed to init."); return; } stack_key_initialized = true; Sampler::Startup(); PseudoStack *stack = new PseudoStack(); tlsPseudoStack.set(stack); Sampler::RegisterCurrentThread("Gecko", stack, true, stackTop); // Read mode settings from MOZ_PROFILER_MODE and interval // settings from MOZ_PROFILER_INTERVAL and stack-scan threshhold // from MOZ_PROFILER_STACK_SCAN. read_profiler_env_vars(); // Allow the profiler to be started using signals OS::RegisterStartHandler(); // Initialize (but don't enable) I/O interposing sInterposeObserver = new mozilla::ProfilerIOInterposeObserver(); // We can't open pref so we use an environment variable // to know if we should trigger the profiler on startup // NOTE: Default const char *val = PR_GetEnv("MOZ_PROFILER_STARTUP"); if (!val || !*val) { return; } const char* features[] = {"js" , "leaf" #if defined(XP_WIN) || defined(XP_MACOSX) , "stackwalk" #endif #if defined(SPS_OS_android) && !defined(MOZ_WIDGET_GONK) , "java" #endif }; profiler_start(PROFILE_DEFAULT_ENTRY, PROFILE_DEFAULT_INTERVAL, features, sizeof(features)/sizeof(const char*), // TODO Add env variable to select threads NULL, 0); LOG("END mozilla_sampler_init"); }
void mozilla_sampler_init() { if (stack_key_initialized) return; if (!tlsStack.init() || !tlsTicker.init()) { LOG("Failed to init."); return; } stack_key_initialized = true; ProfileStack *stack = new ProfileStack(); tlsStack.set(stack); #if defined(USE_LIBUNWIND) && defined(ANDROID) // Only try debug_frame and exidx unwinding putenv("UNW_ARM_UNWIND_METHOD=5"); #endif // Allow the profiler to be started using signals OS::RegisterStartHandler(); #if defined(USE_LIBUNWIND) && defined(__arm__) && defined(MOZ_CRASHREPORTER) // On ARM, libunwind defines a signal handler for segmentation faults. // If SPS is enabled now, the crash reporter will override that signal // handler, and libunwind will likely break. return; #endif // We can't open pref so we use an environment variable // to know if we should trigger the profiler on startup // NOTE: Default const char *val = PR_GetEnv("MOZ_PROFILER_STARTUP"); if (!val || !*val) { return; } const char* features[] = {"js" #if defined(XP_WIN) || defined(XP_MACOSX) , "stackwalk" #endif }; mozilla_sampler_start(PROFILE_DEFAULT_ENTRY, PROFILE_DEFAULT_INTERVAL, features, sizeof(features)/sizeof(const char*)); }
static void SetStaticGLContext(GLContext* context) { if (!sGLContext.initialized()) { mozilla::DebugOnly<bool> success = sGLContext.init(); MOZ_ASSERT(success); } sGLContext.set(context); }
void NS_SetMainThread() { if (!sTLSIsMainThread.initialized()) { if (!sTLSIsMainThread.init()) { MOZ_CRASH(); } sTLSIsMainThread.set(true); } MOZ_ASSERT(NS_IsMainThread()); }
void InitScriptSettings() { if (!sScriptSettingsTLS.initialized()) { bool success = sScriptSettingsTLS.init(); if (!success) { MOZ_CRASH(); } } sScriptSettingsTLS.set(nullptr); }
void EnsureGLContext(const GrGLInterface* i) { const DrawTarget* drawTarget = reinterpret_cast<const DrawTarget*>(i->fCallbackData); GLContext* gl = static_cast<GLContext*>(drawTarget->GetGLContext()); gl->MakeCurrent(); if (!sGLContext.initialized()) { mozilla::DebugOnly<bool> success = sGLContext.init(); MOZ_ASSERT(success); } sGLContext.set(gl); }
void EnsureGLContext(const GrGLInterface* i) { const SkiaGLGlue* contextSkia = reinterpret_cast<const SkiaGLGlue*>(i->fCallbackData); GLContext* gl = contextSkia->GetGLContext(); gl->MakeCurrent(); if (!sGLContext.initialized()) { mozilla::DebugOnly<bool> success = sGLContext.init(); MOZ_ASSERT(success); } sGLContext.set(gl); }
void InitScriptSettings() { if (!sScriptSettingsTLS.initialized()) { bool success = sScriptSettingsTLS.init(); if (!success) { MOZ_CRASH(); } } ScriptSettingsStack* ptr = new ScriptSettingsStack(); sScriptSettingsTLS.set(ptr); }
void InitTaskTracer(uint32_t aFlags) { if (aFlags & FORKED_AFTER_NUWA) { ObsoleteCurrentTraceInfos(); return; } MOZ_ASSERT(!sTraceInfos); sTraceInfos = new nsTArray<nsAutoPtr<TraceInfo>>(); if (!sTraceInfoTLS.initialized()) { Unused << sTraceInfoTLS.init(); } }
void mozilla_sampler_init(void* stackTop) { sInitCount++; if (stack_key_initialized) return; #ifdef SPS_STANDALONE mozilla::TimeStamp::Startup(); #endif LOG("BEGIN mozilla_sampler_init"); if (!tlsPseudoStack.init() || !tlsTicker.init() || !tlsStackTop.init()) { LOG("Failed to init."); return; } bool ignore; sStartTime = mozilla::TimeStamp::ProcessCreation(ignore); stack_key_initialized = true; Sampler::Startup(); PseudoStack *stack = PseudoStack::create(); tlsPseudoStack.set(stack); bool isMainThread = true; Sampler::RegisterCurrentThread(isMainThread ? gGeckoThreadName : "Application Thread", stack, isMainThread, stackTop); // Read interval settings from MOZ_PROFILER_INTERVAL and stack-scan // threshhold from MOZ_PROFILER_STACK_SCAN. read_profiler_env_vars(); // platform specific initialization OS::Startup(); #ifndef SPS_STANDALONE set_stderr_callback(mozilla_sampler_log); #endif // We can't open pref so we use an environment variable // to know if we should trigger the profiler on startup // NOTE: Default const char *val = getenv("MOZ_PROFILER_STARTUP"); if (!val || !*val) { return; } const char* features[] = {"js" , "leaf" , "threads" #if defined(XP_WIN) || defined(XP_MACOSX) \ || (defined(SPS_ARCH_arm) && defined(linux)) \ || defined(SPS_PLAT_amd64_linux) || defined(SPS_PLAT_x86_linux) , "stackwalk" #endif #if defined(SPS_OS_android) && !defined(MOZ_WIDGET_GONK) , "java" #endif }; const char* threadFilters[] = { "GeckoMain", "Compositor" }; profiler_start(PROFILE_DEFAULT_ENTRY, PROFILE_DEFAULT_INTERVAL, features, MOZ_ARRAY_LENGTH(features), threadFilters, MOZ_ARRAY_LENGTH(threadFilters)); LOG("END mozilla_sampler_init"); }
void mozilla_sampler_init(void* stackTop) { sInitCount++; if (stack_key_initialized) return; LOG("BEGIN mozilla_sampler_init"); if (!tlsPseudoStack.init() || !tlsTicker.init() || !tlsStackTop.init()) { LOG("Failed to init."); return; } stack_key_initialized = true; Sampler::Startup(); PseudoStack *stack = new PseudoStack(); tlsPseudoStack.set(stack); bool isMainThread = true; #ifdef XP_WIN // For metrofx, we'll register the main thread once it's created. isMainThread = !(XRE_GetWindowsEnvironment() == WindowsEnvironmentType_Metro); #endif Sampler::RegisterCurrentThread(isMainThread ? gGeckoThreadName : "Application Thread", stack, isMainThread, stackTop); // Read mode settings from MOZ_PROFILER_MODE and interval // settings from MOZ_PROFILER_INTERVAL and stack-scan threshhold // from MOZ_PROFILER_STACK_SCAN. read_profiler_env_vars(); // platform specific initialization OS::Startup(); set_stderr_callback(profiler_log); // We can't open pref so we use an environment variable // to know if we should trigger the profiler on startup // NOTE: Default const char *val = PR_GetEnv("MOZ_PROFILER_STARTUP"); if (!val || !*val) { return; } const char* features[] = {"js" , "leaf" #if defined(XP_WIN) || defined(XP_MACOSX) || (defined(SPS_ARCH_arm) && defined(linux)) , "stackwalk" #endif #if defined(SPS_OS_android) && !defined(MOZ_WIDGET_GONK) , "java" #endif }; profiler_start(PROFILE_DEFAULT_ENTRY, PROFILE_DEFAULT_INTERVAL, features, sizeof(features)/sizeof(const char*), // TODO Add env variable to select threads nullptr, 0); LOG("END mozilla_sampler_init"); }
void mozilla_sampler_init() { sInitCount++; if (stack_key_initialized) return; LOG("BEGIN mozilla_sampler_init"); if (!tlsPseudoStack.init() || !tlsTicker.init()) { LOG("Failed to init."); return; } stack_key_initialized = true; Sampler::Startup(); PseudoStack *stack = new PseudoStack(); tlsPseudoStack.set(stack); Sampler::RegisterCurrentThread("Gecko", stack, true); if (sps_version2()) { // Read mode settings from MOZ_PROFILER_MODE and interval // settings from MOZ_PROFILER_INTERVAL and stack-scan threshhold // from MOZ_PROFILER_STACK_SCAN. read_profiler_env_vars(); // Create the unwinder thread. ATM there is only one. uwt__init(); # if defined(SPS_PLAT_amd64_linux) || defined(SPS_PLAT_arm_android) \ || defined(SPS_PLAT_x86_linux) || defined(SPS_PLAT_x86_android) \ || defined(SPS_PLAT_x86_windows) || defined(SPS_PLAT_amd64_windows) /* no idea if windows is correct */ // On Linuxes, register this thread (temporarily) for profiling int aLocal; uwt__register_thread_for_profiling( &aLocal ); # elif defined(SPS_PLAT_amd64_darwin) || defined(SPS_PLAT_x86_darwin) // Registration is done in platform-macos.cc # else # error "Unknown plat" # endif } // Allow the profiler to be started using signals OS::RegisterStartHandler(); // We can't open pref so we use an environment variable // to know if we should trigger the profiler on startup // NOTE: Default const char *val = PR_GetEnv("MOZ_PROFILER_STARTUP"); if (!val || !*val) { return; } const char* features[] = {"js" , "leaf" #if defined(XP_WIN) || defined(XP_MACOSX) , "stackwalk" #endif }; profiler_start(PROFILE_DEFAULT_ENTRY, PROFILE_DEFAULT_INTERVAL, features, sizeof(features)/sizeof(const char*)); LOG("END mozilla_sampler_init"); }