// Copyright 2025 Envoy Project Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// 
//     http://www.apache.org/licenses/LICENSE-2.0
// 
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

syntax = "proto3";

package envoy.admin.v3;

import "udpa/annotations/status.proto";
import "udpa/annotations/versioning.proto";

option java_package = "io.envoyproxy.envoy.admin.v3";
option java_outer_classname = "MemoryProto";
option java_multiple_files = true;
option go_package = "github.com/envoyproxy/go-control-plane/envoy/admin/v3;adminv3";
option (udpa.annotations.file_status).package_version_status = ACTIVE;

// [#protodoc-title: Memory]

// Proto representation of the internal memory consumption of an Envoy instance. These represent
// values extracted from an internal TCMalloc instance. For more information, see the section of the
// docs entitled ["Generic Tcmalloc Status"](https://gperftools.github.io/gperftools/tcmalloc.html).
// [#next-free-field: 7]
message Memory {
  option (udpa.annotations.versioning).previous_message_type = "envoy.admin.v2alpha.Memory";

  // The number of bytes allocated by the heap for Envoy. This is an alias for
  // ``generic.current_allocated_bytes``.
  uint64 allocated = 1;

  // The number of bytes reserved by the heap but not necessarily allocated. This is an alias for
  // ``generic.heap_size``.
  uint64 heap_size = 2;

  // The number of bytes in free, unmapped pages in the page heap. These bytes always count towards
  // virtual memory usage, and depending on the OS, typically do not count towards physical memory
  // usage. This is an alias for ``tcmalloc.pageheap_unmapped_bytes``.
  uint64 pageheap_unmapped = 3;

  // The number of bytes in free, mapped pages in the page heap. These bytes always count towards
  // virtual memory usage, and unless the underlying memory is swapped out by the OS, they also
  // count towards physical memory usage. This is an alias for ``tcmalloc.pageheap_free_bytes``.
  uint64 pageheap_free = 4;

  // The amount of memory used by the TCMalloc thread caches (for small objects). This is an alias
  // for ``tcmalloc.current_total_thread_cache_bytes``.
  uint64 total_thread_cache = 5;

  // The number of bytes of the physical memory usage by the allocator. This is an alias for
  // ``generic.total_physical_bytes``.
  uint64 total_physical_bytes = 6;
}
