Home | History | Annotate | Download | only in libmemtrack
      1 /*
      2  * Copyright (C) 2013 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 #include <errno.h>
     18 #include <stdlib.h>
     19 #include <string.h>
     20 #include <utils/Log.h>
     21 
     22 #include <hardware/memtrack.h>
     23 #include "memtrack_msm.h"
     24 
     25 int msm_memtrack_init(const struct memtrack_module *module)
     26 {
     27     if(!module)
     28         return -1;
     29     return 0;
     30 }
     31 
     32 int msm_memtrack_get_memory(const struct memtrack_module *module,
     33                                 pid_t pid,
     34                                 int type,
     35                                 struct memtrack_record *records,
     36                                 size_t *num_records)
     37 {
     38     if(!module)
     39         return -1;
     40     if (type == MEMTRACK_TYPE_GL || type == MEMTRACK_TYPE_GRAPHICS) {
     41         return kgsl_memtrack_get_memory(pid, type, records, num_records);
     42     }
     43 
     44     return -EINVAL;
     45 }
     46 
     47 static int memtrack_open(const hw_module_t* module, const char* name,
     48                     hw_device_t** device)
     49 {
     50     ALOGD("%s: enter; name=%s", __FUNCTION__, name);
     51     int retval = 0; /* 0 is ok; -1 is error */
     52 
     53     if (strcmp(name, "memtrack") == 0) {
     54         struct memtrack_module *dev = (struct memtrack_module *)calloc(1,
     55                 sizeof(struct memtrack_module));
     56 
     57         if (dev) {
     58             /* Common hw_device_t fields */
     59             dev->common.tag = HARDWARE_DEVICE_TAG;
     60             dev->common.module_api_version = MEMTRACK_MODULE_API_VERSION_0_1;
     61             dev->common.module_api_version = HARDWARE_HAL_API_VERSION;
     62 
     63             dev->init = msm_memtrack_init;
     64             dev->getMemory = msm_memtrack_get_memory;
     65 
     66             *device = (hw_device_t*)dev;
     67         } else
     68             retval = -ENOMEM;
     69     } else {
     70         retval = -EINVAL;
     71     }
     72 
     73     ALOGD("%s: exit %d", __FUNCTION__, retval);
     74     return retval;
     75 }
     76 
     77 static struct hw_module_methods_t memtrack_module_methods = {
     78     .open = memtrack_open,
     79 };
     80 
     81 struct memtrack_module HAL_MODULE_INFO_SYM = {
     82     common: {
     83         tag: HARDWARE_MODULE_TAG,
     84         module_api_version: MEMTRACK_MODULE_API_VERSION_0_1,
     85         hal_api_version: HARDWARE_HAL_API_VERSION,
     86         id: MEMTRACK_HARDWARE_MODULE_ID,
     87         name: "MSM Memory Tracker HAL",
     88         author: "The Android Open Source Project",
     89         methods: &memtrack_module_methods,
     90     },
     91 
     92     init: msm_memtrack_init,
     93     getMemory: msm_memtrack_get_memory,
     94 };
     95 
     96