[M120][Tizen][Onscreen] Fix build errors for TV profile
[platform/framework/web/chromium-efl.git] / chrome / browser / process_singleton_internal.cc
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 "chrome/browser/process_singleton_internal.h"
6
7 #include "base/metrics/histogram_macros.h"
8 #include "base/notreached.h"
9 #include "base/trace_event/base_tracing.h"
10 #include "base/tracing/protos/chrome_track_event.pbzero.h"
11 #include "build/build_config.h"
12
13 namespace internal {
14
15 namespace {
16
17 #define CASE(enum_value)             \
18   case ProcessSingleton::enum_value: \
19     return perfetto::protos::pbzero::ProcessSingleton::enum_value
20
21 perfetto::protos::pbzero::ProcessSingleton::RemoteProcessInteractionResult
22 ToProtoEnum(ProcessSingleton::RemoteProcessInteractionResult result) {
23   switch (result) {
24     CASE(TERMINATE_SUCCEEDED);
25     CASE(TERMINATE_FAILED);
26     CASE(REMOTE_PROCESS_NOT_FOUND);
27 #if BUILDFLAG(IS_WIN)
28     CASE(TERMINATE_WAIT_TIMEOUT);
29     CASE(RUNNING_PROCESS_NOTIFY_ERROR);
30 #elif BUILDFLAG(IS_POSIX)
31     CASE(TERMINATE_NOT_ENOUGH_PERMISSIONS);
32     CASE(REMOTE_PROCESS_SHUTTING_DOWN);
33     CASE(PROFILE_UNLOCKED);
34     CASE(PROFILE_UNLOCKED_BEFORE_KILL);
35     CASE(SAME_BROWSER_INSTANCE);
36     CASE(SAME_BROWSER_INSTANCE_BEFORE_KILL);
37     CASE(FAILED_TO_EXTRACT_PID);
38     CASE(INVALID_LOCK_FILE);
39     CASE(ORPHANED_LOCK_FILE);
40 #endif
41     CASE(USER_REFUSED_TERMINATION);
42     case ProcessSingleton::REMOTE_PROCESS_INTERACTION_RESULT_COUNT:
43       NOTREACHED();
44       return perfetto::protos::pbzero::ProcessSingleton::
45           INTERACTION_RESULT_UNSPECIFIED;
46   }
47 }
48
49 perfetto::protos::pbzero::ProcessSingleton::RemoteHungProcessTerminateReason
50 ToProtoEnum(ProcessSingleton::RemoteHungProcessTerminateReason reason) {
51   switch (reason) {
52 #if BUILDFLAG(IS_WIN)
53     CASE(USER_ACCEPTED_TERMINATION);
54     CASE(NO_VISIBLE_WINDOW_FOUND);
55 #elif BUILDFLAG(IS_POSIX)
56     CASE(NOTIFY_ATTEMPTS_EXCEEDED);
57     CASE(SOCKET_WRITE_FAILED);
58     CASE(SOCKET_READ_FAILED);
59 #endif
60     case ProcessSingleton::REMOTE_HUNG_PROCESS_TERMINATE_REASON_COUNT:
61       NOTREACHED();
62       return perfetto::protos::pbzero::ProcessSingleton::
63           TERMINATE_REASON_UNSPECIFIED;
64   }
65 }
66
67 }  // namespace
68
69 void SendRemoteProcessInteractionResultHistogram(
70     ProcessSingleton::RemoteProcessInteractionResult result) {
71   TRACE_EVENT_INSTANT(
72       "startup", "ProcessSingleton:SendRemoteProcessInteractionResultHistogram",
73       [&](perfetto::EventContext ctx) {
74         auto* event = ctx.event<perfetto::protos::pbzero::ChromeTrackEvent>();
75         auto* process_singleton = event->set_process_singleton();
76         process_singleton->set_remote_process_interaction_result(
77             ToProtoEnum(result));
78       });
79
80   UMA_HISTOGRAM_ENUMERATION(
81       "Chrome.ProcessSingleton.RemoteProcessInteractionResult", result,
82       ProcessSingleton::REMOTE_PROCESS_INTERACTION_RESULT_COUNT);
83 }
84
85 void SendRemoteHungProcessTerminateReasonHistogram(
86     ProcessSingleton::RemoteHungProcessTerminateReason reason) {
87   TRACE_EVENT_INSTANT(
88       "startup",
89       "ProcessSingleton:SendRemoteHungProcessTerminateReasonHistogram",
90       [&](perfetto::EventContext ctx) {
91         auto* event = ctx.event<perfetto::protos::pbzero::ChromeTrackEvent>();
92         auto* process_singleton = event->set_process_singleton();
93         process_singleton->set_remote_process_terminate_reason(
94             ToProtoEnum(reason));
95       });
96
97   UMA_HISTOGRAM_ENUMERATION(
98       "Chrome.ProcessSingleton.RemoteHungProcessTerminateReason", reason,
99       ProcessSingleton::REMOTE_HUNG_PROCESS_TERMINATE_REASON_COUNT);
100 }
101
102 }  // namespace internal