summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2020-12-14 20:09:30 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2020-12-14 20:09:30 +0000
commit0a0d9746ced327e242f953c2aab085fa6db7b398 (patch)
tree780b13520c2b4b18e5562b46ba86ca38a3fe60f7
parenta9c3ed722906bd256ab6ec5566baa4fcd6190689 (diff)
parentd179e8ee388bc6e279d1038d5cea75b6694bc03e (diff)
downloadlibmemtrack-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.bp2
-rw-r--r--memtrack.cpp73
2 files changed, 72 insertions, 3 deletions
diff --git a/Android.bp b/Android.bp
index c7dff5a..220ee02 100644
--- a/Android.bp
+++ b/Android.bp
@@ -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;