diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2020-12-14 20:09:30 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-12-14 20:09:30 +0000 |
commit | 0a0d9746ced327e242f953c2aab085fa6db7b398 (patch) | |
tree | 780b13520c2b4b18e5562b46ba86ca38a3fe60f7 | |
parent | a9c3ed722906bd256ab6ec5566baa4fcd6190689 (diff) | |
parent | d179e8ee388bc6e279d1038d5cea75b6694bc03e (diff) | |
download | libmemtrack-0a0d9746ced327e242f953c2aab085fa6db7b398.tar.gz |
Merge "libmemtrack: Add support for AIDL memtrack HAL" am: 99ec2a1001 am: 611adabcaf am: d179e8ee38
Original change: https://android-review.googlesource.com/c/platform/system/memory/libmemtrack/+/1518702
MUST ONLY BE SUBMITTED BY AUTOMERGER
Change-Id: I092fd04158a10206c2936bfa97d3c383b5ee4ed6
-rw-r--r-- | Android.bp | 2 | ||||
-rw-r--r-- | memtrack.cpp | 73 |
2 files changed, 72 insertions, 3 deletions
@@ -11,12 +11,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-unstable-ndk_platform", ], cflags: [ "-Wall", diff --git a/memtrack.cpp b/memtrack.cpp index 3fc24c8..7726942 100644 --- a/memtrack.cpp +++ b/memtrack.cpp @@ -14,14 +14,18 @@ * limitations under the License. */ #define LOG_TAG "memtrack" + +#include <aidl/android/hardware/memtrack/IMemtrack.h> +#include <aidl/android/hardware/memtrack/MemtrackType.h> +#include <android/binder_manager.h> #include <android/hardware/memtrack/1.0/IMemtrack.h> #include <memtrack/memtrack.h> #include <errno.h> #include <malloc.h> -#include <vector> #include <string.h> #include <mutex> +#include <vector> #include <log/log.h> @@ -33,6 +37,41 @@ using android::hardware::memtrack::V1_0::MemtrackStatus; using android::hardware::hidl_vec; using android::hardware::Return; +namespace V1_0 = android::hardware::memtrack::V1_0; +namespace V_aidl = aidl::android::hardware::memtrack; + +// Check Memtrack Flags +static_assert(static_cast<uint32_t>(V1_0::MemtrackFlag::SMAPS_ACCOUNTED) == + static_cast<uint32_t>(V_aidl::MemtrackRecord::FLAG_SMAPS_ACCOUNTED)); +static_assert(static_cast<uint32_t>(V1_0::MemtrackFlag::SMAPS_UNACCOUNTED) == + static_cast<uint32_t>(V_aidl::MemtrackRecord::FLAG_SMAPS_UNACCOUNTED)); +static_assert(static_cast<uint32_t>(V1_0::MemtrackFlag::SHARED) == + static_cast<uint32_t>(V_aidl::MemtrackRecord::FLAG_SHARED)); +static_assert(static_cast<uint32_t>(V1_0::MemtrackFlag::SHARED_PSS) == + static_cast<uint32_t>(V_aidl::MemtrackRecord::FLAG_SHARED_PSS)); +static_assert(static_cast<uint32_t>(V1_0::MemtrackFlag::PRIVATE) == + static_cast<uint32_t>(V_aidl::MemtrackRecord::FLAG_PRIVATE)); +static_assert(static_cast<uint32_t>(V1_0::MemtrackFlag::SYSTEM) == + static_cast<uint32_t>(V_aidl::MemtrackRecord::FLAG_SYSTEM)); +static_assert(static_cast<uint32_t>(V1_0::MemtrackFlag::DEDICATED) == + static_cast<uint32_t>(V_aidl::MemtrackRecord::FLAG_DEDICATED)); +static_assert(static_cast<uint32_t>(V1_0::MemtrackFlag::NONSECURE) == + static_cast<uint32_t>(V_aidl::MemtrackRecord::FLAG_NONSECURE)); +static_assert(static_cast<uint32_t>(V1_0::MemtrackFlag::SECURE) == + static_cast<uint32_t>(V_aidl::MemtrackRecord::FLAG_SECURE)); + +// Check Memtrack Types +static_assert(static_cast<uint32_t>(V1_0::MemtrackType::OTHER) == + static_cast<uint32_t>(V_aidl::MemtrackType::OTHER)); +static_assert(static_cast<uint32_t>(V1_0::MemtrackType::GL) == + static_cast<uint32_t>(V_aidl::MemtrackType::GL)); +static_assert(static_cast<uint32_t>(V1_0::MemtrackType::GRAPHICS) == + static_cast<uint32_t>(V_aidl::MemtrackType::GRAPHICS)); +static_assert(static_cast<uint32_t>(V1_0::MemtrackType::MULTIMEDIA) == + static_cast<uint32_t>(V_aidl::MemtrackType::MULTIMEDIA)); +static_assert(static_cast<uint32_t>(V1_0::MemtrackType::CAMERA) == + static_cast<uint32_t>(V_aidl::MemtrackType::CAMERA)); + struct memtrack_proc_type { MemtrackType type; std::vector<MemtrackRecord> records; @@ -44,7 +83,7 @@ struct memtrack_proc { }; //TODO(b/31632518) -static android::sp<IMemtrack> get_instance() { +static android::sp<V1_0::IMemtrack> get_hidl_instance() { static android::sp<IMemtrack> module = IMemtrack::getService(); static bool logged = false; if (module == nullptr && !logged) { @@ -54,6 +93,14 @@ static android::sp<IMemtrack> get_instance() { return module; } + +inline std::shared_ptr<V_aidl::IMemtrack> get_aidl_instance() { + const auto instance = + std::string() + V_aidl::IMemtrack::descriptor + "/default"; + auto memtrackBinder = ndk::SpAIBinder(AServiceManager_getService(instance.c_str())); + return V_aidl::IMemtrack::fromBinder(memtrackBinder); +} + memtrack_proc *memtrack_proc_new(void) { return new memtrack_proc(); @@ -68,7 +115,27 @@ static int memtrack_proc_get_type(memtrack_proc_type *t, pid_t pid, MemtrackType type) { int err = 0; - android::sp<IMemtrack> memtrack = get_instance(); + + std::shared_ptr<V_aidl::IMemtrack> service= get_aidl_instance(); + if (service) { + std::vector<V_aidl::MemtrackRecord> records; + auto status = service->getMemory( + pid, static_cast<V_aidl::MemtrackType>(static_cast<uint32_t>(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; + } + + android::sp<V1_0::IMemtrack> memtrack = get_hidl_instance(); if (memtrack == nullptr) return -1; |