Merge cherrypicks of ['googleplex-android-review.googlesource.com/26593353', 'googleplex-android-review.googlesource.com/26629048', 'googleplex-android-review.googlesource.com/26635458'] into 24Q2-release.

Change-Id: Id1d0f081d62ba81b74cfd53e5c04259b7d3a4422
diff --git a/power/aidl/vts/VtsHalPowerTargetTest.cpp b/power/aidl/vts/VtsHalPowerTargetTest.cpp
index 53fcef1..272674f 100644
--- a/power/aidl/vts/VtsHalPowerTargetTest.cpp
+++ b/power/aidl/vts/VtsHalPowerTargetTest.cpp
@@ -122,10 +122,16 @@
         power = IPower::fromBinder(ndk::SpAIBinder(binder));
         auto status = power->getInterfaceVersion(&mServiceVersion);
         ASSERT_TRUE(status.isOk());
+        if (mServiceVersion >= 2) {
+            status = power->createHintSession(getpid(), getuid(), kSelfTids, 16666666L, &mSession);
+            mSessionSupport = status.isOk();
+        }
     }
 
     std::shared_ptr<IPower> power;
     int32_t mServiceVersion;
+    std::shared_ptr<IPowerHintSession> mSession;
+    bool mSessionSupport = false;
 };
 
 class HintSessionAidl : public PowerAidl {
@@ -135,12 +141,11 @@
         if (mServiceVersion < 2) {
             GTEST_SKIP() << "DEVICE not launching with Power V2 and beyond.";
         }
-
-        auto status = power->createHintSession(getpid(), getuid(), kSelfTids, 16666666L, &mSession);
-        ASSERT_TRUE(status.isOk());
+        if (!mSessionSupport) {
+            GTEST_SKIP() << "DEVICE not support Hint Session.";
+        }
         ASSERT_NE(nullptr, mSession);
     }
-    std::shared_ptr<IPowerHintSession> mSession;
 };
 
 class FMQAidl : public PowerAidl {
@@ -154,7 +159,10 @@
         auto status =
                 power->createHintSessionWithConfig(getpid(), getuid(), kSelfTids, 16666666L,
                                                    SessionTag::OTHER, &mSessionConfig, &mSession);
-        ASSERT_TRUE(status.isOk());
+        mSessionSupport = status.isOk();
+        if (!mSessionSupport) {
+            GTEST_SKIP() << "DEVICE not support Hint Session.";
+        }
         ASSERT_NE(nullptr, mSession);
 
         status = power->getSessionChannel(getpid(), getuid(), &mChannelConfig);
@@ -175,8 +183,12 @@
         ASSERT_NE(mEventFlag, nullptr);
     }
     virtual void TearDown() {
-        mSession->close();
-        ASSERT_TRUE(power->closeSessionChannel(getpid(), getuid()).isOk());
+        if (mSession) {
+            mSession->close();
+            if (mChannel->isValid()) {
+                ASSERT_TRUE(power->closeSessionChannel(getpid(), getuid()).isOk());
+            }
+        }
     }
 
   protected:
@@ -239,6 +251,9 @@
 }
 
 TEST_P(PowerAidl, getHintSessionPreferredRate) {
+    if (!mSessionSupport) {
+        GTEST_SKIP() << "DEVICE not support Hint Session.";
+    }
     if (mServiceVersion < 2) {
         GTEST_SKIP() << "DEVICE not launching with Power V2 and beyond.";
     }
@@ -250,6 +265,9 @@
 }
 
 TEST_P(PowerAidl, createHintSessionWithConfig) {
+    if (!mSessionSupport) {
+        GTEST_SKIP() << "DEVICE not support Hint Session.";
+    }
     if (mServiceVersion < 5) {
         GTEST_SKIP() << "DEVICE not launching with Power V5 and beyond.";
     }
@@ -271,6 +289,9 @@
 }
 
 TEST_P(HintSessionAidl, createAndCloseHintSession) {
+    if (!mSessionSupport) {
+        GTEST_SKIP() << "DEVICE not support Hint Session.";
+    }
     ASSERT_TRUE(mSession->pause().isOk());
     ASSERT_TRUE(mSession->resume().isOk());
     // Test normal destroy operation
@@ -279,6 +300,9 @@
 }
 
 TEST_P(HintSessionAidl, createHintSessionFailed) {
+    if (!mSessionSupport) {
+        GTEST_SKIP() << "DEVICE not support Hint Session.";
+    }
     std::shared_ptr<IPowerHintSession> session;
     auto status = power->createHintSession(getpid(), getuid(), kEmptyTids, 16666666L, &session);
 
@@ -288,11 +312,17 @@
 }
 
 TEST_P(HintSessionAidl, updateAndReportDurations) {
+    if (!mSessionSupport) {
+        GTEST_SKIP() << "DEVICE not support Hint Session.";
+    }
     ASSERT_TRUE(mSession->updateTargetWorkDuration(16666667LL).isOk());
     ASSERT_TRUE(mSession->reportActualWorkDuration(kDurations).isOk());
 }
 
 TEST_P(HintSessionAidl, sendSessionHint) {
+    if (!mSessionSupport) {
+        GTEST_SKIP() << "DEVICE not support Hint Session.";
+    }
     if (mServiceVersion < 4) {
         GTEST_SKIP() << "DEVICE not launching with Power V4 and beyond.";
     }
@@ -306,6 +336,9 @@
 }
 
 TEST_P(HintSessionAidl, setThreads) {
+    if (!mSessionSupport) {
+        GTEST_SKIP() << "DEVICE not support Hint Session.";
+    }
     if (mServiceVersion < 4) {
         GTEST_SKIP() << "DEVICE not launching with Power V4 and beyond.";
     }
@@ -318,6 +351,9 @@
 }
 
 TEST_P(HintSessionAidl, setSessionMode) {
+    if (!mSessionSupport) {
+        GTEST_SKIP() << "DEVICE not support Hint Session.";
+    }
     if (mServiceVersion < 5) {
         GTEST_SKIP() << "DEVICE not launching with Power V5 and beyond.";
     }
@@ -333,6 +369,9 @@
 }
 
 TEST_P(HintSessionAidl, getSessionConfig) {
+    if (!mSessionSupport) {
+        GTEST_SKIP() << "DEVICE not support Hint Session.";
+    }
     if (mServiceVersion < 5) {
         GTEST_SKIP() << "DEVICE not launching with Power V5 and beyond.";
     }