Skip to content

Commit 255fded

Browse files
committed
tp: Add support for interned job names in JobScheduler events
This change adds support for resolving interned JobScheduler job names in the Trace Processor. While job names are conceptually strings, they are emitted as interned IDs to optimize trace size and support PII filtering. Specifically: - Updated android_track_event.proto to include 'job_name_iid' (field 21). - Implemented a specialized parsing override in TrackEventParser to resolve these IIDs using the InternedData.android_job_name table. - Updated generated C headers for the new field. This ensures that JobScheduler traces correctly display the full job name instead of a raw integer ID.
1 parent 02916a1 commit 255fded

File tree

3 files changed

+124
-74
lines changed

3 files changed

+124
-74
lines changed

include/perfetto/public/protos/trace/android/android_track_event.pzc.h

Lines changed: 102 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,9 @@ PERFETTO_PB_MSG_DECL(
4141
perfetto_protos_AndroidSurfaceFlingerWorkload_Summary_Timings_Skia);
4242

4343
PERFETTO_PB_ENUM(perfetto_protos_ReceiverType){
44-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_UNKNOWN) = 0,
45-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_RUNTIME) = 1,
46-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_MANIFEST) = 2,
44+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_RECEIVER_TYPE_UNKNOWN) = 0,
45+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_RECEIVER_TYPE_RUNTIME) = 1,
46+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_RECEIVER_TYPE_MANIFEST) = 2,
4747
};
4848

4949
PERFETTO_PB_ENUM(perfetto_protos_ProcessStartType){
@@ -124,95 +124,120 @@ PERFETTO_PB_ENUM(perfetto_protos_ProcessCapabilityEnum){
124124
};
125125

126126
PERFETTO_PB_ENUM(perfetto_protos_AppExitReasonCode){
127-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_REASON_UNKNOWN) = 0,
128-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_REASON_EXIT_SELF) = 1,
129-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_REASON_SIGNALED) = 2,
130-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_REASON_LOW_MEMORY) = 3,
131-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_REASON_CRASH) = 4,
132-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_REASON_CRASH_NATIVE) = 5,
133-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_REASON_ANR) = 6,
134-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_REASON_INITIALIZATION_FAILURE) = 7,
135-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_REASON_PERMISSION_CHANGE) = 8,
136-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_REASON_EXCESSIVE_RESOURCE_USAGE) = 9,
137-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_REASON_USER_REQUESTED) = 10,
138-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_REASON_USER_STOPPED) = 11,
139-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_REASON_DEPENDENCY_DIED) = 12,
140-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_REASON_OTHER) = 13,
141-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_REASON_FREEZER) = 14,
142-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_REASON_PACKAGE_STATE_CHANGE) = 15,
143-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_REASON_PACKAGE_UPDATED) = 16,
127+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_REASON_UNKNOWN) = 0,
128+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_REASON_EXIT_SELF) = 1,
129+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_REASON_SIGNALED) = 2,
130+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_REASON_LOW_MEMORY) = 3,
131+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_REASON_CRASH) = 4,
132+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_REASON_CRASH_NATIVE) = 5,
133+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_REASON_ANR) = 6,
134+
PERFETTO_PB_ENUM_ENTRY(
135+
perfetto_protos_APP_EXIT_REASON_INITIALIZATION_FAILURE) = 7,
136+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_REASON_PERMISSION_CHANGE) =
137+
8,
138+
PERFETTO_PB_ENUM_ENTRY(
139+
perfetto_protos_APP_EXIT_REASON_EXCESSIVE_RESOURCE_USAGE) = 9,
140+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_REASON_USER_REQUESTED) = 10,
141+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_REASON_USER_STOPPED) = 11,
142+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_REASON_DEPENDENCY_DIED) =
143+
12,
144+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_REASON_OTHER) = 13,
145+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_REASON_FREEZER) = 14,
146+
PERFETTO_PB_ENUM_ENTRY(
147+
perfetto_protos_APP_EXIT_REASON_PACKAGE_STATE_CHANGE) = 15,
148+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_REASON_PACKAGE_UPDATED) =
149+
16,
144150
};
145151

