Home | History | Annotate | Download | only in 1.0
      1 /*
      2  * Copyright (C) 2016 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package android.hardware.memtrack@1.0;
     18 
     19 /**
     20  * SMAPS_ACCOUNTED/SMAPS_UNACCOUNTED
     21  * Flags to differentiate memory that can already be accounted for in
     22  * /proc/<pid>/smaps,
     23  * (Shared_Clean + Shared_Dirty + Private_Clean + Private_Dirty = Size).
     24  * In general, memory mapped in to a userspace process is accounted unless
     25  * it was mapped with remap_pfn_range.
     26  * Exactly one of these must be set.
     27  *
     28  * SHARED/SHARED_PSS/PRIVATE
     29  * Flags to differentiate memory shared across multiple processes vs. memory
     30  * used by a single process.
     31  * If SHARED_PSS flags is used, the memory must be divided by the number of
     32  * processes holding reference to it (shared / num_processes).
     33  * Only zero or one of these may be set in a record.
     34  * If none are set, record is assumed to count shared + private memory.
     35  *
     36  * SYSTEM/DEDICATED
     37  * Flags to differentiate memory taken from the kernel's allocation pool vs.
     38  * memory that is dedicated to non-kernel allocations, for example a carveout
     39  * or separate video memory.  Only zero or one of these may be set in a record.
     40  * If none are set, record is assumed to count system + dedicated memory.
     41  *
     42  * NONSECURE/SECURE
     43  * Flags to differentiate memory accessible by the CPU in non-secure mode vs.
     44  * memory that is protected.  Only zero or one of these may be set in a record.
     45  * If none are set, record is assumed to count secure + nonsecure memory.
     46  */
     47 enum MemtrackFlag : uint32_t {
     48     SMAPS_ACCOUNTED = 1 << 1,
     49     SMAPS_UNACCOUNTED = 1 << 2,
     50     SHARED = 1 << 3,
     51     SHARED_PSS = 1 << 4,
     52     PRIVATE = 1 << 5,
     53     SYSTEM = 1 << 6,
     54     DEDICATED = 1 << 7,
     55     NONSECURE = 1 << 8,
     56     SECURE = 1 << 9,
     57 };
     58 
     59 /** Tags which define the usage of the memory buffers. */
     60 enum MemtrackType : uint32_t {
     61     OTHER = 0,
     62     GL = 1,
     63     GRAPHICS = 2,
     64     MULTIMEDIA = 3,
     65     CAMERA = 4,
     66     NUM_TYPES,
     67 };
     68 
     69 enum MemtrackStatus : uint32_t {
     70     SUCCESS = 0,
     71     MEMORY_TRACKING_NOT_SUPPORTED = 1,
     72     TYPE_NOT_SUPPORTED = 2,
     73 };
     74 
     75 /* A vector of MemtrackRecord is returned by the function getMemory().
     76  * Each record consists of the size of the memory used by the process and
     77  * flags indicate the all the MemtrackFlag that are valid for this record.
     78  * see getMemory() comments for further details.
     79  */
     80 struct MemtrackRecord {
     81     uint64_t sizeInBytes;
     82     /**
     83      * This is the bitfield for the MemtrackFlag indicating all the flags that
     84      * are valid for this record.
     85      */
     86     uint32_t flags;
     87 };
     88