diff options
author | Stan Iliev <stani@google.com> | 2020-01-13 11:29:18 -0500 |
---|---|---|
committer | Stan Iliev <stani@google.com> | 2020-01-17 20:09:19 +0000 |
commit | 5af5d3077f921994b90e9bad89d393421f3cc160 (patch) | |
tree | e583f7767a51589a55ce7701e4e7f0ace3992b96 | |
parent | 25e6dd3ed13346a0fe7056d02ad9faf1328367e2 (diff) |
Refactor TextureLayer JNI to use only APEX APIs
Move ASurfaceTexture JNI implementation from libandroid to
libnativedisplay.
TextureLayer uses ASurfaceTexture_fromSurfaceTexture from
libnativedisplay instead of libandroid_runtime code.
libgui is no longer leaked through surface_texture_platform.h.
DeferredLayerUpdater uses ASurfaceTexture_release instead of
private ASurfaceTexture dtor.
Test: pass CtsUiRenderingTestCases and CtsViewTestCases
Bug: 147060713
Exempt-From-Owner-Approval: Changed only a header path in android_hardware_camera2_legacy_LegacyCameraDevice.cpp
Change-Id: I9720d9c383f8120f9db116fd2b74fc241af84396
-rw-r--r-- | core/jni/android/graphics/SurfaceTexture.cpp | 6 | ||||
-rw-r--r-- | core/jni/android_hardware_camera2_legacy_LegacyCameraDevice.cpp | 8 | ||||
-rw-r--r-- | core/jni/android_view_TextureLayer.cpp | 11 | ||||
-rw-r--r-- | libs/hwui/DeferredLayerUpdater.cpp | 3 | ||||
-rw-r--r-- | libs/hwui/DeferredLayerUpdater.h | 5 | ||||
-rw-r--r-- | native/android/Android.bp | 3 | ||||
-rw-r--r-- | native/android/surface_texture.cpp | 70 |
7 files changed, 17 insertions, 89 deletions
diff --git a/core/jni/android/graphics/SurfaceTexture.cpp b/core/jni/android/graphics/SurfaceTexture.cpp index 1a9e8d077e21..2aca31733599 100644 --- a/core/jni/android/graphics/SurfaceTexture.cpp +++ b/core/jni/android/graphics/SurfaceTexture.cpp @@ -23,10 +23,10 @@ #include <GLES2/gl2.h> #include <GLES2/gl2ext.h> -#include <gui/Surface.h> -#include <gui/surfacetexture/SurfaceTexture.h> #include <gui/BufferQueue.h> -#include <gui/surfacetexture/surface_texture_platform.h> +#include <gui/Surface.h> +#include <surfacetexture/SurfaceTexture.h> +#include <surfacetexture/surface_texture_platform.h> #include "core_jni_helpers.h" diff --git a/core/jni/android_hardware_camera2_legacy_LegacyCameraDevice.cpp b/core/jni/android_hardware_camera2_legacy_LegacyCameraDevice.cpp index f2a51ad04885..8cf1d2cbfaae 100644 --- a/core/jni/android_hardware_camera2_legacy_LegacyCameraDevice.cpp +++ b/core/jni/android_hardware_camera2_legacy_LegacyCameraDevice.cpp @@ -27,14 +27,14 @@ #include "android_runtime/android_view_Surface.h" #include "android_runtime/android_graphics_SurfaceTexture.h" -#include <gui/Surface.h> -#include <gui/surfacetexture/SurfaceTexture.h> #include <gui/IGraphicBufferProducer.h> #include <gui/IProducerListener.h> -#include <ui/GraphicBuffer.h> -#include <system/window.h> +#include <gui/Surface.h> #include <hardware/camera3.h> +#include <surfacetexture/SurfaceTexture.h> #include <system/camera_metadata.h> +#include <system/window.h> +#include <ui/GraphicBuffer.h> #include <stdint.h> #include <inttypes.h> diff --git a/core/jni/android_view_TextureLayer.cpp b/core/jni/android_view_TextureLayer.cpp index 5491a338023c..40f618025f99 100644 --- a/core/jni/android_view_TextureLayer.cpp +++ b/core/jni/android_view_TextureLayer.cpp @@ -19,12 +19,9 @@ #include "jni.h" #include <nativehelper/JNIHelp.h> +#include <android/surface_texture_jni.h> #include "core_jni_helpers.h" -#include <android_runtime/android_graphics_SurfaceTexture.h> -#include <gui/IGraphicBufferProducer.h> -#include <gui/surfacetexture/surface_texture_platform.h> -#include <gui/surfacetexture/SurfaceTexture.h> #include <hwui/Paint.h> #include <SkMatrix.h> #include <DeferredLayerUpdater.h> @@ -61,10 +58,8 @@ static void TextureLayer_setTransform(JNIEnv* env, jobject clazz, static void TextureLayer_setSurfaceTexture(JNIEnv* env, jobject clazz, jlong layerUpdaterPtr, jobject surface) { DeferredLayerUpdater* layer = reinterpret_cast<DeferredLayerUpdater*>(layerUpdaterPtr); - auto consumer = SurfaceTexture_getSurfaceTexture(env, surface); - auto producer = SurfaceTexture_getProducer(env, surface); - layer->setSurfaceTexture(AutoTextureRelease( - ASurfaceTexture_create(consumer, producer))); + ASurfaceTexture* surfaceTexture = ASurfaceTexture_fromSurfaceTexture(env, surface); + layer->setSurfaceTexture(AutoTextureRelease(surfaceTexture, &ASurfaceTexture_release)); } static void TextureLayer_updateSurfaceTexture(JNIEnv* env, jobject clazz, diff --git a/libs/hwui/DeferredLayerUpdater.cpp b/libs/hwui/DeferredLayerUpdater.cpp index d6b516fd5cf4..5a50245a3765 100644 --- a/libs/hwui/DeferredLayerUpdater.cpp +++ b/libs/hwui/DeferredLayerUpdater.cpp @@ -18,6 +18,8 @@ #include <GLES2/gl2.h> #include <GLES2/gl2ext.h> +// TODO: Use public SurfaceTexture APIs once available and include public NDK header file instead. +#include <surfacetexture/surface_texture_platform.h> #include "AutoBackendTextureRelease.h" #include "Matrix.h" #include "Properties.h" @@ -34,6 +36,7 @@ namespace uirenderer { DeferredLayerUpdater::DeferredLayerUpdater(RenderState& renderState) : mRenderState(renderState) , mBlend(false) + , mSurfaceTexture(nullptr, [](ASurfaceTexture*) {}) , mTransform(nullptr) , mGLContextAttached(false) , mUpdateTexImage(false) diff --git a/libs/hwui/DeferredLayerUpdater.h b/libs/hwui/DeferredLayerUpdater.h index 289f65c22ad3..c44c0d537fa7 100644 --- a/libs/hwui/DeferredLayerUpdater.h +++ b/libs/hwui/DeferredLayerUpdater.h @@ -21,8 +21,7 @@ #include <SkMatrix.h> #include <android/hardware_buffer.h> #include <cutils/compiler.h> -// TODO: Use public SurfaceTexture APIs once available and include public NDK header file instead. -#include <gui/surfacetexture/surface_texture_platform.h> +#include <android/surface_texture.h> #include <map> #include <memory> @@ -37,7 +36,7 @@ namespace uirenderer { class AutoBackendTextureRelease; class RenderState; -typedef std::unique_ptr<ASurfaceTexture> AutoTextureRelease; +typedef std::unique_ptr<ASurfaceTexture, decltype(&ASurfaceTexture_release)> AutoTextureRelease; // Container to hold the properties a layer should be set to at the start // of a render pass diff --git a/native/android/Android.bp b/native/android/Android.bp index 9d93c9b7b605..0c6f507787d9 100644 --- a/native/android/Android.bp +++ b/native/android/Android.bp @@ -47,7 +47,6 @@ cc_library_shared { "sensor.cpp", "sharedmem.cpp", "storage_manager.cpp", - "surface_texture.cpp", "surface_control.cpp", "system_fonts.cpp", "trace.cpp", @@ -70,6 +69,8 @@ cc_library_shared { "libnetd_client", "libhwui", "libxml2", + "libEGL", + "libGLESv2", "android.hardware.configstore@1.0", "android.hardware.configstore-utils", ], diff --git a/native/android/surface_texture.cpp b/native/android/surface_texture.cpp deleted file mode 100644 index 3049ec16e2d4..000000000000 --- a/native/android/surface_texture.cpp +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (C) 2018 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.h> -#include <android/surface_texture_jni.h> - -#define LOG_TAG "ASurfaceTexture" - -#include <utils/Log.h> - -#include <gui/Surface.h> - -#include <gui/surfacetexture/surface_texture_platform.h> - -#include <android_runtime/android_graphics_SurfaceTexture.h> - -using namespace android; - -ASurfaceTexture* ASurfaceTexture_fromSurfaceTexture(JNIEnv* env, jobject surfacetexture) { - if (!surfacetexture || !android_SurfaceTexture_isInstanceOf(env, surfacetexture)) { - return nullptr; - } - auto consumer = SurfaceTexture_getSurfaceTexture(env, surfacetexture); - auto producer = SurfaceTexture_getProducer(env, surfacetexture); - return ASurfaceTexture_create(consumer, producer); -} - -ANativeWindow* ASurfaceTexture_acquireANativeWindow(ASurfaceTexture* st) { - sp<Surface> surface = new Surface(st->producer); - ANativeWindow* win(surface.get()); - ANativeWindow_acquire(win); - return win; -} - -void ASurfaceTexture_release(ASurfaceTexture* st) { - delete st; -} - -int ASurfaceTexture_attachToGLContext(ASurfaceTexture* st, uint32_t tex) { - return st->consumer->attachToContext(tex); -} - -int ASurfaceTexture_detachFromGLContext(ASurfaceTexture* st) { - return st->consumer->detachFromContext(); -} - -int ASurfaceTexture_updateTexImage(ASurfaceTexture* st) { - return st->consumer->updateTexImage(); -} - -void ASurfaceTexture_getTransformMatrix(ASurfaceTexture* st, float mtx[16]) { - st->consumer->getTransformMatrix(mtx); -} - -int64_t ASurfaceTexture_getTimestamp(ASurfaceTexture* st) { - return st->consumer->getTimestamp(); -} |