xref: /aosp_15_r20/external/perfetto/src/trace_redaction/populate_allow_lists.cc (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1 /*
2  * Copyright (C) 2024 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #include "src/trace_redaction/populate_allow_lists.h"
18 
19 #include "perfetto/base/status.h"
20 #include "src/trace_redaction/trace_redaction_framework.h"
21 
22 #include "protos/perfetto/trace/ftrace/ftrace_event.pbzero.h"
23 #include "protos/perfetto/trace/trace_packet.pbzero.h"
24 
25 namespace perfetto::trace_redaction {
26 
Build(Context * context) const27 base::Status PopulateAllowlists::Build(Context* context) const {
28   auto& packet_mask = context->packet_mask;
29 
30   // Top-level fields - fields outside of the "oneof data" field.
31   packet_mask.set(
32       protos::pbzero::TracePacket::kFirstPacketOnSequenceFieldNumber);
33   packet_mask.set(
34       protos::pbzero::TracePacket::kIncrementalStateClearedFieldNumber);
35   packet_mask.set(protos::pbzero::TracePacket::kInternedDataFieldNumber);
36   packet_mask.set(protos::pbzero::TracePacket::kMachineIdFieldNumber);
37   packet_mask.set(
38       protos::pbzero::TracePacket::kPreviousPacketDroppedFieldNumber);
39   packet_mask.set(protos::pbzero::TracePacket::kSequenceFlagsFieldNumber);
40   packet_mask.set(protos::pbzero::TracePacket::kTimestampClockIdFieldNumber);
41   packet_mask.set(protos::pbzero::TracePacket::kTimestampFieldNumber);
42   packet_mask.set(protos::pbzero::TracePacket::kTracePacketDefaultsFieldNumber);
43   packet_mask.set(
44       protos::pbzero::TracePacket::kTrustedPacketSequenceIdFieldNumber);
45   packet_mask.set(protos::pbzero::TracePacket::kTrustedPidFieldNumber);
46   packet_mask.set(protos::pbzero::TracePacket::kTrustedUidFieldNumber);
47 
48   // Trace packet data (one-of field) - Every field here should also be modified
49   // by message-focused transform.
50   packet_mask.set(protos::pbzero::TracePacket::kClockSnapshotFieldNumber);
51   packet_mask.set(protos::pbzero::TracePacket::kCpuInfoFieldNumber);
52   packet_mask.set(protos::pbzero::TracePacket::kFrameTimelineEventFieldNumber);
53   packet_mask.set(protos::pbzero::TracePacket::kFtraceEventsFieldNumber);
54   packet_mask.set(protos::pbzero::TracePacket::kInitialDisplayStateFieldNumber);
55   packet_mask.set(protos::pbzero::TracePacket::kPackagesListFieldNumber);
56   packet_mask.set(protos::pbzero::TracePacket::kProcessStatsFieldNumber);
57   packet_mask.set(protos::pbzero::TracePacket::kProcessTreeFieldNumber);
58   packet_mask.set(protos::pbzero::TracePacket::kServiceEventFieldNumber);
59   packet_mask.set(
60       protos::pbzero::TracePacket::kSynchronizationMarkerFieldNumber);
61   packet_mask.set(protos::pbzero::TracePacket::kSysStatsFieldNumber);
62   packet_mask.set(protos::pbzero::TracePacket::kSystemInfoFieldNumber);
63   packet_mask.set(protos::pbzero::TracePacket::kTraceConfigFieldNumber);
64   packet_mask.set(protos::pbzero::TracePacket::kTraceStatsFieldNumber);
65   packet_mask.set(protos::pbzero::TracePacket::kTriggerFieldNumber);
66 
67   // FTRACE EVENT NOTES
68   //
69   //    Dma events (kDmaHeapStatFieldNumber) are global events and are not
70   //    emitted within a process context (they are centrally allocated by the
71   //    HAL process). We drop them for now as we don't have the required
72   //    attribution info in the trace.
73   //
74   //    ION events (e.g. kIonBufferCreateFieldNumber, kIonHeapGrowFieldNumber,
75   //    etc.) are global events are not emitted within a process context (they
76   //    are centrally allocated by the HAL process). We drop them for now as we
77   //    don't have the required attribution info in the trace.
78   //
79   //    TODO(vaage): kSchedBlockedReasonFieldNumber contains two pids, an outer
80   //    and inner pid. A primitive is needed to further redact these events.
81 
82   auto& ftrace_masks = context->ftrace_mask;
83 
84   ftrace_masks.set(protos::pbzero::FtraceEvent::kCommonFlagsFieldNumber);
85   ftrace_masks.set(protos::pbzero::FtraceEvent::kCpuFrequencyFieldNumber);
86   ftrace_masks.set(protos::pbzero::FtraceEvent::kCpuIdleFieldNumber);
87   ftrace_masks.set(protos::pbzero::FtraceEvent::kPidFieldNumber);
88   ftrace_masks.set(protos::pbzero::FtraceEvent::kPrintFieldNumber);
89   ftrace_masks.set(protos::pbzero::FtraceEvent::kRssStatFieldNumber);
90   ftrace_masks.set(protos::pbzero::FtraceEvent::kRssStatThrottledFieldNumber);
91   ftrace_masks.set(protos::pbzero::FtraceEvent::kSchedBlockedReasonFieldNumber);
92   ftrace_masks.set(protos::pbzero::FtraceEvent::kSchedProcessFreeFieldNumber);
93   ftrace_masks.set(protos::pbzero::FtraceEvent::kSchedSwitchFieldNumber);
94   ftrace_masks.set(protos::pbzero::FtraceEvent::kSchedWakingFieldNumber);
95   ftrace_masks.set(protos::pbzero::FtraceEvent::kTaskNewtaskFieldNumber);
96   ftrace_masks.set(protos::pbzero::FtraceEvent::kTaskRenameFieldNumber);
97   ftrace_masks.set(protos::pbzero::FtraceEvent::kTimestampFieldNumber);
98 
99   return base::OkStatus();
100 }
101 
102 }  // namespace perfetto::trace_redaction
103