#include #include #include #include #include #include "GpuSysfsReader.h" #include "filesystem.h" #undef LOG_TAG #define LOG_TAG "memtrack-core" namespace aidl { namespace android { namespace hardware { namespace memtrack { ndk::ScopedAStatus Memtrack::getMemory(int pid, MemtrackType type, std::vector* _aidl_return) { if (pid < 0) return ndk::ScopedAStatus(AStatus_fromExceptionCode(EX_ILLEGAL_ARGUMENT)); if (type != MemtrackType::OTHER && type != MemtrackType::GL && type != MemtrackType::GRAPHICS && type != MemtrackType::MULTIMEDIA && type != MemtrackType::CAMERA) return ndk::ScopedAStatus(AStatus_fromExceptionCode(EX_UNSUPPORTED_OPERATION)); _aidl_return->clear(); // Other types are retained only for backward compatibility if (type != MemtrackType::GL && type != MemtrackType::GRAPHICS) return ndk::ScopedAStatus::ok(); // pid 0 is only supported for GL type to report total private memory if (pid == 0 && type != MemtrackType::GL) return ndk::ScopedAStatus::ok(); uint64_t size = 0; switch (type) { case MemtrackType::GL: size = GpuSysfsReader::getPrivateGpuMem(pid); break; case MemtrackType::GRAPHICS: // TODO(b/194483693): This is not PSS as required by memtrack HAL // but complete dmabuf allocations. Reporting PSS requires reading // procfs. This HAL does not have that permission yet. size = GpuSysfsReader::getDmaBufGpuMem(pid); break; default: break; } MemtrackRecord record = { .flags = MemtrackRecord::FLAG_SMAPS_UNACCOUNTED, .sizeInBytes = static_cast(size), }; _aidl_return->emplace_back(record); return ndk::ScopedAStatus::ok(); } ndk::ScopedAStatus Memtrack::getGpuDeviceInfo(std::vector* _aidl_return) { auto devPath = filesystem::path(GpuSysfsReader::kSysfsDevicePath); std::string devName = "default-gpu"; if (filesystem::exists(devPath) && filesystem::is_symlink(devPath)) { devName = filesystem::read_symlink(devPath).filename().string(); } DeviceInfo dev_info = {.id = 0, .name = devName}; _aidl_return->clear(); _aidl_return->emplace_back(dev_info); return ndk::ScopedAStatus::ok(); } } // namespace memtrack } // namespace hardware } // namespace android } // namespace aidl