summaryrefslogtreecommitdiff
path: root/native
diff options
context:
space:
mode:
authorAlec Mouri <alecmouri@google.com>2020-04-27 22:36:17 -0700
committerAlec Mouri <alecmouri@google.com>2020-05-07 19:19:23 -0700
commitcf3ad873ddd7f1abf3804936befa511b2fbb12b6 (patch)
treed9b7cf1ed40b747c1a08bc1d691e2704a8153f8f /native
parent075da89ba91832537f1d77990523930f8e366aed (diff)
Dispatch refresh rate callbacks from DMS
AChoreographer will consume these callbacks in lieu of going through SF for the callbacks. This is so that DMS can update its view of display configs before apps receive the refresh rate callback so that apps can get consistent information. Bug: 154874011 Test: ChoreographerNativeTest Test: Manually verify that HWUI is receiving callbacks Change-Id: I992c247fd16ef414f94a259bbd300bea3e4c9467
Diffstat (limited to 'native')
-rw-r--r--native/android/Android.bp7
-rw-r--r--native/android/choreographer.cpp52
-rw-r--r--native/android/surface_texture.cpp52
3 files changed, 109 insertions, 2 deletions
diff --git a/native/android/Android.bp b/native/android/Android.bp
index ed73f39e57f8..797d3fd8c2ff 100644
--- a/native/android/Android.bp
+++ b/native/android/Android.bp
@@ -37,6 +37,7 @@ cc_library_shared {
srcs: [
"asset_manager.cpp",
+ "choreographer.cpp",
"configuration.cpp",
"hardware_buffer_jni.cpp",
"input.cpp",
@@ -49,6 +50,7 @@ cc_library_shared {
"sharedmem.cpp",
"storage_manager.cpp",
"surface_control.cpp",
+ "surface_texture.cpp",
"system_fonts.cpp",
"trace.cpp",
"thermal.cpp"
@@ -76,6 +78,7 @@ cc_library_shared {
"libpowermanager",
"android.hardware.configstore@1.0",
"android.hardware.configstore-utils",
+ "libnativedisplay",
],
static_libs: [
@@ -83,9 +86,9 @@ cc_library_shared {
"libarect",
],
- header_libs: [ "libhwui_internal_headers" ],
+ header_libs: [ "libhwui_internal_headers",],
- whole_static_libs: ["libnativedisplay", "libnativewindow"],
+ whole_static_libs: ["libnativewindow"],
export_static_lib_headers: ["libarect"],
diff --git a/native/android/choreographer.cpp b/native/android/choreographer.cpp
new file mode 100644
index 000000000000..38641de0efb3
--- /dev/null
+++ b/native/android/choreographer.cpp
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <private/android/choreographer.h>
+
+using namespace android;
+
+AChoreographer* AChoreographer_getInstance() {
+ return AChoreographer_routeGetInstance();
+}
+void AChoreographer_postFrameCallback(AChoreographer* choreographer,
+ AChoreographer_frameCallback callback, void* data) {
+ return AChoreographer_routePostFrameCallback(choreographer, callback, data);
+}
+void AChoreographer_postFrameCallbackDelayed(AChoreographer* choreographer,
+ AChoreographer_frameCallback callback, void* data,
+ long delayMillis) {
+ return AChoreographer_routePostFrameCallbackDelayed(choreographer, callback, data, delayMillis);
+}
+void AChoreographer_postFrameCallback64(AChoreographer* choreographer,
+ AChoreographer_frameCallback64 callback, void* data) {
+ return AChoreographer_routePostFrameCallback64(choreographer, callback, data);
+}
+void AChoreographer_postFrameCallbackDelayed64(AChoreographer* choreographer,
+ AChoreographer_frameCallback64 callback, void* data,
+ uint32_t delayMillis) {
+ return AChoreographer_routePostFrameCallbackDelayed64(choreographer, callback, data,
+ delayMillis);
+}
+void AChoreographer_registerRefreshRateCallback(AChoreographer* choreographer,
+ AChoreographer_refreshRateCallback callback,
+ void* data) {
+ return AChoreographer_routeRegisterRefreshRateCallback(choreographer, callback, data);
+}
+void AChoreographer_unregisterRefreshRateCallback(AChoreographer* choreographer,
+ AChoreographer_refreshRateCallback callback,
+ void* data) {
+ return AChoreographer_routeUnregisterRefreshRateCallback(choreographer, callback, data);
+}
diff --git a/native/android/surface_texture.cpp b/native/android/surface_texture.cpp
new file mode 100644
index 000000000000..ff35204b2ec9
--- /dev/null
+++ b/native/android/surface_texture.cpp
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <android/surface_texture_jni.h>
+#include <surfacetexture/surface_texture_platform.h>
+
+using namespace android;
+
+ANativeWindow* ASurfaceTexture_acquireANativeWindow(ASurfaceTexture* st) {
+ return ASurfaceTexture_routeAcquireANativeWindow(st);
+}
+
+int ASurfaceTexture_attachToGLContext(ASurfaceTexture* st, uint32_t texName) {
+ return ASurfaceTexture_routeAttachToGLContext(st, texName);
+}
+
+int ASurfaceTexture_detachFromGLContext(ASurfaceTexture* st) {
+ return ASurfaceTexture_routeDetachFromGLContext(st);
+}
+
+void ASurfaceTexture_release(ASurfaceTexture* st) {
+ return ASurfaceTexture_routeRelease(st);
+}
+
+int ASurfaceTexture_updateTexImage(ASurfaceTexture* st) {
+ return ASurfaceTexture_routeUpdateTexImage(st);
+}
+
+void ASurfaceTexture_getTransformMatrix(ASurfaceTexture* st, float mtx[16]) {
+ return ASurfaceTexture_routeGetTransformMatrix(st, mtx);
+}
+
+int64_t ASurfaceTexture_getTimestamp(ASurfaceTexture* st) {
+ return ASurfaceTexture_routeGetTimestamp(st);
+}
+
+ASurfaceTexture* ASurfaceTexture_fromSurfaceTexture(JNIEnv* env, jobject surfacetexture) {
+ return ASurfaceTexture_routeFromSurfaceTexture(env, surfacetexture);
+}