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

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

Merge "Async drawing!"

parents ca04d718 668f0e38
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