fidl_fuchsia_kernel__common/
fidl_fuchsia_kernel__common.rs

1// WARNING: This file is machine generated by fidlgen.
2
3#![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
11/// Maximum number of bytes in a command string
12pub const DEBUG_COMMAND_MAX: u32 = 1024;
13
14#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
15#[repr(C)]
16pub struct CounterUpdateInspectVmoResponse {
17    pub status: i32,
18}
19
20impl fidl::Persistable for CounterUpdateInspectVmoResponse {}
21
22#[derive(Clone, Debug, PartialEq)]
23pub struct CpuStats {
24    /// This is the total number of CPUs on the actual device. This may not be the same as the length
25    /// of the vector `per_cpu_stats` as it is possible the underlying syscall will not return stats
26    /// for all CPUs.
27    pub actual_num_cpus: u64,
28    pub per_cpu_stats: Option<Vec<PerCpuStats>>,
29}
30
31impl fidl::Persistable for CpuStats {}
32
33#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
34pub struct DebugBrokerSendDebugCommandRequest {
35    pub command: String,
36}
37
38impl fidl::Persistable for DebugBrokerSendDebugCommandRequest {}
39
40#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
41#[repr(C)]
42pub struct DebugBrokerSendDebugCommandResponse {
43    pub status: i32,
44}
45
46impl fidl::Persistable for DebugBrokerSendDebugCommandResponse {}
47
48#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
49pub struct DebugBrokerSetTracingEnabledRequest {
50    pub enabled: bool,
51}
52
53impl fidl::Persistable for DebugBrokerSetTracingEnabledRequest {}
54
55#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
56#[repr(C)]
57pub struct DebugBrokerSetTracingEnabledResponse {
58    pub status: i32,
59}
60
61impl fidl::Persistable for DebugBrokerSetTracingEnabledResponse {}
62
63#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
64#[repr(C)]
65pub struct StatsGetCpuLoadRequest {
66    pub duration: i64,
67}
68
69impl fidl::Persistable for StatsGetCpuLoadRequest {}
70
71#[derive(Clone, Debug, PartialEq, PartialOrd)]
72pub struct StatsGetCpuLoadResponse {
73    pub per_cpu_load: Vec<f32>,
74}
75
76impl fidl::Persistable for StatsGetCpuLoadResponse {}
77
78#[derive(Clone, Debug, PartialEq)]
79pub struct StatsGetCpuStatsResponse {
80    pub stats: CpuStats,
81}
82
83impl fidl::Persistable for StatsGetCpuStatsResponse {}
84
85#[derive(Clone, Debug, PartialEq)]
86pub struct StatsGetMemoryStatsExtendedResponse {
87    pub stats: MemoryStatsExtended,
88}
89
90impl fidl::Persistable for StatsGetMemoryStatsExtendedResponse {}
91
92#[derive(Clone, Debug, PartialEq)]
93pub struct StatsGetMemoryStatsResponse {
94    pub stats: MemoryStats,
95}
96
97impl fidl::Persistable for StatsGetMemoryStatsResponse {}
98
99#[derive(Clone, Debug, Default, PartialEq)]
100pub struct MemoryStats {
101    pub total_bytes: Option<u64>,
102    pub free_bytes: Option<u64>,
103    pub wired_bytes: Option<u64>,
104    pub total_heap_bytes: Option<u64>,
105    pub free_heap_bytes: Option<u64>,
106    pub vmo_bytes: Option<u64>,
107    pub mmu_overhead_bytes: Option<u64>,
108    pub ipc_bytes: Option<u64>,
109    pub other_bytes: Option<u64>,
110    pub free_loaned_bytes: Option<u64>,
111    pub cache_bytes: Option<u64>,
112    pub slab_bytes: Option<u64>,
113    pub zram_bytes: Option<u64>,
114    pub vmo_reclaim_total_bytes: Option<u64>,
115    pub vmo_reclaim_newest_bytes: Option<u64>,
116    pub vmo_reclaim_oldest_bytes: Option<u64>,
117    pub vmo_reclaim_disabled_bytes: Option<u64>,
118    pub vmo_discardable_locked_bytes: Option<u64>,
119    pub vmo_discardable_unlocked_bytes: Option<u64>,
120    #[doc(hidden)]
121    pub __source_breaking: fidl::marker::SourceBreaking,
122}
123
124impl fidl::Persistable for MemoryStats {}
125
126#[derive(Clone, Debug, Default, PartialEq)]
127pub struct MemoryStatsCompression {
128    pub uncompressed_storage_bytes: Option<u64>,
129    pub compressed_storage_bytes: Option<u64>,
130    pub compressed_fragmentation_bytes: Option<u64>,
131    pub compression_time: Option<i64>,
132    pub decompression_time: Option<i64>,
133    pub total_page_compression_attempts: Option<u64>,
134    pub failed_page_compression_attempts: Option<u64>,
135    pub total_page_decompressions: Option<u64>,
136    pub compressed_page_evictions: Option<u64>,
137    pub eager_page_compressions: Option<u64>,
138    pub memory_pressure_page_compressions: Option<u64>,
139    pub critical_memory_page_compressions: Option<u64>,
140    pub pages_decompressed_unit_ns: Option<u64>,
141    pub pages_decompressed_within_log_time: Option<[u64; 8]>,
142    #[doc(hidden)]
143    pub __source_breaking: fidl::marker::SourceBreaking,
144}
145
146impl fidl::Persistable for MemoryStatsCompression {}
147
148#[derive(Clone, Debug, Default, PartialEq)]
149pub struct MemoryStatsExtended {
150    pub total_bytes: Option<u64>,
151    pub free_bytes: Option<u64>,
152    pub wired_bytes: Option<u64>,
153    pub total_heap_bytes: Option<u64>,
154    pub free_heap_bytes: Option<u64>,
155    pub vmo_bytes: Option<u64>,
156    pub vmo_pager_total_bytes: Option<u64>,
157    pub vmo_pager_newest_bytes: Option<u64>,
158    pub vmo_pager_oldest_bytes: Option<u64>,
159    pub vmo_discardable_locked_bytes: Option<u64>,
160    pub vmo_discardable_unlocked_bytes: Option<u64>,
161    pub mmu_overhead_bytes: Option<u64>,
162    pub ipc_bytes: Option<u64>,
163    pub other_bytes: Option<u64>,
164    #[doc(hidden)]
165    pub __source_breaking: fidl::marker::SourceBreaking,
166}
167
168impl fidl::Persistable for MemoryStatsExtended {}
169
170#[derive(Clone, Debug, Default, PartialEq)]
171pub struct PerCpuStats {
172    pub cpu_number: Option<u32>,
173    pub flags: Option<u32>,
174    pub idle_time: Option<i64>,
175    pub reschedules: Option<u64>,
176    pub context_switches: Option<u64>,
177    pub irq_preempts: Option<u64>,
178    pub yields: Option<u64>,
179    pub ints: Option<u64>,
180    pub timer_ints: Option<u64>,
181    pub timers: Option<u64>,
182    pub page_faults: Option<u64>,
183    pub exceptions: Option<u64>,
184    pub syscalls: Option<u64>,
185    pub reschedule_ipis: Option<u64>,
186    pub generic_ipis: Option<u64>,
187    #[doc(hidden)]
188    pub __source_breaking: fidl::marker::SourceBreaking,
189}
190
191impl fidl::Persistable for PerCpuStats {}
192
193pub mod counter_ordinals {
194    pub const GET_INSPECT_VMO: u64 = 0x6ea9b2e6b2791b81;
195    pub const UPDATE_INSPECT_VMO: u64 = 0x1d25eb7995a0539f;
196}
197
198pub mod cpu_resource_ordinals {
199    pub const GET: u64 = 0x41e1103acf4215e4;
200}
201
202pub mod debug_broker_ordinals {
203    pub const SEND_DEBUG_COMMAND: u64 = 0x1ee270f83b5d6ff6;
204    pub const SET_TRACING_ENABLED: u64 = 0x12e368d05329b30e;
205}
206
207pub mod debug_resource_ordinals {
208    pub const GET: u64 = 0x1d79d77ea12a6474;
209}
210
211pub mod debuglog_resource_ordinals {
212    pub const GET: u64 = 0x6e78c1ff74765225;
213}
214
215pub mod energy_info_resource_ordinals {
216    pub const GET: u64 = 0x5f5cc9f0745f61d0;
217}
218
219pub mod hypervisor_resource_ordinals {
220    pub const GET: u64 = 0x1c312131d3b824a2;
221}
222
223pub mod info_resource_ordinals {
224    pub const GET: u64 = 0x1de8edcb4abc2067;
225}
226
227pub mod iommu_resource_ordinals {
228    pub const GET: u64 = 0x5af309b619aa7c5b;
229}
230
231pub mod ioport_resource_ordinals {
232    pub const GET: u64 = 0x4db20876b537c52b;
233}
234
235pub mod irq_resource_ordinals {
236    pub const GET: u64 = 0x491be54504b041e9;
237}
238
239pub mod mexec_resource_ordinals {
240    pub const GET: u64 = 0xff93e6722900f54;
241}
242
243pub mod mmio_resource_ordinals {
244    pub const GET: u64 = 0x66747b9c5a6dfe7b;
245}
246
247pub mod msi_resource_ordinals {
248    pub const GET: u64 = 0x360a97e47e8c4f1f;
249}
250
251pub mod power_resource_ordinals {
252    pub const GET: u64 = 0x2b8df8ca24d1e866;
253}
254
255pub mod profile_resource_ordinals {
256    pub const GET: u64 = 0x3003a0c14de1fa86;
257}
258
259pub mod root_job_ordinals {
260    pub const GET: u64 = 0x73acb63f93d53eac;
261}
262
263pub mod root_job_for_inspect_ordinals {
264    pub const GET: u64 = 0x73acb63f93d53eac;
265}
266
267pub mod sampling_resource_ordinals {
268    pub const GET: u64 = 0x51c41ab037e99824;
269}
270
271pub mod smc_resource_ordinals {
272    pub const GET: u64 = 0x392cbd495b84ede7;
273}
274
275pub mod stall_resource_ordinals {
276    pub const GET: u64 = 0x5edf4c8629a9781a;
277}
278
279pub mod stats_ordinals {
280    pub const GET_MEMORY_STATS: u64 = 0x686677932ae41074;
281    pub const GET_MEMORY_STATS_EXTENDED: u64 = 0x60faa0f8aa38c29f;
282    pub const GET_MEMORY_STATS_COMPRESSION: u64 = 0x544a09995befb531;
283    pub const GET_CPU_STATS: u64 = 0x470e2684ca1ca19e;
284    pub const GET_CPU_LOAD: u64 = 0x4c8f0f05e7034666;
285}
286
287pub mod tracing_resource_ordinals {
288    pub const GET: u64 = 0x299bc179aa54c6aa;
289}
290
291pub mod vmex_resource_ordinals {
292    pub const GET: u64 = 0x33db32deed650699;
293}
294
295mod internal {
296    use super::*;
297
298    impl fidl::encoding::ValueTypeMarker for CounterUpdateInspectVmoResponse {
299        type Borrowed<'a> = &'a Self;
300        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
301            value
302        }
303    }
304
305    unsafe impl fidl::encoding::TypeMarker for CounterUpdateInspectVmoResponse {
306        type Owned = Self;
307
308        #[inline(always)]
309        fn inline_align(_context: fidl::encoding::Context) -> usize {
310            4
311        }
312
313        #[inline(always)]
314        fn inline_size(_context: fidl::encoding::Context) -> usize {
315            4
316        }
317        #[inline(always)]
318        fn encode_is_copy() -> bool {
319            true
320        }
321
322        #[inline(always)]
323        fn decode_is_copy() -> bool {
324            true
325        }
326    }
327
328    unsafe impl<D: fidl::encoding::ResourceDialect>
329        fidl::encoding::Encode<CounterUpdateInspectVmoResponse, D>
330        for &CounterUpdateInspectVmoResponse
331    {
332        #[inline]
333        unsafe fn encode(
334            self,
335            encoder: &mut fidl::encoding::Encoder<'_, D>,
336            offset: usize,
337            _depth: fidl::encoding::Depth,
338        ) -> fidl::Result<()> {
339            encoder.debug_check_bounds::<CounterUpdateInspectVmoResponse>(offset);
340            unsafe {
341                // Copy the object into the buffer.
342                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
343                (buf_ptr as *mut CounterUpdateInspectVmoResponse)
344                    .write_unaligned((self as *const CounterUpdateInspectVmoResponse).read());
345                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
346                // done second because the memcpy will write garbage to these bytes.
347            }
348            Ok(())
349        }
350    }
351    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i32, D>>
352        fidl::encoding::Encode<CounterUpdateInspectVmoResponse, D> for (T0,)
353    {
354        #[inline]
355        unsafe fn encode(
356            self,
357            encoder: &mut fidl::encoding::Encoder<'_, D>,
358            offset: usize,
359            depth: fidl::encoding::Depth,
360        ) -> fidl::Result<()> {
361            encoder.debug_check_bounds::<CounterUpdateInspectVmoResponse>(offset);
362            // Zero out padding regions. There's no need to apply masks
363            // because the unmasked parts will be overwritten by fields.
364            // Write the fields.
365            self.0.encode(encoder, offset + 0, depth)?;
366            Ok(())
367        }
368    }
369
370    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
371        for CounterUpdateInspectVmoResponse
372    {
373        #[inline(always)]
374        fn new_empty() -> Self {
375            Self { status: fidl::new_empty!(i32, D) }
376        }
377
378        #[inline]
379        unsafe fn decode(
380            &mut self,
381            decoder: &mut fidl::encoding::Decoder<'_, D>,
382            offset: usize,
383            _depth: fidl::encoding::Depth,
384        ) -> fidl::Result<()> {
385            decoder.debug_check_bounds::<Self>(offset);
386            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
387            // Verify that padding bytes are zero.
388            // Copy from the buffer into the object.
389            unsafe {
390                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
391            }
392            Ok(())
393        }
394    }
395
396    impl fidl::encoding::ValueTypeMarker for CpuStats {
397        type Borrowed<'a> = &'a Self;
398        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
399            value
400        }
401    }
402
403    unsafe impl fidl::encoding::TypeMarker for CpuStats {
404        type Owned = Self;
405
406        #[inline(always)]
407        fn inline_align(_context: fidl::encoding::Context) -> usize {
408            8
409        }
410
411        #[inline(always)]
412        fn inline_size(_context: fidl::encoding::Context) -> usize {
413            24
414        }
415    }
416
417    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CpuStats, D> for &CpuStats {
418        #[inline]
419        unsafe fn encode(
420            self,
421            encoder: &mut fidl::encoding::Encoder<'_, D>,
422            offset: usize,
423            _depth: fidl::encoding::Depth,
424        ) -> fidl::Result<()> {
425            encoder.debug_check_bounds::<CpuStats>(offset);
426            // Delegate to tuple encoding.
427            fidl::encoding::Encode::<CpuStats, D>::encode(
428                (
429                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.actual_num_cpus),
430                    <fidl::encoding::Optional<fidl::encoding::Vector<PerCpuStats, 512>> as fidl::encoding::ValueTypeMarker>::borrow(&self.per_cpu_stats),
431                ),
432                encoder, offset, _depth
433            )
434        }
435    }
436    unsafe impl<
437        D: fidl::encoding::ResourceDialect,
438        T0: fidl::encoding::Encode<u64, D>,
439        T1: fidl::encoding::Encode<
440                fidl::encoding::Optional<fidl::encoding::Vector<PerCpuStats, 512>>,
441                D,
442            >,
443    > fidl::encoding::Encode<CpuStats, D> for (T0, T1)
444    {
445        #[inline]
446        unsafe fn encode(
447            self,
448            encoder: &mut fidl::encoding::Encoder<'_, D>,
449            offset: usize,
450            depth: fidl::encoding::Depth,
451        ) -> fidl::Result<()> {
452            encoder.debug_check_bounds::<CpuStats>(offset);
453            // Zero out padding regions. There's no need to apply masks
454            // because the unmasked parts will be overwritten by fields.
455            // Write the fields.
456            self.0.encode(encoder, offset + 0, depth)?;
457            self.1.encode(encoder, offset + 8, depth)?;
458            Ok(())
459        }
460    }
461
462    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CpuStats {
463        #[inline(always)]
464        fn new_empty() -> Self {
465            Self {
466                actual_num_cpus: fidl::new_empty!(u64, D),
467                per_cpu_stats: fidl::new_empty!(
468                    fidl::encoding::Optional<fidl::encoding::Vector<PerCpuStats, 512>>,
469                    D
470                ),
471            }
472        }
473
474        #[inline]
475        unsafe fn decode(
476            &mut self,
477            decoder: &mut fidl::encoding::Decoder<'_, D>,
478            offset: usize,
479            _depth: fidl::encoding::Depth,
480        ) -> fidl::Result<()> {
481            decoder.debug_check_bounds::<Self>(offset);
482            // Verify that padding bytes are zero.
483            fidl::decode!(u64, D, &mut self.actual_num_cpus, decoder, offset + 0, _depth)?;
484            fidl::decode!(
485                fidl::encoding::Optional<fidl::encoding::Vector<PerCpuStats, 512>>,
486                D,
487                &mut self.per_cpu_stats,
488                decoder,
489                offset + 8,
490                _depth
491            )?;
492            Ok(())
493        }
494    }
495
496    impl fidl::encoding::ValueTypeMarker for DebugBrokerSendDebugCommandRequest {
497        type Borrowed<'a> = &'a Self;
498        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
499            value
500        }
501    }
502
503    unsafe impl fidl::encoding::TypeMarker for DebugBrokerSendDebugCommandRequest {
504        type Owned = Self;
505
506        #[inline(always)]
507        fn inline_align(_context: fidl::encoding::Context) -> usize {
508            8
509        }
510
511        #[inline(always)]
512        fn inline_size(_context: fidl::encoding::Context) -> usize {
513            16
514        }
515    }
516
517    unsafe impl<D: fidl::encoding::ResourceDialect>
518        fidl::encoding::Encode<DebugBrokerSendDebugCommandRequest, D>
519        for &DebugBrokerSendDebugCommandRequest
520    {
521        #[inline]
522        unsafe fn encode(
523            self,
524            encoder: &mut fidl::encoding::Encoder<'_, D>,
525            offset: usize,
526            _depth: fidl::encoding::Depth,
527        ) -> fidl::Result<()> {
528            encoder.debug_check_bounds::<DebugBrokerSendDebugCommandRequest>(offset);
529            // Delegate to tuple encoding.
530            fidl::encoding::Encode::<DebugBrokerSendDebugCommandRequest, D>::encode(
531                (<fidl::encoding::BoundedString<1024> as fidl::encoding::ValueTypeMarker>::borrow(
532                    &self.command,
533                ),),
534                encoder,
535                offset,
536                _depth,
537            )
538        }
539    }
540    unsafe impl<
541        D: fidl::encoding::ResourceDialect,
542        T0: fidl::encoding::Encode<fidl::encoding::BoundedString<1024>, D>,
543    > fidl::encoding::Encode<DebugBrokerSendDebugCommandRequest, D> for (T0,)
544    {
545        #[inline]
546        unsafe fn encode(
547            self,
548            encoder: &mut fidl::encoding::Encoder<'_, D>,
549            offset: usize,
550            depth: fidl::encoding::Depth,
551        ) -> fidl::Result<()> {
552            encoder.debug_check_bounds::<DebugBrokerSendDebugCommandRequest>(offset);
553            // Zero out padding regions. There's no need to apply masks
554            // because the unmasked parts will be overwritten by fields.
555            // Write the fields.
556            self.0.encode(encoder, offset + 0, depth)?;
557            Ok(())
558        }
559    }
560
561    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
562        for DebugBrokerSendDebugCommandRequest
563    {
564        #[inline(always)]
565        fn new_empty() -> Self {
566            Self { command: fidl::new_empty!(fidl::encoding::BoundedString<1024>, D) }
567        }
568
569        #[inline]
570        unsafe fn decode(
571            &mut self,
572            decoder: &mut fidl::encoding::Decoder<'_, D>,
573            offset: usize,
574            _depth: fidl::encoding::Depth,
575        ) -> fidl::Result<()> {
576            decoder.debug_check_bounds::<Self>(offset);
577            // Verify that padding bytes are zero.
578            fidl::decode!(
579                fidl::encoding::BoundedString<1024>,
580                D,
581                &mut self.command,
582                decoder,
583                offset + 0,
584                _depth
585            )?;
586            Ok(())
587        }
588    }
589
590    impl fidl::encoding::ValueTypeMarker for DebugBrokerSendDebugCommandResponse {
591        type Borrowed<'a> = &'a Self;
592        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
593            value
594        }
595    }
596
597    unsafe impl fidl::encoding::TypeMarker for DebugBrokerSendDebugCommandResponse {
598        type Owned = Self;
599
600        #[inline(always)]
601        fn inline_align(_context: fidl::encoding::Context) -> usize {
602            4
603        }
604
605        #[inline(always)]
606        fn inline_size(_context: fidl::encoding::Context) -> usize {
607            4
608        }
609        #[inline(always)]
610        fn encode_is_copy() -> bool {
611            true
612        }
613
614        #[inline(always)]
615        fn decode_is_copy() -> bool {
616            true
617        }
618    }
619
620    unsafe impl<D: fidl::encoding::ResourceDialect>
621        fidl::encoding::Encode<DebugBrokerSendDebugCommandResponse, D>
622        for &DebugBrokerSendDebugCommandResponse
623    {
624        #[inline]
625        unsafe fn encode(
626            self,
627            encoder: &mut fidl::encoding::Encoder<'_, D>,
628            offset: usize,
629            _depth: fidl::encoding::Depth,
630        ) -> fidl::Result<()> {
631            encoder.debug_check_bounds::<DebugBrokerSendDebugCommandResponse>(offset);
632            unsafe {
633                // Copy the object into the buffer.
634                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
635                (buf_ptr as *mut DebugBrokerSendDebugCommandResponse)
636                    .write_unaligned((self as *const DebugBrokerSendDebugCommandResponse).read());
637                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
638                // done second because the memcpy will write garbage to these bytes.
639            }
640            Ok(())
641        }
642    }
643    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i32, D>>
644        fidl::encoding::Encode<DebugBrokerSendDebugCommandResponse, D> for (T0,)
645    {
646        #[inline]
647        unsafe fn encode(
648            self,
649            encoder: &mut fidl::encoding::Encoder<'_, D>,
650            offset: usize,
651            depth: fidl::encoding::Depth,
652        ) -> fidl::Result<()> {
653            encoder.debug_check_bounds::<DebugBrokerSendDebugCommandResponse>(offset);
654            // Zero out padding regions. There's no need to apply masks
655            // because the unmasked parts will be overwritten by fields.
656            // Write the fields.
657            self.0.encode(encoder, offset + 0, depth)?;
658            Ok(())
659        }
660    }
661
662    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
663        for DebugBrokerSendDebugCommandResponse
664    {
665        #[inline(always)]
666        fn new_empty() -> Self {
667            Self { status: fidl::new_empty!(i32, D) }
668        }
669
670        #[inline]
671        unsafe fn decode(
672            &mut self,
673            decoder: &mut fidl::encoding::Decoder<'_, D>,
674            offset: usize,
675            _depth: fidl::encoding::Depth,
676        ) -> fidl::Result<()> {
677            decoder.debug_check_bounds::<Self>(offset);
678            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
679            // Verify that padding bytes are zero.
680            // Copy from the buffer into the object.
681            unsafe {
682                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
683            }
684            Ok(())
685        }
686    }
687
688    impl fidl::encoding::ValueTypeMarker for DebugBrokerSetTracingEnabledRequest {
689        type Borrowed<'a> = &'a Self;
690        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
691            value
692        }
693    }
694
695    unsafe impl fidl::encoding::TypeMarker for DebugBrokerSetTracingEnabledRequest {
696        type Owned = Self;
697
698        #[inline(always)]
699        fn inline_align(_context: fidl::encoding::Context) -> usize {
700            1
701        }
702
703        #[inline(always)]
704        fn inline_size(_context: fidl::encoding::Context) -> usize {
705            1
706        }
707    }
708
709    unsafe impl<D: fidl::encoding::ResourceDialect>
710        fidl::encoding::Encode<DebugBrokerSetTracingEnabledRequest, D>
711        for &DebugBrokerSetTracingEnabledRequest
712    {
713        #[inline]
714        unsafe fn encode(
715            self,
716            encoder: &mut fidl::encoding::Encoder<'_, D>,
717            offset: usize,
718            _depth: fidl::encoding::Depth,
719        ) -> fidl::Result<()> {
720            encoder.debug_check_bounds::<DebugBrokerSetTracingEnabledRequest>(offset);
721            // Delegate to tuple encoding.
722            fidl::encoding::Encode::<DebugBrokerSetTracingEnabledRequest, D>::encode(
723                (<bool as fidl::encoding::ValueTypeMarker>::borrow(&self.enabled),),
724                encoder,
725                offset,
726                _depth,
727            )
728        }
729    }
730    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<bool, D>>
731        fidl::encoding::Encode<DebugBrokerSetTracingEnabledRequest, D> for (T0,)
732    {
733        #[inline]
734        unsafe fn encode(
735            self,
736            encoder: &mut fidl::encoding::Encoder<'_, D>,
737            offset: usize,
738            depth: fidl::encoding::Depth,
739        ) -> fidl::Result<()> {
740            encoder.debug_check_bounds::<DebugBrokerSetTracingEnabledRequest>(offset);
741            // Zero out padding regions. There's no need to apply masks
742            // because the unmasked parts will be overwritten by fields.
743            // Write the fields.
744            self.0.encode(encoder, offset + 0, depth)?;
745            Ok(())
746        }
747    }
748
749    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
750        for DebugBrokerSetTracingEnabledRequest
751    {
752        #[inline(always)]
753        fn new_empty() -> Self {
754            Self { enabled: fidl::new_empty!(bool, D) }
755        }
756
757        #[inline]
758        unsafe fn decode(
759            &mut self,
760            decoder: &mut fidl::encoding::Decoder<'_, D>,
761            offset: usize,
762            _depth: fidl::encoding::Depth,
763        ) -> fidl::Result<()> {
764            decoder.debug_check_bounds::<Self>(offset);
765            // Verify that padding bytes are zero.
766            fidl::decode!(bool, D, &mut self.enabled, decoder, offset + 0, _depth)?;
767            Ok(())
768        }
769    }
770
771    impl fidl::encoding::ValueTypeMarker for DebugBrokerSetTracingEnabledResponse {
772        type Borrowed<'a> = &'a Self;
773        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
774            value
775        }
776    }
777
778    unsafe impl fidl::encoding::TypeMarker for DebugBrokerSetTracingEnabledResponse {
779        type Owned = Self;
780
781        #[inline(always)]
782        fn inline_align(_context: fidl::encoding::Context) -> usize {
783            4
784        }
785
786        #[inline(always)]
787        fn inline_size(_context: fidl::encoding::Context) -> usize {
788            4
789        }
790        #[inline(always)]
791        fn encode_is_copy() -> bool {
792            true
793        }
794
795        #[inline(always)]
796        fn decode_is_copy() -> bool {
797            true
798        }
799    }
800
801    unsafe impl<D: fidl::encoding::ResourceDialect>
802        fidl::encoding::Encode<DebugBrokerSetTracingEnabledResponse, D>
803        for &DebugBrokerSetTracingEnabledResponse
804    {
805        #[inline]
806        unsafe fn encode(
807            self,
808            encoder: &mut fidl::encoding::Encoder<'_, D>,
809            offset: usize,
810            _depth: fidl::encoding::Depth,
811        ) -> fidl::Result<()> {
812            encoder.debug_check_bounds::<DebugBrokerSetTracingEnabledResponse>(offset);
813            unsafe {
814                // Copy the object into the buffer.
815                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
816                (buf_ptr as *mut DebugBrokerSetTracingEnabledResponse)
817                    .write_unaligned((self as *const DebugBrokerSetTracingEnabledResponse).read());
818                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
819                // done second because the memcpy will write garbage to these bytes.
820            }
821            Ok(())
822        }
823    }
824    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i32, D>>
825        fidl::encoding::Encode<DebugBrokerSetTracingEnabledResponse, D> for (T0,)
826    {
827        #[inline]
828        unsafe fn encode(
829            self,
830            encoder: &mut fidl::encoding::Encoder<'_, D>,
831            offset: usize,
832            depth: fidl::encoding::Depth,
833        ) -> fidl::Result<()> {
834            encoder.debug_check_bounds::<DebugBrokerSetTracingEnabledResponse>(offset);
835            // Zero out padding regions. There's no need to apply masks
836            // because the unmasked parts will be overwritten by fields.
837            // Write the fields.
838            self.0.encode(encoder, offset + 0, depth)?;
839            Ok(())
840        }
841    }
842
843    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
844        for DebugBrokerSetTracingEnabledResponse
845    {
846        #[inline(always)]
847        fn new_empty() -> Self {
848            Self { status: fidl::new_empty!(i32, D) }
849        }
850
851        #[inline]
852        unsafe fn decode(
853            &mut self,
854            decoder: &mut fidl::encoding::Decoder<'_, D>,
855            offset: usize,
856            _depth: fidl::encoding::Depth,
857        ) -> fidl::Result<()> {
858            decoder.debug_check_bounds::<Self>(offset);
859            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
860            // Verify that padding bytes are zero.
861            // Copy from the buffer into the object.
862            unsafe {
863                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
864            }
865            Ok(())
866        }
867    }
868
869    impl fidl::encoding::ValueTypeMarker for StatsGetCpuLoadRequest {
870        type Borrowed<'a> = &'a Self;
871        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
872            value
873        }
874    }
875
876    unsafe impl fidl::encoding::TypeMarker for StatsGetCpuLoadRequest {
877        type Owned = Self;
878
879        #[inline(always)]
880        fn inline_align(_context: fidl::encoding::Context) -> usize {
881            8
882        }
883
884        #[inline(always)]
885        fn inline_size(_context: fidl::encoding::Context) -> usize {
886            8
887        }
888        #[inline(always)]
889        fn encode_is_copy() -> bool {
890            true
891        }
892
893        #[inline(always)]
894        fn decode_is_copy() -> bool {
895            true
896        }
897    }
898
899    unsafe impl<D: fidl::encoding::ResourceDialect>
900        fidl::encoding::Encode<StatsGetCpuLoadRequest, D> for &StatsGetCpuLoadRequest
901    {
902        #[inline]
903        unsafe fn encode(
904            self,
905            encoder: &mut fidl::encoding::Encoder<'_, D>,
906            offset: usize,
907            _depth: fidl::encoding::Depth,
908        ) -> fidl::Result<()> {
909            encoder.debug_check_bounds::<StatsGetCpuLoadRequest>(offset);
910            unsafe {
911                // Copy the object into the buffer.
912                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
913                (buf_ptr as *mut StatsGetCpuLoadRequest)
914                    .write_unaligned((self as *const StatsGetCpuLoadRequest).read());
915                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
916                // done second because the memcpy will write garbage to these bytes.
917            }
918            Ok(())
919        }
920    }
921    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
922        fidl::encoding::Encode<StatsGetCpuLoadRequest, D> for (T0,)
923    {
924        #[inline]
925        unsafe fn encode(
926            self,
927            encoder: &mut fidl::encoding::Encoder<'_, D>,
928            offset: usize,
929            depth: fidl::encoding::Depth,
930        ) -> fidl::Result<()> {
931            encoder.debug_check_bounds::<StatsGetCpuLoadRequest>(offset);
932            // Zero out padding regions. There's no need to apply masks
933            // because the unmasked parts will be overwritten by fields.
934            // Write the fields.
935            self.0.encode(encoder, offset + 0, depth)?;
936            Ok(())
937        }
938    }
939
940    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
941        for StatsGetCpuLoadRequest
942    {
943        #[inline(always)]
944        fn new_empty() -> Self {
945            Self { duration: fidl::new_empty!(i64, D) }
946        }
947
948        #[inline]
949        unsafe fn decode(
950            &mut self,
951            decoder: &mut fidl::encoding::Decoder<'_, D>,
952            offset: usize,
953            _depth: fidl::encoding::Depth,
954        ) -> fidl::Result<()> {
955            decoder.debug_check_bounds::<Self>(offset);
956            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
957            // Verify that padding bytes are zero.
958            // Copy from the buffer into the object.
959            unsafe {
960                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
961            }
962            Ok(())
963        }
964    }
965
966    impl fidl::encoding::ValueTypeMarker for StatsGetCpuLoadResponse {
967        type Borrowed<'a> = &'a Self;
968        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
969            value
970        }
971    }
972
973    unsafe impl fidl::encoding::TypeMarker for StatsGetCpuLoadResponse {
974        type Owned = Self;
975
976        #[inline(always)]
977        fn inline_align(_context: fidl::encoding::Context) -> usize {
978            8
979        }
980
981        #[inline(always)]
982        fn inline_size(_context: fidl::encoding::Context) -> usize {
983            16
984        }
985    }
986
987    unsafe impl<D: fidl::encoding::ResourceDialect>
988        fidl::encoding::Encode<StatsGetCpuLoadResponse, D> for &StatsGetCpuLoadResponse
989    {
990        #[inline]
991        unsafe fn encode(
992            self,
993            encoder: &mut fidl::encoding::Encoder<'_, D>,
994            offset: usize,
995            _depth: fidl::encoding::Depth,
996        ) -> fidl::Result<()> {
997            encoder.debug_check_bounds::<StatsGetCpuLoadResponse>(offset);
998            // Delegate to tuple encoding.
999            fidl::encoding::Encode::<StatsGetCpuLoadResponse, D>::encode(
1000                (<fidl::encoding::Vector<f32, 512> as fidl::encoding::ValueTypeMarker>::borrow(
1001                    &self.per_cpu_load,
1002                ),),
1003                encoder,
1004                offset,
1005                _depth,
1006            )
1007        }
1008    }
1009    unsafe impl<
1010        D: fidl::encoding::ResourceDialect,
1011        T0: fidl::encoding::Encode<fidl::encoding::Vector<f32, 512>, D>,
1012    > fidl::encoding::Encode<StatsGetCpuLoadResponse, D> for (T0,)
1013    {
1014        #[inline]
1015        unsafe fn encode(
1016            self,
1017            encoder: &mut fidl::encoding::Encoder<'_, D>,
1018            offset: usize,
1019            depth: fidl::encoding::Depth,
1020        ) -> fidl::Result<()> {
1021            encoder.debug_check_bounds::<StatsGetCpuLoadResponse>(offset);
1022            // Zero out padding regions. There's no need to apply masks
1023            // because the unmasked parts will be overwritten by fields.
1024            // Write the fields.
1025            self.0.encode(encoder, offset + 0, depth)?;
1026            Ok(())
1027        }
1028    }
1029
1030    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1031        for StatsGetCpuLoadResponse
1032    {
1033        #[inline(always)]
1034        fn new_empty() -> Self {
1035            Self { per_cpu_load: fidl::new_empty!(fidl::encoding::Vector<f32, 512>, D) }
1036        }
1037
1038        #[inline]
1039        unsafe fn decode(
1040            &mut self,
1041            decoder: &mut fidl::encoding::Decoder<'_, D>,
1042            offset: usize,
1043            _depth: fidl::encoding::Depth,
1044        ) -> fidl::Result<()> {
1045            decoder.debug_check_bounds::<Self>(offset);
1046            // Verify that padding bytes are zero.
1047            fidl::decode!(fidl::encoding::Vector<f32, 512>, D, &mut self.per_cpu_load, decoder, offset + 0, _depth)?;
1048            Ok(())
1049        }
1050    }
1051
1052    impl fidl::encoding::ValueTypeMarker for StatsGetCpuStatsResponse {
1053        type Borrowed<'a> = &'a Self;
1054        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1055            value
1056        }
1057    }
1058
1059    unsafe impl fidl::encoding::TypeMarker for StatsGetCpuStatsResponse {
1060        type Owned = Self;
1061
1062        #[inline(always)]
1063        fn inline_align(_context: fidl::encoding::Context) -> usize {
1064            8
1065        }
1066
1067        #[inline(always)]
1068        fn inline_size(_context: fidl::encoding::Context) -> usize {
1069            24
1070        }
1071    }
1072
1073    unsafe impl<D: fidl::encoding::ResourceDialect>
1074        fidl::encoding::Encode<StatsGetCpuStatsResponse, D> for &StatsGetCpuStatsResponse
1075    {
1076        #[inline]
1077        unsafe fn encode(
1078            self,
1079            encoder: &mut fidl::encoding::Encoder<'_, D>,
1080            offset: usize,
1081            _depth: fidl::encoding::Depth,
1082        ) -> fidl::Result<()> {
1083            encoder.debug_check_bounds::<StatsGetCpuStatsResponse>(offset);
1084            // Delegate to tuple encoding.
1085            fidl::encoding::Encode::<StatsGetCpuStatsResponse, D>::encode(
1086                (<CpuStats as fidl::encoding::ValueTypeMarker>::borrow(&self.stats),),
1087                encoder,
1088                offset,
1089                _depth,
1090            )
1091        }
1092    }
1093    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<CpuStats, D>>
1094        fidl::encoding::Encode<StatsGetCpuStatsResponse, D> for (T0,)
1095    {
1096        #[inline]
1097        unsafe fn encode(
1098            self,
1099            encoder: &mut fidl::encoding::Encoder<'_, D>,
1100            offset: usize,
1101            depth: fidl::encoding::Depth,
1102        ) -> fidl::Result<()> {
1103            encoder.debug_check_bounds::<StatsGetCpuStatsResponse>(offset);
1104            // Zero out padding regions. There's no need to apply masks
1105            // because the unmasked parts will be overwritten by fields.
1106            // Write the fields.
1107            self.0.encode(encoder, offset + 0, depth)?;
1108            Ok(())
1109        }
1110    }
1111
1112    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1113        for StatsGetCpuStatsResponse
1114    {
1115        #[inline(always)]
1116        fn new_empty() -> Self {
1117            Self { stats: fidl::new_empty!(CpuStats, D) }
1118        }
1119
1120        #[inline]
1121        unsafe fn decode(
1122            &mut self,
1123            decoder: &mut fidl::encoding::Decoder<'_, D>,
1124            offset: usize,
1125            _depth: fidl::encoding::Depth,
1126        ) -> fidl::Result<()> {
1127            decoder.debug_check_bounds::<Self>(offset);
1128            // Verify that padding bytes are zero.
1129            fidl::decode!(CpuStats, D, &mut self.stats, decoder, offset + 0, _depth)?;
1130            Ok(())
1131        }
1132    }
1133
1134    impl fidl::encoding::ValueTypeMarker for StatsGetMemoryStatsExtendedResponse {
1135        type Borrowed<'a> = &'a Self;
1136        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1137            value
1138        }
1139    }
1140
1141    unsafe impl fidl::encoding::TypeMarker for StatsGetMemoryStatsExtendedResponse {
1142        type Owned = Self;
1143
1144        #[inline(always)]
1145        fn inline_align(_context: fidl::encoding::Context) -> usize {
1146            8
1147        }
1148
1149        #[inline(always)]
1150        fn inline_size(_context: fidl::encoding::Context) -> usize {
1151            16
1152        }
1153    }
1154
1155    unsafe impl<D: fidl::encoding::ResourceDialect>
1156        fidl::encoding::Encode<StatsGetMemoryStatsExtendedResponse, D>
1157        for &StatsGetMemoryStatsExtendedResponse
1158    {
1159        #[inline]
1160        unsafe fn encode(
1161            self,
1162            encoder: &mut fidl::encoding::Encoder<'_, D>,
1163            offset: usize,
1164            _depth: fidl::encoding::Depth,
1165        ) -> fidl::Result<()> {
1166            encoder.debug_check_bounds::<StatsGetMemoryStatsExtendedResponse>(offset);
1167            // Delegate to tuple encoding.
1168            fidl::encoding::Encode::<StatsGetMemoryStatsExtendedResponse, D>::encode(
1169                (<MemoryStatsExtended as fidl::encoding::ValueTypeMarker>::borrow(&self.stats),),
1170                encoder,
1171                offset,
1172                _depth,
1173            )
1174        }
1175    }
1176    unsafe impl<
1177        D: fidl::encoding::ResourceDialect,
1178        T0: fidl::encoding::Encode<MemoryStatsExtended, D>,
1179    > fidl::encoding::Encode<StatsGetMemoryStatsExtendedResponse, D> for (T0,)
1180    {
1181        #[inline]
1182        unsafe fn encode(
1183            self,
1184            encoder: &mut fidl::encoding::Encoder<'_, D>,
1185            offset: usize,
1186            depth: fidl::encoding::Depth,
1187        ) -> fidl::Result<()> {
1188            encoder.debug_check_bounds::<StatsGetMemoryStatsExtendedResponse>(offset);
1189            // Zero out padding regions. There's no need to apply masks
1190            // because the unmasked parts will be overwritten by fields.
1191            // Write the fields.
1192            self.0.encode(encoder, offset + 0, depth)?;
1193            Ok(())
1194        }
1195    }
1196
1197    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1198        for StatsGetMemoryStatsExtendedResponse
1199    {
1200        #[inline(always)]
1201        fn new_empty() -> Self {
1202            Self { stats: fidl::new_empty!(MemoryStatsExtended, D) }
1203        }
1204
1205        #[inline]
1206        unsafe fn decode(
1207            &mut self,
1208            decoder: &mut fidl::encoding::Decoder<'_, D>,
1209            offset: usize,
1210            _depth: fidl::encoding::Depth,
1211        ) -> fidl::Result<()> {
1212            decoder.debug_check_bounds::<Self>(offset);
1213            // Verify that padding bytes are zero.
1214            fidl::decode!(MemoryStatsExtended, D, &mut self.stats, decoder, offset + 0, _depth)?;
1215            Ok(())
1216        }
1217    }
1218
1219    impl fidl::encoding::ValueTypeMarker for StatsGetMemoryStatsResponse {
1220        type Borrowed<'a> = &'a Self;
1221        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1222            value
1223        }
1224    }
1225
1226    unsafe impl fidl::encoding::TypeMarker for StatsGetMemoryStatsResponse {
1227        type Owned = Self;
1228
1229        #[inline(always)]
1230        fn inline_align(_context: fidl::encoding::Context) -> usize {
1231            8
1232        }
1233
1234        #[inline(always)]
1235        fn inline_size(_context: fidl::encoding::Context) -> usize {
1236            16
1237        }
1238    }
1239
1240    unsafe impl<D: fidl::encoding::ResourceDialect>
1241        fidl::encoding::Encode<StatsGetMemoryStatsResponse, D> for &StatsGetMemoryStatsResponse
1242    {
1243        #[inline]
1244        unsafe fn encode(
1245            self,
1246            encoder: &mut fidl::encoding::Encoder<'_, D>,
1247            offset: usize,
1248            _depth: fidl::encoding::Depth,
1249        ) -> fidl::Result<()> {
1250            encoder.debug_check_bounds::<StatsGetMemoryStatsResponse>(offset);
1251            // Delegate to tuple encoding.
1252            fidl::encoding::Encode::<StatsGetMemoryStatsResponse, D>::encode(
1253                (<MemoryStats as fidl::encoding::ValueTypeMarker>::borrow(&self.stats),),
1254                encoder,
1255                offset,
1256                _depth,
1257            )
1258        }
1259    }
1260    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<MemoryStats, D>>
1261        fidl::encoding::Encode<StatsGetMemoryStatsResponse, D> for (T0,)
1262    {
1263        #[inline]
1264        unsafe fn encode(
1265            self,
1266            encoder: &mut fidl::encoding::Encoder<'_, D>,
1267            offset: usize,
1268            depth: fidl::encoding::Depth,
1269        ) -> fidl::Result<()> {
1270            encoder.debug_check_bounds::<StatsGetMemoryStatsResponse>(offset);
1271            // Zero out padding regions. There's no need to apply masks
1272            // because the unmasked parts will be overwritten by fields.
1273            // Write the fields.
1274            self.0.encode(encoder, offset + 0, depth)?;
1275            Ok(())
1276        }
1277    }
1278
1279    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1280        for StatsGetMemoryStatsResponse
1281    {
1282        #[inline(always)]
1283        fn new_empty() -> Self {
1284            Self { stats: fidl::new_empty!(MemoryStats, D) }
1285        }
1286
1287        #[inline]
1288        unsafe fn decode(
1289            &mut self,
1290            decoder: &mut fidl::encoding::Decoder<'_, D>,
1291            offset: usize,
1292            _depth: fidl::encoding::Depth,
1293        ) -> fidl::Result<()> {
1294            decoder.debug_check_bounds::<Self>(offset);
1295            // Verify that padding bytes are zero.
1296            fidl::decode!(MemoryStats, D, &mut self.stats, decoder, offset + 0, _depth)?;
1297            Ok(())
1298        }
1299    }
1300
1301    impl MemoryStats {
1302        #[inline(always)]
1303        fn max_ordinal_present(&self) -> u64 {
1304            if let Some(_) = self.vmo_discardable_unlocked_bytes {
1305                return 19;
1306            }
1307            if let Some(_) = self.vmo_discardable_locked_bytes {
1308                return 18;
1309            }
1310            if let Some(_) = self.vmo_reclaim_disabled_bytes {
1311                return 17;
1312            }
1313            if let Some(_) = self.vmo_reclaim_oldest_bytes {
1314                return 16;
1315            }
1316            if let Some(_) = self.vmo_reclaim_newest_bytes {
1317                return 15;
1318            }
1319            if let Some(_) = self.vmo_reclaim_total_bytes {
1320                return 14;
1321            }
1322            if let Some(_) = self.zram_bytes {
1323                return 13;
1324            }
1325            if let Some(_) = self.slab_bytes {
1326                return 12;
1327            }
1328            if let Some(_) = self.cache_bytes {
1329                return 11;
1330            }
1331            if let Some(_) = self.free_loaned_bytes {
1332                return 10;
1333            }
1334            if let Some(_) = self.other_bytes {
1335                return 9;
1336            }
1337            if let Some(_) = self.ipc_bytes {
1338                return 8;
1339            }
1340            if let Some(_) = self.mmu_overhead_bytes {
1341                return 7;
1342            }
1343            if let Some(_) = self.vmo_bytes {
1344                return 6;
1345            }
1346            if let Some(_) = self.free_heap_bytes {
1347                return 5;
1348            }
1349            if let Some(_) = self.total_heap_bytes {
1350                return 4;
1351            }
1352            if let Some(_) = self.wired_bytes {
1353                return 3;
1354            }
1355            if let Some(_) = self.free_bytes {
1356                return 2;
1357            }
1358            if let Some(_) = self.total_bytes {
1359                return 1;
1360            }
1361            0
1362        }
1363    }
1364
1365    impl fidl::encoding::ValueTypeMarker for MemoryStats {
1366        type Borrowed<'a> = &'a Self;
1367        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1368            value
1369        }
1370    }
1371
1372    unsafe impl fidl::encoding::TypeMarker for MemoryStats {
1373        type Owned = Self;
1374
1375        #[inline(always)]
1376        fn inline_align(_context: fidl::encoding::Context) -> usize {
1377            8
1378        }
1379
1380        #[inline(always)]
1381        fn inline_size(_context: fidl::encoding::Context) -> usize {
1382            16
1383        }
1384    }
1385
1386    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<MemoryStats, D>
1387        for &MemoryStats
1388    {
1389        unsafe fn encode(
1390            self,
1391            encoder: &mut fidl::encoding::Encoder<'_, D>,
1392            offset: usize,
1393            mut depth: fidl::encoding::Depth,
1394        ) -> fidl::Result<()> {
1395            encoder.debug_check_bounds::<MemoryStats>(offset);
1396            // Vector header
1397            let max_ordinal: u64 = self.max_ordinal_present();
1398            encoder.write_num(max_ordinal, offset);
1399            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1400            // Calling encoder.out_of_line_offset(0) is not allowed.
1401            if max_ordinal == 0 {
1402                return Ok(());
1403            }
1404            depth.increment()?;
1405            let envelope_size = 8;
1406            let bytes_len = max_ordinal as usize * envelope_size;
1407            #[allow(unused_variables)]
1408            let offset = encoder.out_of_line_offset(bytes_len);
1409            let mut _prev_end_offset: usize = 0;
1410            if 1 > max_ordinal {
1411                return Ok(());
1412            }
1413
1414            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1415            // are envelope_size bytes.
1416            let cur_offset: usize = (1 - 1) * envelope_size;
1417
1418            // Zero reserved fields.
1419            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1420
1421            // Safety:
1422            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1423            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1424            //   envelope_size bytes, there is always sufficient room.
1425            fidl::encoding::encode_in_envelope_optional::<u64, D>(
1426                self.total_bytes.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1427                encoder,
1428                offset + cur_offset,
1429                depth,
1430            )?;
1431
1432            _prev_end_offset = cur_offset + envelope_size;
1433            if 2 > max_ordinal {
1434                return Ok(());
1435            }
1436
1437            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1438            // are envelope_size bytes.
1439            let cur_offset: usize = (2 - 1) * envelope_size;
1440
1441            // Zero reserved fields.
1442            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1443
1444            // Safety:
1445            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1446            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1447            //   envelope_size bytes, there is always sufficient room.
1448            fidl::encoding::encode_in_envelope_optional::<u64, D>(
1449                self.free_bytes.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1450                encoder,
1451                offset + cur_offset,
1452                depth,
1453            )?;
1454
1455            _prev_end_offset = cur_offset + envelope_size;
1456            if 3 > max_ordinal {
1457                return Ok(());
1458            }
1459
1460            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1461            // are envelope_size bytes.
1462            let cur_offset: usize = (3 - 1) * envelope_size;
1463
1464            // Zero reserved fields.
1465            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1466
1467            // Safety:
1468            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1469            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1470            //   envelope_size bytes, there is always sufficient room.
1471            fidl::encoding::encode_in_envelope_optional::<u64, D>(
1472                self.wired_bytes.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1473                encoder,
1474                offset + cur_offset,
1475                depth,
1476            )?;
1477
1478            _prev_end_offset = cur_offset + envelope_size;
1479            if 4 > max_ordinal {
1480                return Ok(());
1481            }
1482
1483            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1484            // are envelope_size bytes.
1485            let cur_offset: usize = (4 - 1) * envelope_size;
1486
1487            // Zero reserved fields.
1488            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1489
1490            // Safety:
1491            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1492            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1493            //   envelope_size bytes, there is always sufficient room.
1494            fidl::encoding::encode_in_envelope_optional::<u64, D>(
1495                self.total_heap_bytes
1496                    .as_ref()
1497                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1498                encoder,
1499                offset + cur_offset,
1500                depth,
1501            )?;
1502
1503            _prev_end_offset = cur_offset + envelope_size;
1504            if 5 > max_ordinal {
1505                return Ok(());
1506            }
1507
1508            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1509            // are envelope_size bytes.
1510            let cur_offset: usize = (5 - 1) * envelope_size;
1511
1512            // Zero reserved fields.
1513            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1514
1515            // Safety:
1516            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1517            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1518            //   envelope_size bytes, there is always sufficient room.
1519            fidl::encoding::encode_in_envelope_optional::<u64, D>(
1520                self.free_heap_bytes.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1521                encoder,
1522                offset + cur_offset,
1523                depth,
1524            )?;
1525
1526            _prev_end_offset = cur_offset + envelope_size;
1527            if 6 > max_ordinal {
1528                return Ok(());
1529            }
1530
1531            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1532            // are envelope_size bytes.
1533            let cur_offset: usize = (6 - 1) * envelope_size;
1534
1535            // Zero reserved fields.
1536            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1537
1538            // Safety:
1539            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1540            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1541            //   envelope_size bytes, there is always sufficient room.
1542            fidl::encoding::encode_in_envelope_optional::<u64, D>(
1543                self.vmo_bytes.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1544                encoder,
1545                offset + cur_offset,
1546                depth,
1547            )?;
1548
1549            _prev_end_offset = cur_offset + envelope_size;
1550            if 7 > max_ordinal {
1551                return Ok(());
1552            }
1553
1554            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1555            // are envelope_size bytes.
1556            let cur_offset: usize = (7 - 1) * envelope_size;
1557
1558            // Zero reserved fields.
1559            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1560
1561            // Safety:
1562            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1563            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1564            //   envelope_size bytes, there is always sufficient room.
1565            fidl::encoding::encode_in_envelope_optional::<u64, D>(
1566                self.mmu_overhead_bytes
1567                    .as_ref()
1568                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1569                encoder,
1570                offset + cur_offset,
1571                depth,
1572            )?;
1573
1574            _prev_end_offset = cur_offset + envelope_size;
1575            if 8 > max_ordinal {
1576                return Ok(());
1577            }
1578
1579            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1580            // are envelope_size bytes.
1581            let cur_offset: usize = (8 - 1) * envelope_size;
1582
1583            // Zero reserved fields.
1584            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1585
1586            // Safety:
1587            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1588            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1589            //   envelope_size bytes, there is always sufficient room.
1590            fidl::encoding::encode_in_envelope_optional::<u64, D>(
1591                self.ipc_bytes.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1592                encoder,
1593                offset + cur_offset,
1594                depth,
1595            )?;
1596
1597            _prev_end_offset = cur_offset + envelope_size;
1598            if 9 > max_ordinal {
1599                return Ok(());
1600            }
1601
1602            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1603            // are envelope_size bytes.
1604            let cur_offset: usize = (9 - 1) * envelope_size;
1605
1606            // Zero reserved fields.
1607            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1608
1609            // Safety:
1610            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1611            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1612            //   envelope_size bytes, there is always sufficient room.
1613            fidl::encoding::encode_in_envelope_optional::<u64, D>(
1614                self.other_bytes.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1615                encoder,
1616                offset + cur_offset,
1617                depth,
1618            )?;
1619
1620            _prev_end_offset = cur_offset + envelope_size;
1621            if 10 > max_ordinal {
1622                return Ok(());
1623            }
1624
1625            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1626            // are envelope_size bytes.
1627            let cur_offset: usize = (10 - 1) * envelope_size;
1628
1629            // Zero reserved fields.
1630            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1631
1632            // Safety:
1633            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1634            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1635            //   envelope_size bytes, there is always sufficient room.
1636            fidl::encoding::encode_in_envelope_optional::<u64, D>(
1637                self.free_loaned_bytes
1638                    .as_ref()
1639                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1640                encoder,
1641                offset + cur_offset,
1642                depth,
1643            )?;
1644
1645            _prev_end_offset = cur_offset + envelope_size;
1646            if 11 > max_ordinal {
1647                return Ok(());
1648            }
1649
1650            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1651            // are envelope_size bytes.
1652            let cur_offset: usize = (11 - 1) * envelope_size;
1653
1654            // Zero reserved fields.
1655            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1656
1657            // Safety:
1658            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1659            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1660            //   envelope_size bytes, there is always sufficient room.
1661            fidl::encoding::encode_in_envelope_optional::<u64, D>(
1662                self.cache_bytes.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1663                encoder,
1664                offset + cur_offset,
1665                depth,
1666            )?;
1667
1668            _prev_end_offset = cur_offset + envelope_size;
1669            if 12 > max_ordinal {
1670                return Ok(());
1671            }
1672
1673            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1674            // are envelope_size bytes.
1675            let cur_offset: usize = (12 - 1) * envelope_size;
1676
1677            // Zero reserved fields.
1678            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1679
1680            // Safety:
1681            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1682            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1683            //   envelope_size bytes, there is always sufficient room.
1684            fidl::encoding::encode_in_envelope_optional::<u64, D>(
1685                self.slab_bytes.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1686                encoder,
1687                offset + cur_offset,
1688                depth,
1689            )?;
1690
1691            _prev_end_offset = cur_offset + envelope_size;
1692            if 13 > max_ordinal {
1693                return Ok(());
1694            }
1695
1696            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1697            // are envelope_size bytes.
1698            let cur_offset: usize = (13 - 1) * envelope_size;
1699
1700            // Zero reserved fields.
1701            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1702
1703            // Safety:
1704            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1705            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1706            //   envelope_size bytes, there is always sufficient room.
1707            fidl::encoding::encode_in_envelope_optional::<u64, D>(
1708                self.zram_bytes.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1709                encoder,
1710                offset + cur_offset,
1711                depth,
1712            )?;
1713
1714            _prev_end_offset = cur_offset + envelope_size;
1715            if 14 > max_ordinal {
1716                return Ok(());
1717            }
1718
1719            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1720            // are envelope_size bytes.
1721            let cur_offset: usize = (14 - 1) * envelope_size;
1722
1723            // Zero reserved fields.
1724            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1725
1726            // Safety:
1727            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1728            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1729            //   envelope_size bytes, there is always sufficient room.
1730            fidl::encoding::encode_in_envelope_optional::<u64, D>(
1731                self.vmo_reclaim_total_bytes
1732                    .as_ref()
1733                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1734                encoder,
1735                offset + cur_offset,
1736                depth,
1737            )?;
1738
1739            _prev_end_offset = cur_offset + envelope_size;
1740            if 15 > max_ordinal {
1741                return Ok(());
1742            }
1743
1744            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1745            // are envelope_size bytes.
1746            let cur_offset: usize = (15 - 1) * envelope_size;
1747
1748            // Zero reserved fields.
1749            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1750
1751            // Safety:
1752            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1753            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1754            //   envelope_size bytes, there is always sufficient room.
1755            fidl::encoding::encode_in_envelope_optional::<u64, D>(
1756                self.vmo_reclaim_newest_bytes
1757                    .as_ref()
1758                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1759                encoder,
1760                offset + cur_offset,
1761                depth,
1762            )?;
1763
1764            _prev_end_offset = cur_offset + envelope_size;
1765            if 16 > max_ordinal {
1766                return Ok(());
1767            }
1768
1769            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1770            // are envelope_size bytes.
1771            let cur_offset: usize = (16 - 1) * envelope_size;
1772
1773            // Zero reserved fields.
1774            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1775
1776            // Safety:
1777            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1778            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1779            //   envelope_size bytes, there is always sufficient room.
1780            fidl::encoding::encode_in_envelope_optional::<u64, D>(
1781                self.vmo_reclaim_oldest_bytes
1782                    .as_ref()
1783                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1784                encoder,
1785                offset + cur_offset,
1786                depth,
1787            )?;
1788
1789            _prev_end_offset = cur_offset + envelope_size;
1790            if 17 > max_ordinal {
1791                return Ok(());
1792            }
1793
1794            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1795            // are envelope_size bytes.
1796            let cur_offset: usize = (17 - 1) * envelope_size;
1797
1798            // Zero reserved fields.
1799            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1800
1801            // Safety:
1802            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1803            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1804            //   envelope_size bytes, there is always sufficient room.
1805            fidl::encoding::encode_in_envelope_optional::<u64, D>(
1806                self.vmo_reclaim_disabled_bytes
1807                    .as_ref()
1808                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1809                encoder,
1810                offset + cur_offset,
1811                depth,
1812            )?;
1813
1814            _prev_end_offset = cur_offset + envelope_size;
1815            if 18 > max_ordinal {
1816                return Ok(());
1817            }
1818
1819            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1820            // are envelope_size bytes.
1821            let cur_offset: usize = (18 - 1) * envelope_size;
1822
1823            // Zero reserved fields.
1824            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1825
1826            // Safety:
1827            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1828            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1829            //   envelope_size bytes, there is always sufficient room.
1830            fidl::encoding::encode_in_envelope_optional::<u64, D>(
1831                self.vmo_discardable_locked_bytes
1832                    .as_ref()
1833                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1834                encoder,
1835                offset + cur_offset,
1836                depth,
1837            )?;
1838
1839            _prev_end_offset = cur_offset + envelope_size;
1840            if 19 > max_ordinal {
1841                return Ok(());
1842            }
1843
1844            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1845            // are envelope_size bytes.
1846            let cur_offset: usize = (19 - 1) * envelope_size;
1847
1848            // Zero reserved fields.
1849            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1850
1851            // Safety:
1852            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1853            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1854            //   envelope_size bytes, there is always sufficient room.
1855            fidl::encoding::encode_in_envelope_optional::<u64, D>(
1856                self.vmo_discardable_unlocked_bytes
1857                    .as_ref()
1858                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1859                encoder,
1860                offset + cur_offset,
1861                depth,
1862            )?;
1863
1864            _prev_end_offset = cur_offset + envelope_size;
1865
1866            Ok(())
1867        }
1868    }
1869
1870    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MemoryStats {
1871        #[inline(always)]
1872        fn new_empty() -> Self {
1873            Self::default()
1874        }
1875
1876        unsafe fn decode(
1877            &mut self,
1878            decoder: &mut fidl::encoding::Decoder<'_, D>,
1879            offset: usize,
1880            mut depth: fidl::encoding::Depth,
1881        ) -> fidl::Result<()> {
1882            decoder.debug_check_bounds::<Self>(offset);
1883            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1884                None => return Err(fidl::Error::NotNullable),
1885                Some(len) => len,
1886            };
1887            // Calling decoder.out_of_line_offset(0) is not allowed.
1888            if len == 0 {
1889                return Ok(());
1890            };
1891            depth.increment()?;
1892            let envelope_size = 8;
1893            let bytes_len = len * envelope_size;
1894            let offset = decoder.out_of_line_offset(bytes_len)?;
1895            // Decode the envelope for each type.
1896            let mut _next_ordinal_to_read = 0;
1897            let mut next_offset = offset;
1898            let end_offset = offset + bytes_len;
1899            _next_ordinal_to_read += 1;
1900            if next_offset >= end_offset {
1901                return Ok(());
1902            }
1903
1904            // Decode unknown envelopes for gaps in ordinals.
1905            while _next_ordinal_to_read < 1 {
1906                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1907                _next_ordinal_to_read += 1;
1908                next_offset += envelope_size;
1909            }
1910
1911            let next_out_of_line = decoder.next_out_of_line();
1912            let handles_before = decoder.remaining_handles();
1913            if let Some((inlined, num_bytes, num_handles)) =
1914                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1915            {
1916                let member_inline_size =
1917                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1918                if inlined != (member_inline_size <= 4) {
1919                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1920                }
1921                let inner_offset;
1922                let mut inner_depth = depth.clone();
1923                if inlined {
1924                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1925                    inner_offset = next_offset;
1926                } else {
1927                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1928                    inner_depth.increment()?;
1929                }
1930                let val_ref = self.total_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
1931                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1932                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1933                {
1934                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1935                }
1936                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1937                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1938                }
1939            }
1940
1941            next_offset += envelope_size;
1942            _next_ordinal_to_read += 1;
1943            if next_offset >= end_offset {
1944                return Ok(());
1945            }
1946
1947            // Decode unknown envelopes for gaps in ordinals.
1948            while _next_ordinal_to_read < 2 {
1949                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1950                _next_ordinal_to_read += 1;
1951                next_offset += envelope_size;
1952            }
1953
1954            let next_out_of_line = decoder.next_out_of_line();
1955            let handles_before = decoder.remaining_handles();
1956            if let Some((inlined, num_bytes, num_handles)) =
1957                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1958            {
1959                let member_inline_size =
1960                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1961                if inlined != (member_inline_size <= 4) {
1962                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1963                }
1964                let inner_offset;
1965                let mut inner_depth = depth.clone();
1966                if inlined {
1967                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1968                    inner_offset = next_offset;
1969                } else {
1970                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1971                    inner_depth.increment()?;
1972                }
1973                let val_ref = self.free_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
1974                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1975                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1976                {
1977                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1978                }
1979                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1980                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1981                }
1982            }
1983
1984            next_offset += envelope_size;
1985            _next_ordinal_to_read += 1;
1986            if next_offset >= end_offset {
1987                return Ok(());
1988            }
1989
1990            // Decode unknown envelopes for gaps in ordinals.
1991            while _next_ordinal_to_read < 3 {
1992                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1993                _next_ordinal_to_read += 1;
1994                next_offset += envelope_size;
1995            }
1996
1997            let next_out_of_line = decoder.next_out_of_line();
1998            let handles_before = decoder.remaining_handles();
1999            if let Some((inlined, num_bytes, num_handles)) =
2000                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2001            {
2002                let member_inline_size =
2003                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2004                if inlined != (member_inline_size <= 4) {
2005                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2006                }
2007                let inner_offset;
2008                let mut inner_depth = depth.clone();
2009                if inlined {
2010                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2011                    inner_offset = next_offset;
2012                } else {
2013                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2014                    inner_depth.increment()?;
2015                }
2016                let val_ref = self.wired_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
2017                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2018                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2019                {
2020                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2021                }
2022                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2023                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2024                }
2025            }
2026
2027            next_offset += envelope_size;
2028            _next_ordinal_to_read += 1;
2029            if next_offset >= end_offset {
2030                return Ok(());
2031            }
2032
2033            // Decode unknown envelopes for gaps in ordinals.
2034            while _next_ordinal_to_read < 4 {
2035                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2036                _next_ordinal_to_read += 1;
2037                next_offset += envelope_size;
2038            }
2039
2040            let next_out_of_line = decoder.next_out_of_line();
2041            let handles_before = decoder.remaining_handles();
2042            if let Some((inlined, num_bytes, num_handles)) =
2043                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2044            {
2045                let member_inline_size =
2046                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2047                if inlined != (member_inline_size <= 4) {
2048                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2049                }
2050                let inner_offset;
2051                let mut inner_depth = depth.clone();
2052                if inlined {
2053                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2054                    inner_offset = next_offset;
2055                } else {
2056                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2057                    inner_depth.increment()?;
2058                }
2059                let val_ref = self.total_heap_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
2060                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2061                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2062                {
2063                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2064                }
2065                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2066                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2067                }
2068            }
2069
2070            next_offset += envelope_size;
2071            _next_ordinal_to_read += 1;
2072            if next_offset >= end_offset {
2073                return Ok(());
2074            }
2075
2076            // Decode unknown envelopes for gaps in ordinals.
2077            while _next_ordinal_to_read < 5 {
2078                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2079                _next_ordinal_to_read += 1;
2080                next_offset += envelope_size;
2081            }
2082
2083            let next_out_of_line = decoder.next_out_of_line();
2084            let handles_before = decoder.remaining_handles();
2085            if let Some((inlined, num_bytes, num_handles)) =
2086                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2087            {
2088                let member_inline_size =
2089                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2090                if inlined != (member_inline_size <= 4) {
2091                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2092                }
2093                let inner_offset;
2094                let mut inner_depth = depth.clone();
2095                if inlined {
2096                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2097                    inner_offset = next_offset;
2098                } else {
2099                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2100                    inner_depth.increment()?;
2101                }
2102                let val_ref = self.free_heap_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
2103                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2104                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2105                {
2106                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2107                }
2108                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2109                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2110                }
2111            }
2112
2113            next_offset += envelope_size;
2114            _next_ordinal_to_read += 1;
2115            if next_offset >= end_offset {
2116                return Ok(());
2117            }
2118
2119            // Decode unknown envelopes for gaps in ordinals.
2120            while _next_ordinal_to_read < 6 {
2121                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2122                _next_ordinal_to_read += 1;
2123                next_offset += envelope_size;
2124            }
2125
2126            let next_out_of_line = decoder.next_out_of_line();
2127            let handles_before = decoder.remaining_handles();
2128            if let Some((inlined, num_bytes, num_handles)) =
2129                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2130            {
2131                let member_inline_size =
2132                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2133                if inlined != (member_inline_size <= 4) {
2134                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2135                }
2136                let inner_offset;
2137                let mut inner_depth = depth.clone();
2138                if inlined {
2139                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2140                    inner_offset = next_offset;
2141                } else {
2142                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2143                    inner_depth.increment()?;
2144                }
2145                let val_ref = self.vmo_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
2146                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2147                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2148                {
2149                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2150                }
2151                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2152                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2153                }
2154            }
2155
2156            next_offset += envelope_size;
2157            _next_ordinal_to_read += 1;
2158            if next_offset >= end_offset {
2159                return Ok(());
2160            }
2161
2162            // Decode unknown envelopes for gaps in ordinals.
2163            while _next_ordinal_to_read < 7 {
2164                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2165                _next_ordinal_to_read += 1;
2166                next_offset += envelope_size;
2167            }
2168
2169            let next_out_of_line = decoder.next_out_of_line();
2170            let handles_before = decoder.remaining_handles();
2171            if let Some((inlined, num_bytes, num_handles)) =
2172                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2173            {
2174                let member_inline_size =
2175                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2176                if inlined != (member_inline_size <= 4) {
2177                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2178                }
2179                let inner_offset;
2180                let mut inner_depth = depth.clone();
2181                if inlined {
2182                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2183                    inner_offset = next_offset;
2184                } else {
2185                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2186                    inner_depth.increment()?;
2187                }
2188                let val_ref =
2189                    self.mmu_overhead_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
2190                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2191                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2192                {
2193                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2194                }
2195                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2196                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2197                }
2198            }
2199
2200            next_offset += envelope_size;
2201            _next_ordinal_to_read += 1;
2202            if next_offset >= end_offset {
2203                return Ok(());
2204            }
2205
2206            // Decode unknown envelopes for gaps in ordinals.
2207            while _next_ordinal_to_read < 8 {
2208                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2209                _next_ordinal_to_read += 1;
2210                next_offset += envelope_size;
2211            }
2212
2213            let next_out_of_line = decoder.next_out_of_line();
2214            let handles_before = decoder.remaining_handles();
2215            if let Some((inlined, num_bytes, num_handles)) =
2216                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2217            {
2218                let member_inline_size =
2219                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2220                if inlined != (member_inline_size <= 4) {
2221                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2222                }
2223                let inner_offset;
2224                let mut inner_depth = depth.clone();
2225                if inlined {
2226                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2227                    inner_offset = next_offset;
2228                } else {
2229                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2230                    inner_depth.increment()?;
2231                }
2232                let val_ref = self.ipc_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
2233                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2234                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2235                {
2236                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2237                }
2238                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2239                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2240                }
2241            }
2242
2243            next_offset += envelope_size;
2244            _next_ordinal_to_read += 1;
2245            if next_offset >= end_offset {
2246                return Ok(());
2247            }
2248
2249            // Decode unknown envelopes for gaps in ordinals.
2250            while _next_ordinal_to_read < 9 {
2251                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2252                _next_ordinal_to_read += 1;
2253                next_offset += envelope_size;
2254            }
2255
2256            let next_out_of_line = decoder.next_out_of_line();
2257            let handles_before = decoder.remaining_handles();
2258            if let Some((inlined, num_bytes, num_handles)) =
2259                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2260            {
2261                let member_inline_size =
2262                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2263                if inlined != (member_inline_size <= 4) {
2264                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2265                }
2266                let inner_offset;
2267                let mut inner_depth = depth.clone();
2268                if inlined {
2269                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2270                    inner_offset = next_offset;
2271                } else {
2272                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2273                    inner_depth.increment()?;
2274                }
2275                let val_ref = self.other_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
2276                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2277                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2278                {
2279                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2280                }
2281                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2282                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2283                }
2284            }
2285
2286            next_offset += envelope_size;
2287            _next_ordinal_to_read += 1;
2288            if next_offset >= end_offset {
2289                return Ok(());
2290            }
2291
2292            // Decode unknown envelopes for gaps in ordinals.
2293            while _next_ordinal_to_read < 10 {
2294                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2295                _next_ordinal_to_read += 1;
2296                next_offset += envelope_size;
2297            }
2298
2299            let next_out_of_line = decoder.next_out_of_line();
2300            let handles_before = decoder.remaining_handles();
2301            if let Some((inlined, num_bytes, num_handles)) =
2302                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2303            {
2304                let member_inline_size =
2305                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2306                if inlined != (member_inline_size <= 4) {
2307                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2308                }
2309                let inner_offset;
2310                let mut inner_depth = depth.clone();
2311                if inlined {
2312                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2313                    inner_offset = next_offset;
2314                } else {
2315                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2316                    inner_depth.increment()?;
2317                }
2318                let val_ref =
2319                    self.free_loaned_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
2320                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2321                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2322                {
2323                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2324                }
2325                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2326                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2327                }
2328            }
2329
2330            next_offset += envelope_size;
2331            _next_ordinal_to_read += 1;
2332            if next_offset >= end_offset {
2333                return Ok(());
2334            }
2335
2336            // Decode unknown envelopes for gaps in ordinals.
2337            while _next_ordinal_to_read < 11 {
2338                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2339                _next_ordinal_to_read += 1;
2340                next_offset += envelope_size;
2341            }
2342
2343            let next_out_of_line = decoder.next_out_of_line();
2344            let handles_before = decoder.remaining_handles();
2345            if let Some((inlined, num_bytes, num_handles)) =
2346                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2347            {
2348                let member_inline_size =
2349                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2350                if inlined != (member_inline_size <= 4) {
2351                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2352                }
2353                let inner_offset;
2354                let mut inner_depth = depth.clone();
2355                if inlined {
2356                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2357                    inner_offset = next_offset;
2358                } else {
2359                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2360                    inner_depth.increment()?;
2361                }
2362                let val_ref = self.cache_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
2363                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2364                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2365                {
2366                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2367                }
2368                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2369                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2370                }
2371            }
2372
2373            next_offset += envelope_size;
2374            _next_ordinal_to_read += 1;
2375            if next_offset >= end_offset {
2376                return Ok(());
2377            }
2378
2379            // Decode unknown envelopes for gaps in ordinals.
2380            while _next_ordinal_to_read < 12 {
2381                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2382                _next_ordinal_to_read += 1;
2383                next_offset += envelope_size;
2384            }
2385
2386            let next_out_of_line = decoder.next_out_of_line();
2387            let handles_before = decoder.remaining_handles();
2388            if let Some((inlined, num_bytes, num_handles)) =
2389                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2390            {
2391                let member_inline_size =
2392                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2393                if inlined != (member_inline_size <= 4) {
2394                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2395                }
2396                let inner_offset;
2397                let mut inner_depth = depth.clone();
2398                if inlined {
2399                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2400                    inner_offset = next_offset;
2401                } else {
2402                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2403                    inner_depth.increment()?;
2404                }
2405                let val_ref = self.slab_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
2406                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2407                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2408                {
2409                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2410                }
2411                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2412                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2413                }
2414            }
2415
2416            next_offset += envelope_size;
2417            _next_ordinal_to_read += 1;
2418            if next_offset >= end_offset {
2419                return Ok(());
2420            }
2421
2422            // Decode unknown envelopes for gaps in ordinals.
2423            while _next_ordinal_to_read < 13 {
2424                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2425                _next_ordinal_to_read += 1;
2426                next_offset += envelope_size;
2427            }
2428
2429            let next_out_of_line = decoder.next_out_of_line();
2430            let handles_before = decoder.remaining_handles();
2431            if let Some((inlined, num_bytes, num_handles)) =
2432                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2433            {
2434                let member_inline_size =
2435                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2436                if inlined != (member_inline_size <= 4) {
2437                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2438                }
2439                let inner_offset;
2440                let mut inner_depth = depth.clone();
2441                if inlined {
2442                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2443                    inner_offset = next_offset;
2444                } else {
2445                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2446                    inner_depth.increment()?;
2447                }
2448                let val_ref = self.zram_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
2449                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2450                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2451                {
2452                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2453                }
2454                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2455                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2456                }
2457            }
2458
2459            next_offset += envelope_size;
2460            _next_ordinal_to_read += 1;
2461            if next_offset >= end_offset {
2462                return Ok(());
2463            }
2464
2465            // Decode unknown envelopes for gaps in ordinals.
2466            while _next_ordinal_to_read < 14 {
2467                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2468                _next_ordinal_to_read += 1;
2469                next_offset += envelope_size;
2470            }
2471
2472            let next_out_of_line = decoder.next_out_of_line();
2473            let handles_before = decoder.remaining_handles();
2474            if let Some((inlined, num_bytes, num_handles)) =
2475                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2476            {
2477                let member_inline_size =
2478                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2479                if inlined != (member_inline_size <= 4) {
2480                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2481                }
2482                let inner_offset;
2483                let mut inner_depth = depth.clone();
2484                if inlined {
2485                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2486                    inner_offset = next_offset;
2487                } else {
2488                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2489                    inner_depth.increment()?;
2490                }
2491                let val_ref =
2492                    self.vmo_reclaim_total_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
2493                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2494                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2495                {
2496                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2497                }
2498                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2499                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2500                }
2501            }
2502
2503            next_offset += envelope_size;
2504            _next_ordinal_to_read += 1;
2505            if next_offset >= end_offset {
2506                return Ok(());
2507            }
2508
2509            // Decode unknown envelopes for gaps in ordinals.
2510            while _next_ordinal_to_read < 15 {
2511                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2512                _next_ordinal_to_read += 1;
2513                next_offset += envelope_size;
2514            }
2515
2516            let next_out_of_line = decoder.next_out_of_line();
2517            let handles_before = decoder.remaining_handles();
2518            if let Some((inlined, num_bytes, num_handles)) =
2519                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2520            {
2521                let member_inline_size =
2522                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2523                if inlined != (member_inline_size <= 4) {
2524                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2525                }
2526                let inner_offset;
2527                let mut inner_depth = depth.clone();
2528                if inlined {
2529                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2530                    inner_offset = next_offset;
2531                } else {
2532                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2533                    inner_depth.increment()?;
2534                }
2535                let val_ref =
2536                    self.vmo_reclaim_newest_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
2537                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2538                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2539                {
2540                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2541                }
2542                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2543                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2544                }
2545            }
2546
2547            next_offset += envelope_size;
2548            _next_ordinal_to_read += 1;
2549            if next_offset >= end_offset {
2550                return Ok(());
2551            }
2552
2553            // Decode unknown envelopes for gaps in ordinals.
2554            while _next_ordinal_to_read < 16 {
2555                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2556                _next_ordinal_to_read += 1;
2557                next_offset += envelope_size;
2558            }
2559
2560            let next_out_of_line = decoder.next_out_of_line();
2561            let handles_before = decoder.remaining_handles();
2562            if let Some((inlined, num_bytes, num_handles)) =
2563                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2564            {
2565                let member_inline_size =
2566                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2567                if inlined != (member_inline_size <= 4) {
2568                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2569                }
2570                let inner_offset;
2571                let mut inner_depth = depth.clone();
2572                if inlined {
2573                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2574                    inner_offset = next_offset;
2575                } else {
2576                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2577                    inner_depth.increment()?;
2578                }
2579                let val_ref =
2580                    self.vmo_reclaim_oldest_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
2581                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2582                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2583                {
2584                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2585                }
2586                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2587                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2588                }
2589            }
2590
2591            next_offset += envelope_size;
2592            _next_ordinal_to_read += 1;
2593            if next_offset >= end_offset {
2594                return Ok(());
2595            }
2596
2597            // Decode unknown envelopes for gaps in ordinals.
2598            while _next_ordinal_to_read < 17 {
2599                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2600                _next_ordinal_to_read += 1;
2601                next_offset += envelope_size;
2602            }
2603
2604            let next_out_of_line = decoder.next_out_of_line();
2605            let handles_before = decoder.remaining_handles();
2606            if let Some((inlined, num_bytes, num_handles)) =
2607                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2608            {
2609                let member_inline_size =
2610                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2611                if inlined != (member_inline_size <= 4) {
2612                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2613                }
2614                let inner_offset;
2615                let mut inner_depth = depth.clone();
2616                if inlined {
2617                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2618                    inner_offset = next_offset;
2619                } else {
2620                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2621                    inner_depth.increment()?;
2622                }
2623                let val_ref =
2624                    self.vmo_reclaim_disabled_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
2625                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2626                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2627                {
2628                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2629                }
2630                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2631                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2632                }
2633            }
2634
2635            next_offset += envelope_size;
2636            _next_ordinal_to_read += 1;
2637            if next_offset >= end_offset {
2638                return Ok(());
2639            }
2640
2641            // Decode unknown envelopes for gaps in ordinals.
2642            while _next_ordinal_to_read < 18 {
2643                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2644                _next_ordinal_to_read += 1;
2645                next_offset += envelope_size;
2646            }
2647
2648            let next_out_of_line = decoder.next_out_of_line();
2649            let handles_before = decoder.remaining_handles();
2650            if let Some((inlined, num_bytes, num_handles)) =
2651                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2652            {
2653                let member_inline_size =
2654                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2655                if inlined != (member_inline_size <= 4) {
2656                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2657                }
2658                let inner_offset;
2659                let mut inner_depth = depth.clone();
2660                if inlined {
2661                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2662                    inner_offset = next_offset;
2663                } else {
2664                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2665                    inner_depth.increment()?;
2666                }
2667                let val_ref = self
2668                    .vmo_discardable_locked_bytes
2669                    .get_or_insert_with(|| fidl::new_empty!(u64, D));
2670                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2671                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2672                {
2673                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2674                }
2675                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2676                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2677                }
2678            }
2679
2680            next_offset += envelope_size;
2681            _next_ordinal_to_read += 1;
2682            if next_offset >= end_offset {
2683                return Ok(());
2684            }
2685
2686            // Decode unknown envelopes for gaps in ordinals.
2687            while _next_ordinal_to_read < 19 {
2688                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2689                _next_ordinal_to_read += 1;
2690                next_offset += envelope_size;
2691            }
2692
2693            let next_out_of_line = decoder.next_out_of_line();
2694            let handles_before = decoder.remaining_handles();
2695            if let Some((inlined, num_bytes, num_handles)) =
2696                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2697            {
2698                let member_inline_size =
2699                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2700                if inlined != (member_inline_size <= 4) {
2701                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2702                }
2703                let inner_offset;
2704                let mut inner_depth = depth.clone();
2705                if inlined {
2706                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2707                    inner_offset = next_offset;
2708                } else {
2709                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2710                    inner_depth.increment()?;
2711                }
2712                let val_ref = self
2713                    .vmo_discardable_unlocked_bytes
2714                    .get_or_insert_with(|| fidl::new_empty!(u64, D));
2715                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2716                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2717                {
2718                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2719                }
2720                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2721                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2722                }
2723            }
2724
2725            next_offset += envelope_size;
2726
2727            // Decode the remaining unknown envelopes.
2728            while next_offset < end_offset {
2729                _next_ordinal_to_read += 1;
2730                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2731                next_offset += envelope_size;
2732            }
2733
2734            Ok(())
2735        }
2736    }
2737
2738    impl MemoryStatsCompression {
2739        #[inline(always)]
2740        fn max_ordinal_present(&self) -> u64 {
2741            if let Some(_) = self.pages_decompressed_within_log_time {
2742                return 14;
2743            }
2744            if let Some(_) = self.pages_decompressed_unit_ns {
2745                return 13;
2746            }
2747            if let Some(_) = self.critical_memory_page_compressions {
2748                return 12;
2749            }
2750            if let Some(_) = self.memory_pressure_page_compressions {
2751                return 11;
2752            }
2753            if let Some(_) = self.eager_page_compressions {
2754                return 10;
2755            }
2756            if let Some(_) = self.compressed_page_evictions {
2757                return 9;
2758            }
2759            if let Some(_) = self.total_page_decompressions {
2760                return 8;
2761            }
2762            if let Some(_) = self.failed_page_compression_attempts {
2763                return 7;
2764            }
2765            if let Some(_) = self.total_page_compression_attempts {
2766                return 6;
2767            }
2768            if let Some(_) = self.decompression_time {
2769                return 5;
2770            }
2771            if let Some(_) = self.compression_time {
2772                return 4;
2773            }
2774            if let Some(_) = self.compressed_fragmentation_bytes {
2775                return 3;
2776            }
2777            if let Some(_) = self.compressed_storage_bytes {
2778                return 2;
2779            }
2780            if let Some(_) = self.uncompressed_storage_bytes {
2781                return 1;
2782            }
2783            0
2784        }
2785    }
2786
2787    impl fidl::encoding::ValueTypeMarker for MemoryStatsCompression {
2788        type Borrowed<'a> = &'a Self;
2789        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2790            value
2791        }
2792    }
2793
2794    unsafe impl fidl::encoding::TypeMarker for MemoryStatsCompression {
2795        type Owned = Self;
2796
2797        #[inline(always)]
2798        fn inline_align(_context: fidl::encoding::Context) -> usize {
2799            8
2800        }
2801
2802        #[inline(always)]
2803        fn inline_size(_context: fidl::encoding::Context) -> usize {
2804            16
2805        }
2806    }
2807
2808    unsafe impl<D: fidl::encoding::ResourceDialect>
2809        fidl::encoding::Encode<MemoryStatsCompression, D> for &MemoryStatsCompression
2810    {
2811        unsafe fn encode(
2812            self,
2813            encoder: &mut fidl::encoding::Encoder<'_, D>,
2814            offset: usize,
2815            mut depth: fidl::encoding::Depth,
2816        ) -> fidl::Result<()> {
2817            encoder.debug_check_bounds::<MemoryStatsCompression>(offset);
2818            // Vector header
2819            let max_ordinal: u64 = self.max_ordinal_present();
2820            encoder.write_num(max_ordinal, offset);
2821            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2822            // Calling encoder.out_of_line_offset(0) is not allowed.
2823            if max_ordinal == 0 {
2824                return Ok(());
2825            }
2826            depth.increment()?;
2827            let envelope_size = 8;
2828            let bytes_len = max_ordinal as usize * envelope_size;
2829            #[allow(unused_variables)]
2830            let offset = encoder.out_of_line_offset(bytes_len);
2831            let mut _prev_end_offset: usize = 0;
2832            if 1 > max_ordinal {
2833                return Ok(());
2834            }
2835
2836            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2837            // are envelope_size bytes.
2838            let cur_offset: usize = (1 - 1) * envelope_size;
2839
2840            // Zero reserved fields.
2841            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2842
2843            // Safety:
2844            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2845            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2846            //   envelope_size bytes, there is always sufficient room.
2847            fidl::encoding::encode_in_envelope_optional::<u64, D>(
2848                self.uncompressed_storage_bytes
2849                    .as_ref()
2850                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2851                encoder,
2852                offset + cur_offset,
2853                depth,
2854            )?;
2855
2856            _prev_end_offset = cur_offset + envelope_size;
2857            if 2 > max_ordinal {
2858                return Ok(());
2859            }
2860
2861            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2862            // are envelope_size bytes.
2863            let cur_offset: usize = (2 - 1) * envelope_size;
2864
2865            // Zero reserved fields.
2866            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2867
2868            // Safety:
2869            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2870            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2871            //   envelope_size bytes, there is always sufficient room.
2872            fidl::encoding::encode_in_envelope_optional::<u64, D>(
2873                self.compressed_storage_bytes
2874                    .as_ref()
2875                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2876                encoder,
2877                offset + cur_offset,
2878                depth,
2879            )?;
2880
2881            _prev_end_offset = cur_offset + envelope_size;
2882            if 3 > max_ordinal {
2883                return Ok(());
2884            }
2885
2886            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2887            // are envelope_size bytes.
2888            let cur_offset: usize = (3 - 1) * envelope_size;
2889
2890            // Zero reserved fields.
2891            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2892
2893            // Safety:
2894            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2895            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2896            //   envelope_size bytes, there is always sufficient room.
2897            fidl::encoding::encode_in_envelope_optional::<u64, D>(
2898                self.compressed_fragmentation_bytes
2899                    .as_ref()
2900                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2901                encoder,
2902                offset + cur_offset,
2903                depth,
2904            )?;
2905
2906            _prev_end_offset = cur_offset + envelope_size;
2907            if 4 > max_ordinal {
2908                return Ok(());
2909            }
2910
2911            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2912            // are envelope_size bytes.
2913            let cur_offset: usize = (4 - 1) * envelope_size;
2914
2915            // Zero reserved fields.
2916            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2917
2918            // Safety:
2919            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2920            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2921            //   envelope_size bytes, there is always sufficient room.
2922            fidl::encoding::encode_in_envelope_optional::<i64, D>(
2923                self.compression_time
2924                    .as_ref()
2925                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
2926                encoder,
2927                offset + cur_offset,
2928                depth,
2929            )?;
2930
2931            _prev_end_offset = cur_offset + envelope_size;
2932            if 5 > max_ordinal {
2933                return Ok(());
2934            }
2935
2936            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2937            // are envelope_size bytes.
2938            let cur_offset: usize = (5 - 1) * envelope_size;
2939
2940            // Zero reserved fields.
2941            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2942
2943            // Safety:
2944            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2945            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2946            //   envelope_size bytes, there is always sufficient room.
2947            fidl::encoding::encode_in_envelope_optional::<i64, D>(
2948                self.decompression_time
2949                    .as_ref()
2950                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
2951                encoder,
2952                offset + cur_offset,
2953                depth,
2954            )?;
2955
2956            _prev_end_offset = cur_offset + envelope_size;
2957            if 6 > max_ordinal {
2958                return Ok(());
2959            }
2960
2961            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2962            // are envelope_size bytes.
2963            let cur_offset: usize = (6 - 1) * envelope_size;
2964
2965            // Zero reserved fields.
2966            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2967
2968            // Safety:
2969            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2970            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2971            //   envelope_size bytes, there is always sufficient room.
2972            fidl::encoding::encode_in_envelope_optional::<u64, D>(
2973                self.total_page_compression_attempts
2974                    .as_ref()
2975                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2976                encoder,
2977                offset + cur_offset,
2978                depth,
2979            )?;
2980
2981            _prev_end_offset = cur_offset + envelope_size;
2982            if 7 > max_ordinal {
2983                return Ok(());
2984            }
2985
2986            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2987            // are envelope_size bytes.
2988            let cur_offset: usize = (7 - 1) * envelope_size;
2989
2990            // Zero reserved fields.
2991            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2992
2993            // Safety:
2994            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2995            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2996            //   envelope_size bytes, there is always sufficient room.
2997            fidl::encoding::encode_in_envelope_optional::<u64, D>(
2998                self.failed_page_compression_attempts
2999                    .as_ref()
3000                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3001                encoder,
3002                offset + cur_offset,
3003                depth,
3004            )?;
3005
3006            _prev_end_offset = cur_offset + envelope_size;
3007            if 8 > max_ordinal {
3008                return Ok(());
3009            }
3010
3011            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3012            // are envelope_size bytes.
3013            let cur_offset: usize = (8 - 1) * envelope_size;
3014
3015            // Zero reserved fields.
3016            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3017
3018            // Safety:
3019            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3020            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3021            //   envelope_size bytes, there is always sufficient room.
3022            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3023                self.total_page_decompressions
3024                    .as_ref()
3025                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3026                encoder,
3027                offset + cur_offset,
3028                depth,
3029            )?;
3030
3031            _prev_end_offset = cur_offset + envelope_size;
3032            if 9 > max_ordinal {
3033                return Ok(());
3034            }
3035
3036            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3037            // are envelope_size bytes.
3038            let cur_offset: usize = (9 - 1) * envelope_size;
3039
3040            // Zero reserved fields.
3041            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3042
3043            // Safety:
3044            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3045            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3046            //   envelope_size bytes, there is always sufficient room.
3047            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3048                self.compressed_page_evictions
3049                    .as_ref()
3050                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3051                encoder,
3052                offset + cur_offset,
3053                depth,
3054            )?;
3055
3056            _prev_end_offset = cur_offset + envelope_size;
3057            if 10 > max_ordinal {
3058                return Ok(());
3059            }
3060
3061            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3062            // are envelope_size bytes.
3063            let cur_offset: usize = (10 - 1) * envelope_size;
3064
3065            // Zero reserved fields.
3066            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3067
3068            // Safety:
3069            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3070            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3071            //   envelope_size bytes, there is always sufficient room.
3072            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3073                self.eager_page_compressions
3074                    .as_ref()
3075                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3076                encoder,
3077                offset + cur_offset,
3078                depth,
3079            )?;
3080
3081            _prev_end_offset = cur_offset + envelope_size;
3082            if 11 > max_ordinal {
3083                return Ok(());
3084            }
3085
3086            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3087            // are envelope_size bytes.
3088            let cur_offset: usize = (11 - 1) * envelope_size;
3089
3090            // Zero reserved fields.
3091            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3092
3093            // Safety:
3094            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3095            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3096            //   envelope_size bytes, there is always sufficient room.
3097            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3098                self.memory_pressure_page_compressions
3099                    .as_ref()
3100                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3101                encoder,
3102                offset + cur_offset,
3103                depth,
3104            )?;
3105
3106            _prev_end_offset = cur_offset + envelope_size;
3107            if 12 > max_ordinal {
3108                return Ok(());
3109            }
3110
3111            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3112            // are envelope_size bytes.
3113            let cur_offset: usize = (12 - 1) * envelope_size;
3114
3115            // Zero reserved fields.
3116            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3117
3118            // Safety:
3119            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3120            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3121            //   envelope_size bytes, there is always sufficient room.
3122            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3123                self.critical_memory_page_compressions
3124                    .as_ref()
3125                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3126                encoder,
3127                offset + cur_offset,
3128                depth,
3129            )?;
3130
3131            _prev_end_offset = cur_offset + envelope_size;
3132            if 13 > max_ordinal {
3133                return Ok(());
3134            }
3135
3136            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3137            // are envelope_size bytes.
3138            let cur_offset: usize = (13 - 1) * envelope_size;
3139
3140            // Zero reserved fields.
3141            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3142
3143            // Safety:
3144            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3145            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3146            //   envelope_size bytes, there is always sufficient room.
3147            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3148                self.pages_decompressed_unit_ns
3149                    .as_ref()
3150                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3151                encoder,
3152                offset + cur_offset,
3153                depth,
3154            )?;
3155
3156            _prev_end_offset = cur_offset + envelope_size;
3157            if 14 > max_ordinal {
3158                return Ok(());
3159            }
3160
3161            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3162            // are envelope_size bytes.
3163            let cur_offset: usize = (14 - 1) * envelope_size;
3164
3165            // Zero reserved fields.
3166            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3167
3168            // Safety:
3169            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3170            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3171            //   envelope_size bytes, there is always sufficient room.
3172            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u64, 8>, D>(
3173                self.pages_decompressed_within_log_time.as_ref().map(
3174                    <fidl::encoding::Array<u64, 8> as fidl::encoding::ValueTypeMarker>::borrow,
3175                ),
3176                encoder,
3177                offset + cur_offset,
3178                depth,
3179            )?;
3180
3181            _prev_end_offset = cur_offset + envelope_size;
3182
3183            Ok(())
3184        }
3185    }
3186
3187    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3188        for MemoryStatsCompression
3189    {
3190        #[inline(always)]
3191        fn new_empty() -> Self {
3192            Self::default()
3193        }
3194
3195        unsafe fn decode(
3196            &mut self,
3197            decoder: &mut fidl::encoding::Decoder<'_, D>,
3198            offset: usize,
3199            mut depth: fidl::encoding::Depth,
3200        ) -> fidl::Result<()> {
3201            decoder.debug_check_bounds::<Self>(offset);
3202            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3203                None => return Err(fidl::Error::NotNullable),
3204                Some(len) => len,
3205            };
3206            // Calling decoder.out_of_line_offset(0) is not allowed.
3207            if len == 0 {
3208                return Ok(());
3209            };
3210            depth.increment()?;
3211            let envelope_size = 8;
3212            let bytes_len = len * envelope_size;
3213            let offset = decoder.out_of_line_offset(bytes_len)?;
3214            // Decode the envelope for each type.
3215            let mut _next_ordinal_to_read = 0;
3216            let mut next_offset = offset;
3217            let end_offset = offset + bytes_len;
3218            _next_ordinal_to_read += 1;
3219            if next_offset >= end_offset {
3220                return Ok(());
3221            }
3222
3223            // Decode unknown envelopes for gaps in ordinals.
3224            while _next_ordinal_to_read < 1 {
3225                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3226                _next_ordinal_to_read += 1;
3227                next_offset += envelope_size;
3228            }
3229
3230            let next_out_of_line = decoder.next_out_of_line();
3231            let handles_before = decoder.remaining_handles();
3232            if let Some((inlined, num_bytes, num_handles)) =
3233                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3234            {
3235                let member_inline_size =
3236                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3237                if inlined != (member_inline_size <= 4) {
3238                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3239                }
3240                let inner_offset;
3241                let mut inner_depth = depth.clone();
3242                if inlined {
3243                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3244                    inner_offset = next_offset;
3245                } else {
3246                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3247                    inner_depth.increment()?;
3248                }
3249                let val_ref =
3250                    self.uncompressed_storage_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
3251                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3252                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3253                {
3254                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3255                }
3256                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3257                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3258                }
3259            }
3260
3261            next_offset += envelope_size;
3262            _next_ordinal_to_read += 1;
3263            if next_offset >= end_offset {
3264                return Ok(());
3265            }
3266
3267            // Decode unknown envelopes for gaps in ordinals.
3268            while _next_ordinal_to_read < 2 {
3269                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3270                _next_ordinal_to_read += 1;
3271                next_offset += envelope_size;
3272            }
3273
3274            let next_out_of_line = decoder.next_out_of_line();
3275            let handles_before = decoder.remaining_handles();
3276            if let Some((inlined, num_bytes, num_handles)) =
3277                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3278            {
3279                let member_inline_size =
3280                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3281                if inlined != (member_inline_size <= 4) {
3282                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3283                }
3284                let inner_offset;
3285                let mut inner_depth = depth.clone();
3286                if inlined {
3287                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3288                    inner_offset = next_offset;
3289                } else {
3290                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3291                    inner_depth.increment()?;
3292                }
3293                let val_ref =
3294                    self.compressed_storage_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
3295                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3296                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3297                {
3298                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3299                }
3300                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3301                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3302                }
3303            }
3304
3305            next_offset += envelope_size;
3306            _next_ordinal_to_read += 1;
3307            if next_offset >= end_offset {
3308                return Ok(());
3309            }
3310
3311            // Decode unknown envelopes for gaps in ordinals.
3312            while _next_ordinal_to_read < 3 {
3313                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3314                _next_ordinal_to_read += 1;
3315                next_offset += envelope_size;
3316            }
3317
3318            let next_out_of_line = decoder.next_out_of_line();
3319            let handles_before = decoder.remaining_handles();
3320            if let Some((inlined, num_bytes, num_handles)) =
3321                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3322            {
3323                let member_inline_size =
3324                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3325                if inlined != (member_inline_size <= 4) {
3326                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3327                }
3328                let inner_offset;
3329                let mut inner_depth = depth.clone();
3330                if inlined {
3331                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3332                    inner_offset = next_offset;
3333                } else {
3334                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3335                    inner_depth.increment()?;
3336                }
3337                let val_ref = self
3338                    .compressed_fragmentation_bytes
3339                    .get_or_insert_with(|| fidl::new_empty!(u64, D));
3340                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3341                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3342                {
3343                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3344                }
3345                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3346                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3347                }
3348            }
3349
3350            next_offset += envelope_size;
3351            _next_ordinal_to_read += 1;
3352            if next_offset >= end_offset {
3353                return Ok(());
3354            }
3355
3356            // Decode unknown envelopes for gaps in ordinals.
3357            while _next_ordinal_to_read < 4 {
3358                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3359                _next_ordinal_to_read += 1;
3360                next_offset += envelope_size;
3361            }
3362
3363            let next_out_of_line = decoder.next_out_of_line();
3364            let handles_before = decoder.remaining_handles();
3365            if let Some((inlined, num_bytes, num_handles)) =
3366                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3367            {
3368                let member_inline_size =
3369                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3370                if inlined != (member_inline_size <= 4) {
3371                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3372                }
3373                let inner_offset;
3374                let mut inner_depth = depth.clone();
3375                if inlined {
3376                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3377                    inner_offset = next_offset;
3378                } else {
3379                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3380                    inner_depth.increment()?;
3381                }
3382                let val_ref = self.compression_time.get_or_insert_with(|| fidl::new_empty!(i64, D));
3383                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
3384                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3385                {
3386                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3387                }
3388                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3389                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3390                }
3391            }
3392
3393            next_offset += envelope_size;
3394            _next_ordinal_to_read += 1;
3395            if next_offset >= end_offset {
3396                return Ok(());
3397            }
3398
3399            // Decode unknown envelopes for gaps in ordinals.
3400            while _next_ordinal_to_read < 5 {
3401                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3402                _next_ordinal_to_read += 1;
3403                next_offset += envelope_size;
3404            }
3405
3406            let next_out_of_line = decoder.next_out_of_line();
3407            let handles_before = decoder.remaining_handles();
3408            if let Some((inlined, num_bytes, num_handles)) =
3409                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3410            {
3411                let member_inline_size =
3412                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3413                if inlined != (member_inline_size <= 4) {
3414                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3415                }
3416                let inner_offset;
3417                let mut inner_depth = depth.clone();
3418                if inlined {
3419                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3420                    inner_offset = next_offset;
3421                } else {
3422                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3423                    inner_depth.increment()?;
3424                }
3425                let val_ref =
3426                    self.decompression_time.get_or_insert_with(|| fidl::new_empty!(i64, D));
3427                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
3428                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3429                {
3430                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3431                }
3432                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3433                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3434                }
3435            }
3436
3437            next_offset += envelope_size;
3438            _next_ordinal_to_read += 1;
3439            if next_offset >= end_offset {
3440                return Ok(());
3441            }
3442
3443            // Decode unknown envelopes for gaps in ordinals.
3444            while _next_ordinal_to_read < 6 {
3445                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3446                _next_ordinal_to_read += 1;
3447                next_offset += envelope_size;
3448            }
3449
3450            let next_out_of_line = decoder.next_out_of_line();
3451            let handles_before = decoder.remaining_handles();
3452            if let Some((inlined, num_bytes, num_handles)) =
3453                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3454            {
3455                let member_inline_size =
3456                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3457                if inlined != (member_inline_size <= 4) {
3458                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3459                }
3460                let inner_offset;
3461                let mut inner_depth = depth.clone();
3462                if inlined {
3463                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3464                    inner_offset = next_offset;
3465                } else {
3466                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3467                    inner_depth.increment()?;
3468                }
3469                let val_ref = self
3470                    .total_page_compression_attempts
3471                    .get_or_insert_with(|| fidl::new_empty!(u64, D));
3472                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3473                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3474                {
3475                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3476                }
3477                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3478                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3479                }
3480            }
3481
3482            next_offset += envelope_size;
3483            _next_ordinal_to_read += 1;
3484            if next_offset >= end_offset {
3485                return Ok(());
3486            }
3487
3488            // Decode unknown envelopes for gaps in ordinals.
3489            while _next_ordinal_to_read < 7 {
3490                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3491                _next_ordinal_to_read += 1;
3492                next_offset += envelope_size;
3493            }
3494
3495            let next_out_of_line = decoder.next_out_of_line();
3496            let handles_before = decoder.remaining_handles();
3497            if let Some((inlined, num_bytes, num_handles)) =
3498                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3499            {
3500                let member_inline_size =
3501                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3502                if inlined != (member_inline_size <= 4) {
3503                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3504                }
3505                let inner_offset;
3506                let mut inner_depth = depth.clone();
3507                if inlined {
3508                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3509                    inner_offset = next_offset;
3510                } else {
3511                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3512                    inner_depth.increment()?;
3513                }
3514                let val_ref = self
3515                    .failed_page_compression_attempts
3516                    .get_or_insert_with(|| fidl::new_empty!(u64, D));
3517                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3518                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3519                {
3520                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3521                }
3522                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3523                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3524                }
3525            }
3526
3527            next_offset += envelope_size;
3528            _next_ordinal_to_read += 1;
3529            if next_offset >= end_offset {
3530                return Ok(());
3531            }
3532
3533            // Decode unknown envelopes for gaps in ordinals.
3534            while _next_ordinal_to_read < 8 {
3535                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3536                _next_ordinal_to_read += 1;
3537                next_offset += envelope_size;
3538            }
3539
3540            let next_out_of_line = decoder.next_out_of_line();
3541            let handles_before = decoder.remaining_handles();
3542            if let Some((inlined, num_bytes, num_handles)) =
3543                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3544            {
3545                let member_inline_size =
3546                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3547                if inlined != (member_inline_size <= 4) {
3548                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3549                }
3550                let inner_offset;
3551                let mut inner_depth = depth.clone();
3552                if inlined {
3553                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3554                    inner_offset = next_offset;
3555                } else {
3556                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3557                    inner_depth.increment()?;
3558                }
3559                let val_ref =
3560                    self.total_page_decompressions.get_or_insert_with(|| fidl::new_empty!(u64, D));
3561                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3562                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3563                {
3564                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3565                }
3566                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3567                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3568                }
3569            }
3570
3571            next_offset += envelope_size;
3572            _next_ordinal_to_read += 1;
3573            if next_offset >= end_offset {
3574                return Ok(());
3575            }
3576
3577            // Decode unknown envelopes for gaps in ordinals.
3578            while _next_ordinal_to_read < 9 {
3579                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3580                _next_ordinal_to_read += 1;
3581                next_offset += envelope_size;
3582            }
3583
3584            let next_out_of_line = decoder.next_out_of_line();
3585            let handles_before = decoder.remaining_handles();
3586            if let Some((inlined, num_bytes, num_handles)) =
3587                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3588            {
3589                let member_inline_size =
3590                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3591                if inlined != (member_inline_size <= 4) {
3592                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3593                }
3594                let inner_offset;
3595                let mut inner_depth = depth.clone();
3596                if inlined {
3597                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3598                    inner_offset = next_offset;
3599                } else {
3600                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3601                    inner_depth.increment()?;
3602                }
3603                let val_ref =
3604                    self.compressed_page_evictions.get_or_insert_with(|| fidl::new_empty!(u64, D));
3605                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3606                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3607                {
3608                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3609                }
3610                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3611                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3612                }
3613            }
3614
3615            next_offset += envelope_size;
3616            _next_ordinal_to_read += 1;
3617            if next_offset >= end_offset {
3618                return Ok(());
3619            }
3620
3621            // Decode unknown envelopes for gaps in ordinals.
3622            while _next_ordinal_to_read < 10 {
3623                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3624                _next_ordinal_to_read += 1;
3625                next_offset += envelope_size;
3626            }
3627
3628            let next_out_of_line = decoder.next_out_of_line();
3629            let handles_before = decoder.remaining_handles();
3630            if let Some((inlined, num_bytes, num_handles)) =
3631                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3632            {
3633                let member_inline_size =
3634                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3635                if inlined != (member_inline_size <= 4) {
3636                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3637                }
3638                let inner_offset;
3639                let mut inner_depth = depth.clone();
3640                if inlined {
3641                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3642                    inner_offset = next_offset;
3643                } else {
3644                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3645                    inner_depth.increment()?;
3646                }
3647                let val_ref =
3648                    self.eager_page_compressions.get_or_insert_with(|| fidl::new_empty!(u64, D));
3649                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3650                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3651                {
3652                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3653                }
3654                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3655                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3656                }
3657            }
3658
3659            next_offset += envelope_size;
3660            _next_ordinal_to_read += 1;
3661            if next_offset >= end_offset {
3662                return Ok(());
3663            }
3664
3665            // Decode unknown envelopes for gaps in ordinals.
3666            while _next_ordinal_to_read < 11 {
3667                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3668                _next_ordinal_to_read += 1;
3669                next_offset += envelope_size;
3670            }
3671
3672            let next_out_of_line = decoder.next_out_of_line();
3673            let handles_before = decoder.remaining_handles();
3674            if let Some((inlined, num_bytes, num_handles)) =
3675                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3676            {
3677                let member_inline_size =
3678                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3679                if inlined != (member_inline_size <= 4) {
3680                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3681                }
3682                let inner_offset;
3683                let mut inner_depth = depth.clone();
3684                if inlined {
3685                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3686                    inner_offset = next_offset;
3687                } else {
3688                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3689                    inner_depth.increment()?;
3690                }
3691                let val_ref = self
3692                    .memory_pressure_page_compressions
3693                    .get_or_insert_with(|| fidl::new_empty!(u64, D));
3694                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3695                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3696                {
3697                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3698                }
3699                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3700                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3701                }
3702            }
3703
3704            next_offset += envelope_size;
3705            _next_ordinal_to_read += 1;
3706            if next_offset >= end_offset {
3707                return Ok(());
3708            }
3709
3710            // Decode unknown envelopes for gaps in ordinals.
3711            while _next_ordinal_to_read < 12 {
3712                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3713                _next_ordinal_to_read += 1;
3714                next_offset += envelope_size;
3715            }
3716
3717            let next_out_of_line = decoder.next_out_of_line();
3718            let handles_before = decoder.remaining_handles();
3719            if let Some((inlined, num_bytes, num_handles)) =
3720                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3721            {
3722                let member_inline_size =
3723                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3724                if inlined != (member_inline_size <= 4) {
3725                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3726                }
3727                let inner_offset;
3728                let mut inner_depth = depth.clone();
3729                if inlined {
3730                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3731                    inner_offset = next_offset;
3732                } else {
3733                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3734                    inner_depth.increment()?;
3735                }
3736                let val_ref = self
3737                    .critical_memory_page_compressions
3738                    .get_or_insert_with(|| fidl::new_empty!(u64, D));
3739                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3740                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3741                {
3742                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3743                }
3744                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3745                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3746                }
3747            }
3748
3749            next_offset += envelope_size;
3750            _next_ordinal_to_read += 1;
3751            if next_offset >= end_offset {
3752                return Ok(());
3753            }
3754
3755            // Decode unknown envelopes for gaps in ordinals.
3756            while _next_ordinal_to_read < 13 {
3757                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3758                _next_ordinal_to_read += 1;
3759                next_offset += envelope_size;
3760            }
3761
3762            let next_out_of_line = decoder.next_out_of_line();
3763            let handles_before = decoder.remaining_handles();
3764            if let Some((inlined, num_bytes, num_handles)) =
3765                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3766            {
3767                let member_inline_size =
3768                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3769                if inlined != (member_inline_size <= 4) {
3770                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3771                }
3772                let inner_offset;
3773                let mut inner_depth = depth.clone();
3774                if inlined {
3775                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3776                    inner_offset = next_offset;
3777                } else {
3778                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3779                    inner_depth.increment()?;
3780                }
3781                let val_ref =
3782                    self.pages_decompressed_unit_ns.get_or_insert_with(|| fidl::new_empty!(u64, D));
3783                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3784                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3785                {
3786                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3787                }
3788                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3789                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3790                }
3791            }
3792
3793            next_offset += envelope_size;
3794            _next_ordinal_to_read += 1;
3795            if next_offset >= end_offset {
3796                return Ok(());
3797            }
3798
3799            // Decode unknown envelopes for gaps in ordinals.
3800            while _next_ordinal_to_read < 14 {
3801                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3802                _next_ordinal_to_read += 1;
3803                next_offset += envelope_size;
3804            }
3805
3806            let next_out_of_line = decoder.next_out_of_line();
3807            let handles_before = decoder.remaining_handles();
3808            if let Some((inlined, num_bytes, num_handles)) =
3809                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3810            {
3811                let member_inline_size =
3812                    <fidl::encoding::Array<u64, 8> as fidl::encoding::TypeMarker>::inline_size(
3813                        decoder.context,
3814                    );
3815                if inlined != (member_inline_size <= 4) {
3816                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3817                }
3818                let inner_offset;
3819                let mut inner_depth = depth.clone();
3820                if inlined {
3821                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3822                    inner_offset = next_offset;
3823                } else {
3824                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3825                    inner_depth.increment()?;
3826                }
3827                let val_ref = self
3828                    .pages_decompressed_within_log_time
3829                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u64, 8>, D));
3830                fidl::decode!(fidl::encoding::Array<u64, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
3831                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3832                {
3833                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3834                }
3835                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3836                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3837                }
3838            }
3839
3840            next_offset += envelope_size;
3841
3842            // Decode the remaining unknown envelopes.
3843            while next_offset < end_offset {
3844                _next_ordinal_to_read += 1;
3845                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3846                next_offset += envelope_size;
3847            }
3848
3849            Ok(())
3850        }
3851    }
3852
3853    impl MemoryStatsExtended {
3854        #[inline(always)]
3855        fn max_ordinal_present(&self) -> u64 {
3856            if let Some(_) = self.other_bytes {
3857                return 14;
3858            }
3859            if let Some(_) = self.ipc_bytes {
3860                return 13;
3861            }
3862            if let Some(_) = self.mmu_overhead_bytes {
3863                return 12;
3864            }
3865            if let Some(_) = self.vmo_discardable_unlocked_bytes {
3866                return 11;
3867            }
3868            if let Some(_) = self.vmo_discardable_locked_bytes {
3869                return 10;
3870            }
3871            if let Some(_) = self.vmo_pager_oldest_bytes {
3872                return 9;
3873            }
3874            if let Some(_) = self.vmo_pager_newest_bytes {
3875                return 8;
3876            }
3877            if let Some(_) = self.vmo_pager_total_bytes {
3878                return 7;
3879            }
3880            if let Some(_) = self.vmo_bytes {
3881                return 6;
3882            }
3883            if let Some(_) = self.free_heap_bytes {
3884                return 5;
3885            }
3886            if let Some(_) = self.total_heap_bytes {
3887                return 4;
3888            }
3889            if let Some(_) = self.wired_bytes {
3890                return 3;
3891            }
3892            if let Some(_) = self.free_bytes {
3893                return 2;
3894            }
3895            if let Some(_) = self.total_bytes {
3896                return 1;
3897            }
3898            0
3899        }
3900    }
3901
3902    impl fidl::encoding::ValueTypeMarker for MemoryStatsExtended {
3903        type Borrowed<'a> = &'a Self;
3904        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3905            value
3906        }
3907    }
3908
3909    unsafe impl fidl::encoding::TypeMarker for MemoryStatsExtended {
3910        type Owned = Self;
3911
3912        #[inline(always)]
3913        fn inline_align(_context: fidl::encoding::Context) -> usize {
3914            8
3915        }
3916
3917        #[inline(always)]
3918        fn inline_size(_context: fidl::encoding::Context) -> usize {
3919            16
3920        }
3921    }
3922
3923    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<MemoryStatsExtended, D>
3924        for &MemoryStatsExtended
3925    {
3926        unsafe fn encode(
3927            self,
3928            encoder: &mut fidl::encoding::Encoder<'_, D>,
3929            offset: usize,
3930            mut depth: fidl::encoding::Depth,
3931        ) -> fidl::Result<()> {
3932            encoder.debug_check_bounds::<MemoryStatsExtended>(offset);
3933            // Vector header
3934            let max_ordinal: u64 = self.max_ordinal_present();
3935            encoder.write_num(max_ordinal, offset);
3936            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3937            // Calling encoder.out_of_line_offset(0) is not allowed.
3938            if max_ordinal == 0 {
3939                return Ok(());
3940            }
3941            depth.increment()?;
3942            let envelope_size = 8;
3943            let bytes_len = max_ordinal as usize * envelope_size;
3944            #[allow(unused_variables)]
3945            let offset = encoder.out_of_line_offset(bytes_len);
3946            let mut _prev_end_offset: usize = 0;
3947            if 1 > max_ordinal {
3948                return Ok(());
3949            }
3950
3951            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3952            // are envelope_size bytes.
3953            let cur_offset: usize = (1 - 1) * envelope_size;
3954
3955            // Zero reserved fields.
3956            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3957
3958            // Safety:
3959            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3960            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3961            //   envelope_size bytes, there is always sufficient room.
3962            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3963                self.total_bytes.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3964                encoder,
3965                offset + cur_offset,
3966                depth,
3967            )?;
3968
3969            _prev_end_offset = cur_offset + envelope_size;
3970            if 2 > max_ordinal {
3971                return Ok(());
3972            }
3973
3974            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3975            // are envelope_size bytes.
3976            let cur_offset: usize = (2 - 1) * envelope_size;
3977
3978            // Zero reserved fields.
3979            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3980
3981            // Safety:
3982            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3983            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3984            //   envelope_size bytes, there is always sufficient room.
3985            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3986                self.free_bytes.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3987                encoder,
3988                offset + cur_offset,
3989                depth,
3990            )?;
3991
3992            _prev_end_offset = cur_offset + envelope_size;
3993            if 3 > max_ordinal {
3994                return Ok(());
3995            }
3996
3997            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3998            // are envelope_size bytes.
3999            let cur_offset: usize = (3 - 1) * envelope_size;
4000
4001            // Zero reserved fields.
4002            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4003
4004            // Safety:
4005            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4006            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4007            //   envelope_size bytes, there is always sufficient room.
4008            fidl::encoding::encode_in_envelope_optional::<u64, D>(
4009                self.wired_bytes.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
4010                encoder,
4011                offset + cur_offset,
4012                depth,
4013            )?;
4014
4015            _prev_end_offset = cur_offset + envelope_size;
4016            if 4 > max_ordinal {
4017                return Ok(());
4018            }
4019
4020            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4021            // are envelope_size bytes.
4022            let cur_offset: usize = (4 - 1) * envelope_size;
4023
4024            // Zero reserved fields.
4025            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4026
4027            // Safety:
4028            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4029            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4030            //   envelope_size bytes, there is always sufficient room.
4031            fidl::encoding::encode_in_envelope_optional::<u64, D>(
4032                self.total_heap_bytes
4033                    .as_ref()
4034                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
4035                encoder,
4036                offset + cur_offset,
4037                depth,
4038            )?;
4039
4040            _prev_end_offset = cur_offset + envelope_size;
4041            if 5 > max_ordinal {
4042                return Ok(());
4043            }
4044
4045            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4046            // are envelope_size bytes.
4047            let cur_offset: usize = (5 - 1) * envelope_size;
4048
4049            // Zero reserved fields.
4050            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4051
4052            // Safety:
4053            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4054            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4055            //   envelope_size bytes, there is always sufficient room.
4056            fidl::encoding::encode_in_envelope_optional::<u64, D>(
4057                self.free_heap_bytes.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
4058                encoder,
4059                offset + cur_offset,
4060                depth,
4061            )?;
4062
4063            _prev_end_offset = cur_offset + envelope_size;
4064            if 6 > max_ordinal {
4065                return Ok(());
4066            }
4067
4068            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4069            // are envelope_size bytes.
4070            let cur_offset: usize = (6 - 1) * envelope_size;
4071
4072            // Zero reserved fields.
4073            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4074
4075            // Safety:
4076            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4077            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4078            //   envelope_size bytes, there is always sufficient room.
4079            fidl::encoding::encode_in_envelope_optional::<u64, D>(
4080                self.vmo_bytes.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
4081                encoder,
4082                offset + cur_offset,
4083                depth,
4084            )?;
4085
4086            _prev_end_offset = cur_offset + envelope_size;
4087            if 7 > max_ordinal {
4088                return Ok(());
4089            }
4090
4091            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4092            // are envelope_size bytes.
4093            let cur_offset: usize = (7 - 1) * envelope_size;
4094
4095            // Zero reserved fields.
4096            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4097
4098            // Safety:
4099            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4100            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4101            //   envelope_size bytes, there is always sufficient room.
4102            fidl::encoding::encode_in_envelope_optional::<u64, D>(
4103                self.vmo_pager_total_bytes
4104                    .as_ref()
4105                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
4106                encoder,
4107                offset + cur_offset,
4108                depth,
4109            )?;
4110
4111            _prev_end_offset = cur_offset + envelope_size;
4112            if 8 > max_ordinal {
4113                return Ok(());
4114            }
4115
4116            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4117            // are envelope_size bytes.
4118            let cur_offset: usize = (8 - 1) * envelope_size;
4119
4120            // Zero reserved fields.
4121            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4122
4123            // Safety:
4124            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4125            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4126            //   envelope_size bytes, there is always sufficient room.
4127            fidl::encoding::encode_in_envelope_optional::<u64, D>(
4128                self.vmo_pager_newest_bytes
4129                    .as_ref()
4130                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
4131                encoder,
4132                offset + cur_offset,
4133                depth,
4134            )?;
4135
4136            _prev_end_offset = cur_offset + envelope_size;
4137            if 9 > max_ordinal {
4138                return Ok(());
4139            }
4140
4141            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4142            // are envelope_size bytes.
4143            let cur_offset: usize = (9 - 1) * envelope_size;
4144
4145            // Zero reserved fields.
4146            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4147
4148            // Safety:
4149            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4150            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4151            //   envelope_size bytes, there is always sufficient room.
4152            fidl::encoding::encode_in_envelope_optional::<u64, D>(
4153                self.vmo_pager_oldest_bytes
4154                    .as_ref()
4155                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
4156                encoder,
4157                offset + cur_offset,
4158                depth,
4159            )?;
4160
4161            _prev_end_offset = cur_offset + envelope_size;
4162            if 10 > max_ordinal {
4163                return Ok(());
4164            }
4165
4166            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4167            // are envelope_size bytes.
4168            let cur_offset: usize = (10 - 1) * envelope_size;
4169
4170            // Zero reserved fields.
4171            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4172
4173            // Safety:
4174            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4175            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4176            //   envelope_size bytes, there is always sufficient room.
4177            fidl::encoding::encode_in_envelope_optional::<u64, D>(
4178                self.vmo_discardable_locked_bytes
4179                    .as_ref()
4180                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
4181                encoder,
4182                offset + cur_offset,
4183                depth,
4184            )?;
4185
4186            _prev_end_offset = cur_offset + envelope_size;
4187            if 11 > max_ordinal {
4188                return Ok(());
4189            }
4190
4191            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4192            // are envelope_size bytes.
4193            let cur_offset: usize = (11 - 1) * envelope_size;
4194
4195            // Zero reserved fields.
4196            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4197
4198            // Safety:
4199            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4200            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4201            //   envelope_size bytes, there is always sufficient room.
4202            fidl::encoding::encode_in_envelope_optional::<u64, D>(
4203                self.vmo_discardable_unlocked_bytes
4204                    .as_ref()
4205                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
4206                encoder,
4207                offset + cur_offset,
4208                depth,
4209            )?;
4210
4211            _prev_end_offset = cur_offset + envelope_size;
4212            if 12 > max_ordinal {
4213                return Ok(());
4214            }
4215
4216            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4217            // are envelope_size bytes.
4218            let cur_offset: usize = (12 - 1) * envelope_size;
4219
4220            // Zero reserved fields.
4221            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4222
4223            // Safety:
4224            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4225            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4226            //   envelope_size bytes, there is always sufficient room.
4227            fidl::encoding::encode_in_envelope_optional::<u64, D>(
4228                self.mmu_overhead_bytes
4229                    .as_ref()
4230                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
4231                encoder,
4232                offset + cur_offset,
4233                depth,
4234            )?;
4235
4236            _prev_end_offset = cur_offset + envelope_size;
4237            if 13 > max_ordinal {
4238                return Ok(());
4239            }
4240
4241            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4242            // are envelope_size bytes.
4243            let cur_offset: usize = (13 - 1) * envelope_size;
4244
4245            // Zero reserved fields.
4246            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4247
4248            // Safety:
4249            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4250            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4251            //   envelope_size bytes, there is always sufficient room.
4252            fidl::encoding::encode_in_envelope_optional::<u64, D>(
4253                self.ipc_bytes.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
4254                encoder,
4255                offset + cur_offset,
4256                depth,
4257            )?;
4258
4259            _prev_end_offset = cur_offset + envelope_size;
4260            if 14 > max_ordinal {
4261                return Ok(());
4262            }
4263
4264            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4265            // are envelope_size bytes.
4266            let cur_offset: usize = (14 - 1) * envelope_size;
4267
4268            // Zero reserved fields.
4269            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4270
4271            // Safety:
4272            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4273            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4274            //   envelope_size bytes, there is always sufficient room.
4275            fidl::encoding::encode_in_envelope_optional::<u64, D>(
4276                self.other_bytes.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
4277                encoder,
4278                offset + cur_offset,
4279                depth,
4280            )?;
4281
4282            _prev_end_offset = cur_offset + envelope_size;
4283
4284            Ok(())
4285        }
4286    }
4287
4288    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MemoryStatsExtended {
4289        #[inline(always)]
4290        fn new_empty() -> Self {
4291            Self::default()
4292        }
4293
4294        unsafe fn decode(
4295            &mut self,
4296            decoder: &mut fidl::encoding::Decoder<'_, D>,
4297            offset: usize,
4298            mut depth: fidl::encoding::Depth,
4299        ) -> fidl::Result<()> {
4300            decoder.debug_check_bounds::<Self>(offset);
4301            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4302                None => return Err(fidl::Error::NotNullable),
4303                Some(len) => len,
4304            };
4305            // Calling decoder.out_of_line_offset(0) is not allowed.
4306            if len == 0 {
4307                return Ok(());
4308            };
4309            depth.increment()?;
4310            let envelope_size = 8;
4311            let bytes_len = len * envelope_size;
4312            let offset = decoder.out_of_line_offset(bytes_len)?;
4313            // Decode the envelope for each type.
4314            let mut _next_ordinal_to_read = 0;
4315            let mut next_offset = offset;
4316            let end_offset = offset + bytes_len;
4317            _next_ordinal_to_read += 1;
4318            if next_offset >= end_offset {
4319                return Ok(());
4320            }
4321
4322            // Decode unknown envelopes for gaps in ordinals.
4323            while _next_ordinal_to_read < 1 {
4324                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4325                _next_ordinal_to_read += 1;
4326                next_offset += envelope_size;
4327            }
4328
4329            let next_out_of_line = decoder.next_out_of_line();
4330            let handles_before = decoder.remaining_handles();
4331            if let Some((inlined, num_bytes, num_handles)) =
4332                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4333            {
4334                let member_inline_size =
4335                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4336                if inlined != (member_inline_size <= 4) {
4337                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4338                }
4339                let inner_offset;
4340                let mut inner_depth = depth.clone();
4341                if inlined {
4342                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4343                    inner_offset = next_offset;
4344                } else {
4345                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4346                    inner_depth.increment()?;
4347                }
4348                let val_ref = self.total_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4349                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4350                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4351                {
4352                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4353                }
4354                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4355                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4356                }
4357            }
4358
4359            next_offset += envelope_size;
4360            _next_ordinal_to_read += 1;
4361            if next_offset >= end_offset {
4362                return Ok(());
4363            }
4364
4365            // Decode unknown envelopes for gaps in ordinals.
4366            while _next_ordinal_to_read < 2 {
4367                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4368                _next_ordinal_to_read += 1;
4369                next_offset += envelope_size;
4370            }
4371
4372            let next_out_of_line = decoder.next_out_of_line();
4373            let handles_before = decoder.remaining_handles();
4374            if let Some((inlined, num_bytes, num_handles)) =
4375                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4376            {
4377                let member_inline_size =
4378                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4379                if inlined != (member_inline_size <= 4) {
4380                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4381                }
4382                let inner_offset;
4383                let mut inner_depth = depth.clone();
4384                if inlined {
4385                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4386                    inner_offset = next_offset;
4387                } else {
4388                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4389                    inner_depth.increment()?;
4390                }
4391                let val_ref = self.free_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4392                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4393                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4394                {
4395                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4396                }
4397                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4398                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4399                }
4400            }
4401
4402            next_offset += envelope_size;
4403            _next_ordinal_to_read += 1;
4404            if next_offset >= end_offset {
4405                return Ok(());
4406            }
4407
4408            // Decode unknown envelopes for gaps in ordinals.
4409            while _next_ordinal_to_read < 3 {
4410                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4411                _next_ordinal_to_read += 1;
4412                next_offset += envelope_size;
4413            }
4414
4415            let next_out_of_line = decoder.next_out_of_line();
4416            let handles_before = decoder.remaining_handles();
4417            if let Some((inlined, num_bytes, num_handles)) =
4418                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4419            {
4420                let member_inline_size =
4421                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4422                if inlined != (member_inline_size <= 4) {
4423                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4424                }
4425                let inner_offset;
4426                let mut inner_depth = depth.clone();
4427                if inlined {
4428                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4429                    inner_offset = next_offset;
4430                } else {
4431                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4432                    inner_depth.increment()?;
4433                }
4434                let val_ref = self.wired_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4435                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4436                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4437                {
4438                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4439                }
4440                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4441                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4442                }
4443            }
4444
4445            next_offset += envelope_size;
4446            _next_ordinal_to_read += 1;
4447            if next_offset >= end_offset {
4448                return Ok(());
4449            }
4450
4451            // Decode unknown envelopes for gaps in ordinals.
4452            while _next_ordinal_to_read < 4 {
4453                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4454                _next_ordinal_to_read += 1;
4455                next_offset += envelope_size;
4456            }
4457
4458            let next_out_of_line = decoder.next_out_of_line();
4459            let handles_before = decoder.remaining_handles();
4460            if let Some((inlined, num_bytes, num_handles)) =
4461                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4462            {
4463                let member_inline_size =
4464                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4465                if inlined != (member_inline_size <= 4) {
4466                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4467                }
4468                let inner_offset;
4469                let mut inner_depth = depth.clone();
4470                if inlined {
4471                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4472                    inner_offset = next_offset;
4473                } else {
4474                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4475                    inner_depth.increment()?;
4476                }
4477                let val_ref = self.total_heap_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4478                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4479                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4480                {
4481                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4482                }
4483                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4484                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4485                }
4486            }
4487
4488            next_offset += envelope_size;
4489            _next_ordinal_to_read += 1;
4490            if next_offset >= end_offset {
4491                return Ok(());
4492            }
4493
4494            // Decode unknown envelopes for gaps in ordinals.
4495            while _next_ordinal_to_read < 5 {
4496                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4497                _next_ordinal_to_read += 1;
4498                next_offset += envelope_size;
4499            }
4500
4501            let next_out_of_line = decoder.next_out_of_line();
4502            let handles_before = decoder.remaining_handles();
4503            if let Some((inlined, num_bytes, num_handles)) =
4504                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4505            {
4506                let member_inline_size =
4507                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4508                if inlined != (member_inline_size <= 4) {
4509                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4510                }
4511                let inner_offset;
4512                let mut inner_depth = depth.clone();
4513                if inlined {
4514                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4515                    inner_offset = next_offset;
4516                } else {
4517                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4518                    inner_depth.increment()?;
4519                }
4520                let val_ref = self.free_heap_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4521                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4522                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4523                {
4524                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4525                }
4526                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4527                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4528                }
4529            }
4530
4531            next_offset += envelope_size;
4532            _next_ordinal_to_read += 1;
4533            if next_offset >= end_offset {
4534                return Ok(());
4535            }
4536
4537            // Decode unknown envelopes for gaps in ordinals.
4538            while _next_ordinal_to_read < 6 {
4539                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4540                _next_ordinal_to_read += 1;
4541                next_offset += envelope_size;
4542            }
4543
4544            let next_out_of_line = decoder.next_out_of_line();
4545            let handles_before = decoder.remaining_handles();
4546            if let Some((inlined, num_bytes, num_handles)) =
4547                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4548            {
4549                let member_inline_size =
4550                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4551                if inlined != (member_inline_size <= 4) {
4552                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4553                }
4554                let inner_offset;
4555                let mut inner_depth = depth.clone();
4556                if inlined {
4557                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4558                    inner_offset = next_offset;
4559                } else {
4560                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4561                    inner_depth.increment()?;
4562                }
4563                let val_ref = self.vmo_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4564                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4565                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4566                {
4567                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4568                }
4569                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4570                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4571                }
4572            }
4573
4574            next_offset += envelope_size;
4575            _next_ordinal_to_read += 1;
4576            if next_offset >= end_offset {
4577                return Ok(());
4578            }
4579
4580            // Decode unknown envelopes for gaps in ordinals.
4581            while _next_ordinal_to_read < 7 {
4582                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4583                _next_ordinal_to_read += 1;
4584                next_offset += envelope_size;
4585            }
4586
4587            let next_out_of_line = decoder.next_out_of_line();
4588            let handles_before = decoder.remaining_handles();
4589            if let Some((inlined, num_bytes, num_handles)) =
4590                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4591            {
4592                let member_inline_size =
4593                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4594                if inlined != (member_inline_size <= 4) {
4595                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4596                }
4597                let inner_offset;
4598                let mut inner_depth = depth.clone();
4599                if inlined {
4600                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4601                    inner_offset = next_offset;
4602                } else {
4603                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4604                    inner_depth.increment()?;
4605                }
4606                let val_ref =
4607                    self.vmo_pager_total_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4608                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4609                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4610                {
4611                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4612                }
4613                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4614                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4615                }
4616            }
4617
4618            next_offset += envelope_size;
4619            _next_ordinal_to_read += 1;
4620            if next_offset >= end_offset {
4621                return Ok(());
4622            }
4623
4624            // Decode unknown envelopes for gaps in ordinals.
4625            while _next_ordinal_to_read < 8 {
4626                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4627                _next_ordinal_to_read += 1;
4628                next_offset += envelope_size;
4629            }
4630
4631            let next_out_of_line = decoder.next_out_of_line();
4632            let handles_before = decoder.remaining_handles();
4633            if let Some((inlined, num_bytes, num_handles)) =
4634                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4635            {
4636                let member_inline_size =
4637                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4638                if inlined != (member_inline_size <= 4) {
4639                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4640                }
4641                let inner_offset;
4642                let mut inner_depth = depth.clone();
4643                if inlined {
4644                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4645                    inner_offset = next_offset;
4646                } else {
4647                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4648                    inner_depth.increment()?;
4649                }
4650                let val_ref =
4651                    self.vmo_pager_newest_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4652                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4653                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4654                {
4655                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4656                }
4657                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4658                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4659                }
4660            }
4661
4662            next_offset += envelope_size;
4663            _next_ordinal_to_read += 1;
4664            if next_offset >= end_offset {
4665                return Ok(());
4666            }
4667
4668            // Decode unknown envelopes for gaps in ordinals.
4669            while _next_ordinal_to_read < 9 {
4670                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4671                _next_ordinal_to_read += 1;
4672                next_offset += envelope_size;
4673            }
4674
4675            let next_out_of_line = decoder.next_out_of_line();
4676            let handles_before = decoder.remaining_handles();
4677            if let Some((inlined, num_bytes, num_handles)) =
4678                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4679            {
4680                let member_inline_size =
4681                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4682                if inlined != (member_inline_size <= 4) {
4683                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4684                }
4685                let inner_offset;
4686                let mut inner_depth = depth.clone();
4687                if inlined {
4688                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4689                    inner_offset = next_offset;
4690                } else {
4691                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4692                    inner_depth.increment()?;
4693                }
4694                let val_ref =
4695                    self.vmo_pager_oldest_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4696                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4697                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4698                {
4699                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4700                }
4701                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4702                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4703                }
4704            }
4705
4706            next_offset += envelope_size;
4707            _next_ordinal_to_read += 1;
4708            if next_offset >= end_offset {
4709                return Ok(());
4710            }
4711
4712            // Decode unknown envelopes for gaps in ordinals.
4713            while _next_ordinal_to_read < 10 {
4714                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4715                _next_ordinal_to_read += 1;
4716                next_offset += envelope_size;
4717            }
4718
4719            let next_out_of_line = decoder.next_out_of_line();
4720            let handles_before = decoder.remaining_handles();
4721            if let Some((inlined, num_bytes, num_handles)) =
4722                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4723            {
4724                let member_inline_size =
4725                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4726                if inlined != (member_inline_size <= 4) {
4727                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4728                }
4729                let inner_offset;
4730                let mut inner_depth = depth.clone();
4731                if inlined {
4732                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4733                    inner_offset = next_offset;
4734                } else {
4735                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4736                    inner_depth.increment()?;
4737                }
4738                let val_ref = self
4739                    .vmo_discardable_locked_bytes
4740                    .get_or_insert_with(|| fidl::new_empty!(u64, D));
4741                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4742                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4743                {
4744                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4745                }
4746                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4747                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4748                }
4749            }
4750
4751            next_offset += envelope_size;
4752            _next_ordinal_to_read += 1;
4753            if next_offset >= end_offset {
4754                return Ok(());
4755            }
4756
4757            // Decode unknown envelopes for gaps in ordinals.
4758            while _next_ordinal_to_read < 11 {
4759                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4760                _next_ordinal_to_read += 1;
4761                next_offset += envelope_size;
4762            }
4763
4764            let next_out_of_line = decoder.next_out_of_line();
4765            let handles_before = decoder.remaining_handles();
4766            if let Some((inlined, num_bytes, num_handles)) =
4767                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4768            {
4769                let member_inline_size =
4770                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4771                if inlined != (member_inline_size <= 4) {
4772                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4773                }
4774                let inner_offset;
4775                let mut inner_depth = depth.clone();
4776                if inlined {
4777                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4778                    inner_offset = next_offset;
4779                } else {
4780                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4781                    inner_depth.increment()?;
4782                }
4783                let val_ref = self
4784                    .vmo_discardable_unlocked_bytes
4785                    .get_or_insert_with(|| fidl::new_empty!(u64, D));
4786                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4787                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4788                {
4789                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4790                }
4791                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4792                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4793                }
4794            }
4795
4796            next_offset += envelope_size;
4797            _next_ordinal_to_read += 1;
4798            if next_offset >= end_offset {
4799                return Ok(());
4800            }
4801
4802            // Decode unknown envelopes for gaps in ordinals.
4803            while _next_ordinal_to_read < 12 {
4804                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4805                _next_ordinal_to_read += 1;
4806                next_offset += envelope_size;
4807            }
4808
4809            let next_out_of_line = decoder.next_out_of_line();
4810            let handles_before = decoder.remaining_handles();
4811            if let Some((inlined, num_bytes, num_handles)) =
4812                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4813            {
4814                let member_inline_size =
4815                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4816                if inlined != (member_inline_size <= 4) {
4817                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4818                }
4819                let inner_offset;
4820                let mut inner_depth = depth.clone();
4821                if inlined {
4822                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4823                    inner_offset = next_offset;
4824                } else {
4825                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4826                    inner_depth.increment()?;
4827                }
4828                let val_ref =
4829                    self.mmu_overhead_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4830                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4831                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4832                {
4833                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4834                }
4835                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4836                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4837                }
4838            }
4839
4840            next_offset += envelope_size;
4841            _next_ordinal_to_read += 1;
4842            if next_offset >= end_offset {
4843                return Ok(());
4844            }
4845
4846            // Decode unknown envelopes for gaps in ordinals.
4847            while _next_ordinal_to_read < 13 {
4848                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4849                _next_ordinal_to_read += 1;
4850                next_offset += envelope_size;
4851            }
4852
4853            let next_out_of_line = decoder.next_out_of_line();
4854            let handles_before = decoder.remaining_handles();
4855            if let Some((inlined, num_bytes, num_handles)) =
4856                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4857            {
4858                let member_inline_size =
4859                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4860                if inlined != (member_inline_size <= 4) {
4861                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4862                }
4863                let inner_offset;
4864                let mut inner_depth = depth.clone();
4865                if inlined {
4866                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4867                    inner_offset = next_offset;
4868                } else {
4869                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4870                    inner_depth.increment()?;
4871                }
4872                let val_ref = self.ipc_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4873                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4874                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4875                {
4876                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4877                }
4878                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4879                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4880                }
4881            }
4882
4883            next_offset += envelope_size;
4884            _next_ordinal_to_read += 1;
4885            if next_offset >= end_offset {
4886                return Ok(());
4887            }
4888
4889            // Decode unknown envelopes for gaps in ordinals.
4890            while _next_ordinal_to_read < 14 {
4891                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4892                _next_ordinal_to_read += 1;
4893                next_offset += envelope_size;
4894            }
4895
4896            let next_out_of_line = decoder.next_out_of_line();
4897            let handles_before = decoder.remaining_handles();
4898            if let Some((inlined, num_bytes, num_handles)) =
4899                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4900            {
4901                let member_inline_size =
4902                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4903                if inlined != (member_inline_size <= 4) {
4904                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4905                }
4906                let inner_offset;
4907                let mut inner_depth = depth.clone();
4908                if inlined {
4909                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4910                    inner_offset = next_offset;
4911                } else {
4912                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4913                    inner_depth.increment()?;
4914                }
4915                let val_ref = self.other_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4916                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4917                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4918                {
4919                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4920                }
4921                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4922                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4923                }
4924            }
4925
4926            next_offset += envelope_size;
4927
4928            // Decode the remaining unknown envelopes.
4929            while next_offset < end_offset {
4930                _next_ordinal_to_read += 1;
4931                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4932                next_offset += envelope_size;
4933            }
4934
4935            Ok(())
4936        }
4937    }
4938
4939    impl PerCpuStats {
4940        #[inline(always)]
4941        fn max_ordinal_present(&self) -> u64 {
4942            if let Some(_) = self.generic_ipis {
4943                return 15;
4944            }
4945            if let Some(_) = self.reschedule_ipis {
4946                return 14;
4947            }
4948            if let Some(_) = self.syscalls {
4949                return 13;
4950            }
4951            if let Some(_) = self.exceptions {
4952                return 12;
4953            }
4954            if let Some(_) = self.page_faults {
4955                return 11;
4956            }
4957            if let Some(_) = self.timers {
4958                return 10;
4959            }
4960            if let Some(_) = self.timer_ints {
4961                return 9;
4962            }
4963            if let Some(_) = self.ints {
4964                return 8;
4965            }
4966            if let Some(_) = self.yields {
4967                return 7;
4968            }
4969            if let Some(_) = self.irq_preempts {
4970                return 6;
4971            }
4972            if let Some(_) = self.context_switches {
4973                return 5;
4974            }
4975            if let Some(_) = self.reschedules {
4976                return 4;
4977            }
4978            if let Some(_) = self.idle_time {
4979                return 3;
4980            }
4981            if let Some(_) = self.flags {
4982                return 2;
4983            }
4984            if let Some(_) = self.cpu_number {
4985                return 1;
4986            }
4987            0
4988        }
4989    }
4990
4991    impl fidl::encoding::ValueTypeMarker for PerCpuStats {
4992        type Borrowed<'a> = &'a Self;
4993        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4994            value
4995        }
4996    }
4997
4998    unsafe impl fidl::encoding::TypeMarker for PerCpuStats {
4999        type Owned = Self;
5000
5001        #[inline(always)]
5002        fn inline_align(_context: fidl::encoding::Context) -> usize {
5003            8
5004        }
5005
5006        #[inline(always)]
5007        fn inline_size(_context: fidl::encoding::Context) -> usize {
5008            16
5009        }
5010    }
5011
5012    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PerCpuStats, D>
5013        for &PerCpuStats
5014    {
5015        unsafe fn encode(
5016            self,
5017            encoder: &mut fidl::encoding::Encoder<'_, D>,
5018            offset: usize,
5019            mut depth: fidl::encoding::Depth,
5020        ) -> fidl::Result<()> {
5021            encoder.debug_check_bounds::<PerCpuStats>(offset);
5022            // Vector header
5023            let max_ordinal: u64 = self.max_ordinal_present();
5024            encoder.write_num(max_ordinal, offset);
5025            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5026            // Calling encoder.out_of_line_offset(0) is not allowed.
5027            if max_ordinal == 0 {
5028                return Ok(());
5029            }
5030            depth.increment()?;
5031            let envelope_size = 8;
5032            let bytes_len = max_ordinal as usize * envelope_size;
5033            #[allow(unused_variables)]
5034            let offset = encoder.out_of_line_offset(bytes_len);
5035            let mut _prev_end_offset: usize = 0;
5036            if 1 > max_ordinal {
5037                return Ok(());
5038            }
5039
5040            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5041            // are envelope_size bytes.
5042            let cur_offset: usize = (1 - 1) * envelope_size;
5043
5044            // Zero reserved fields.
5045            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5046
5047            // Safety:
5048            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5049            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5050            //   envelope_size bytes, there is always sufficient room.
5051            fidl::encoding::encode_in_envelope_optional::<u32, D>(
5052                self.cpu_number.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
5053                encoder,
5054                offset + cur_offset,
5055                depth,
5056            )?;
5057
5058            _prev_end_offset = cur_offset + envelope_size;
5059            if 2 > max_ordinal {
5060                return Ok(());
5061            }
5062
5063            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5064            // are envelope_size bytes.
5065            let cur_offset: usize = (2 - 1) * envelope_size;
5066
5067            // Zero reserved fields.
5068            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5069
5070            // Safety:
5071            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5072            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5073            //   envelope_size bytes, there is always sufficient room.
5074            fidl::encoding::encode_in_envelope_optional::<u32, D>(
5075                self.flags.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
5076                encoder,
5077                offset + cur_offset,
5078                depth,
5079            )?;
5080
5081            _prev_end_offset = cur_offset + envelope_size;
5082            if 3 > max_ordinal {
5083                return Ok(());
5084            }
5085
5086            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5087            // are envelope_size bytes.
5088            let cur_offset: usize = (3 - 1) * envelope_size;
5089
5090            // Zero reserved fields.
5091            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5092
5093            // Safety:
5094            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5095            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5096            //   envelope_size bytes, there is always sufficient room.
5097            fidl::encoding::encode_in_envelope_optional::<i64, D>(
5098                self.idle_time.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
5099                encoder,
5100                offset + cur_offset,
5101                depth,
5102            )?;
5103
5104            _prev_end_offset = cur_offset + envelope_size;
5105            if 4 > max_ordinal {
5106                return Ok(());
5107            }
5108
5109            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5110            // are envelope_size bytes.
5111            let cur_offset: usize = (4 - 1) * envelope_size;
5112
5113            // Zero reserved fields.
5114            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5115
5116            // Safety:
5117            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5118            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5119            //   envelope_size bytes, there is always sufficient room.
5120            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5121                self.reschedules.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5122                encoder,
5123                offset + cur_offset,
5124                depth,
5125            )?;
5126
5127            _prev_end_offset = cur_offset + envelope_size;
5128            if 5 > max_ordinal {
5129                return Ok(());
5130            }
5131
5132            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5133            // are envelope_size bytes.
5134            let cur_offset: usize = (5 - 1) * envelope_size;
5135
5136            // Zero reserved fields.
5137            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5138
5139            // Safety:
5140            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5141            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5142            //   envelope_size bytes, there is always sufficient room.
5143            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5144                self.context_switches
5145                    .as_ref()
5146                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5147                encoder,
5148                offset + cur_offset,
5149                depth,
5150            )?;
5151
5152            _prev_end_offset = cur_offset + envelope_size;
5153            if 6 > max_ordinal {
5154                return Ok(());
5155            }
5156
5157            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5158            // are envelope_size bytes.
5159            let cur_offset: usize = (6 - 1) * envelope_size;
5160
5161            // Zero reserved fields.
5162            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5163
5164            // Safety:
5165            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5166            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5167            //   envelope_size bytes, there is always sufficient room.
5168            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5169                self.irq_preempts.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5170                encoder,
5171                offset + cur_offset,
5172                depth,
5173            )?;
5174
5175            _prev_end_offset = cur_offset + envelope_size;
5176            if 7 > max_ordinal {
5177                return Ok(());
5178            }
5179
5180            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5181            // are envelope_size bytes.
5182            let cur_offset: usize = (7 - 1) * envelope_size;
5183
5184            // Zero reserved fields.
5185            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5186
5187            // Safety:
5188            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5189            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5190            //   envelope_size bytes, there is always sufficient room.
5191            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5192                self.yields.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5193                encoder,
5194                offset + cur_offset,
5195                depth,
5196            )?;
5197
5198            _prev_end_offset = cur_offset + envelope_size;
5199            if 8 > max_ordinal {
5200                return Ok(());
5201            }
5202
5203            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5204            // are envelope_size bytes.
5205            let cur_offset: usize = (8 - 1) * envelope_size;
5206
5207            // Zero reserved fields.
5208            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5209
5210            // Safety:
5211            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5212            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5213            //   envelope_size bytes, there is always sufficient room.
5214            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5215                self.ints.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5216                encoder,
5217                offset + cur_offset,
5218                depth,
5219            )?;
5220
5221            _prev_end_offset = cur_offset + envelope_size;
5222            if 9 > max_ordinal {
5223                return Ok(());
5224            }
5225
5226            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5227            // are envelope_size bytes.
5228            let cur_offset: usize = (9 - 1) * envelope_size;
5229
5230            // Zero reserved fields.
5231            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5232
5233            // Safety:
5234            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5235            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5236            //   envelope_size bytes, there is always sufficient room.
5237            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5238                self.timer_ints.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5239                encoder,
5240                offset + cur_offset,
5241                depth,
5242            )?;
5243
5244            _prev_end_offset = cur_offset + envelope_size;
5245            if 10 > max_ordinal {
5246                return Ok(());
5247            }
5248
5249            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5250            // are envelope_size bytes.
5251            let cur_offset: usize = (10 - 1) * envelope_size;
5252
5253            // Zero reserved fields.
5254            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5255
5256            // Safety:
5257            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5258            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5259            //   envelope_size bytes, there is always sufficient room.
5260            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5261                self.timers.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5262                encoder,
5263                offset + cur_offset,
5264                depth,
5265            )?;
5266
5267            _prev_end_offset = cur_offset + envelope_size;
5268            if 11 > max_ordinal {
5269                return Ok(());
5270            }
5271
5272            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5273            // are envelope_size bytes.
5274            let cur_offset: usize = (11 - 1) * envelope_size;
5275
5276            // Zero reserved fields.
5277            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5278
5279            // Safety:
5280            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5281            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5282            //   envelope_size bytes, there is always sufficient room.
5283            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5284                self.page_faults.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5285                encoder,
5286                offset + cur_offset,
5287                depth,
5288            )?;
5289
5290            _prev_end_offset = cur_offset + envelope_size;
5291            if 12 > max_ordinal {
5292                return Ok(());
5293            }
5294
5295            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5296            // are envelope_size bytes.
5297            let cur_offset: usize = (12 - 1) * envelope_size;
5298
5299            // Zero reserved fields.
5300            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5301
5302            // Safety:
5303            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5304            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5305            //   envelope_size bytes, there is always sufficient room.
5306            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5307                self.exceptions.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5308                encoder,
5309                offset + cur_offset,
5310                depth,
5311            )?;
5312
5313            _prev_end_offset = cur_offset + envelope_size;
5314            if 13 > max_ordinal {
5315                return Ok(());
5316            }
5317
5318            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5319            // are envelope_size bytes.
5320            let cur_offset: usize = (13 - 1) * envelope_size;
5321
5322            // Zero reserved fields.
5323            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5324
5325            // Safety:
5326            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5327            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5328            //   envelope_size bytes, there is always sufficient room.
5329            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5330                self.syscalls.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5331                encoder,
5332                offset + cur_offset,
5333                depth,
5334            )?;
5335
5336            _prev_end_offset = cur_offset + envelope_size;
5337            if 14 > max_ordinal {
5338                return Ok(());
5339            }
5340
5341            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5342            // are envelope_size bytes.
5343            let cur_offset: usize = (14 - 1) * envelope_size;
5344
5345            // Zero reserved fields.
5346            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5347
5348            // Safety:
5349            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5350            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5351            //   envelope_size bytes, there is always sufficient room.
5352            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5353                self.reschedule_ipis.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5354                encoder,
5355                offset + cur_offset,
5356                depth,
5357            )?;
5358
5359            _prev_end_offset = cur_offset + envelope_size;
5360            if 15 > max_ordinal {
5361                return Ok(());
5362            }
5363
5364            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5365            // are envelope_size bytes.
5366            let cur_offset: usize = (15 - 1) * envelope_size;
5367
5368            // Zero reserved fields.
5369            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5370
5371            // Safety:
5372            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5373            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5374            //   envelope_size bytes, there is always sufficient room.
5375            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5376                self.generic_ipis.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5377                encoder,
5378                offset + cur_offset,
5379                depth,
5380            )?;
5381
5382            _prev_end_offset = cur_offset + envelope_size;
5383
5384            Ok(())
5385        }
5386    }
5387
5388    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PerCpuStats {
5389        #[inline(always)]
5390        fn new_empty() -> Self {
5391            Self::default()
5392        }
5393
5394        unsafe fn decode(
5395            &mut self,
5396            decoder: &mut fidl::encoding::Decoder<'_, D>,
5397            offset: usize,
5398            mut depth: fidl::encoding::Depth,
5399        ) -> fidl::Result<()> {
5400            decoder.debug_check_bounds::<Self>(offset);
5401            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5402                None => return Err(fidl::Error::NotNullable),
5403                Some(len) => len,
5404            };
5405            // Calling decoder.out_of_line_offset(0) is not allowed.
5406            if len == 0 {
5407                return Ok(());
5408            };
5409            depth.increment()?;
5410            let envelope_size = 8;
5411            let bytes_len = len * envelope_size;
5412            let offset = decoder.out_of_line_offset(bytes_len)?;
5413            // Decode the envelope for each type.
5414            let mut _next_ordinal_to_read = 0;
5415            let mut next_offset = offset;
5416            let end_offset = offset + bytes_len;
5417            _next_ordinal_to_read += 1;
5418            if next_offset >= end_offset {
5419                return Ok(());
5420            }
5421
5422            // Decode unknown envelopes for gaps in ordinals.
5423            while _next_ordinal_to_read < 1 {
5424                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5425                _next_ordinal_to_read += 1;
5426                next_offset += envelope_size;
5427            }
5428
5429            let next_out_of_line = decoder.next_out_of_line();
5430            let handles_before = decoder.remaining_handles();
5431            if let Some((inlined, num_bytes, num_handles)) =
5432                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5433            {
5434                let member_inline_size =
5435                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5436                if inlined != (member_inline_size <= 4) {
5437                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5438                }
5439                let inner_offset;
5440                let mut inner_depth = depth.clone();
5441                if inlined {
5442                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5443                    inner_offset = next_offset;
5444                } else {
5445                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5446                    inner_depth.increment()?;
5447                }
5448                let val_ref = self.cpu_number.get_or_insert_with(|| fidl::new_empty!(u32, D));
5449                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
5450                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5451                {
5452                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5453                }
5454                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5455                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5456                }
5457            }
5458
5459            next_offset += envelope_size;
5460            _next_ordinal_to_read += 1;
5461            if next_offset >= end_offset {
5462                return Ok(());
5463            }
5464
5465            // Decode unknown envelopes for gaps in ordinals.
5466            while _next_ordinal_to_read < 2 {
5467                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5468                _next_ordinal_to_read += 1;
5469                next_offset += envelope_size;
5470            }
5471
5472            let next_out_of_line = decoder.next_out_of_line();
5473            let handles_before = decoder.remaining_handles();
5474            if let Some((inlined, num_bytes, num_handles)) =
5475                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5476            {
5477                let member_inline_size =
5478                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5479                if inlined != (member_inline_size <= 4) {
5480                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5481                }
5482                let inner_offset;
5483                let mut inner_depth = depth.clone();
5484                if inlined {
5485                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5486                    inner_offset = next_offset;
5487                } else {
5488                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5489                    inner_depth.increment()?;
5490                }
5491                let val_ref = self.flags.get_or_insert_with(|| fidl::new_empty!(u32, D));
5492                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
5493                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5494                {
5495                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5496                }
5497                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5498                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5499                }
5500            }
5501
5502            next_offset += envelope_size;
5503            _next_ordinal_to_read += 1;
5504            if next_offset >= end_offset {
5505                return Ok(());
5506            }
5507
5508            // Decode unknown envelopes for gaps in ordinals.
5509            while _next_ordinal_to_read < 3 {
5510                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5511                _next_ordinal_to_read += 1;
5512                next_offset += envelope_size;
5513            }
5514
5515            let next_out_of_line = decoder.next_out_of_line();
5516            let handles_before = decoder.remaining_handles();
5517            if let Some((inlined, num_bytes, num_handles)) =
5518                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5519            {
5520                let member_inline_size =
5521                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5522                if inlined != (member_inline_size <= 4) {
5523                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5524                }
5525                let inner_offset;
5526                let mut inner_depth = depth.clone();
5527                if inlined {
5528                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5529                    inner_offset = next_offset;
5530                } else {
5531                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5532                    inner_depth.increment()?;
5533                }
5534                let val_ref = self.idle_time.get_or_insert_with(|| fidl::new_empty!(i64, D));
5535                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
5536                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5537                {
5538                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5539                }
5540                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5541                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5542                }
5543            }
5544
5545            next_offset += envelope_size;
5546            _next_ordinal_to_read += 1;
5547            if next_offset >= end_offset {
5548                return Ok(());
5549            }
5550
5551            // Decode unknown envelopes for gaps in ordinals.
5552            while _next_ordinal_to_read < 4 {
5553                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5554                _next_ordinal_to_read += 1;
5555                next_offset += envelope_size;
5556            }
5557
5558            let next_out_of_line = decoder.next_out_of_line();
5559            let handles_before = decoder.remaining_handles();
5560            if let Some((inlined, num_bytes, num_handles)) =
5561                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5562            {
5563                let member_inline_size =
5564                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5565                if inlined != (member_inline_size <= 4) {
5566                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5567                }
5568                let inner_offset;
5569                let mut inner_depth = depth.clone();
5570                if inlined {
5571                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5572                    inner_offset = next_offset;
5573                } else {
5574                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5575                    inner_depth.increment()?;
5576                }
5577                let val_ref = self.reschedules.get_or_insert_with(|| fidl::new_empty!(u64, D));
5578                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5579                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5580                {
5581                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5582                }
5583                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5584                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5585                }
5586            }
5587
5588            next_offset += envelope_size;
5589            _next_ordinal_to_read += 1;
5590            if next_offset >= end_offset {
5591                return Ok(());
5592            }
5593
5594            // Decode unknown envelopes for gaps in ordinals.
5595            while _next_ordinal_to_read < 5 {
5596                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5597                _next_ordinal_to_read += 1;
5598                next_offset += envelope_size;
5599            }
5600
5601            let next_out_of_line = decoder.next_out_of_line();
5602            let handles_before = decoder.remaining_handles();
5603            if let Some((inlined, num_bytes, num_handles)) =
5604                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5605            {
5606                let member_inline_size =
5607                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5608                if inlined != (member_inline_size <= 4) {
5609                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5610                }
5611                let inner_offset;
5612                let mut inner_depth = depth.clone();
5613                if inlined {
5614                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5615                    inner_offset = next_offset;
5616                } else {
5617                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5618                    inner_depth.increment()?;
5619                }
5620                let val_ref = self.context_switches.get_or_insert_with(|| fidl::new_empty!(u64, D));
5621                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5622                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5623                {
5624                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5625                }
5626                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5627                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5628                }
5629            }
5630
5631            next_offset += envelope_size;
5632            _next_ordinal_to_read += 1;
5633            if next_offset >= end_offset {
5634                return Ok(());
5635            }
5636
5637            // Decode unknown envelopes for gaps in ordinals.
5638            while _next_ordinal_to_read < 6 {
5639                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5640                _next_ordinal_to_read += 1;
5641                next_offset += envelope_size;
5642            }
5643
5644            let next_out_of_line = decoder.next_out_of_line();
5645            let handles_before = decoder.remaining_handles();
5646            if let Some((inlined, num_bytes, num_handles)) =
5647                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5648            {
5649                let member_inline_size =
5650                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5651                if inlined != (member_inline_size <= 4) {
5652                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5653                }
5654                let inner_offset;
5655                let mut inner_depth = depth.clone();
5656                if inlined {
5657                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5658                    inner_offset = next_offset;
5659                } else {
5660                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5661                    inner_depth.increment()?;
5662                }
5663                let val_ref = self.irq_preempts.get_or_insert_with(|| fidl::new_empty!(u64, D));
5664                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5665                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5666                {
5667                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5668                }
5669                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5670                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5671                }
5672            }
5673
5674            next_offset += envelope_size;
5675            _next_ordinal_to_read += 1;
5676            if next_offset >= end_offset {
5677                return Ok(());
5678            }
5679
5680            // Decode unknown envelopes for gaps in ordinals.
5681            while _next_ordinal_to_read < 7 {
5682                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5683                _next_ordinal_to_read += 1;
5684                next_offset += envelope_size;
5685            }
5686
5687            let next_out_of_line = decoder.next_out_of_line();
5688            let handles_before = decoder.remaining_handles();
5689            if let Some((inlined, num_bytes, num_handles)) =
5690                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5691            {
5692                let member_inline_size =
5693                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5694                if inlined != (member_inline_size <= 4) {
5695                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5696                }
5697                let inner_offset;
5698                let mut inner_depth = depth.clone();
5699                if inlined {
5700                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5701                    inner_offset = next_offset;
5702                } else {
5703                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5704                    inner_depth.increment()?;
5705                }
5706                let val_ref = self.yields.get_or_insert_with(|| fidl::new_empty!(u64, D));
5707                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5708                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5709                {
5710                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5711                }
5712                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5713                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5714                }
5715            }
5716
5717            next_offset += envelope_size;
5718            _next_ordinal_to_read += 1;
5719            if next_offset >= end_offset {
5720                return Ok(());
5721            }
5722
5723            // Decode unknown envelopes for gaps in ordinals.
5724            while _next_ordinal_to_read < 8 {
5725                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5726                _next_ordinal_to_read += 1;
5727                next_offset += envelope_size;
5728            }
5729
5730            let next_out_of_line = decoder.next_out_of_line();
5731            let handles_before = decoder.remaining_handles();
5732            if let Some((inlined, num_bytes, num_handles)) =
5733                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5734            {
5735                let member_inline_size =
5736                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5737                if inlined != (member_inline_size <= 4) {
5738                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5739                }
5740                let inner_offset;
5741                let mut inner_depth = depth.clone();
5742                if inlined {
5743                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5744                    inner_offset = next_offset;
5745                } else {
5746                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5747                    inner_depth.increment()?;
5748                }
5749                let val_ref = self.ints.get_or_insert_with(|| fidl::new_empty!(u64, D));
5750                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5751                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5752                {
5753                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5754                }
5755                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5756                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5757                }
5758            }
5759
5760            next_offset += envelope_size;
5761            _next_ordinal_to_read += 1;
5762            if next_offset >= end_offset {
5763                return Ok(());
5764            }
5765
5766            // Decode unknown envelopes for gaps in ordinals.
5767            while _next_ordinal_to_read < 9 {
5768                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5769                _next_ordinal_to_read += 1;
5770                next_offset += envelope_size;
5771            }
5772
5773            let next_out_of_line = decoder.next_out_of_line();
5774            let handles_before = decoder.remaining_handles();
5775            if let Some((inlined, num_bytes, num_handles)) =
5776                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5777            {
5778                let member_inline_size =
5779                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5780                if inlined != (member_inline_size <= 4) {
5781                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5782                }
5783                let inner_offset;
5784                let mut inner_depth = depth.clone();
5785                if inlined {
5786                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5787                    inner_offset = next_offset;
5788                } else {
5789                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5790                    inner_depth.increment()?;
5791                }
5792                let val_ref = self.timer_ints.get_or_insert_with(|| fidl::new_empty!(u64, D));
5793                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5794                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5795                {
5796                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5797                }
5798                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5799                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5800                }
5801            }
5802
5803            next_offset += envelope_size;
5804            _next_ordinal_to_read += 1;
5805            if next_offset >= end_offset {
5806                return Ok(());
5807            }
5808
5809            // Decode unknown envelopes for gaps in ordinals.
5810            while _next_ordinal_to_read < 10 {
5811                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5812                _next_ordinal_to_read += 1;
5813                next_offset += envelope_size;
5814            }
5815
5816            let next_out_of_line = decoder.next_out_of_line();
5817            let handles_before = decoder.remaining_handles();
5818            if let Some((inlined, num_bytes, num_handles)) =
5819                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5820            {
5821                let member_inline_size =
5822                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5823                if inlined != (member_inline_size <= 4) {
5824                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5825                }
5826                let inner_offset;
5827                let mut inner_depth = depth.clone();
5828                if inlined {
5829                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5830                    inner_offset = next_offset;
5831                } else {
5832                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5833                    inner_depth.increment()?;
5834                }
5835                let val_ref = self.timers.get_or_insert_with(|| fidl::new_empty!(u64, D));
5836                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5837                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5838                {
5839                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5840                }
5841                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5842                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5843                }
5844            }
5845
5846            next_offset += envelope_size;
5847            _next_ordinal_to_read += 1;
5848            if next_offset >= end_offset {
5849                return Ok(());
5850            }
5851
5852            // Decode unknown envelopes for gaps in ordinals.
5853            while _next_ordinal_to_read < 11 {
5854                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5855                _next_ordinal_to_read += 1;
5856                next_offset += envelope_size;
5857            }
5858
5859            let next_out_of_line = decoder.next_out_of_line();
5860            let handles_before = decoder.remaining_handles();
5861            if let Some((inlined, num_bytes, num_handles)) =
5862                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5863            {
5864                let member_inline_size =
5865                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5866                if inlined != (member_inline_size <= 4) {
5867                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5868                }
5869                let inner_offset;
5870                let mut inner_depth = depth.clone();
5871                if inlined {
5872                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5873                    inner_offset = next_offset;
5874                } else {
5875                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5876                    inner_depth.increment()?;
5877                }
5878                let val_ref = self.page_faults.get_or_insert_with(|| fidl::new_empty!(u64, D));
5879                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5880                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5881                {
5882                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5883                }
5884                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5885                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5886                }
5887            }
5888
5889            next_offset += envelope_size;
5890            _next_ordinal_to_read += 1;
5891            if next_offset >= end_offset {
5892                return Ok(());
5893            }
5894
5895            // Decode unknown envelopes for gaps in ordinals.
5896            while _next_ordinal_to_read < 12 {
5897                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5898                _next_ordinal_to_read += 1;
5899                next_offset += envelope_size;
5900            }
5901
5902            let next_out_of_line = decoder.next_out_of_line();
5903            let handles_before = decoder.remaining_handles();
5904            if let Some((inlined, num_bytes, num_handles)) =
5905                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5906            {
5907                let member_inline_size =
5908                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5909                if inlined != (member_inline_size <= 4) {
5910                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5911                }
5912                let inner_offset;
5913                let mut inner_depth = depth.clone();
5914                if inlined {
5915                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5916                    inner_offset = next_offset;
5917                } else {
5918                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5919                    inner_depth.increment()?;
5920                }
5921                let val_ref = self.exceptions.get_or_insert_with(|| fidl::new_empty!(u64, D));
5922                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5923                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5924                {
5925                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5926                }
5927                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5928                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5929                }
5930            }
5931
5932            next_offset += envelope_size;
5933            _next_ordinal_to_read += 1;
5934            if next_offset >= end_offset {
5935                return Ok(());
5936            }
5937
5938            // Decode unknown envelopes for gaps in ordinals.
5939            while _next_ordinal_to_read < 13 {
5940                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5941                _next_ordinal_to_read += 1;
5942                next_offset += envelope_size;
5943            }
5944
5945            let next_out_of_line = decoder.next_out_of_line();
5946            let handles_before = decoder.remaining_handles();
5947            if let Some((inlined, num_bytes, num_handles)) =
5948                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5949            {
5950                let member_inline_size =
5951                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5952                if inlined != (member_inline_size <= 4) {
5953                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5954                }
5955                let inner_offset;
5956                let mut inner_depth = depth.clone();
5957                if inlined {
5958                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5959                    inner_offset = next_offset;
5960                } else {
5961                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5962                    inner_depth.increment()?;
5963                }
5964                let val_ref = self.syscalls.get_or_insert_with(|| fidl::new_empty!(u64, D));
5965                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5966                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5967                {
5968                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5969                }
5970                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5971                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5972                }
5973            }
5974
5975            next_offset += envelope_size;
5976            _next_ordinal_to_read += 1;
5977            if next_offset >= end_offset {
5978                return Ok(());
5979            }
5980
5981            // Decode unknown envelopes for gaps in ordinals.
5982            while _next_ordinal_to_read < 14 {
5983                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5984                _next_ordinal_to_read += 1;
5985                next_offset += envelope_size;
5986            }
5987
5988            let next_out_of_line = decoder.next_out_of_line();
5989            let handles_before = decoder.remaining_handles();
5990            if let Some((inlined, num_bytes, num_handles)) =
5991                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5992            {
5993                let member_inline_size =
5994                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5995                if inlined != (member_inline_size <= 4) {
5996                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5997                }
5998                let inner_offset;
5999                let mut inner_depth = depth.clone();
6000                if inlined {
6001                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6002                    inner_offset = next_offset;
6003                } else {
6004                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6005                    inner_depth.increment()?;
6006                }
6007                let val_ref = self.reschedule_ipis.get_or_insert_with(|| fidl::new_empty!(u64, D));
6008                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6009                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6010                {
6011                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6012                }
6013                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6014                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6015                }
6016            }
6017
6018            next_offset += envelope_size;
6019            _next_ordinal_to_read += 1;
6020            if next_offset >= end_offset {
6021                return Ok(());
6022            }
6023
6024            // Decode unknown envelopes for gaps in ordinals.
6025            while _next_ordinal_to_read < 15 {
6026                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6027                _next_ordinal_to_read += 1;
6028                next_offset += envelope_size;
6029            }
6030
6031            let next_out_of_line = decoder.next_out_of_line();
6032            let handles_before = decoder.remaining_handles();
6033            if let Some((inlined, num_bytes, num_handles)) =
6034                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6035            {
6036                let member_inline_size =
6037                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6038                if inlined != (member_inline_size <= 4) {
6039                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6040                }
6041                let inner_offset;
6042                let mut inner_depth = depth.clone();
6043                if inlined {
6044                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6045                    inner_offset = next_offset;
6046                } else {
6047                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6048                    inner_depth.increment()?;
6049                }
6050                let val_ref = self.generic_ipis.get_or_insert_with(|| fidl::new_empty!(u64, D));
6051                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6052                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6053                {
6054                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6055                }
6056                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6057                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6058                }
6059            }
6060
6061            next_offset += envelope_size;
6062
6063            // Decode the remaining unknown envelopes.
6064            while next_offset < end_offset {
6065                _next_ordinal_to_read += 1;
6066                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6067                next_offset += envelope_size;
6068            }
6069
6070            Ok(())
6071        }
6072    }
6073}