diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-07-14 00:50:22 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-07-14 00:50:22 +0000 |
commit | bed8cbe9630b0a53aa9a6fe25649a4452d66e4ca (patch) | |
tree | 2812155ed23ea13706cac83e2f1290b75391bfc3 | |
parent | e3d7988449a9579bfced8a4fa8355de36ee95d64 (diff) | |
parent | a8836e9a8933024e2469bfe3ba6031a44b87a566 (diff) | |
download | libmemtrack-bed8cbe9630b0a53aa9a6fe25649a4452d66e4ca.tar.gz |
Snap for 7547121 from a8836e9a8933024e2469bfe3ba6031a44b87a566 to mainline-permission-releaseandroid-mainline-12.0.0_r93android-mainline-12.0.0_r79android-mainline-12.0.0_r64android-mainline-12.0.0_r51android-mainline-12.0.0_r34android-mainline-12.0.0_r15android-mainline-12.0.0_r123android-mainline-12.0.0_r107android12-mainline-permission-release
Change-Id: Ibd24ff3a5a100f2af78c104e211ab0df061b5e3f
l--------- | .clang-format-4 | 2 | ||||
-rw-r--r-- | Android.bp | 6 | ||||
-rw-r--r-- | OWNERS | 1 | ||||
-rw-r--r-- | include/memtrack/memtrack.h | 27 | ||||
-rw-r--r-- | memtrack.cpp | 99 |
5 files changed, 96 insertions, 39 deletions
diff --git a/.clang-format-4 b/.clang-format-4 index 8920911..973b2fa 120000 --- a/.clang-format-4 +++ b/.clang-format-4 @@ -1 +1 @@ -../build/soong/scripts/system-clang-format
\ No newline at end of file +../../../build/soong/scripts/system-clang-format
\ No newline at end of file @@ -1,5 +1,9 @@ // Copyright 2013 The Android Open Source Project +package { + default_applicable_licenses: ["Android-Apache-2.0"], +} + cc_library_shared { name: "libmemtrack", vendor_available: true, @@ -11,12 +15,14 @@ cc_library_shared { local_include_dirs: ["include"], include_dirs: ["hardware/libhardware/include"], shared_libs: [ + "libbinder_ndk", "libhardware", "liblog", "libbase", "libhidlbase", "libutils", "android.hardware.memtrack@1.0", + "android.hardware.memtrack-V1-ndk_platform", ], cflags: [ "-Wall", @@ -1 +1,2 @@ ccross@google.com +surenb@google.com
\ No newline at end of file diff --git a/include/memtrack/memtrack.h b/include/memtrack/memtrack.h index 2134a6f..91dd8c8 100644 --- a/include/memtrack/memtrack.h +++ b/include/memtrack/memtrack.h @@ -129,6 +129,33 @@ ssize_t memtrack_proc_other_total(struct memtrack_proc *p); */ ssize_t memtrack_proc_other_pss(struct memtrack_proc *p); +/** + * class DeviceInfo + * + * Contains the device id and name. + */ +namespace aidl { +namespace android { +namespace hardware { +namespace memtrack { + +class DeviceInfo; + +} // namespace memtrack +} // namespace hardware +} // namespace android +} // namespace aidl + +/** + * memtrack_gpu_device_info + * + * Populates the @device_info vector with the DeviceInfo for all GPU devices. + * + * Returns true on success and false otherwise. + */ +bool memtrack_gpu_device_info( + std::vector<aidl::android::hardware::memtrack::DeviceInfo>* device_info); + #ifdef __cplusplus } #endif diff --git a/memtrack.cpp b/memtrack.cpp index 3fc24c8..7c75386 100644 --- a/memtrack.cpp +++ b/memtrack.cpp @@ -14,24 +14,30 @@ * limitations under the License. */ #define LOG_TAG "memtrack" -#include <android/hardware/memtrack/1.0/IMemtrack.h> + +#include <aidl/android/hardware/memtrack/DeviceInfo.h> +#include <aidl/android/hardware/memtrack/IMemtrack.h> +#include <aidl/android/hardware/memtrack/MemtrackRecord.h> +#include <aidl/android/hardware/memtrack/MemtrackType.h> + +#include <android/binder_manager.h> #include <memtrack/memtrack.h> #include <errno.h> #include <malloc.h> -#include <vector> #include <string.h> #include <mutex> +#include <vector> #include <log/log.h> -using android::hardware::memtrack::V1_0::IMemtrack; -using android::hardware::memtrack::V1_0::MemtrackType; -using android::hardware::memtrack::V1_0::MemtrackRecord; -using android::hardware::memtrack::V1_0::MemtrackFlag; -using android::hardware::memtrack::V1_0::MemtrackStatus; -using android::hardware::hidl_vec; -using android::hardware::Return; +using aidl::android::hardware::memtrack::DeviceInfo; +using aidl::android::hardware::memtrack::IMemtrack; +using aidl::android::hardware::memtrack::MemtrackRecord; +using aidl::android::hardware::memtrack::MemtrackType; + +const std::vector<MemtrackType> kMemtrackTypes{ndk::enum_range<MemtrackType>().begin(), + ndk::enum_range<MemtrackType>().end()}; struct memtrack_proc_type { MemtrackType type; @@ -40,18 +46,32 @@ struct memtrack_proc_type { struct memtrack_proc { pid_t pid; - memtrack_proc_type types[static_cast<int>(MemtrackType::NUM_TYPES)]; + std::vector<memtrack_proc_type> types; + + memtrack_proc() { + types.resize(kMemtrackTypes.size()); + } }; -//TODO(b/31632518) -static android::sp<IMemtrack> get_instance() { - static android::sp<IMemtrack> module = IMemtrack::getService(); - static bool logged = false; - if (module == nullptr && !logged) { - logged = true; - ALOGE("Couldn't load memtrack module"); +static std::shared_ptr<IMemtrack> get_memtrack_proxy_service() { + const char* kMemtrackProxyService = "memtrack.proxy"; + static std::shared_ptr<IMemtrack> memtrack_proxy_service = nullptr; + if (!memtrack_proxy_service && + !(memtrack_proxy_service = IMemtrack::fromBinder( + ndk::SpAIBinder(AServiceManager_checkService(kMemtrackProxyService))))) { + ALOGE("Unable to connect to %s\n", kMemtrackProxyService); } - return module; + return memtrack_proxy_service; +} + +bool memtrack_gpu_device_info(std::vector<DeviceInfo>* device_info) { + std::shared_ptr<IMemtrack> memtrack_proxy_service = get_memtrack_proxy_service(); + if (!memtrack_proxy_service) { + return false; + } + + auto status = memtrack_proxy_service->getGpuDeviceInfo(device_info); + return status.isOk(); } memtrack_proc *memtrack_proc_new(void) @@ -68,23 +88,26 @@ static int memtrack_proc_get_type(memtrack_proc_type *t, pid_t pid, MemtrackType type) { int err = 0; - android::sp<IMemtrack> memtrack = get_instance(); - if (memtrack == nullptr) + + std::shared_ptr<IMemtrack> memtrack_proxy_service = get_memtrack_proxy_service(); + if (!memtrack_proxy_service) { return -1; + } - Return<void> ret = memtrack->getMemory(pid, type, - [&t, &err](MemtrackStatus status, hidl_vec<MemtrackRecord> records) { - if (status != MemtrackStatus::SUCCESS) { - err = -1; - t->records.resize(0); - } - t->records.resize(records.size()); - for (size_t i = 0; i < records.size(); i++) { - t->records[i].sizeInBytes = records[i].sizeInBytes; - t->records[i].flags = records[i].flags; - } - }); - return ret.isOk() ? err : -1; + std::vector<MemtrackRecord> records; + auto status = memtrack_proxy_service->getMemory(pid, type, &records); + + if (!status.isOk()) { + return -1; + } + + t->records.resize(records.size()); + for (size_t i = 0; i < records.size(); i++) { + t->records[i].sizeInBytes = records[i].sizeInBytes; + t->records[i].flags = records[i].flags; + } + + return err; } /* TODO: sanity checks on return values from HALs: @@ -106,8 +129,8 @@ int memtrack_proc_get(memtrack_proc *p, pid_t pid) } p->pid = pid; - for (uint32_t i = 0; i < (uint32_t)MemtrackType::NUM_TYPES; i++) { - int ret = memtrack_proc_get_type(&p->types[i], pid, (MemtrackType)i); + for (int i = 0; i < kMemtrackTypes.size(); i++) { + int ret = memtrack_proc_get_type(&p->types[i], pid, kMemtrackTypes[i]); if (ret != 0) return ret; } @@ -143,7 +166,7 @@ ssize_t memtrack_proc_graphics_pss(memtrack_proc *p) { std::vector<MemtrackType> types = { MemtrackType::GRAPHICS }; return memtrack_proc_sum(p, types, - (uint32_t)MemtrackFlag::SMAPS_UNACCOUNTED); + (uint32_t)MemtrackRecord::FLAG_SMAPS_UNACCOUNTED); } ssize_t memtrack_proc_gl_total(memtrack_proc *p) @@ -156,7 +179,7 @@ ssize_t memtrack_proc_gl_pss(memtrack_proc *p) { std::vector<MemtrackType> types = { MemtrackType::GL }; return memtrack_proc_sum(p, types, - (uint32_t)MemtrackFlag::SMAPS_UNACCOUNTED); + (uint32_t)MemtrackRecord::FLAG_SMAPS_UNACCOUNTED); } ssize_t memtrack_proc_other_total(memtrack_proc *p) @@ -171,5 +194,5 @@ ssize_t memtrack_proc_other_pss(memtrack_proc *p) std::vector<MemtrackType> types = { MemtrackType::MULTIMEDIA, MemtrackType::CAMERA, MemtrackType::OTHER }; return memtrack_proc_sum(p, types, - (uint32_t)MemtrackFlag::SMAPS_UNACCOUNTED); + (uint32_t)MemtrackRecord::FLAG_SMAPS_UNACCOUNTED); } |