| // Copyright 2022 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "base/process/current_process.h" |
| |
| namespace base { |
| |
| namespace { |
| |
| const char* GetNameForProcessType(CurrentProcessType process_type) { |
| #if BUILDFLAG(ENABLE_BASE_TRACING) |
| switch (process_type) { |
| case CurrentProcessType::PROCESS_UNSPECIFIED: |
| return "Null"; |
| case CurrentProcessType::PROCESS_BROWSER: |
| return "Browser"; |
| case CurrentProcessType::PROCESS_RENDERER: |
| return "Renderer"; |
| case CurrentProcessType::PROCESS_UTILITY: |
| return "Utility"; |
| case CurrentProcessType::PROCESS_ZYGOTE: |
| return "Zygote"; |
| case CurrentProcessType::PROCESS_SANDBOX_HELPER: |
| return "SandboxHelper"; |
| case CurrentProcessType::PROCESS_GPU: |
| return "GPU Process"; |
| case CurrentProcessType::PROCESS_PPAPI_PLUGIN: |
| return "PPAPI Process"; |
| case CurrentProcessType::PROCESS_PPAPI_BROKER: |
| return "PPAPI Broker Process"; |
| case CurrentProcessType::PROCESS_SERVICE_NETWORK: |
| return "Service: network.mojom.NetworkService"; |
| case CurrentProcessType::PROCESS_SERVICE_TRACING: |
| return "Service: tracing.mojom.TracingService"; |
| case CurrentProcessType::PROCESS_SERVICE_STORAGE: |
| return "Service: storage.mojom.StorageService"; |
| case CurrentProcessType::PROCESS_SERVICE_AUDIO: |
| return "Service: audio.mojom.AudioService"; |
| case CurrentProcessType::PROCESS_SERVICE_DATA_DECODER: |
| return "Service: data_decoder.mojom.DataDecoderService"; |
| case CurrentProcessType::PROCESS_SERVICE_UTIL_WIN: |
| return "Service: chrome.mojom.UtilWin"; |
| case CurrentProcessType::PROCESS_SERVICE_PROXY_RESOLVER: |
| return "Service: proxy_resolver.mojom.ProxyResolverFactory"; |
| case CurrentProcessType::PROCESS_SERVICE_CDM: |
| return "Service: media.mojom.CdmService"; |
| case CurrentProcessType::PROCESS_SERVICE_VIDEO_CAPTURE: |
| return "Service: video_capture.mojom.VideoCaptureService"; |
| case CurrentProcessType::PROCESS_SERVICE_UNZIPPER: |
| return "Service: unzip.mojom.Unzipper"; |
| case CurrentProcessType::PROCESS_SERVICE_MIRRORING: |
| return "Service: mirroring.mojom.MirroringService"; |
| case CurrentProcessType::PROCESS_SERVICE_FILEPATCHER: |
| return "Service: patch.mojom.FilePatcher"; |
| case CurrentProcessType::PROCESS_SERVICE_TTS: |
| return "Service: chromeos.tts.mojom.TtsService"; |
| case CurrentProcessType::PROCESS_SERVICE_PRINTING: |
| return "Service: printing.mojom.PrintingService"; |
| case CurrentProcessType::PROCESS_SERVICE_QUARANTINE: |
| return "Service: quarantine.mojom.Quarantine"; |
| case CurrentProcessType::PROCESS_SERVICE_CROS_LOCALSEARCH: |
| return "Service: chromeos.local_search_service.mojom.LocalSearchService"; |
| case CurrentProcessType::PROCESS_SERVICE_CROS_ASSISTANT_AUDIO_DECODER: |
| return "Service: chromeos.assistant.mojom.AssistantAudioDecoderFactory"; |
| case CurrentProcessType::PROCESS_SERVICE_FILEUTIL: |
| return "Service: chrome.mojom.FileUtilService"; |
| case CurrentProcessType::PROCESS_SERVICE_PRINTCOMPOSITOR: |
| return "Service: printing.mojom.PrintCompositor"; |
| case CurrentProcessType::PROCESS_SERVICE_PAINTPREVIEW: |
| return "Service: paint_preview.mojom.PaintPreviewCompositorCollection"; |
| case CurrentProcessType::PROCESS_SERVICE_SPEECHRECOGNITION: |
| return "Service: media.mojom.SpeechRecognitionService"; |
| case CurrentProcessType::PROCESS_SERVICE_XRDEVICE: |
| return "Service: device.mojom.XRDeviceService"; |
| case CurrentProcessType::PROCESS_SERVICE_READICON: |
| return "Service: chrome.mojom.UtilReadIcon"; |
| case CurrentProcessType::PROCESS_SERVICE_LANGUAGEDETECTION: |
| return "Service: language_detection.mojom.LanguageDetectionService"; |
| case CurrentProcessType::PROCESS_SERVICE_SHARING: |
| return "Service: sharing.mojom.Sharing"; |
| case CurrentProcessType::PROCESS_SERVICE_MEDIAPARSER: |
| return "Service: chrome.mojom.MediaParserFactory"; |
| case CurrentProcessType::PROCESS_SERVICE_QRCODEGENERATOR: |
| return "Service: qrcode_generator.mojom.QRCodeGeneratorService"; |
| case CurrentProcessType::PROCESS_SERVICE_PROFILEIMPORT: |
| return "Service: chrome.mojom.ProfileImport"; |
| case CurrentProcessType::PROCESS_SERVICE_IME: |
| return "Service: chromeos.ime.mojom.ImeService"; |
| case CurrentProcessType::PROCESS_SERVICE_RECORDING: |
| return "Service: recording.mojom.RecordingService"; |
| case CurrentProcessType::PROCESS_SERVICE_SHAPEDETECTION: |
| return "Service: shape_detection.mojom.ShapeDetectionService"; |
| case CurrentProcessType::PROCESS_RENDERER_EXTENSION: |
| return "Extension Renderer"; |
| } |
| #else |
| return "Null"; |
| #endif // BUILDFLAG(ENABLE_BASE_TRACING) |
| } |
| |
| } // namespace |
| |
| // Used for logging histograms for IPC metrics based on their process type. |
| ShortProcessType CurrentProcess::GetShortType(TypeKey key) { |
| #if BUILDFLAG(ENABLE_BASE_TRACING) |
| CurrentProcessType process = static_cast<CurrentProcessType>( |
| process_type_.load(std::memory_order_relaxed)); |
| switch (process) { |
| case CurrentProcessType::PROCESS_UNSPECIFIED: |
| return ShortProcessType::kUnspecified; |
| case CurrentProcessType::PROCESS_BROWSER: |
| return ShortProcessType::kBrowser; |
| case CurrentProcessType::PROCESS_RENDERER: |
| return ShortProcessType::kRenderer; |
| case CurrentProcessType::PROCESS_UTILITY: |
| return ShortProcessType::kUtility; |
| case CurrentProcessType::PROCESS_ZYGOTE: |
| return ShortProcessType::kZygote; |
| case CurrentProcessType::PROCESS_SANDBOX_HELPER: |
| return ShortProcessType::kSandboxHelper; |
| case CurrentProcessType::PROCESS_GPU: |
| return ShortProcessType::kGpu; |
| case CurrentProcessType::PROCESS_PPAPI_PLUGIN: |
| return ShortProcessType::kPpapiPlugin; |
| case CurrentProcessType::PROCESS_PPAPI_BROKER: |
| return ShortProcessType::kPpapiBroker; |
| case CurrentProcessType::PROCESS_SERVICE_NETWORK: |
| return ShortProcessType::kServiceNetwork; |
| case CurrentProcessType::PROCESS_SERVICE_STORAGE: |
| return ShortProcessType::kServiceStorage; |
| case CurrentProcessType::PROCESS_RENDERER_EXTENSION: |
| return ShortProcessType::kRendererExtension; |
| case CurrentProcessType::PROCESS_SERVICE_TRACING: |
| case CurrentProcessType::PROCESS_SERVICE_AUDIO: |
| case CurrentProcessType::PROCESS_SERVICE_DATA_DECODER: |
| case CurrentProcessType::PROCESS_SERVICE_UTIL_WIN: |
| case CurrentProcessType::PROCESS_SERVICE_PROXY_RESOLVER: |
| case CurrentProcessType::PROCESS_SERVICE_CDM: |
| case CurrentProcessType::PROCESS_SERVICE_VIDEO_CAPTURE: |
| case CurrentProcessType::PROCESS_SERVICE_UNZIPPER: |
| case CurrentProcessType::PROCESS_SERVICE_MIRRORING: |
| case CurrentProcessType::PROCESS_SERVICE_FILEPATCHER: |
| case CurrentProcessType::PROCESS_SERVICE_TTS: |
| case CurrentProcessType::PROCESS_SERVICE_PRINTING: |
| case CurrentProcessType::PROCESS_SERVICE_QUARANTINE: |
| case CurrentProcessType::PROCESS_SERVICE_CROS_LOCALSEARCH: |
| case CurrentProcessType::PROCESS_SERVICE_CROS_ASSISTANT_AUDIO_DECODER: |
| case CurrentProcessType::PROCESS_SERVICE_FILEUTIL: |
| case CurrentProcessType::PROCESS_SERVICE_PRINTCOMPOSITOR: |
| case CurrentProcessType::PROCESS_SERVICE_PAINTPREVIEW: |
| case CurrentProcessType::PROCESS_SERVICE_SPEECHRECOGNITION: |
| case CurrentProcessType::PROCESS_SERVICE_XRDEVICE: |
| case CurrentProcessType::PROCESS_SERVICE_READICON: |
| case CurrentProcessType::PROCESS_SERVICE_LANGUAGEDETECTION: |
| case CurrentProcessType::PROCESS_SERVICE_SHARING: |
| case CurrentProcessType::PROCESS_SERVICE_MEDIAPARSER: |
| case CurrentProcessType::PROCESS_SERVICE_QRCODEGENERATOR: |
| case CurrentProcessType::PROCESS_SERVICE_PROFILEIMPORT: |
| case CurrentProcessType::PROCESS_SERVICE_IME: |
| case CurrentProcessType::PROCESS_SERVICE_RECORDING: |
| case CurrentProcessType::PROCESS_SERVICE_SHAPEDETECTION: |
| return ShortProcessType::kService; |
| } |
| #else |
| return ShortProcessType::kUnspecified; |
| #endif |
| } |
| |
| // static |
| CurrentProcess& CurrentProcess::GetInstance() { |
| static base::NoDestructor<CurrentProcess> instance; |
| return *instance; |
| } |
| |
| void CurrentProcess::SetProcessType(CurrentProcessType process_type) { |
| std::string process_name = GetNameForProcessType(process_type); |
| CurrentProcess::GetInstance().SetProcessNameAndType(process_name, |
| process_type); |
| } |
| |
| void CurrentProcess::SetProcessNameAndType(const std::string& process_name, |
| CurrentProcessType process_type) { |
| { |
| AutoLock lock(lock_); |
| process_name_ = process_name; |
| process_type_.store(static_cast<CurrentProcessType>(process_type), |
| std::memory_order_relaxed); |
| } |
| #if BUILDFLAG(ENABLE_BASE_TRACING) |
| trace_event::TraceLog::GetInstance()->OnSetProcessName(process_name); |
| #endif |
| } |
| |
| } // namespace base |