146152
PERFETTO_PB_ENUM(perfetto_protos_AppExitSubReasonCode){
147-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_UNKNOWN) = 0,
148-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_WAIT_FOR_DEBUGGER) = 1,
149-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_TOO_MANY_CACHED) = 2,
150-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_TOO_MANY_EMPTY) = 3,
151-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_TRIM_EMPTY) = 4,
152-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_LARGE_CACHED) = 5,
153-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_MEMORY_PRESSURE) = 6,
154-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_EXCESSIVE_CPU) = 7,
155-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_SYSTEM_UPDATE_DONE) = 8,
156-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_KILL_ALL_FG) = 9,
157-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_KILL_ALL_BG_EXCEPT) = 10,
158-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_KILL_UID) = 11,
159-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_KILL_PID) = 12,
160-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_INVALID_START) = 13,
161-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_INVALID_STATE) = 14,
162-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_IMPERCEPTIBLE) = 15,
163-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_REMOVE_LRU) = 16,
164-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_ISOLATED_NOT_NEEDED) = 17,
165-
PERFETTO_PB_ENUM_ENTRY(
166-
perfetto_protos_SUBREASON_CACHED_IDLE_FORCED_APP_STANDBY) = 18,
167-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_FREEZER_BINDER_IOCTL) = 19,
168-
PERFETTO_PB_ENUM_ENTRY(
169-
perfetto_protos_SUBREASON_FREEZER_BINDER_TRANSACTION) = 20,
170-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_FORCE_STOP) = 21,
171-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_REMOVE_TASK) = 22,
172-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_STOP_APP) = 23,
173-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_KILL_BACKGROUND) = 24,
174-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_PACKAGE_UPDATE) = 25,
175-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_UNDELIVERED_BROADCAST) =
176-
26,
177-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_SDK_SANDBOX_DIED) = 27,
178-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_SDK_SANDBOX_NOT_NEEDED) =
179-
28,
180-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_EXCESSIVE_BINDER_OBJECTS) =
181-
29,
182-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_OOM_KILL) = 30,
183-
PERFETTO_PB_ENUM_ENTRY(
184-
perfetto_protos_SUBREASON_FREEZER_BINDER_ASYNC_FULL) = 31,
185-
PERFETTO_PB_ENUM_ENTRY(
186-
perfetto_protos_SUBREASON_EXCESSIVE_OUTGOING_BROADCASTS_WHILE_CACHED) =
153+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_UNKNOWN) = 0,
154+
PERFETTO_PB_ENUM_ENTRY(
155+
perfetto_protos_APP_EXIT_SUBREASON_WAIT_FOR_DEBUGGER) = 1,
156+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_TOO_MANY_CACHED) =
157+
2,
158+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_TOO_MANY_EMPTY) =
159+
3,
160+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_TRIM_EMPTY) = 4,
161+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_LARGE_CACHED) = 5,
162+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_MEMORY_PRESSURE) =
163+
6,
164+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_EXCESSIVE_CPU) =
165+
7,
166+
PERFETTO_PB_ENUM_ENTRY(
167+
perfetto_protos_APP_EXIT_SUBREASON_SYSTEM_UPDATE_DONE) = 8,
168+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_KILL_ALL_FG) = 9,
169+
PERFETTO_PB_ENUM_ENTRY(
170+
perfetto_protos_APP_EXIT_SUBREASON_KILL_ALL_BG_EXCEPT) = 10,
171+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_KILL_UID) = 11,
172+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_KILL_PID) = 12,
173+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_INVALID_START) =
174+
13,
175+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_INVALID_STATE) =
176+
14,
177+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_IMPERCEPTIBLE) =
178+
15,
179+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_REMOVE_LRU) = 16,
180+
PERFETTO_PB_ENUM_ENTRY(
181+
perfetto_protos_APP_EXIT_SUBREASON_ISOLATED_NOT_NEEDED) = 17,
182+
PERFETTO_PB_ENUM_ENTRY(
183+
perfetto_protos_APP_EXIT_SUBREASON_CACHED_IDLE_FORCED_APP_STANDBY) = 18,
184+
PERFETTO_PB_ENUM_ENTRY(
185+
perfetto_protos_APP_EXIT_SUBREASON_FREEZER_BINDER_IOCTL) = 19,
186+
PERFETTO_PB_ENUM_ENTRY(
187+
perfetto_protos_APP_EXIT_SUBREASON_FREEZER_BINDER_TRANSACTION) = 20,
188+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_FORCE_STOP) = 21,
189+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_REMOVE_TASK) = 22,
190+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_STOP_APP) = 23,
191+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_KILL_BACKGROUND) =
192+
24,
193+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_PACKAGE_UPDATE) =
194+
25,
195+
PERFETTO_PB_ENUM_ENTRY(
196+
perfetto_protos_APP_EXIT_SUBREASON_UNDELIVERED_BROADCAST) = 26,
197+
PERFETTO_PB_ENUM_ENTRY(
198+
perfetto_protos_APP_EXIT_SUBREASON_SDK_SANDBOX_DIED) = 27,
199+
PERFETTO_PB_ENUM_ENTRY(
200+
perfetto_protos_APP_EXIT_SUBREASON_SDK_SANDBOX_NOT_NEEDED) = 28,
201+
PERFETTO_PB_ENUM_ENTRY(
202+
perfetto_protos_APP_EXIT_SUBREASON_EXCESSIVE_BINDER_OBJECTS) = 29,
203+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_OOM_KILL) = 30,
204+
PERFETTO_PB_ENUM_ENTRY(
205+
perfetto_protos_APP_EXIT_SUBREASON_FREEZER_BINDER_ASYNC_FULL) = 31,
206+
PERFETTO_PB_ENUM_ENTRY(
207+
perfetto_protos_APP_EXIT_SUBREASON_EXCESSIVE_OUTGOING_BROADCASTS_WHILE_CACHED) =
187208
32,
188-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_ANR_TYPE_APP_TRIGGERED) =
189-
33,
190209
PERFETTO_PB_ENUM_ENTRY(
191-
perfetto_protos_SUBREASON_ANR_TYPE_BIND_APPLICATION) = 34,
210+
perfetto_protos_APP_EXIT_SUBREASON_ANR_TYPE_APP_TRIGGERED) = 33,
211+
PERFETTO_PB_ENUM_ENTRY(
212+
perfetto_protos_APP_EXIT_SUBREASON_ANR_TYPE_BIND_APPLICATION) = 34,
192213
PERFETTO_PB_ENUM_ENTRY(
193-
perfetto_protos_SUBREASON_ANR_TYPE_BROADCAST_OF_INTENT) = 35,
214+
perfetto_protos_APP_EXIT_SUBREASON_ANR_TYPE_BROADCAST_OF_INTENT) = 35,
194215
PERFETTO_PB_ENUM_ENTRY(
195-
perfetto_protos_SUBREASON_ANR_TYPE_CONTENT_PROVIDER_NOT_RESPONDING) =
216+
perfetto_protos_APP_EXIT_SUBREASON_ANR_TYPE_CONTENT_PROVIDER_NOT_RESPONDING) =
196217
36,
197218
PERFETTO_PB_ENUM_ENTRY(
198-
perfetto_protos_SUBREASON_ANR_TYPE_EXECUTING_SERVICE) = 37,
219+
perfetto_protos_APP_EXIT_SUBREASON_ANR_TYPE_EXECUTING_SERVICE) = 37,
199220
PERFETTO_PB_ENUM_ENTRY(
200-
perfetto_protos_SUBREASON_ANR_TYPE_FOREGROUND_SHORT_SERVICE_TIMEOUT) =
221+
perfetto_protos_APP_EXIT_SUBREASON_ANR_TYPE_FOREGROUND_SHORT_SERVICE_TIMEOUT) =
201222
39,
202223
PERFETTO_PB_ENUM_ENTRY(
203-
perfetto_protos_SUBREASON_ANR_TYPE_INPUT_DISPATCHING_TIMEOUT) = 41,
224+
perfetto_protos_APP_EXIT_SUBREASON_ANR_TYPE_INPUT_DISPATCHING_TIMEOUT) =
225+
41,
204226
PERFETTO_PB_ENUM_ENTRY(
205-
perfetto_protos_SUBREASON_ANR_TYPE_INPUT_DISPATCHING_TIMEOUT_NO_FOCUSED_WINDOW) =
227+
perfetto_protos_APP_EXIT_SUBREASON_ANR_TYPE_INPUT_DISPATCHING_TIMEOUT_NO_FOCUSED_WINDOW) =
206228
42,
207229
PERFETTO_PB_ENUM_ENTRY(
208-
perfetto_protos_SUBREASON_ANR_TYPE_JOB_SERVICE_START) = 45,
230+
perfetto_protos_APP_EXIT_SUBREASON_ANR_TYPE_JOB_SERVICE_START) = 45,
209231
PERFETTO_PB_ENUM_ENTRY(
210-
perfetto_protos_SUBREASON_ANR_TYPE_START_FOREGROUND_SERVICE) = 47,
232+
perfetto_protos_APP_EXIT_SUBREASON_ANR_TYPE_START_FOREGROUND_SERVICE) =
233+
47,
211234
PERFETTO_PB_ENUM_ENTRY(
212-
perfetto_protos_SUBREASON_EXCESSIVE_ENQUEUED_BROADCASTS_COUNT) = 49,
235+
perfetto_protos_APP_EXIT_SUBREASON_EXCESSIVE_ENQUEUED_BROADCASTS_COUNT) =
236+
49,
213237
};
214238

