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