Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5af5d307 authored by Stan Iliev's avatar Stan Iliev
Browse files

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
parent 25e6dd3e
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -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"

+4 −4
Original line number Diff line number Diff line
@@ -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>
+3 −8
Original line number Diff line number Diff line
@@ -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,
+3 −0
Original line number Diff line number Diff line
@@ -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)
+2 −3
Original line number Diff line number Diff line
@@ -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
Loading