/* * Copyright (C) 2019 The Android Open Source Project * * 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 = "proto2"; package perfetto.protos; // All the information that cannot be sent within a VulkanMemoryEvent message, // are sent as annotations to the main memory event. One example is the // properties of the object that consumes the allocated memory, for example, a // buffer or an image. // key_iid and string_iid are both interned strings. Original string value is // stored in vulkan_memory_keys from // protos/perfetto/trace/interned_data/interned_data.proto. message VulkanMemoryEventAnnotation { optional uint64 key_iid = 1; oneof value { int64 int_value = 2; double double_value = 3; uint64 string_iid = 4; } } // Each VulkanMemoryEvent encompasses information regarding one single function // call that results in reserving, binding or freeing host or GPU memory. There // is a special message type, ANNOTATIONS, which is used to communicate // information that are not directly related to a memory event, nonetheless are // essential to understand the memory usage. An example is the size and memory // types of the memory heaps. // // Next reserved id: 10 (up to 15). // Next id: 21. message VulkanMemoryEvent { enum Source { SOURCE_UNSPECIFIED = 0; SOURCE_DRIVER = 1; SOURCE_DEVICE = 2; SOURCE_DEVICE_MEMORY = 3; SOURCE_BUFFER = 4; SOURCE_IMAGE = 5; } enum Operation { OP_UNSPECIFIED = 0; // alloc, create OP_CREATE = 1; // free, destroy(non-bound) OP_DESTROY = 2; // bind buffer and image OP_BIND = 3; // destroy (bound) OP_DESTROY_BOUND = 4; // only annotations OP_ANNOTATIONS = 5; } enum AllocationScope { SCOPE_UNSPECIFIED = 0; SCOPE_COMMAND = 1; SCOPE_OBJECT = 2; SCOPE_CACHE = 3; SCOPE_DEVICE = 4; SCOPE_INSTANCE = 5; } optional Source source = 1; optional Operation operation = 2; optional int64 timestamp = 3; optional uint32 pid = 4; optional fixed64 memory_address = 5; optional uint64 memory_size = 6; // Interned string. Original string value is stored in function_names from // protos/perfetto/trace/interned_data/interned_data.proto. optional uint64 caller_iid = 7; optional AllocationScope allocation_scope = 8; // Extra related information, e.g., create configs, etc. repeated VulkanMemoryEventAnnotation annotations = 9; // Field IDs used for device memory (low sampling rate) optional fixed64 device = 16; optional fixed64 device_memory = 17; optional uint32 memory_type = 18; optional uint32 heap = 19; optional fixed64 object_handle = 20; }