libmeminfo: add GPU total memory tests

Add tests for ReadGpuTotalUsageKb API function which reads GPU usage data
reported by kernel via /sys/fs/bpf/map_gpu_mem_gpu_mem_total_map node.
VTS tests requires this interface to be present for devices launching
with Android S and having 5.4 or higher kernel version.

Bug: 171261987
Signed-off-by: Suren Baghdasaryan <surenb@google.com>
Change-Id: Ib2cd1d3879ebfa65c3be36bc3a574ae7b20f31a9
diff --git a/libmeminfo_test.cpp b/libmeminfo_test.cpp
index 703a9f3..ee4a4ac 100644
--- a/libmeminfo_test.cpp
+++ b/libmeminfo_test.cpp
@@ -841,6 +841,13 @@
     EXPECT_EQ(size, 416);
 }
 
+TEST(SysMemInfo, TestReadGpuTotalUsageKb) {
+    uint64_t size;
+
+    ASSERT_TRUE(ReadGpuTotalUsageKb(&size));
+    EXPECT_TRUE(size >= 0);
+}
+
 int main(int argc, char** argv) {
     ::testing::InitGoogleTest(&argc, argv);
     ::android::base::InitLogging(argv, android::base::StderrLogger);
diff --git a/vts/Android.bp b/vts/Android.bp
index f025ef8..22e2e0f 100644
--- a/vts/Android.bp
+++ b/vts/Android.bp
@@ -17,6 +17,7 @@
     defaults: ["libmeminfo_defaults"],
     srcs: ["vts_meminfo_test.cpp"],
     static_libs: ["libmeminfo"],
+    shared_libs: ["libvintf"],
 }
 
 cc_test {
diff --git a/vts/vts_meminfo_test.cpp b/vts/vts_meminfo_test.cpp
index 71464e4..4e364a6 100644
--- a/vts/vts_meminfo_test.cpp
+++ b/vts/vts_meminfo_test.cpp
@@ -20,6 +20,11 @@
 #include <android-base/properties.h>
 #include <meminfo/procmeminfo.h>
 #include <meminfo/sysmeminfo.h>
+#include <vintf/VintfObject.h>
+
+using android::vintf::KernelVersion;
+using android::vintf::RuntimeInfo;
+using android::vintf::VintfObject;
 
 namespace android {
 namespace meminfo {
@@ -62,5 +67,26 @@
     ASSERT_TRUE(ReadIonPoolsSizeKb(&size));
 }
 
+// /sys/fs/bpf/map_gpu_mem_gpu_mem_total_map support is required for devices launching with
+// Android S and having 5.4 or higher kernel version.
+TEST(SysMemInfo, TestGpuTotalUsageKb) {
+    uint64_t size;
+
+    if (android::base::GetIntProperty("ro.product.first_api_level", 0) < __ANDROID_API_S__) {
+        GTEST_SKIP();
+    }
+
+    KernelVersion min_kernel_version = KernelVersion(5, 4, 0);
+    KernelVersion kernel_version = VintfObject::GetInstance()
+                                           ->getRuntimeInfo(RuntimeInfo::FetchFlag::CPU_VERSION)
+                                           ->kernelVersion();
+    if (kernel_version < min_kernel_version) {
+        GTEST_SKIP();
+    }
+
+    ASSERT_TRUE(ReadGpuTotalUsageKb(&size));
+    ASSERT_TRUE(size >= 0);
+}
+
 }  // namespace meminfo
 }  // namespace android