215239
PERFETTO_PB_ENUM(perfetto_protos_Importance){
240+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_IMPORTANCE_UNKNOWN) = 0,
216241
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_IMPORTANCE_FOREGROUND) = 100,
217242
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_IMPORTANCE_FOREGROUND_SERVICE) = 125,
218243
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_IMPORTANCE_TOP_SLEEPING_PRE_28) =
@@ -316,8 +341,6 @@ PERFETTO_PB_ENUM(perfetto_protos_TriggerType){
316341
};
317342

318343
PERFETTO_PB_ENUM(perfetto_protos_OomChangeReasonEnum){
319-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_OOM_ADJ_REASON_UNKNOWN_TO_PROTO) =
320-
-1,
321344
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_OOM_ADJ_REASON_NONE) = 0,
322345
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_OOM_ADJ_REASON_ACTIVITY) = 1,
323346
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_OOM_ADJ_REASON_FINISH_RECEIVER) = 2,
@@ -897,6 +920,11 @@ PERFETTO_PB_FIELD(perfetto_protos_AndroidJobSchedulerJob,
897920
int64_t,
898921
job_state_flags,
899922
20);
923+
PERFETTO_PB_FIELD(perfetto_protos_AndroidJobSchedulerJob,
924+
VARINT,
925+
uint64_t,
926+
job_name_iid,
927+
21);
900928

