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

Commit ab762153 authored by Adlai Holler's avatar Adlai Holler
Browse files

Migrate from SkCanvas::getGrContext to SkCanvas::recordingContext

This is part of API cleanup as we make DDL usage more mainstream
in Skia. Since Android doesn't use DDLs, the cast from recordingContext
to directContext will always succeed and there's no functional change.

Change-Id: Ie585cf6c97d01fecf082f146d5692999371fd39d
parent b850bfbd
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -56,7 +56,8 @@ static void GetFboDetails(SkCanvas* canvas, GLuint* outFboID, SkISize* outFboSiz
}

void GLFunctorDrawable::onDraw(SkCanvas* canvas) {
    if (canvas->getGrContext() == nullptr) {
    GrDirectContext* directContext = GrAsDirectContext(canvas->recordingContext());
    if (directContext == nullptr) {
        // We're dumping a picture, render a light-blue rectangle instead
        // TODO: Draw the WebView text on top? Seemingly complicated as SkPaint doesn't
        // seem to have a default typeface that works. We only ever use drawGlyphs, which
@@ -87,7 +88,7 @@ void GLFunctorDrawable::onDraw(SkCanvas* canvas) {
        SkImageInfo surfaceInfo =
                canvas->imageInfo().makeWH(clipBounds.width(), clipBounds.height());
        tmpSurface =
                SkSurface::MakeRenderTarget(canvas->getGrContext(), SkBudgeted::kYes, surfaceInfo);
                SkSurface::MakeRenderTarget(directContext, SkBudgeted::kYes, surfaceInfo);
        tmpSurface->getCanvas()->clear(SK_ColorTRANSPARENT);

        GrGLFramebufferInfo fboInfo;
@@ -141,7 +142,7 @@ void GLFunctorDrawable::onDraw(SkCanvas* canvas) {

        // notify Skia that we just updated the FBO and stencil
        const uint32_t grState = kStencil_GrGLBackendState | kRenderTarget_GrGLBackendState;
        canvas->getGrContext()->resetContext(grState);
        directContext->resetContext(grState);

        SkCanvas* tmpCanvas = canvas;
        if (tmpSurface) {
@@ -188,7 +189,7 @@ void GLFunctorDrawable::onDraw(SkCanvas* canvas) {
        glClear(GL_STENCIL_BUFFER_BIT);
    }

    canvas->getGrContext()->resetContext();
    directContext->resetContext();

    // if there were unclipped save layers involved we draw our offscreen surface to the canvas
    if (tmpSurface) {
+4 −3
Original line number Diff line number Diff line
@@ -86,7 +86,7 @@ void SkiaPipeline::renderLayers(const LightGeometry& lightGeometry,
}

void SkiaPipeline::renderLayersImpl(const LayerUpdateQueue& layers, bool opaque) {
    sk_sp<GrContext> cachedContext;
    sk_sp<GrDirectContext> cachedContext;

    // Render all layers that need to be updated, in order.
    for (size_t i = 0; i < layers.entries().size(); i++) {
@@ -142,7 +142,8 @@ void SkiaPipeline::renderLayersImpl(const LayerUpdateQueue& layers, bool opaque)

        // cache the current context so that we can defer flushing it until
        // either all the layers have been rendered or the context changes
        GrContext* currentContext = layerNode->getLayerSurface()->getCanvas()->getGrContext();
        GrDirectContext* currentContext =
            GrAsDirectContext(layerNode->getLayerSurface()->getCanvas()->recordingContext());
        if (cachedContext.get() != currentContext) {
            if (cachedContext.get()) {
                ATRACE_NAME("flush layers (context changed)");
@@ -201,7 +202,7 @@ bool SkiaPipeline::createOrUpdateLayer(RenderNode* node, const DamageAccumulator
}

void SkiaPipeline::prepareToDraw(const RenderThread& thread, Bitmap* bitmap) {
    GrContext* context = thread.getGrContext();
    GrDirectContext* context = thread.getGrContext();
    if (context) {
        ATRACE_FORMAT("Bitmap#prepareToDraw %dx%d", bitmap->width(), bitmap->height());
        auto image = bitmap->makeImage();
+1 −1
Original line number Diff line number Diff line
@@ -96,7 +96,7 @@ void VkFunctorDrawable::onDraw(SkCanvas* canvas) {
    // "VkFunctorDrawable::onDraw" is not invoked for the most common case, when drawing in a GPU
    // canvas.

    if (canvas->getGrContext() == nullptr) {
    if (canvas->recordingContext() == nullptr) {
        // We're dumping a picture, render a light-blue rectangle instead
        SkPaint paint;
        paint.setColor(0xFF81D4FA);
+1 −1
Original line number Diff line number Diff line
@@ -67,7 +67,7 @@ void VkInteropFunctorDrawable::vkInvokeFunctor(Functor* functor) {
void VkInteropFunctorDrawable::onDraw(SkCanvas* canvas) {
    ATRACE_CALL();

    if (canvas->getGrContext() == nullptr) {
    if (canvas->recordingContext() == nullptr) {
        SkDEBUGF(("Attempting to draw VkInteropFunctor into an unsupported surface"));
        return;
    }
+1 −1
Original line number Diff line number Diff line
@@ -106,7 +106,7 @@ public:
     * If Properties::isSkiaEnabled() is true then this will return the Skia
     * grContext associated with the current RenderPipeline.
     */
    GrContext* getGrContext() const { return mRenderThread.getGrContext(); }
    GrDirectContext* getGrContext() const { return mRenderThread.getGrContext(); }

    // Won't take effect until next EGLSurface creation
    void setSwapBehavior(SwapBehavior swapBehavior);