blob: d5b86da4e630c7c7a8aa8309456969c76d25149f [file] [log] [blame]
Aman Verma327f9b42022-11-08 12:44:401// 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
7namespace base {
8
9namespace {
10
Aman Vermaf5d639c32022-11-14 14:49:0411const char* GetNameForProcessType(CurrentProcessType process_type) {
Aman Vermaf5d639c32022-11-14 14:49:0412 switch (process_type) {
13 case CurrentProcessType::PROCESS_UNSPECIFIED:
14 return "Null";
15 case CurrentProcessType::PROCESS_BROWSER:
16 return "Browser";
17 case CurrentProcessType::PROCESS_RENDERER:
18 return "Renderer";
19 case CurrentProcessType::PROCESS_UTILITY:
20 return "Utility";
21 case CurrentProcessType::PROCESS_ZYGOTE:
22 return "Zygote";
23 case CurrentProcessType::PROCESS_SANDBOX_HELPER:
24 return "SandboxHelper";
25 case CurrentProcessType::PROCESS_GPU:
Aman Vermae8bf1192022-11-18 14:22:0226 return "GPU Process";
Aman Vermaf5d639c32022-11-14 14:49:0427 case CurrentProcessType::PROCESS_PPAPI_PLUGIN:
Aman Vermae8bf1192022-11-18 14:22:0228 return "PPAPI Process";
Aman Vermaf5d639c32022-11-14 14:49:0429 case CurrentProcessType::PROCESS_PPAPI_BROKER:
Aman Vermae8bf1192022-11-18 14:22:0230 return "PPAPI Broker Process";
Aman Vermaf5d639c32022-11-14 14:49:0431 case CurrentProcessType::PROCESS_SERVICE_NETWORK:
32 return "Service: network.mojom.NetworkService";
33 case CurrentProcessType::PROCESS_SERVICE_TRACING:
34 return "Service: tracing.mojom.TracingService";
35 case CurrentProcessType::PROCESS_SERVICE_STORAGE:
36 return "Service: storage.mojom.StorageService";
37 case CurrentProcessType::PROCESS_SERVICE_AUDIO:
38 return "Service: audio.mojom.AudioService";
39 case CurrentProcessType::PROCESS_SERVICE_DATA_DECODER:
40 return "Service: data_decoder.mojom.DataDecoderService";
41 case CurrentProcessType::PROCESS_SERVICE_UTIL_WIN:
42 return "Service: chrome.mojom.UtilWin";
43 case CurrentProcessType::PROCESS_SERVICE_PROXY_RESOLVER:
44 return "Service: proxy_resolver.mojom.ProxyResolverFactory";
45 case CurrentProcessType::PROCESS_SERVICE_CDM:
Xiaohan Wang9029a9f82023-07-13 19:04:4946 return "Service: media.mojom.CdmServiceBroker";
47 case CurrentProcessType::PROCESS_SERVICE_MEDIA_FOUNDATION:
48 return "Service: media.mojom.MediaFoundationServiceBroker";
Aman Vermaf5d639c32022-11-14 14:49:0449 case CurrentProcessType::PROCESS_SERVICE_VIDEO_CAPTURE:
50 return "Service: video_capture.mojom.VideoCaptureService";
51 case CurrentProcessType::PROCESS_SERVICE_UNZIPPER:
52 return "Service: unzip.mojom.Unzipper";
53 case CurrentProcessType::PROCESS_SERVICE_MIRRORING:
54 return "Service: mirroring.mojom.MirroringService";
55 case CurrentProcessType::PROCESS_SERVICE_FILEPATCHER:
56 return "Service: patch.mojom.FilePatcher";
57 case CurrentProcessType::PROCESS_SERVICE_TTS:
58 return "Service: chromeos.tts.mojom.TtsService";
59 case CurrentProcessType::PROCESS_SERVICE_PRINTING:
60 return "Service: printing.mojom.PrintingService";
61 case CurrentProcessType::PROCESS_SERVICE_QUARANTINE:
62 return "Service: quarantine.mojom.Quarantine";
63 case CurrentProcessType::PROCESS_SERVICE_CROS_LOCALSEARCH:
64 return "Service: chromeos.local_search_service.mojom.LocalSearchService";
65 case CurrentProcessType::PROCESS_SERVICE_CROS_ASSISTANT_AUDIO_DECODER:
66 return "Service: chromeos.assistant.mojom.AssistantAudioDecoderFactory";
67 case CurrentProcessType::PROCESS_SERVICE_FILEUTIL:
68 return "Service: chrome.mojom.FileUtilService";
69 case CurrentProcessType::PROCESS_SERVICE_PRINTCOMPOSITOR:
70 return "Service: printing.mojom.PrintCompositor";
71 case CurrentProcessType::PROCESS_SERVICE_PAINTPREVIEW:
72 return "Service: paint_preview.mojom.PaintPreviewCompositorCollection";
73 case CurrentProcessType::PROCESS_SERVICE_SPEECHRECOGNITION:
74 return "Service: media.mojom.SpeechRecognitionService";
75 case CurrentProcessType::PROCESS_SERVICE_XRDEVICE:
76 return "Service: device.mojom.XRDeviceService";
77 case CurrentProcessType::PROCESS_SERVICE_READICON:
78 return "Service: chrome.mojom.UtilReadIcon";
79 case CurrentProcessType::PROCESS_SERVICE_LANGUAGEDETECTION:
80 return "Service: language_detection.mojom.LanguageDetectionService";
81 case CurrentProcessType::PROCESS_SERVICE_SHARING:
82 return "Service: sharing.mojom.Sharing";
83 case CurrentProcessType::PROCESS_SERVICE_MEDIAPARSER:
84 return "Service: chrome.mojom.MediaParserFactory";
85 case CurrentProcessType::PROCESS_SERVICE_QRCODEGENERATOR:
86 return "Service: qrcode_generator.mojom.QRCodeGeneratorService";
87 case CurrentProcessType::PROCESS_SERVICE_PROFILEIMPORT:
88 return "Service: chrome.mojom.ProfileImport";
89 case CurrentProcessType::PROCESS_SERVICE_IME:
90 return "Service: chromeos.ime.mojom.ImeService";
91 case CurrentProcessType::PROCESS_SERVICE_RECORDING:
92 return "Service: recording.mojom.RecordingService";
93 case CurrentProcessType::PROCESS_SERVICE_SHAPEDETECTION:
94 return "Service: shape_detection.mojom.ShapeDetectionService";
95 case CurrentProcessType::PROCESS_RENDERER_EXTENSION:
96 return "Extension Renderer";
97 }
Aman Vermaf5d639c32022-11-14 14:49:0498}
Aman Verma327f9b42022-11-08 12:44:4099
100} // namespace
101
Aman Vermae64a2feb2022-11-30 10:52:48102// Used for logging histograms for IPC metrics based on their process type.
103ShortProcessType CurrentProcess::GetShortType(TypeKey key) {
Etienne Pierre-doray2a39a4e32025-02-26 19:42:16104 CurrentProcessType process = process_type_.load(std::memory_order_relaxed);
Aman Vermae64a2feb2022-11-30 10:52:48105 switch (process) {
106 case CurrentProcessType::PROCESS_UNSPECIFIED:
107 return ShortProcessType::kUnspecified;
108 case CurrentProcessType::PROCESS_BROWSER:
109 return ShortProcessType::kBrowser;
110 case CurrentProcessType::PROCESS_RENDERER:
111 return ShortProcessType::kRenderer;
112 case CurrentProcessType::PROCESS_UTILITY:
113 return ShortProcessType::kUtility;
114 case CurrentProcessType::PROCESS_ZYGOTE:
115 return ShortProcessType::kZygote;
116 case CurrentProcessType::PROCESS_SANDBOX_HELPER:
117 return ShortProcessType::kSandboxHelper;
118 case CurrentProcessType::PROCESS_GPU:
119 return ShortProcessType::kGpu;
120 case CurrentProcessType::PROCESS_PPAPI_PLUGIN:
121 return ShortProcessType::kPpapiPlugin;
122 case CurrentProcessType::PROCESS_PPAPI_BROKER:
123 return ShortProcessType::kPpapiBroker;
124 case CurrentProcessType::PROCESS_SERVICE_NETWORK:
125 return ShortProcessType::kServiceNetwork;
126 case CurrentProcessType::PROCESS_SERVICE_STORAGE:
127 return ShortProcessType::kServiceStorage;
128 case CurrentProcessType::PROCESS_RENDERER_EXTENSION:
129 return ShortProcessType::kRendererExtension;
130 case CurrentProcessType::PROCESS_SERVICE_TRACING:
131 case CurrentProcessType::PROCESS_SERVICE_AUDIO:
132 case CurrentProcessType::PROCESS_SERVICE_DATA_DECODER:
133 case CurrentProcessType::PROCESS_SERVICE_UTIL_WIN:
134 case CurrentProcessType::PROCESS_SERVICE_PROXY_RESOLVER:
135 case CurrentProcessType::PROCESS_SERVICE_CDM:
Xiaohan Wang9029a9f82023-07-13 19:04:49136 case CurrentProcessType::PROCESS_SERVICE_MEDIA_FOUNDATION:
Aman Vermae64a2feb2022-11-30 10:52:48137 case CurrentProcessType::PROCESS_SERVICE_VIDEO_CAPTURE:
138 case CurrentProcessType::PROCESS_SERVICE_UNZIPPER:
139 case CurrentProcessType::PROCESS_SERVICE_MIRRORING:
140 case CurrentProcessType::PROCESS_SERVICE_FILEPATCHER:
141 case CurrentProcessType::PROCESS_SERVICE_TTS:
142 case CurrentProcessType::PROCESS_SERVICE_PRINTING:
143 case CurrentProcessType::PROCESS_SERVICE_QUARANTINE:
144 case CurrentProcessType::PROCESS_SERVICE_CROS_LOCALSEARCH:
145 case CurrentProcessType::PROCESS_SERVICE_CROS_ASSISTANT_AUDIO_DECODER:
146 case CurrentProcessType::PROCESS_SERVICE_FILEUTIL:
147 case CurrentProcessType::PROCESS_SERVICE_PRINTCOMPOSITOR:
148 case CurrentProcessType::PROCESS_SERVICE_PAINTPREVIEW:
149 case CurrentProcessType::PROCESS_SERVICE_SPEECHRECOGNITION:
150 case CurrentProcessType::PROCESS_SERVICE_XRDEVICE:
151 case CurrentProcessType::PROCESS_SERVICE_READICON:
152 case CurrentProcessType::PROCESS_SERVICE_LANGUAGEDETECTION:
153 case CurrentProcessType::PROCESS_SERVICE_SHARING:
154 case CurrentProcessType::PROCESS_SERVICE_MEDIAPARSER:
155 case CurrentProcessType::PROCESS_SERVICE_QRCODEGENERATOR:
156 case CurrentProcessType::PROCESS_SERVICE_PROFILEIMPORT:
157 case CurrentProcessType::PROCESS_SERVICE_IME:
158 case CurrentProcessType::PROCESS_SERVICE_RECORDING:
159 case CurrentProcessType::PROCESS_SERVICE_SHAPEDETECTION:
160 return ShortProcessType::kService;
161 }
Aman Vermae64a2feb2022-11-30 10:52:48162}
163
Aman Verma327f9b42022-11-08 12:44:40164// static
165CurrentProcess& CurrentProcess::GetInstance() {
166 static base::NoDestructor<CurrentProcess> instance;
167 return *instance;
168}
169
170void CurrentProcess::SetProcessType(CurrentProcessType process_type) {
Aman Vermaf5d639c32022-11-14 14:49:04171 std::string process_name = GetNameForProcessType(process_type);
Aman Verma327f9b42022-11-08 12:44:40172 CurrentProcess::GetInstance().SetProcessNameAndType(process_name,
173 process_type);
174}
175
176void CurrentProcess::SetProcessNameAndType(const std::string& process_name,
177 CurrentProcessType process_type) {
Etienne Pierre-doray2a39a4e32025-02-26 19:42:16178 Delegate* delegate;
Aman Verma327f9b42022-11-08 12:44:40179 {
180 AutoLock lock(lock_);
181 process_name_ = process_name;
Etienne Pierre-doray2a39a4e32025-02-26 19:42:16182 process_type_.store(process_type, std::memory_order_relaxed);
183 delegate = delegate_;
Aman Verma327f9b42022-11-08 12:44:40184 }
Etienne Pierre-doray2a39a4e32025-02-26 19:42:16185 if (delegate) {
186 delegate->OnProcessNameChanged(process_name, process_type);
187 }
188}
189
190void CurrentProcess::SetDelegate(Delegate* delegate, NameKey) {
191 AutoLock lock(lock_);
192 DCHECK(delegate == nullptr || delegate_ == nullptr);
193 delegate_ = delegate;
Aman Verma327f9b42022-11-08 12:44:40194}
195
196} // namespace base