Skip to main content

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