1*6777b538SAndroid Build Coastguard Worker // Copyright 2022 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #include "base/process/current_process.h" 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Worker namespace base { 8*6777b538SAndroid Build Coastguard Worker 9*6777b538SAndroid Build Coastguard Worker namespace { 10*6777b538SAndroid Build Coastguard Worker GetNameForProcessType(CurrentProcessType process_type)11*6777b538SAndroid Build Coastguard Workerconst char* GetNameForProcessType(CurrentProcessType process_type) { 12*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(ENABLE_BASE_TRACING) 13*6777b538SAndroid Build Coastguard Worker switch (process_type) { 14*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_UNSPECIFIED: 15*6777b538SAndroid Build Coastguard Worker return "Null"; 16*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_BROWSER: 17*6777b538SAndroid Build Coastguard Worker return "Browser"; 18*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_RENDERER: 19*6777b538SAndroid Build Coastguard Worker return "Renderer"; 20*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_UTILITY: 21*6777b538SAndroid Build Coastguard Worker return "Utility"; 22*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_ZYGOTE: 23*6777b538SAndroid Build Coastguard Worker return "Zygote"; 24*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SANDBOX_HELPER: 25*6777b538SAndroid Build Coastguard Worker return "SandboxHelper"; 26*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_GPU: 27*6777b538SAndroid Build Coastguard Worker return "GPU Process"; 28*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_PPAPI_PLUGIN: 29*6777b538SAndroid Build Coastguard Worker return "PPAPI Process"; 30*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_PPAPI_BROKER: 31*6777b538SAndroid Build Coastguard Worker return "PPAPI Broker Process"; 32*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_NETWORK: 33*6777b538SAndroid Build Coastguard Worker return "Service: network.mojom.NetworkService"; 34*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_TRACING: 35*6777b538SAndroid Build Coastguard Worker return "Service: tracing.mojom.TracingService"; 36*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_STORAGE: 37*6777b538SAndroid Build Coastguard Worker return "Service: storage.mojom.StorageService"; 38*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_AUDIO: 39*6777b538SAndroid Build Coastguard Worker return "Service: audio.mojom.AudioService"; 40*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_DATA_DECODER: 41*6777b538SAndroid Build Coastguard Worker return "Service: data_decoder.mojom.DataDecoderService"; 42*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_UTIL_WIN: 43*6777b538SAndroid Build Coastguard Worker return "Service: chrome.mojom.UtilWin"; 44*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_PROXY_RESOLVER: 45*6777b538SAndroid Build Coastguard Worker return "Service: proxy_resolver.mojom.ProxyResolverFactory"; 46*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_CDM: 47*6777b538SAndroid Build Coastguard Worker return "Service: media.mojom.CdmServiceBroker"; 48*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_MEDIA_FOUNDATION: 49*6777b538SAndroid Build Coastguard Worker return "Service: media.mojom.MediaFoundationServiceBroker"; 50*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_VIDEO_CAPTURE: 51*6777b538SAndroid Build Coastguard Worker return "Service: video_capture.mojom.VideoCaptureService"; 52*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_UNZIPPER: 53*6777b538SAndroid Build Coastguard Worker return "Service: unzip.mojom.Unzipper"; 54*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_MIRRORING: 55*6777b538SAndroid Build Coastguard Worker return "Service: mirroring.mojom.MirroringService"; 56*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_FILEPATCHER: 57*6777b538SAndroid Build Coastguard Worker return "Service: patch.mojom.FilePatcher"; 58*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_TTS: 59*6777b538SAndroid Build Coastguard Worker return "Service: chromeos.tts.mojom.TtsService"; 60*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_PRINTING: 61*6777b538SAndroid Build Coastguard Worker return "Service: printing.mojom.PrintingService"; 62*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_QUARANTINE: 63*6777b538SAndroid Build Coastguard Worker return "Service: quarantine.mojom.Quarantine"; 64*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_CROS_LOCALSEARCH: 65*6777b538SAndroid Build Coastguard Worker return "Service: chromeos.local_search_service.mojom.LocalSearchService"; 66*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_CROS_ASSISTANT_AUDIO_DECODER: 67*6777b538SAndroid Build Coastguard Worker return "Service: chromeos.assistant.mojom.AssistantAudioDecoderFactory"; 68*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_FILEUTIL: 69*6777b538SAndroid Build Coastguard Worker return "Service: chrome.mojom.FileUtilService"; 70*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_PRINTCOMPOSITOR: 71*6777b538SAndroid Build Coastguard Worker return "Service: printing.mojom.PrintCompositor"; 72*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_PAINTPREVIEW: 73*6777b538SAndroid Build Coastguard Worker return "Service: paint_preview.mojom.PaintPreviewCompositorCollection"; 74*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_SPEECHRECOGNITION: 75*6777b538SAndroid Build Coastguard Worker return "Service: media.mojom.SpeechRecognitionService"; 76*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_XRDEVICE: 77*6777b538SAndroid Build Coastguard Worker return "Service: device.mojom.XRDeviceService"; 78*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_READICON: 79*6777b538SAndroid Build Coastguard Worker return "Service: chrome.mojom.UtilReadIcon"; 80*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_LANGUAGEDETECTION: 81*6777b538SAndroid Build Coastguard Worker return "Service: language_detection.mojom.LanguageDetectionService"; 82*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_SHARING: 83*6777b538SAndroid Build Coastguard Worker return "Service: sharing.mojom.Sharing"; 84*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_MEDIAPARSER: 85*6777b538SAndroid Build Coastguard Worker return "Service: chrome.mojom.MediaParserFactory"; 86*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_QRCODEGENERATOR: 87*6777b538SAndroid Build Coastguard Worker return "Service: qrcode_generator.mojom.QRCodeGeneratorService"; 88*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_PROFILEIMPORT: 89*6777b538SAndroid Build Coastguard Worker return "Service: chrome.mojom.ProfileImport"; 90*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_IME: 91*6777b538SAndroid Build Coastguard Worker return "Service: chromeos.ime.mojom.ImeService"; 92*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_RECORDING: 93*6777b538SAndroid Build Coastguard Worker return "Service: recording.mojom.RecordingService"; 94*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_SHAPEDETECTION: 95*6777b538SAndroid Build Coastguard Worker return "Service: shape_detection.mojom.ShapeDetectionService"; 96*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_RENDERER_EXTENSION: 97*6777b538SAndroid Build Coastguard Worker return "Extension Renderer"; 98*6777b538SAndroid Build Coastguard Worker } 99*6777b538SAndroid Build Coastguard Worker #else 100*6777b538SAndroid Build Coastguard Worker return "Null"; 101*6777b538SAndroid Build Coastguard Worker #endif // BUILDFLAG(ENABLE_BASE_TRACING) 102*6777b538SAndroid Build Coastguard Worker } 103*6777b538SAndroid Build Coastguard Worker 104*6777b538SAndroid Build Coastguard Worker } // namespace 105*6777b538SAndroid Build Coastguard Worker 106*6777b538SAndroid Build Coastguard Worker // Used for logging histograms for IPC metrics based on their process type. GetShortType(TypeKey key)107*6777b538SAndroid Build Coastguard WorkerShortProcessType CurrentProcess::GetShortType(TypeKey key) { 108*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(ENABLE_BASE_TRACING) 109*6777b538SAndroid Build Coastguard Worker CurrentProcessType process = static_cast<CurrentProcessType>( 110*6777b538SAndroid Build Coastguard Worker process_type_.load(std::memory_order_relaxed)); 111*6777b538SAndroid Build Coastguard Worker switch (process) { 112*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_UNSPECIFIED: 113*6777b538SAndroid Build Coastguard Worker return ShortProcessType::kUnspecified; 114*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_BROWSER: 115*6777b538SAndroid Build Coastguard Worker return ShortProcessType::kBrowser; 116*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_RENDERER: 117*6777b538SAndroid Build Coastguard Worker return ShortProcessType::kRenderer; 118*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_UTILITY: 119*6777b538SAndroid Build Coastguard Worker return ShortProcessType::kUtility; 120*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_ZYGOTE: 121*6777b538SAndroid Build Coastguard Worker return ShortProcessType::kZygote; 122*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SANDBOX_HELPER: 123*6777b538SAndroid Build Coastguard Worker return ShortProcessType::kSandboxHelper; 124*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_GPU: 125*6777b538SAndroid Build Coastguard Worker return ShortProcessType::kGpu; 126*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_PPAPI_PLUGIN: 127*6777b538SAndroid Build Coastguard Worker return ShortProcessType::kPpapiPlugin; 128*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_PPAPI_BROKER: 129*6777b538SAndroid Build Coastguard Worker return ShortProcessType::kPpapiBroker; 130*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_NETWORK: 131*6777b538SAndroid Build Coastguard Worker return ShortProcessType::kServiceNetwork; 132*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_STORAGE: 133*6777b538SAndroid Build Coastguard Worker return ShortProcessType::kServiceStorage; 134*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_RENDERER_EXTENSION: 135*6777b538SAndroid Build Coastguard Worker return ShortProcessType::kRendererExtension; 136*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_TRACING: 137*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_AUDIO: 138*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_DATA_DECODER: 139*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_UTIL_WIN: 140*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_PROXY_RESOLVER: 141*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_CDM: 142*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_MEDIA_FOUNDATION: 143*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_VIDEO_CAPTURE: 144*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_UNZIPPER: 145*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_MIRRORING: 146*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_FILEPATCHER: 147*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_TTS: 148*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_PRINTING: 149*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_QUARANTINE: 150*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_CROS_LOCALSEARCH: 151*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_CROS_ASSISTANT_AUDIO_DECODER: 152*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_FILEUTIL: 153*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_PRINTCOMPOSITOR: 154*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_PAINTPREVIEW: 155*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_SPEECHRECOGNITION: 156*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_XRDEVICE: 157*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_READICON: 158*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_LANGUAGEDETECTION: 159*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_SHARING: 160*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_MEDIAPARSER: 161*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_QRCODEGENERATOR: 162*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_PROFILEIMPORT: 163*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_IME: 164*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_RECORDING: 165*6777b538SAndroid Build Coastguard Worker case CurrentProcessType::PROCESS_SERVICE_SHAPEDETECTION: 166*6777b538SAndroid Build Coastguard Worker return ShortProcessType::kService; 167*6777b538SAndroid Build Coastguard Worker } 168*6777b538SAndroid Build Coastguard Worker #else 169*6777b538SAndroid Build Coastguard Worker return ShortProcessType::kUnspecified; 170*6777b538SAndroid Build Coastguard Worker #endif 171*6777b538SAndroid Build Coastguard Worker } 172*6777b538SAndroid Build Coastguard Worker 173*6777b538SAndroid Build Coastguard Worker // static GetInstance()174*6777b538SAndroid Build Coastguard WorkerCurrentProcess& CurrentProcess::GetInstance() { 175*6777b538SAndroid Build Coastguard Worker static base::NoDestructor<CurrentProcess> instance; 176*6777b538SAndroid Build Coastguard Worker return *instance; 177*6777b538SAndroid Build Coastguard Worker } 178*6777b538SAndroid Build Coastguard Worker SetProcessType(CurrentProcessType process_type)179*6777b538SAndroid Build Coastguard Workervoid CurrentProcess::SetProcessType(CurrentProcessType process_type) { 180*6777b538SAndroid Build Coastguard Worker std::string process_name = GetNameForProcessType(process_type); 181*6777b538SAndroid Build Coastguard Worker CurrentProcess::GetInstance().SetProcessNameAndType(process_name, 182*6777b538SAndroid Build Coastguard Worker process_type); 183*6777b538SAndroid Build Coastguard Worker } 184*6777b538SAndroid Build Coastguard Worker SetProcessNameAndType(const std::string & process_name,CurrentProcessType process_type)185*6777b538SAndroid Build Coastguard Workervoid CurrentProcess::SetProcessNameAndType(const std::string& process_name, 186*6777b538SAndroid Build Coastguard Worker CurrentProcessType process_type) { 187*6777b538SAndroid Build Coastguard Worker { 188*6777b538SAndroid Build Coastguard Worker AutoLock lock(lock_); 189*6777b538SAndroid Build Coastguard Worker process_name_ = process_name; 190*6777b538SAndroid Build Coastguard Worker process_type_.store(static_cast<CurrentProcessType>(process_type), 191*6777b538SAndroid Build Coastguard Worker std::memory_order_relaxed); 192*6777b538SAndroid Build Coastguard Worker } 193*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(ENABLE_BASE_TRACING) 194*6777b538SAndroid Build Coastguard Worker trace_event::TraceLog::GetInstance()->OnSetProcessName(process_name); 195*6777b538SAndroid Build Coastguard Worker #endif 196*6777b538SAndroid Build Coastguard Worker } 197*6777b538SAndroid Build Coastguard Worker 198*6777b538SAndroid Build Coastguard Worker } // namespace base 199