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

Commit 668f0e38 authored by John Reck's avatar John Reck
Browse files

Async drawing!

Change-Id: I7e728356f58af88174328a8c0b90d27b128bfe01
parent bcad68ad
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -54,6 +54,7 @@ ifeq ($(USE_OPENGL_RENDERER),true)
	# RenderThread stuff
	LOCAL_SRC_FILES += \
		renderthread/CanvasContext.cpp \
		renderthread/DrawFrameTask.cpp \
		renderthread/RenderProxy.cpp \
		renderthread/RenderTask.cpp \
		renderthread/RenderThread.cpp
+1 −3
Original line number Diff line number Diff line
@@ -29,7 +29,6 @@ DeferredLayerUpdater::DeferredLayerUpdater(Layer* layer, OpenGLRenderer* rendere
        , mNeedsGLContextAttach(false)
        , mUpdateTexImage(false)
        , mLayer(layer)
        , mRenderer(renderer)
        , mCaches(Caches::getInstance()) {
    mWidth = mLayer->layer.getWidth();
    mHeight = mLayer->layer.getHeight();
@@ -45,7 +44,6 @@ DeferredLayerUpdater::~DeferredLayerUpdater() {
    if (mLayer) {
        mCaches.resourceCache.decrementRefcount(mLayer);
    }
    delete mRenderer;
}

void DeferredLayerUpdater::setPaint(const SkPaint* paint) {
@@ -76,7 +74,7 @@ bool DeferredLayerUpdater::apply() {
        }
        mLayer->setBlend(mBlend);
        mDisplayList->updateProperties();
        mLayer->updateDeferred(mRenderer, mDisplayList,
        mLayer->updateDeferred(mDisplayList,
                mDirtyRect.left, mDirtyRect.top, mDirtyRect.right, mDirtyRect.bottom);
        mDirtyRect.setEmpty();
        mDisplayList = 0;
+0 −1
Original line number Diff line number Diff line
@@ -109,7 +109,6 @@ private:
    bool mUpdateTexImage;

    Layer* mLayer;
    OpenGLRenderer* mRenderer;
    Caches& mCaches;

    void doUpdateTexImage();
+8 −3
Original line number Diff line number Diff line
@@ -58,6 +58,7 @@ Layer::~Layer() {

    delete[] mesh;
    delete deferredList;
    delete renderer;
}

uint32_t Layer::computeIdealWidth(uint32_t layerWidth) {
@@ -68,6 +69,13 @@ uint32_t Layer::computeIdealHeight(uint32_t layerHeight) {
    return uint32_t(ceilf(layerHeight / float(LAYER_SIZE)) * LAYER_SIZE);
}

void Layer::requireRenderer() {
    if (!renderer) {
        renderer = new LayerRenderer(this);
        renderer->initProperties();
    }
}

bool Layer::resize(const uint32_t width, const uint32_t height) {
    uint32_t desiredWidth = computeIdealWidth(width);
    uint32_t desiredHeight = computeIdealWidth(height);
@@ -207,7 +215,6 @@ void Layer::defer() {
}

void Layer::cancelDefer() {
    renderer = NULL;
    displayList = NULL;
    deferredUpdateScheduled = false;
    if (deferredList) {
@@ -226,7 +233,6 @@ void Layer::flush() {
        deferredList->flush(*renderer, dirtyRect);

        renderer->finish();
        renderer = NULL;

        dirtyRect.setEmpty();
        displayList = NULL;
@@ -241,7 +247,6 @@ void Layer::render() {
    renderer->drawDisplayList(displayList, dirtyRect, RenderNode::kReplayFlag_ClipChildren);

    renderer->finish();
    renderer = NULL;

    dirtyRect.setEmpty();

+4 −2
Original line number Diff line number Diff line
@@ -84,9 +84,9 @@ public:
        regionRect.translate(layer.left, layer.top);
    }

    void updateDeferred(OpenGLRenderer* renderer, RenderNode* displayList,
    void updateDeferred(RenderNode* displayList,
            int left, int top, int right, int bottom) {
        this->renderer = renderer;
        requireRenderer();
        this->displayList = displayList;
        const Rect r(left, top, right, bottom);
        dirtyRect.unionWith(r);
@@ -300,6 +300,8 @@ public:
    bool hasDrawnSinceUpdate;

private:
    void requireRenderer();

    Caches& caches;

    /**
Loading