summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-07-14 00:50:22 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-07-14 00:50:22 +0000
commitbed8cbe9630b0a53aa9a6fe25649a4452d66e4ca (patch)
tree2812155ed23ea13706cac83e2f1290b75391bfc3
parente3d7988449a9579bfced8a4fa8355de36ee95d64 (diff)
parenta8836e9a8933024e2469bfe3ba6031a44b87a566 (diff)
downloadlibmemtrack-bed8cbe9630b0a53aa9a6fe25649a4452d66e4ca.tar.gz
Change-Id: Ibd24ff3a5a100f2af78c104e211ab0df061b5e3f
l---------.clang-format-42
-rw-r--r--Android.bp6
-rw-r--r--OWNERS1
-rw-r--r--include/memtrack/memtrack.h27
-rw-r--r--memtrack.cpp99
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
diff --git a/Android.bp b/Android.bp
index c7dff5a..4a90312 100644
--- a/Android.bp
+++ b/Android.bp
@@ -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",
diff --git a/OWNERS b/OWNERS
index 70b375f..91ea0cc 100644
--- a/OWNERS
+++ b/OWNERS
@@ -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);
}