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

Commit 7823ee73 authored by Jorim Jaggi's avatar Jorim Jaggi
Browse files

Move allocateBuffers to RT

Such that it gets executed after setSurface, in order that
mReqUsage has the correct flags set.

Test: Take trace, ensure that allocateBuffers actually allocates
in the right format/usage by ensuring that dequeueBuffer doesn't
trash them immediately again.
Bug: 111517695
Change-Id: I94b402d7b29d565155a77a2d09106246261712d2
parent 0c84996a
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -961,6 +961,10 @@ public final class ThreadedRenderer {
        nSetDebuggingEnabled(enable);
    }

    void allocateBuffers(Surface surface) {
        nAllocateBuffers(mNativeProxy, surface);
    }

    @Override
    protected void finalize() throws Throwable {
        try {
@@ -1251,4 +1255,5 @@ public final class ThreadedRenderer {
    private static native void nSetDebuggingEnabled(boolean enabled);
    private static native void nSetIsolatedProcess(boolean enabled);
    private static native void nSetContextPriority(int priority);
    private static native void nAllocateBuffers(long nativeProxy, Surface window);
}
+1 −1
Original line number Diff line number Diff line
@@ -2103,7 +2103,7 @@ public final class ViewRootImpl implements ViewParent,
                                        & View.PFLAG_REQUEST_TRANSPARENT_REGIONS) == 0) {
                                    // Don't pre-allocate if transparent regions
                                    // are requested as they may not be needed
                                    mSurface.allocateBuffers();
                                    mAttachInfo.mThreadedRenderer.allocateBuffers(mSurface);
                                }
                            } catch (OutOfResourcesException e) {
                                handleOutOfResourcesException(e);
+8 −0
Original line number Diff line number Diff line
@@ -1060,6 +1060,13 @@ static void android_view_ThreadedRenderer_setContextPriority(JNIEnv*, jclass,
    Properties::contextPriority = contextPriority;
}

static void android_view_ThreadedRenderer_allocateBuffers(JNIEnv* env, jobject clazz,
        jlong proxyPtr, jobject jsurface) {
    RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr);
    sp<Surface> surface = android_view_Surface_getSurface(env, jsurface);
    proxy->allocateBuffers(surface);
}

// ----------------------------------------------------------------------------
// FrameMetricsObserver
// ----------------------------------------------------------------------------
@@ -1173,6 +1180,7 @@ static const JNINativeMethod gMethods[] = {
    { "nSetDebuggingEnabled", "(Z)V", (void*)android_view_ThreadedRenderer_setDebuggingEnabled },
    { "nSetIsolatedProcess", "(Z)V", (void*)android_view_ThreadedRenderer_setIsolatedProcess },
    { "nSetContextPriority", "(I)V", (void*)android_view_ThreadedRenderer_setContextPriority },
    { "nAllocateBuffers", "(JLandroid/view/Surface;)V", (void*)android_view_ThreadedRenderer_allocateBuffers },
};

static JavaVM* mJvm = nullptr;
+5 −0
Original line number Diff line number Diff line
@@ -87,6 +87,11 @@ void RenderProxy::initialize(const sp<Surface>& surface) {
            [ this, surf = surface ]() mutable { mContext->setSurface(std::move(surf)); });
}

void RenderProxy::allocateBuffers(const sp<Surface>& surface) {
    mRenderThread.queue().post(
            [ surf = surface ]() mutable { surf->allocateBuffers(); });
}

void RenderProxy::updateSurface(const sp<Surface>& surface) {
    mRenderThread.queue().post(
            [ this, surf = surface ]() mutable { mContext->setSurface(std::move(surf)); });
+1 −0
Original line number Diff line number Diff line
@@ -70,6 +70,7 @@ public:
    ANDROID_API void setName(const char* name);

    ANDROID_API void initialize(const sp<Surface>& surface);
    ANDROID_API void allocateBuffers(const sp<Surface>& surface);
    ANDROID_API void updateSurface(const sp<Surface>& surface);
    ANDROID_API bool pauseSurface(const sp<Surface>& surface);
    ANDROID_API void setStopped(bool stopped);