Merge "Add support for converting java hint sessions to native hint sessions" into main
diff --git a/include/android/performance_hint.h b/include/android/performance_hint.h
index 976c7d6..22eab94 100644
--- a/include/android/performance_hint.h
+++ b/include/android/performance_hint.h
@@ -49,6 +49,7 @@
#define ANDROID_NATIVE_PERFORMANCE_HINT_H
#include <sys/cdefs.h>
+#include <jni.h>
/******************************************************************
*
@@ -202,6 +203,9 @@
* Release the performance hint manager pointer acquired via
* {@link APerformanceHint_createSession}.
*
+ * This cannot be used to close a Java PerformanceHintManager.Session, as its
+ * lifecycle is tied to the object in the SDK.
+ *
* @param session The performance hint session instance to release.
*/
void APerformanceHint_closeSession(
@@ -370,6 +374,21 @@
void AWorkDuration_setActualGpuDurationNanos(AWorkDuration* _Nonnull aWorkDuration,
int64_t actualGpuDurationNanos) __INTRODUCED_IN(__ANDROID_API_V__);
+/**
+ * Return the APerformanceHintSession wrapped by a Java PerformanceHintManager.Session object.
+ *
+ * The Java session maintains ownership over the wrapped native session, so it cannot be
+ * closed using {@link APerformanceHint_closeSession}.
+ *
+ * @param env The Java environment where the PerformanceHintManager.Session lives.
+ * @param sessionObj The Java Session to unwrap.
+ *
+ * @return A pointer to the APerformanceHintManager that backs the Java Session.
+ */
+APerformanceHintSession* _Nonnull APerformanceHint_borrowSessionFromJava(
+ JNIEnv* _Nonnull env, jobject _Nonnull sessionObj) __INTRODUCED_IN(36);
+
+
__END_DECLS
#endif // ANDROID_NATIVE_PERFORMANCE_HINT_H
diff --git a/include/private/performance_hint_private.h b/include/private/performance_hint_private.h
index 3229e45..fb31351 100644
--- a/include/private/performance_hint_private.h
+++ b/include/private/performance_hint_private.h
@@ -110,6 +110,18 @@
int64_t initialTargetWorkDurationNanos, SessionTag tag);
/**
+ * Creates a session from the Java SDK implementation
+ */
+APerformanceHintSession* APerformanceHint_createSessionFromJava(APerformanceHintManager* manager,
+ const int32_t* threadIds, size_t size,
+ int64_t initialTargetWorkDurationNanos);
+
+/**
+ * Special method for Java SDK implementation to kill sessions
+ */
+void APerformanceHint_closeSessionFromJava(APerformanceHintSession* session);
+
+/**
* Forces FMQ to be enabled or disabled, for testing only.
*/
void APerformanceHint_setUseFMQForTesting(bool enabled);