901929
PERFETTO_PB_MSG(perfetto_protos_AndroidMessageQueue);
902930
PERFETTO_PB_FIELD(perfetto_protos_AndroidMessageQueue,

protos/perfetto/trace/android/android_track_event.proto

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,8 @@ message AndroidJobSchedulerJob {
115115
optional int32 public_stop_reason = 19;
116116
// Bitfield of boolean states of the job.
117117
optional int64 job_state_flags = 20;
118+
// Interned Job name.
119+
optional uint64 job_name_iid = 21;
118120
}
119121

120122
// Information about an android.graphics.Bitmap.

src/trace_processor/importers/proto/track_event_parser.cc

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,20 @@ std::optional<base::Status> MaybeParseSourceLocation(
115115
return base::OkStatus();
116116
}
117117

118+
std::optional<base::Status> MaybeParseAndroidJobName(
119+
const protozero::Field& field,
120+
util::ProtoToArgsParser::Delegate& delegate) {
121+
auto* decoder = delegate.GetInternedMessage(
122+
protos::pbzero::InternedData::kAndroidJobName, field.as_uint64());
123+
if (!decoder) {
124+
return std::nullopt;
125+
}
126+
127+
delegate.AddString(util::ProtoToArgsParser::Key("job_scheduler_job.job_name"),
128+
decoder->name());
129+
return base::OkStatus();
130+
}
131+
118132
} // namespace
119133

120134
TrackEventParser::TrackEventParser(TraceProcessorContext* context,
@@ -253,6 +267,12 @@ TrackEventParser::TrackEventParser(TraceProcessorContext* context,
253267
return MaybeParseSourceLocation("chrome_memory_pressure_notification",
254268
field, delegate);
255269
});
270+
args_parser_.AddParsingOverrideForField(
271+
"job_scheduler_job.job_name_iid",
272+
[](const protozero::Field& field,
273+
util::ProtoToArgsParser::Delegate& delegate) {
274+
return MaybeParseAndroidJobName(field, delegate);
275+
});
256276

257277
// Parse DebugAnnotations.
258278
args_parser_.AddParsingOverrideForType(

0 commit comments

Comments
 (0)