xref: /aosp_15_r20/external/cronet/base/process/current_process.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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)11 const 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)107 ShortProcessType 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()174 CurrentProcess& CurrentProcess::GetInstance() {
175   static base::NoDestructor<CurrentProcess> instance;
176   return *instance;
177 }
178 
SetProcessType(CurrentProcessType process_type)179 void 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)185 void 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