| // Copyright 2017 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| library fuchsia.memory; |
| |
| /// Interface used to register for memory notifications. |
| [Discoverable] |
| protocol Monitor { |
| Watch(Watcher watcher); |
| }; |
| |
| struct Stats { |
| /// The total amount of physical memory available to the system. |
| uint64 total_bytes; |
| |
| /// The amount of unallocated memory. |
| uint64 free_bytes; |
| |
| /// The amount of memory reserved by and mapped into the kernel for reasons |
| /// not covered by other fields in this struct. Typically for readonly data |
| /// like the ram disk and kernel image, and for early-boot dynamic memory. |
| uint64 wired_bytes; |
| |
| /// The amount of memory allocated to the kernel heap. |
| uint64 total_heap_bytes; |
| |
| /// The portion of `total_heap_bytes` that is not in use. |
| uint64 free_heap_bytes; |
| |
| /// The amount of memory committed to VMOs, both kernel and user. |
| /// A superset of all userspace memory. |
| /// Does not include certain VMOs that fall under `wired_bytes`. |
| uint64 vmo_bytes; |
| |
| /// The amount of memory used for architecture-specific MMU metadata |
| /// like page tables. |
| uint64 mmu_overhead_bytes; |
| |
| /// The amount of memory in use by IPC. |
| uint64 ipc_bytes; |
| |
| /// Non-free memory that isn't accounted for in any other field. |
| uint64 other_bytes; |
| }; |
| |
| /// A watcher for memory changes |
| protocol Watcher { |
| OnChange(Stats stats); |
| }; |