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