1#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
8use futures::future::{self, MaybeDone, TryFutureExt};
9use zx_status;
10
11pub const BUILD_ID_BYTES: u32 = 20;
13
14#[derive(Clone, Debug, Default, PartialEq)]
16pub struct ExecutableSegment {
17 pub start_address: Option<u64>,
19 pub size: Option<u64>,
21 pub relative_address: Option<u64>,
23 #[doc(hidden)]
24 pub __source_breaking: fidl::marker::SourceBreaking,
25}
26
27impl fidl::Persistable for ExecutableSegment {}
28
29#[derive(Clone, Debug, Default, PartialEq)]
33pub struct ModuleMap {
34 pub build_id: Option<Vec<u8>>,
36 pub executable_segments: Option<Vec<ExecutableSegment>>,
38 #[doc(hidden)]
39 pub __source_breaking: fidl::marker::SourceBreaking,
40}
41
42impl fidl::Persistable for ModuleMap {}
43
44#[derive(Clone, Debug, Default, PartialEq)]
45pub struct RecordAllocationEvent {
46 pub address: Option<u64>,
48 pub stack_trace: Option<StackTrace>,
50 pub size: Option<u64>,
52 pub sampling_interval_bytes: Option<u64>,
54 #[doc(hidden)]
55 pub __source_breaking: fidl::marker::SourceBreaking,
56}
57
58impl fidl::Persistable for RecordAllocationEvent {}
59
60#[derive(Clone, Debug, Default, PartialEq)]
61pub struct RecordDeallocationEvent {
62 pub address: Option<u64>,
64 pub stack_trace: Option<StackTrace>,
66 #[doc(hidden)]
67 pub __source_breaking: fidl::marker::SourceBreaking,
68}
69
70impl fidl::Persistable for RecordDeallocationEvent {}
71
72#[derive(Clone, Debug, Default, PartialEq)]
73pub struct SamplerSetProcessInfoRequest {
74 pub process_name: Option<String>,
75 pub module_map: Option<Vec<ModuleMap>>,
76 #[doc(hidden)]
77 pub __source_breaking: fidl::marker::SourceBreaking,
78}
79
80impl fidl::Persistable for SamplerSetProcessInfoRequest {}
81
82#[derive(Clone, Debug, Default, PartialEq)]
84pub struct StackTrace {
85 pub stack_frames: Option<Vec<u64>>,
87 #[doc(hidden)]
88 pub __source_breaking: fidl::marker::SourceBreaking,
89}
90
91impl fidl::Persistable for StackTrace {}
92
93#[derive(Clone, Debug)]
94pub enum SamplerDatagram {
95 RecordAllocation(RecordAllocationEvent),
96 RecordDeallocation(RecordDeallocationEvent),
97 #[doc(hidden)]
98 __SourceBreaking {
99 unknown_ordinal: u64,
100 },
101}
102
103#[macro_export]
105macro_rules! SamplerDatagramUnknown {
106 () => {
107 _
108 };
109}
110
111impl PartialEq for SamplerDatagram {
113 fn eq(&self, other: &Self) -> bool {
114 match (self, other) {
115 (Self::RecordAllocation(x), Self::RecordAllocation(y)) => *x == *y,
116 (Self::RecordDeallocation(x), Self::RecordDeallocation(y)) => *x == *y,
117 _ => false,
118 }
119 }
120}
121
122impl SamplerDatagram {
123 #[inline]
124 pub fn ordinal(&self) -> u64 {
125 match *self {
126 Self::RecordAllocation(_) => 1,
127 Self::RecordDeallocation(_) => 2,
128 Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
129 }
130 }
131
132 #[inline]
133 pub fn unknown_variant_for_testing() -> Self {
134 Self::__SourceBreaking { unknown_ordinal: 0 }
135 }
136
137 #[inline]
138 pub fn is_unknown(&self) -> bool {
139 match self {
140 Self::__SourceBreaking { .. } => true,
141 _ => false,
142 }
143 }
144}
145
146impl fidl::Persistable for SamplerDatagram {}
147
148pub mod sampler_ordinals {
149 pub const RECORD_ALLOCATION: u64 = 0x6b0add9f7769824d;
150 pub const RECORD_DEALLOCATION: u64 = 0x503bff5ec34dbeeb;
151 pub const SET_PROCESS_INFO: u64 = 0x68a0557106e51783;
152 pub const SET_SHARED_SOCKET: u64 = 0x32e9c11b7a2958fd;
153}
154
155mod internal {
156 use super::*;
157
158 impl ExecutableSegment {
159 #[inline(always)]
160 fn max_ordinal_present(&self) -> u64 {
161 if let Some(_) = self.relative_address {
162 return 3;
163 }
164 if let Some(_) = self.size {
165 return 2;
166 }
167 if let Some(_) = self.start_address {
168 return 1;
169 }
170 0
171 }
172 }
173
174 impl fidl::encoding::ValueTypeMarker for ExecutableSegment {
175 type Borrowed<'a> = &'a Self;
176 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
177 value
178 }
179 }
180
181 unsafe impl fidl::encoding::TypeMarker for ExecutableSegment {
182 type Owned = Self;
183
184 #[inline(always)]
185 fn inline_align(_context: fidl::encoding::Context) -> usize {
186 8
187 }
188
189 #[inline(always)]
190 fn inline_size(_context: fidl::encoding::Context) -> usize {
191 16
192 }
193 }
194
195 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ExecutableSegment, D>
196 for &ExecutableSegment
197 {
198 unsafe fn encode(
199 self,
200 encoder: &mut fidl::encoding::Encoder<'_, D>,
201 offset: usize,
202 mut depth: fidl::encoding::Depth,
203 ) -> fidl::Result<()> {
204 encoder.debug_check_bounds::<ExecutableSegment>(offset);
205 let max_ordinal: u64 = self.max_ordinal_present();
207 encoder.write_num(max_ordinal, offset);
208 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
209 if max_ordinal == 0 {
211 return Ok(());
212 }
213 depth.increment()?;
214 let envelope_size = 8;
215 let bytes_len = max_ordinal as usize * envelope_size;
216 #[allow(unused_variables)]
217 let offset = encoder.out_of_line_offset(bytes_len);
218 let mut _prev_end_offset: usize = 0;
219 if 1 > max_ordinal {
220 return Ok(());
221 }
222
223 let cur_offset: usize = (1 - 1) * envelope_size;
226
227 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
229
230 fidl::encoding::encode_in_envelope_optional::<u64, D>(
235 self.start_address.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
236 encoder,
237 offset + cur_offset,
238 depth,
239 )?;
240
241 _prev_end_offset = cur_offset + envelope_size;
242 if 2 > max_ordinal {
243 return Ok(());
244 }
245
246 let cur_offset: usize = (2 - 1) * envelope_size;
249
250 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
252
253 fidl::encoding::encode_in_envelope_optional::<u64, D>(
258 self.size.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
259 encoder,
260 offset + cur_offset,
261 depth,
262 )?;
263
264 _prev_end_offset = cur_offset + envelope_size;
265 if 3 > max_ordinal {
266 return Ok(());
267 }
268
269 let cur_offset: usize = (3 - 1) * envelope_size;
272
273 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
275
276 fidl::encoding::encode_in_envelope_optional::<u64, D>(
281 self.relative_address
282 .as_ref()
283 .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
284 encoder,
285 offset + cur_offset,
286 depth,
287 )?;
288
289 _prev_end_offset = cur_offset + envelope_size;
290
291 Ok(())
292 }
293 }
294
295 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ExecutableSegment {
296 #[inline(always)]
297 fn new_empty() -> Self {
298 Self::default()
299 }
300
301 unsafe fn decode(
302 &mut self,
303 decoder: &mut fidl::encoding::Decoder<'_, D>,
304 offset: usize,
305 mut depth: fidl::encoding::Depth,
306 ) -> fidl::Result<()> {
307 decoder.debug_check_bounds::<Self>(offset);
308 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
309 None => return Err(fidl::Error::NotNullable),
310 Some(len) => len,
311 };
312 if len == 0 {
314 return Ok(());
315 };
316 depth.increment()?;
317 let envelope_size = 8;
318 let bytes_len = len * envelope_size;
319 let offset = decoder.out_of_line_offset(bytes_len)?;
320 let mut _next_ordinal_to_read = 0;
322 let mut next_offset = offset;
323 let end_offset = offset + bytes_len;
324 _next_ordinal_to_read += 1;
325 if next_offset >= end_offset {
326 return Ok(());
327 }
328
329 while _next_ordinal_to_read < 1 {
331 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
332 _next_ordinal_to_read += 1;
333 next_offset += envelope_size;
334 }
335
336 let next_out_of_line = decoder.next_out_of_line();
337 let handles_before = decoder.remaining_handles();
338 if let Some((inlined, num_bytes, num_handles)) =
339 fidl::encoding::decode_envelope_header(decoder, next_offset)?
340 {
341 let member_inline_size =
342 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
343 if inlined != (member_inline_size <= 4) {
344 return Err(fidl::Error::InvalidInlineBitInEnvelope);
345 }
346 let inner_offset;
347 let mut inner_depth = depth.clone();
348 if inlined {
349 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
350 inner_offset = next_offset;
351 } else {
352 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
353 inner_depth.increment()?;
354 }
355 let val_ref = self.start_address.get_or_insert_with(|| fidl::new_empty!(u64, D));
356 fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
357 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
358 {
359 return Err(fidl::Error::InvalidNumBytesInEnvelope);
360 }
361 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
362 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
363 }
364 }
365
366 next_offset += envelope_size;
367 _next_ordinal_to_read += 1;
368 if next_offset >= end_offset {
369 return Ok(());
370 }
371
372 while _next_ordinal_to_read < 2 {
374 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
375 _next_ordinal_to_read += 1;
376 next_offset += envelope_size;
377 }
378
379 let next_out_of_line = decoder.next_out_of_line();
380 let handles_before = decoder.remaining_handles();
381 if let Some((inlined, num_bytes, num_handles)) =
382 fidl::encoding::decode_envelope_header(decoder, next_offset)?
383 {
384 let member_inline_size =
385 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
386 if inlined != (member_inline_size <= 4) {
387 return Err(fidl::Error::InvalidInlineBitInEnvelope);
388 }
389 let inner_offset;
390 let mut inner_depth = depth.clone();
391 if inlined {
392 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
393 inner_offset = next_offset;
394 } else {
395 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
396 inner_depth.increment()?;
397 }
398 let val_ref = self.size.get_or_insert_with(|| fidl::new_empty!(u64, D));
399 fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
400 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
401 {
402 return Err(fidl::Error::InvalidNumBytesInEnvelope);
403 }
404 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
405 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
406 }
407 }
408
409 next_offset += envelope_size;
410 _next_ordinal_to_read += 1;
411 if next_offset >= end_offset {
412 return Ok(());
413 }
414
415 while _next_ordinal_to_read < 3 {
417 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
418 _next_ordinal_to_read += 1;
419 next_offset += envelope_size;
420 }
421
422 let next_out_of_line = decoder.next_out_of_line();
423 let handles_before = decoder.remaining_handles();
424 if let Some((inlined, num_bytes, num_handles)) =
425 fidl::encoding::decode_envelope_header(decoder, next_offset)?
426 {
427 let member_inline_size =
428 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
429 if inlined != (member_inline_size <= 4) {
430 return Err(fidl::Error::InvalidInlineBitInEnvelope);
431 }
432 let inner_offset;
433 let mut inner_depth = depth.clone();
434 if inlined {
435 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
436 inner_offset = next_offset;
437 } else {
438 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
439 inner_depth.increment()?;
440 }
441 let val_ref = self.relative_address.get_or_insert_with(|| fidl::new_empty!(u64, D));
442 fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
443 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
444 {
445 return Err(fidl::Error::InvalidNumBytesInEnvelope);
446 }
447 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
448 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
449 }
450 }
451
452 next_offset += envelope_size;
453
454 while next_offset < end_offset {
456 _next_ordinal_to_read += 1;
457 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
458 next_offset += envelope_size;
459 }
460
461 Ok(())
462 }
463 }
464
465 impl ModuleMap {
466 #[inline(always)]
467 fn max_ordinal_present(&self) -> u64 {
468 if let Some(_) = self.executable_segments {
469 return 2;
470 }
471 if let Some(_) = self.build_id {
472 return 1;
473 }
474 0
475 }
476 }
477
478 impl fidl::encoding::ValueTypeMarker for ModuleMap {
479 type Borrowed<'a> = &'a Self;
480 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
481 value
482 }
483 }
484
485 unsafe impl fidl::encoding::TypeMarker for ModuleMap {
486 type Owned = Self;
487
488 #[inline(always)]
489 fn inline_align(_context: fidl::encoding::Context) -> usize {
490 8
491 }
492
493 #[inline(always)]
494 fn inline_size(_context: fidl::encoding::Context) -> usize {
495 16
496 }
497 }
498
499 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ModuleMap, D>
500 for &ModuleMap
501 {
502 unsafe fn encode(
503 self,
504 encoder: &mut fidl::encoding::Encoder<'_, D>,
505 offset: usize,
506 mut depth: fidl::encoding::Depth,
507 ) -> fidl::Result<()> {
508 encoder.debug_check_bounds::<ModuleMap>(offset);
509 let max_ordinal: u64 = self.max_ordinal_present();
511 encoder.write_num(max_ordinal, offset);
512 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
513 if max_ordinal == 0 {
515 return Ok(());
516 }
517 depth.increment()?;
518 let envelope_size = 8;
519 let bytes_len = max_ordinal as usize * envelope_size;
520 #[allow(unused_variables)]
521 let offset = encoder.out_of_line_offset(bytes_len);
522 let mut _prev_end_offset: usize = 0;
523 if 1 > max_ordinal {
524 return Ok(());
525 }
526
527 let cur_offset: usize = (1 - 1) * envelope_size;
530
531 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
533
534 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 20>, D>(
539 self.build_id.as_ref().map(
540 <fidl::encoding::Vector<u8, 20> as fidl::encoding::ValueTypeMarker>::borrow,
541 ),
542 encoder,
543 offset + cur_offset,
544 depth,
545 )?;
546
547 _prev_end_offset = cur_offset + envelope_size;
548 if 2 > max_ordinal {
549 return Ok(());
550 }
551
552 let cur_offset: usize = (2 - 1) * envelope_size;
555
556 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
558
559 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<ExecutableSegment>, D>(
564 self.executable_segments.as_ref().map(<fidl::encoding::UnboundedVector<ExecutableSegment> as fidl::encoding::ValueTypeMarker>::borrow),
565 encoder, offset + cur_offset, depth
566 )?;
567
568 _prev_end_offset = cur_offset + envelope_size;
569
570 Ok(())
571 }
572 }
573
574 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ModuleMap {
575 #[inline(always)]
576 fn new_empty() -> Self {
577 Self::default()
578 }
579
580 unsafe fn decode(
581 &mut self,
582 decoder: &mut fidl::encoding::Decoder<'_, D>,
583 offset: usize,
584 mut depth: fidl::encoding::Depth,
585 ) -> fidl::Result<()> {
586 decoder.debug_check_bounds::<Self>(offset);
587 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
588 None => return Err(fidl::Error::NotNullable),
589 Some(len) => len,
590 };
591 if len == 0 {
593 return Ok(());
594 };
595 depth.increment()?;
596 let envelope_size = 8;
597 let bytes_len = len * envelope_size;
598 let offset = decoder.out_of_line_offset(bytes_len)?;
599 let mut _next_ordinal_to_read = 0;
601 let mut next_offset = offset;
602 let end_offset = offset + bytes_len;
603 _next_ordinal_to_read += 1;
604 if next_offset >= end_offset {
605 return Ok(());
606 }
607
608 while _next_ordinal_to_read < 1 {
610 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
611 _next_ordinal_to_read += 1;
612 next_offset += envelope_size;
613 }
614
615 let next_out_of_line = decoder.next_out_of_line();
616 let handles_before = decoder.remaining_handles();
617 if let Some((inlined, num_bytes, num_handles)) =
618 fidl::encoding::decode_envelope_header(decoder, next_offset)?
619 {
620 let member_inline_size =
621 <fidl::encoding::Vector<u8, 20> as fidl::encoding::TypeMarker>::inline_size(
622 decoder.context,
623 );
624 if inlined != (member_inline_size <= 4) {
625 return Err(fidl::Error::InvalidInlineBitInEnvelope);
626 }
627 let inner_offset;
628 let mut inner_depth = depth.clone();
629 if inlined {
630 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
631 inner_offset = next_offset;
632 } else {
633 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
634 inner_depth.increment()?;
635 }
636 let val_ref = self
637 .build_id
638 .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 20>, D));
639 fidl::decode!(fidl::encoding::Vector<u8, 20>, D, val_ref, decoder, inner_offset, inner_depth)?;
640 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
641 {
642 return Err(fidl::Error::InvalidNumBytesInEnvelope);
643 }
644 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
645 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
646 }
647 }
648
649 next_offset += envelope_size;
650 _next_ordinal_to_read += 1;
651 if next_offset >= end_offset {
652 return Ok(());
653 }
654
655 while _next_ordinal_to_read < 2 {
657 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
658 _next_ordinal_to_read += 1;
659 next_offset += envelope_size;
660 }
661
662 let next_out_of_line = decoder.next_out_of_line();
663 let handles_before = decoder.remaining_handles();
664 if let Some((inlined, num_bytes, num_handles)) =
665 fidl::encoding::decode_envelope_header(decoder, next_offset)?
666 {
667 let member_inline_size = <fidl::encoding::UnboundedVector<ExecutableSegment> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
668 if inlined != (member_inline_size <= 4) {
669 return Err(fidl::Error::InvalidInlineBitInEnvelope);
670 }
671 let inner_offset;
672 let mut inner_depth = depth.clone();
673 if inlined {
674 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
675 inner_offset = next_offset;
676 } else {
677 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
678 inner_depth.increment()?;
679 }
680 let val_ref = self.executable_segments.get_or_insert_with(|| {
681 fidl::new_empty!(fidl::encoding::UnboundedVector<ExecutableSegment>, D)
682 });
683 fidl::decode!(
684 fidl::encoding::UnboundedVector<ExecutableSegment>,
685 D,
686 val_ref,
687 decoder,
688 inner_offset,
689 inner_depth
690 )?;
691 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
692 {
693 return Err(fidl::Error::InvalidNumBytesInEnvelope);
694 }
695 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
696 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
697 }
698 }
699
700 next_offset += envelope_size;
701
702 while next_offset < end_offset {
704 _next_ordinal_to_read += 1;
705 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
706 next_offset += envelope_size;
707 }
708
709 Ok(())
710 }
711 }
712
713 impl RecordAllocationEvent {
714 #[inline(always)]
715 fn max_ordinal_present(&self) -> u64 {
716 if let Some(_) = self.sampling_interval_bytes {
717 return 4;
718 }
719 if let Some(_) = self.size {
720 return 3;
721 }
722 if let Some(_) = self.stack_trace {
723 return 2;
724 }
725 if let Some(_) = self.address {
726 return 1;
727 }
728 0
729 }
730 }
731
732 impl fidl::encoding::ValueTypeMarker for RecordAllocationEvent {
733 type Borrowed<'a> = &'a Self;
734 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
735 value
736 }
737 }
738
739 unsafe impl fidl::encoding::TypeMarker for RecordAllocationEvent {
740 type Owned = Self;
741
742 #[inline(always)]
743 fn inline_align(_context: fidl::encoding::Context) -> usize {
744 8
745 }
746
747 #[inline(always)]
748 fn inline_size(_context: fidl::encoding::Context) -> usize {
749 16
750 }
751 }
752
753 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<RecordAllocationEvent, D>
754 for &RecordAllocationEvent
755 {
756 unsafe fn encode(
757 self,
758 encoder: &mut fidl::encoding::Encoder<'_, D>,
759 offset: usize,
760 mut depth: fidl::encoding::Depth,
761 ) -> fidl::Result<()> {
762 encoder.debug_check_bounds::<RecordAllocationEvent>(offset);
763 let max_ordinal: u64 = self.max_ordinal_present();
765 encoder.write_num(max_ordinal, offset);
766 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
767 if max_ordinal == 0 {
769 return Ok(());
770 }
771 depth.increment()?;
772 let envelope_size = 8;
773 let bytes_len = max_ordinal as usize * envelope_size;
774 #[allow(unused_variables)]
775 let offset = encoder.out_of_line_offset(bytes_len);
776 let mut _prev_end_offset: usize = 0;
777 if 1 > max_ordinal {
778 return Ok(());
779 }
780
781 let cur_offset: usize = (1 - 1) * envelope_size;
784
785 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
787
788 fidl::encoding::encode_in_envelope_optional::<u64, D>(
793 self.address.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
794 encoder,
795 offset + cur_offset,
796 depth,
797 )?;
798
799 _prev_end_offset = cur_offset + envelope_size;
800 if 2 > max_ordinal {
801 return Ok(());
802 }
803
804 let cur_offset: usize = (2 - 1) * envelope_size;
807
808 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
810
811 fidl::encoding::encode_in_envelope_optional::<StackTrace, D>(
816 self.stack_trace
817 .as_ref()
818 .map(<StackTrace as fidl::encoding::ValueTypeMarker>::borrow),
819 encoder,
820 offset + cur_offset,
821 depth,
822 )?;
823
824 _prev_end_offset = cur_offset + envelope_size;
825 if 3 > max_ordinal {
826 return Ok(());
827 }
828
829 let cur_offset: usize = (3 - 1) * envelope_size;
832
833 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
835
836 fidl::encoding::encode_in_envelope_optional::<u64, D>(
841 self.size.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
842 encoder,
843 offset + cur_offset,
844 depth,
845 )?;
846
847 _prev_end_offset = cur_offset + envelope_size;
848 if 4 > max_ordinal {
849 return Ok(());
850 }
851
852 let cur_offset: usize = (4 - 1) * envelope_size;
855
856 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
858
859 fidl::encoding::encode_in_envelope_optional::<u64, D>(
864 self.sampling_interval_bytes
865 .as_ref()
866 .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
867 encoder,
868 offset + cur_offset,
869 depth,
870 )?;
871
872 _prev_end_offset = cur_offset + envelope_size;
873
874 Ok(())
875 }
876 }
877
878 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RecordAllocationEvent {
879 #[inline(always)]
880 fn new_empty() -> Self {
881 Self::default()
882 }
883
884 unsafe fn decode(
885 &mut self,
886 decoder: &mut fidl::encoding::Decoder<'_, D>,
887 offset: usize,
888 mut depth: fidl::encoding::Depth,
889 ) -> fidl::Result<()> {
890 decoder.debug_check_bounds::<Self>(offset);
891 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
892 None => return Err(fidl::Error::NotNullable),
893 Some(len) => len,
894 };
895 if len == 0 {
897 return Ok(());
898 };
899 depth.increment()?;
900 let envelope_size = 8;
901 let bytes_len = len * envelope_size;
902 let offset = decoder.out_of_line_offset(bytes_len)?;
903 let mut _next_ordinal_to_read = 0;
905 let mut next_offset = offset;
906 let end_offset = offset + bytes_len;
907 _next_ordinal_to_read += 1;
908 if next_offset >= end_offset {
909 return Ok(());
910 }
911
912 while _next_ordinal_to_read < 1 {
914 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
915 _next_ordinal_to_read += 1;
916 next_offset += envelope_size;
917 }
918
919 let next_out_of_line = decoder.next_out_of_line();
920 let handles_before = decoder.remaining_handles();
921 if let Some((inlined, num_bytes, num_handles)) =
922 fidl::encoding::decode_envelope_header(decoder, next_offset)?
923 {
924 let member_inline_size =
925 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
926 if inlined != (member_inline_size <= 4) {
927 return Err(fidl::Error::InvalidInlineBitInEnvelope);
928 }
929 let inner_offset;
930 let mut inner_depth = depth.clone();
931 if inlined {
932 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
933 inner_offset = next_offset;
934 } else {
935 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
936 inner_depth.increment()?;
937 }
938 let val_ref = self.address.get_or_insert_with(|| fidl::new_empty!(u64, D));
939 fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
940 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
941 {
942 return Err(fidl::Error::InvalidNumBytesInEnvelope);
943 }
944 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
945 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
946 }
947 }
948
949 next_offset += envelope_size;
950 _next_ordinal_to_read += 1;
951 if next_offset >= end_offset {
952 return Ok(());
953 }
954
955 while _next_ordinal_to_read < 2 {
957 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
958 _next_ordinal_to_read += 1;
959 next_offset += envelope_size;
960 }
961
962 let next_out_of_line = decoder.next_out_of_line();
963 let handles_before = decoder.remaining_handles();
964 if let Some((inlined, num_bytes, num_handles)) =
965 fidl::encoding::decode_envelope_header(decoder, next_offset)?
966 {
967 let member_inline_size =
968 <StackTrace as fidl::encoding::TypeMarker>::inline_size(decoder.context);
969 if inlined != (member_inline_size <= 4) {
970 return Err(fidl::Error::InvalidInlineBitInEnvelope);
971 }
972 let inner_offset;
973 let mut inner_depth = depth.clone();
974 if inlined {
975 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
976 inner_offset = next_offset;
977 } else {
978 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
979 inner_depth.increment()?;
980 }
981 let val_ref =
982 self.stack_trace.get_or_insert_with(|| fidl::new_empty!(StackTrace, D));
983 fidl::decode!(StackTrace, D, val_ref, decoder, inner_offset, inner_depth)?;
984 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
985 {
986 return Err(fidl::Error::InvalidNumBytesInEnvelope);
987 }
988 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
989 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
990 }
991 }
992
993 next_offset += envelope_size;
994 _next_ordinal_to_read += 1;
995 if next_offset >= end_offset {
996 return Ok(());
997 }
998
999 while _next_ordinal_to_read < 3 {
1001 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1002 _next_ordinal_to_read += 1;
1003 next_offset += envelope_size;
1004 }
1005
1006 let next_out_of_line = decoder.next_out_of_line();
1007 let handles_before = decoder.remaining_handles();
1008 if let Some((inlined, num_bytes, num_handles)) =
1009 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1010 {
1011 let member_inline_size =
1012 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1013 if inlined != (member_inline_size <= 4) {
1014 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1015 }
1016 let inner_offset;
1017 let mut inner_depth = depth.clone();
1018 if inlined {
1019 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1020 inner_offset = next_offset;
1021 } else {
1022 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1023 inner_depth.increment()?;
1024 }
1025 let val_ref = self.size.get_or_insert_with(|| fidl::new_empty!(u64, D));
1026 fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1027 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1028 {
1029 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1030 }
1031 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1032 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1033 }
1034 }
1035
1036 next_offset += envelope_size;
1037 _next_ordinal_to_read += 1;
1038 if next_offset >= end_offset {
1039 return Ok(());
1040 }
1041
1042 while _next_ordinal_to_read < 4 {
1044 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1045 _next_ordinal_to_read += 1;
1046 next_offset += envelope_size;
1047 }
1048
1049 let next_out_of_line = decoder.next_out_of_line();
1050 let handles_before = decoder.remaining_handles();
1051 if let Some((inlined, num_bytes, num_handles)) =
1052 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1053 {
1054 let member_inline_size =
1055 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1056 if inlined != (member_inline_size <= 4) {
1057 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1058 }
1059 let inner_offset;
1060 let mut inner_depth = depth.clone();
1061 if inlined {
1062 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1063 inner_offset = next_offset;
1064 } else {
1065 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1066 inner_depth.increment()?;
1067 }
1068 let val_ref =
1069 self.sampling_interval_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
1070 fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1071 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1072 {
1073 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1074 }
1075 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1076 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1077 }
1078 }
1079
1080 next_offset += envelope_size;
1081
1082 while next_offset < end_offset {
1084 _next_ordinal_to_read += 1;
1085 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1086 next_offset += envelope_size;
1087 }
1088
1089 Ok(())
1090 }
1091 }
1092
1093 impl RecordDeallocationEvent {
1094 #[inline(always)]
1095 fn max_ordinal_present(&self) -> u64 {
1096 if let Some(_) = self.stack_trace {
1097 return 2;
1098 }
1099 if let Some(_) = self.address {
1100 return 1;
1101 }
1102 0
1103 }
1104 }
1105
1106 impl fidl::encoding::ValueTypeMarker for RecordDeallocationEvent {
1107 type Borrowed<'a> = &'a Self;
1108 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1109 value
1110 }
1111 }
1112
1113 unsafe impl fidl::encoding::TypeMarker for RecordDeallocationEvent {
1114 type Owned = Self;
1115
1116 #[inline(always)]
1117 fn inline_align(_context: fidl::encoding::Context) -> usize {
1118 8
1119 }
1120
1121 #[inline(always)]
1122 fn inline_size(_context: fidl::encoding::Context) -> usize {
1123 16
1124 }
1125 }
1126
1127 unsafe impl<D: fidl::encoding::ResourceDialect>
1128 fidl::encoding::Encode<RecordDeallocationEvent, D> for &RecordDeallocationEvent
1129 {
1130 unsafe fn encode(
1131 self,
1132 encoder: &mut fidl::encoding::Encoder<'_, D>,
1133 offset: usize,
1134 mut depth: fidl::encoding::Depth,
1135 ) -> fidl::Result<()> {
1136 encoder.debug_check_bounds::<RecordDeallocationEvent>(offset);
1137 let max_ordinal: u64 = self.max_ordinal_present();
1139 encoder.write_num(max_ordinal, offset);
1140 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1141 if max_ordinal == 0 {
1143 return Ok(());
1144 }
1145 depth.increment()?;
1146 let envelope_size = 8;
1147 let bytes_len = max_ordinal as usize * envelope_size;
1148 #[allow(unused_variables)]
1149 let offset = encoder.out_of_line_offset(bytes_len);
1150 let mut _prev_end_offset: usize = 0;
1151 if 1 > max_ordinal {
1152 return Ok(());
1153 }
1154
1155 let cur_offset: usize = (1 - 1) * envelope_size;
1158
1159 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1161
1162 fidl::encoding::encode_in_envelope_optional::<u64, D>(
1167 self.address.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1168 encoder,
1169 offset + cur_offset,
1170 depth,
1171 )?;
1172
1173 _prev_end_offset = cur_offset + envelope_size;
1174 if 2 > max_ordinal {
1175 return Ok(());
1176 }
1177
1178 let cur_offset: usize = (2 - 1) * envelope_size;
1181
1182 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1184
1185 fidl::encoding::encode_in_envelope_optional::<StackTrace, D>(
1190 self.stack_trace
1191 .as_ref()
1192 .map(<StackTrace as fidl::encoding::ValueTypeMarker>::borrow),
1193 encoder,
1194 offset + cur_offset,
1195 depth,
1196 )?;
1197
1198 _prev_end_offset = cur_offset + envelope_size;
1199
1200 Ok(())
1201 }
1202 }
1203
1204 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1205 for RecordDeallocationEvent
1206 {
1207 #[inline(always)]
1208 fn new_empty() -> Self {
1209 Self::default()
1210 }
1211
1212 unsafe fn decode(
1213 &mut self,
1214 decoder: &mut fidl::encoding::Decoder<'_, D>,
1215 offset: usize,
1216 mut depth: fidl::encoding::Depth,
1217 ) -> fidl::Result<()> {
1218 decoder.debug_check_bounds::<Self>(offset);
1219 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1220 None => return Err(fidl::Error::NotNullable),
1221 Some(len) => len,
1222 };
1223 if len == 0 {
1225 return Ok(());
1226 };
1227 depth.increment()?;
1228 let envelope_size = 8;
1229 let bytes_len = len * envelope_size;
1230 let offset = decoder.out_of_line_offset(bytes_len)?;
1231 let mut _next_ordinal_to_read = 0;
1233 let mut next_offset = offset;
1234 let end_offset = offset + bytes_len;
1235 _next_ordinal_to_read += 1;
1236 if next_offset >= end_offset {
1237 return Ok(());
1238 }
1239
1240 while _next_ordinal_to_read < 1 {
1242 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1243 _next_ordinal_to_read += 1;
1244 next_offset += envelope_size;
1245 }
1246
1247 let next_out_of_line = decoder.next_out_of_line();
1248 let handles_before = decoder.remaining_handles();
1249 if let Some((inlined, num_bytes, num_handles)) =
1250 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1251 {
1252 let member_inline_size =
1253 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1254 if inlined != (member_inline_size <= 4) {
1255 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1256 }
1257 let inner_offset;
1258 let mut inner_depth = depth.clone();
1259 if inlined {
1260 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1261 inner_offset = next_offset;
1262 } else {
1263 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1264 inner_depth.increment()?;
1265 }
1266 let val_ref = self.address.get_or_insert_with(|| fidl::new_empty!(u64, D));
1267 fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1268 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1269 {
1270 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1271 }
1272 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1273 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1274 }
1275 }
1276
1277 next_offset += envelope_size;
1278 _next_ordinal_to_read += 1;
1279 if next_offset >= end_offset {
1280 return Ok(());
1281 }
1282
1283 while _next_ordinal_to_read < 2 {
1285 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1286 _next_ordinal_to_read += 1;
1287 next_offset += envelope_size;
1288 }
1289
1290 let next_out_of_line = decoder.next_out_of_line();
1291 let handles_before = decoder.remaining_handles();
1292 if let Some((inlined, num_bytes, num_handles)) =
1293 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1294 {
1295 let member_inline_size =
1296 <StackTrace as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1297 if inlined != (member_inline_size <= 4) {
1298 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1299 }
1300 let inner_offset;
1301 let mut inner_depth = depth.clone();
1302 if inlined {
1303 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1304 inner_offset = next_offset;
1305 } else {
1306 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1307 inner_depth.increment()?;
1308 }
1309 let val_ref =
1310 self.stack_trace.get_or_insert_with(|| fidl::new_empty!(StackTrace, D));
1311 fidl::decode!(StackTrace, D, val_ref, decoder, inner_offset, inner_depth)?;
1312 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1313 {
1314 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1315 }
1316 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1317 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1318 }
1319 }
1320
1321 next_offset += envelope_size;
1322
1323 while next_offset < end_offset {
1325 _next_ordinal_to_read += 1;
1326 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1327 next_offset += envelope_size;
1328 }
1329
1330 Ok(())
1331 }
1332 }
1333
1334 impl SamplerSetProcessInfoRequest {
1335 #[inline(always)]
1336 fn max_ordinal_present(&self) -> u64 {
1337 if let Some(_) = self.module_map {
1338 return 2;
1339 }
1340 if let Some(_) = self.process_name {
1341 return 1;
1342 }
1343 0
1344 }
1345 }
1346
1347 impl fidl::encoding::ValueTypeMarker for SamplerSetProcessInfoRequest {
1348 type Borrowed<'a> = &'a Self;
1349 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1350 value
1351 }
1352 }
1353
1354 unsafe impl fidl::encoding::TypeMarker for SamplerSetProcessInfoRequest {
1355 type Owned = Self;
1356
1357 #[inline(always)]
1358 fn inline_align(_context: fidl::encoding::Context) -> usize {
1359 8
1360 }
1361
1362 #[inline(always)]
1363 fn inline_size(_context: fidl::encoding::Context) -> usize {
1364 16
1365 }
1366 }
1367
1368 unsafe impl<D: fidl::encoding::ResourceDialect>
1369 fidl::encoding::Encode<SamplerSetProcessInfoRequest, D> for &SamplerSetProcessInfoRequest
1370 {
1371 unsafe fn encode(
1372 self,
1373 encoder: &mut fidl::encoding::Encoder<'_, D>,
1374 offset: usize,
1375 mut depth: fidl::encoding::Depth,
1376 ) -> fidl::Result<()> {
1377 encoder.debug_check_bounds::<SamplerSetProcessInfoRequest>(offset);
1378 let max_ordinal: u64 = self.max_ordinal_present();
1380 encoder.write_num(max_ordinal, offset);
1381 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1382 if max_ordinal == 0 {
1384 return Ok(());
1385 }
1386 depth.increment()?;
1387 let envelope_size = 8;
1388 let bytes_len = max_ordinal as usize * envelope_size;
1389 #[allow(unused_variables)]
1390 let offset = encoder.out_of_line_offset(bytes_len);
1391 let mut _prev_end_offset: usize = 0;
1392 if 1 > max_ordinal {
1393 return Ok(());
1394 }
1395
1396 let cur_offset: usize = (1 - 1) * envelope_size;
1399
1400 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1402
1403 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<32>, D>(
1408 self.process_name.as_ref().map(
1409 <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow,
1410 ),
1411 encoder,
1412 offset + cur_offset,
1413 depth,
1414 )?;
1415
1416 _prev_end_offset = cur_offset + envelope_size;
1417 if 2 > max_ordinal {
1418 return Ok(());
1419 }
1420
1421 let cur_offset: usize = (2 - 1) * envelope_size;
1424
1425 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1427
1428 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<ModuleMap>, D>(
1433 self.module_map.as_ref().map(<fidl::encoding::UnboundedVector<ModuleMap> as fidl::encoding::ValueTypeMarker>::borrow),
1434 encoder, offset + cur_offset, depth
1435 )?;
1436
1437 _prev_end_offset = cur_offset + envelope_size;
1438
1439 Ok(())
1440 }
1441 }
1442
1443 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1444 for SamplerSetProcessInfoRequest
1445 {
1446 #[inline(always)]
1447 fn new_empty() -> Self {
1448 Self::default()
1449 }
1450
1451 unsafe fn decode(
1452 &mut self,
1453 decoder: &mut fidl::encoding::Decoder<'_, D>,
1454 offset: usize,
1455 mut depth: fidl::encoding::Depth,
1456 ) -> fidl::Result<()> {
1457 decoder.debug_check_bounds::<Self>(offset);
1458 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1459 None => return Err(fidl::Error::NotNullable),
1460 Some(len) => len,
1461 };
1462 if len == 0 {
1464 return Ok(());
1465 };
1466 depth.increment()?;
1467 let envelope_size = 8;
1468 let bytes_len = len * envelope_size;
1469 let offset = decoder.out_of_line_offset(bytes_len)?;
1470 let mut _next_ordinal_to_read = 0;
1472 let mut next_offset = offset;
1473 let end_offset = offset + bytes_len;
1474 _next_ordinal_to_read += 1;
1475 if next_offset >= end_offset {
1476 return Ok(());
1477 }
1478
1479 while _next_ordinal_to_read < 1 {
1481 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1482 _next_ordinal_to_read += 1;
1483 next_offset += envelope_size;
1484 }
1485
1486 let next_out_of_line = decoder.next_out_of_line();
1487 let handles_before = decoder.remaining_handles();
1488 if let Some((inlined, num_bytes, num_handles)) =
1489 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1490 {
1491 let member_inline_size =
1492 <fidl::encoding::BoundedString<32> as fidl::encoding::TypeMarker>::inline_size(
1493 decoder.context,
1494 );
1495 if inlined != (member_inline_size <= 4) {
1496 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1497 }
1498 let inner_offset;
1499 let mut inner_depth = depth.clone();
1500 if inlined {
1501 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1502 inner_offset = next_offset;
1503 } else {
1504 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1505 inner_depth.increment()?;
1506 }
1507 let val_ref = self
1508 .process_name
1509 .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<32>, D));
1510 fidl::decode!(
1511 fidl::encoding::BoundedString<32>,
1512 D,
1513 val_ref,
1514 decoder,
1515 inner_offset,
1516 inner_depth
1517 )?;
1518 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1519 {
1520 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1521 }
1522 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1523 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1524 }
1525 }
1526
1527 next_offset += envelope_size;
1528 _next_ordinal_to_read += 1;
1529 if next_offset >= end_offset {
1530 return Ok(());
1531 }
1532
1533 while _next_ordinal_to_read < 2 {
1535 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1536 _next_ordinal_to_read += 1;
1537 next_offset += envelope_size;
1538 }
1539
1540 let next_out_of_line = decoder.next_out_of_line();
1541 let handles_before = decoder.remaining_handles();
1542 if let Some((inlined, num_bytes, num_handles)) =
1543 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1544 {
1545 let member_inline_size = <fidl::encoding::UnboundedVector<ModuleMap> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1546 if inlined != (member_inline_size <= 4) {
1547 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1548 }
1549 let inner_offset;
1550 let mut inner_depth = depth.clone();
1551 if inlined {
1552 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1553 inner_offset = next_offset;
1554 } else {
1555 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1556 inner_depth.increment()?;
1557 }
1558 let val_ref = self.module_map.get_or_insert_with(|| {
1559 fidl::new_empty!(fidl::encoding::UnboundedVector<ModuleMap>, D)
1560 });
1561 fidl::decode!(
1562 fidl::encoding::UnboundedVector<ModuleMap>,
1563 D,
1564 val_ref,
1565 decoder,
1566 inner_offset,
1567 inner_depth
1568 )?;
1569 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1570 {
1571 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1572 }
1573 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1574 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1575 }
1576 }
1577
1578 next_offset += envelope_size;
1579
1580 while next_offset < end_offset {
1582 _next_ordinal_to_read += 1;
1583 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1584 next_offset += envelope_size;
1585 }
1586
1587 Ok(())
1588 }
1589 }
1590
1591 impl StackTrace {
1592 #[inline(always)]
1593 fn max_ordinal_present(&self) -> u64 {
1594 if let Some(_) = self.stack_frames {
1595 return 1;
1596 }
1597 0
1598 }
1599 }
1600
1601 impl fidl::encoding::ValueTypeMarker for StackTrace {
1602 type Borrowed<'a> = &'a Self;
1603 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1604 value
1605 }
1606 }
1607
1608 unsafe impl fidl::encoding::TypeMarker for StackTrace {
1609 type Owned = Self;
1610
1611 #[inline(always)]
1612 fn inline_align(_context: fidl::encoding::Context) -> usize {
1613 8
1614 }
1615
1616 #[inline(always)]
1617 fn inline_size(_context: fidl::encoding::Context) -> usize {
1618 16
1619 }
1620 }
1621
1622 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<StackTrace, D>
1623 for &StackTrace
1624 {
1625 unsafe fn encode(
1626 self,
1627 encoder: &mut fidl::encoding::Encoder<'_, D>,
1628 offset: usize,
1629 mut depth: fidl::encoding::Depth,
1630 ) -> fidl::Result<()> {
1631 encoder.debug_check_bounds::<StackTrace>(offset);
1632 let max_ordinal: u64 = self.max_ordinal_present();
1634 encoder.write_num(max_ordinal, offset);
1635 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1636 if max_ordinal == 0 {
1638 return Ok(());
1639 }
1640 depth.increment()?;
1641 let envelope_size = 8;
1642 let bytes_len = max_ordinal as usize * envelope_size;
1643 #[allow(unused_variables)]
1644 let offset = encoder.out_of_line_offset(bytes_len);
1645 let mut _prev_end_offset: usize = 0;
1646 if 1 > max_ordinal {
1647 return Ok(());
1648 }
1649
1650 let cur_offset: usize = (1 - 1) * envelope_size;
1653
1654 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1656
1657 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u64>, D>(
1662 self.stack_frames.as_ref().map(<fidl::encoding::UnboundedVector<u64> as fidl::encoding::ValueTypeMarker>::borrow),
1663 encoder, offset + cur_offset, depth
1664 )?;
1665
1666 _prev_end_offset = cur_offset + envelope_size;
1667
1668 Ok(())
1669 }
1670 }
1671
1672 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StackTrace {
1673 #[inline(always)]
1674 fn new_empty() -> Self {
1675 Self::default()
1676 }
1677
1678 unsafe fn decode(
1679 &mut self,
1680 decoder: &mut fidl::encoding::Decoder<'_, D>,
1681 offset: usize,
1682 mut depth: fidl::encoding::Depth,
1683 ) -> fidl::Result<()> {
1684 decoder.debug_check_bounds::<Self>(offset);
1685 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1686 None => return Err(fidl::Error::NotNullable),
1687 Some(len) => len,
1688 };
1689 if len == 0 {
1691 return Ok(());
1692 };
1693 depth.increment()?;
1694 let envelope_size = 8;
1695 let bytes_len = len * envelope_size;
1696 let offset = decoder.out_of_line_offset(bytes_len)?;
1697 let mut _next_ordinal_to_read = 0;
1699 let mut next_offset = offset;
1700 let end_offset = offset + bytes_len;
1701 _next_ordinal_to_read += 1;
1702 if next_offset >= end_offset {
1703 return Ok(());
1704 }
1705
1706 while _next_ordinal_to_read < 1 {
1708 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1709 _next_ordinal_to_read += 1;
1710 next_offset += envelope_size;
1711 }
1712
1713 let next_out_of_line = decoder.next_out_of_line();
1714 let handles_before = decoder.remaining_handles();
1715 if let Some((inlined, num_bytes, num_handles)) =
1716 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1717 {
1718 let member_inline_size = <fidl::encoding::UnboundedVector<u64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1719 if inlined != (member_inline_size <= 4) {
1720 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1721 }
1722 let inner_offset;
1723 let mut inner_depth = depth.clone();
1724 if inlined {
1725 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1726 inner_offset = next_offset;
1727 } else {
1728 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1729 inner_depth.increment()?;
1730 }
1731 let val_ref = self.stack_frames.get_or_insert_with(|| {
1732 fidl::new_empty!(fidl::encoding::UnboundedVector<u64>, D)
1733 });
1734 fidl::decode!(
1735 fidl::encoding::UnboundedVector<u64>,
1736 D,
1737 val_ref,
1738 decoder,
1739 inner_offset,
1740 inner_depth
1741 )?;
1742 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1743 {
1744 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1745 }
1746 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1747 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1748 }
1749 }
1750
1751 next_offset += envelope_size;
1752
1753 while next_offset < end_offset {
1755 _next_ordinal_to_read += 1;
1756 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1757 next_offset += envelope_size;
1758 }
1759
1760 Ok(())
1761 }
1762 }
1763
1764 impl fidl::encoding::ValueTypeMarker for SamplerDatagram {
1765 type Borrowed<'a> = &'a Self;
1766 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1767 value
1768 }
1769 }
1770
1771 unsafe impl fidl::encoding::TypeMarker for SamplerDatagram {
1772 type Owned = Self;
1773
1774 #[inline(always)]
1775 fn inline_align(_context: fidl::encoding::Context) -> usize {
1776 8
1777 }
1778
1779 #[inline(always)]
1780 fn inline_size(_context: fidl::encoding::Context) -> usize {
1781 16
1782 }
1783 }
1784
1785 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SamplerDatagram, D>
1786 for &SamplerDatagram
1787 {
1788 #[inline]
1789 unsafe fn encode(
1790 self,
1791 encoder: &mut fidl::encoding::Encoder<'_, D>,
1792 offset: usize,
1793 _depth: fidl::encoding::Depth,
1794 ) -> fidl::Result<()> {
1795 encoder.debug_check_bounds::<SamplerDatagram>(offset);
1796 encoder.write_num::<u64>(self.ordinal(), offset);
1797 match self {
1798 SamplerDatagram::RecordAllocation(ref val) => {
1799 fidl::encoding::encode_in_envelope::<RecordAllocationEvent, D>(
1800 <RecordAllocationEvent as fidl::encoding::ValueTypeMarker>::borrow(val),
1801 encoder,
1802 offset + 8,
1803 _depth,
1804 )
1805 }
1806 SamplerDatagram::RecordDeallocation(ref val) => {
1807 fidl::encoding::encode_in_envelope::<RecordDeallocationEvent, D>(
1808 <RecordDeallocationEvent as fidl::encoding::ValueTypeMarker>::borrow(val),
1809 encoder,
1810 offset + 8,
1811 _depth,
1812 )
1813 }
1814 SamplerDatagram::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
1815 }
1816 }
1817 }
1818
1819 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SamplerDatagram {
1820 #[inline(always)]
1821 fn new_empty() -> Self {
1822 Self::__SourceBreaking { unknown_ordinal: 0 }
1823 }
1824
1825 #[inline]
1826 unsafe fn decode(
1827 &mut self,
1828 decoder: &mut fidl::encoding::Decoder<'_, D>,
1829 offset: usize,
1830 mut depth: fidl::encoding::Depth,
1831 ) -> fidl::Result<()> {
1832 decoder.debug_check_bounds::<Self>(offset);
1833 #[allow(unused_variables)]
1834 let next_out_of_line = decoder.next_out_of_line();
1835 let handles_before = decoder.remaining_handles();
1836 let (ordinal, inlined, num_bytes, num_handles) =
1837 fidl::encoding::decode_union_inline_portion(decoder, offset)?;
1838
1839 let member_inline_size = match ordinal {
1840 1 => <RecordAllocationEvent as fidl::encoding::TypeMarker>::inline_size(
1841 decoder.context,
1842 ),
1843 2 => <RecordDeallocationEvent as fidl::encoding::TypeMarker>::inline_size(
1844 decoder.context,
1845 ),
1846 0 => return Err(fidl::Error::UnknownUnionTag),
1847 _ => num_bytes as usize,
1848 };
1849
1850 if inlined != (member_inline_size <= 4) {
1851 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1852 }
1853 let _inner_offset;
1854 if inlined {
1855 decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
1856 _inner_offset = offset + 8;
1857 } else {
1858 depth.increment()?;
1859 _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1860 }
1861 match ordinal {
1862 1 => {
1863 #[allow(irrefutable_let_patterns)]
1864 if let SamplerDatagram::RecordAllocation(_) = self {
1865 } else {
1867 *self = SamplerDatagram::RecordAllocation(fidl::new_empty!(
1869 RecordAllocationEvent,
1870 D
1871 ));
1872 }
1873 #[allow(irrefutable_let_patterns)]
1874 if let SamplerDatagram::RecordAllocation(ref mut val) = self {
1875 fidl::decode!(
1876 RecordAllocationEvent,
1877 D,
1878 val,
1879 decoder,
1880 _inner_offset,
1881 depth
1882 )?;
1883 } else {
1884 unreachable!()
1885 }
1886 }
1887 2 => {
1888 #[allow(irrefutable_let_patterns)]
1889 if let SamplerDatagram::RecordDeallocation(_) = self {
1890 } else {
1892 *self = SamplerDatagram::RecordDeallocation(fidl::new_empty!(
1894 RecordDeallocationEvent,
1895 D
1896 ));
1897 }
1898 #[allow(irrefutable_let_patterns)]
1899 if let SamplerDatagram::RecordDeallocation(ref mut val) = self {
1900 fidl::decode!(
1901 RecordDeallocationEvent,
1902 D,
1903 val,
1904 decoder,
1905 _inner_offset,
1906 depth
1907 )?;
1908 } else {
1909 unreachable!()
1910 }
1911 }
1912 #[allow(deprecated)]
1913 ordinal => {
1914 for _ in 0..num_handles {
1915 decoder.drop_next_handle()?;
1916 }
1917 *self = SamplerDatagram::__SourceBreaking { unknown_ordinal: ordinal };
1918 }
1919 }
1920 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
1921 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1922 }
1923 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1924 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1925 }
1926 Ok(())
1927 }
1928 }
1929}