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

Commit 1206b9bb authored by Chris Craik's avatar Chris Craik
Browse files

Traverse layers in update order

bug:8540150

Layers now require traversal in update order, as it will be child
first, then parent for layer-in-layer

Fixes issue with deferred layer playback not flushing in order, and
thus child not painting before parent

Also fixes DisplayList to only be cleared after flush in deferred list

Change-Id: I2f284d00079cdb20798aeef6a1c94e823940db40
parent 599efc3a
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -52,8 +52,6 @@ public:
        kOpBatch_Count, // Add other batch ids before this
    };

    void clear();

    bool isEmpty() { return mBatches.isEmpty(); }

    /**
@@ -80,6 +78,8 @@ private:
     */
    void resetBatchingState();

    void clear();

    void storeStateOpBarrier(OpenGLRenderer& renderer, StateOp* op);
    void storeRestoreToCountBarrier(OpenGLRenderer& renderer, StateOp* op, int newSaveCount);

+1 −2
Original line number Diff line number Diff line
@@ -167,7 +167,6 @@ void Layer::defer() {
    displayList->defer(deferredState, 0);

    deferredUpdateScheduled = false;
    displayList = NULL;
}

void Layer::flush() {
@@ -182,7 +181,7 @@ void Layer::flush() {
        renderer = NULL;

        dirtyRect.setEmpty();
        deferredList->clear();
        displayList = NULL;
    }
}

+4 −4
Original line number Diff line number Diff line
@@ -571,8 +571,8 @@ void OpenGLRenderer::updateLayers() {
            startMark("Defer Layer Updates");
        }

        // Note: it is very important to update the layers in reverse order
        for (int i = count - 1; i >= 0; i--) {
        // Note: it is very important to update the layers in order
        for (int i = 0; i < count; i++) {
            Layer* layer = mLayerUpdates.itemAt(i);
            updateLayer(layer, false);
            if (CC_UNLIKELY(mCaches.drawDeferDisabled)) {
@@ -594,8 +594,8 @@ void OpenGLRenderer::flushLayers() {
        startMark("Apply Layer Updates");
        char layerName[12];

        // Note: it is very important to update the layers in reverse order
        for (int i = count - 1; i >= 0; i--) {
        // Note: it is very important to update the layers in order
        for (int i = 0; i < count; i++) {
            sprintf(layerName, "Layer #%d", i);
            startMark(layerName);