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

Commit d90c8a0f authored by John Reck's avatar John Reck Committed by Android (Google) Code Review
Browse files

Merge "Fix for Surface#lockHardwareCanvas lockups" into qt-qpr1-dev

parents b936ac7a ff299aef
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -488,7 +488,7 @@ static jlong create(JNIEnv* env, jclass clazz, jlong rootNodePtr, jlong surfaceP
        proxy->setWideGamut(true);
    }
    proxy->setSwapBehavior(SwapBehavior::kSwap_discardBuffer);
    proxy->setSurface(surface);
    proxy->setSurface(surface, false);
    // Shadows can't be used via this interface, so just set the light source
    // to all 0s.
    proxy->setLightAlpha(0, 0);
+5 −3
Original line number Diff line number Diff line
@@ -143,13 +143,15 @@ void CanvasContext::destroy() {
    mAnimationContext->destroy();
}

void CanvasContext::setSurface(sp<Surface>&& surface) {
void CanvasContext::setSurface(sp<Surface>&& surface, bool enableTimeout) {
    ATRACE_CALL();

    if (surface) {
        mNativeSurface = new ReliableSurface{std::move(surface)};
        if (enableTimeout) {
            // TODO: Fix error handling & re-shorten timeout
            mNativeSurface->setDequeueTimeout(4000_ms);
        }
    } else {
        mNativeSurface = nullptr;
    }
+1 −1
Original line number Diff line number Diff line
@@ -110,7 +110,7 @@ public:
    // Won't take effect until next EGLSurface creation
    void setSwapBehavior(SwapBehavior swapBehavior);

    void setSurface(sp<Surface>&& surface);
    void setSurface(sp<Surface>&& surface, bool enableTimeout = true);
    bool pauseSurface();
    void setStopped(bool stopped);
    bool hasSurface() const { return mNativeSurface.get(); }
+4 −3
Original line number Diff line number Diff line
@@ -82,9 +82,10 @@ void RenderProxy::setName(const char* name) {
    mRenderThread.queue().runSync([this, name]() { mContext->setName(std::string(name)); });
}

void RenderProxy::setSurface(const sp<Surface>& surface) {
    mRenderThread.queue().post(
            [this, surf = surface]() mutable { mContext->setSurface(std::move(surf)); });
void RenderProxy::setSurface(const sp<Surface>& surface, bool enableTimeout) {
    mRenderThread.queue().post([this, surf = surface, enableTimeout]() mutable {
        mContext->setSurface(std::move(surf), enableTimeout);
    });
}

void RenderProxy::allocateBuffers() {
+1 −1
Original line number Diff line number Diff line
@@ -69,7 +69,7 @@ public:
    ANDROID_API bool loadSystemProperties();
    ANDROID_API void setName(const char* name);

    ANDROID_API void setSurface(const sp<Surface>& surface);
    ANDROID_API void setSurface(const sp<Surface>& surface, bool enableTimeout = true);
    ANDROID_API void allocateBuffers();
    ANDROID_API bool pause();
    ANDROID_API void setStopped(bool stopped);