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

Commit d25d1345 authored by Bo Liu's avatar Bo Liu
Browse files

Do not call postDrawVk if did not call drawVk

Reland enable vulkan webview functor

Bug: 123877499
Bug: 115613038
Test: Gmail in bug no longer crashing.
Change-Id: I7df761a4691ceaa6c2a02b256d61554e57139409
parent d58aa257
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -142,10 +142,8 @@ void SkiaRecordingCanvas::callDrawGLFunction(Functor* functor,
void SkiaRecordingCanvas::drawWebViewFunctor(int functor) {
    FunctorDrawable* functorDrawable;
    if (Properties::getRenderPipelineType() == RenderPipelineType::SkiaVulkan) {
        // TODO(cblume) use VkFunctorDrawable instead of VkInteropFunctorDrawable here when the
        // interop is disabled.
        functorDrawable =
                mDisplayList->allocateDrawable<VkInteropFunctorDrawable>(functor, asSkCanvas());
                mDisplayList->allocateDrawable<VkFunctorDrawable>(functor, asSkCanvas());
    } else {
        functorDrawable = mDisplayList->allocateDrawable<GLFunctorDrawable>(functor, asSkCanvas());
    }
+4 −1
Original line number Diff line number Diff line
@@ -43,8 +43,10 @@ VkFunctorDrawHandler::VkFunctorDrawHandler(sp<WebViewFunctor::Handle> functor_ha
        , mImageInfo(image_info) {}

VkFunctorDrawHandler::~VkFunctorDrawHandler() {
    if (mDrawn) {
        mFunctorHandle->postDrawVk();
    }
}

void VkFunctorDrawHandler::draw(const GrBackendDrawableInfo& info) {
    ATRACE_CALL();
@@ -77,6 +79,7 @@ void VkFunctorDrawHandler::draw(const GrBackendDrawableInfo& info) {
    params.format = vulkan_info.fFormat;

    mFunctorHandle->drawVk(params);
    mDrawn = true;

    vulkan_info.fDrawBounds->offset.x = mClip.fLeft;
    vulkan_info.fDrawBounds->offset.y = mClip.fTop;
+2 −0
Original line number Diff line number Diff line
@@ -44,6 +44,8 @@ private:
    const SkMatrix mMatrix;
    const SkIRect mClip;
    const SkImageInfo mImageInfo;

    bool mDrawn = false;
};

/**
+0 −3
Original line number Diff line number Diff line
@@ -177,9 +177,6 @@ int CreateFunctor(void* data, AwDrawFnFunctorCallbacks* functor_callbacks) {
        webview_functor_callbacks.vk.initialize = &initializeVk;
        webview_functor_callbacks.vk.draw = &drawVk;
        webview_functor_callbacks.vk.postDraw = &postDrawVk;
        // TODO(boliu): Remove this once SkiaRecordingCanvas::drawWebViewFunctor
        // no longer uses GL interop.
        webview_functor_callbacks.gles.draw = &draw_gl;
        break;
    }
    callbacks_initialized = true;