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

Commit 05cec9d1 authored by Mathias Agopian's avatar Mathias Agopian
Browse files

improve resize transactions

use a flag instead of pre-committing the "requested" state
to prevent propagation or "requested" to "active", which makes
things a lot clearer when reading the code.

also avoid going through the "resized" code-path when requested
size is equal to "active" size.

Bug: 6498869
Change-Id: I24f893ba0ec5ca06aac5b8da9818989ae7ce4005
parent 419e196e
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -428,8 +428,8 @@ uint32_t Layer::doTransaction(uint32_t flags)
    const Layer::State& front(drawingState());
    const Layer::State& temp(currentState());

    const bool sizeChanged = (front.requested.w != temp.requested.w) ||
            (front.requested.h != temp.requested.h);
    const bool sizeChanged = (temp.requested.w != front.active.w) ||
                             (temp.requested.h != front.active.h);

    if (sizeChanged) {
        // the size changed, we need to ask our client to request a new buffer
@@ -472,8 +472,7 @@ uint32_t Layer::doTransaction(uint32_t flags)
        if (!isFixedSize()) {
            // this will make sure LayerBase::doTransaction doesn't update
            // the drawing state's geometry
            Layer::State& editDraw(mDrawingState);
            editDraw.requested = temp.requested;
            flags |= eDontUpdateGeometryState;
        }

        // record the new size, form this point on, when the client request
+5 −3
Original line number Diff line number Diff line
@@ -201,12 +201,14 @@ uint32_t LayerBase::doTransaction(uint32_t flags)
    const Layer::State& front(drawingState());
    const Layer::State& temp(currentState());

    if (front.requested != temp.requested)  {
        // geometry of the layer has changed, set the active geometry
        // to the requested geometry.
    // always set active to requested, unless we're asked not to
    // this is used by Layer, which special cases resizes.
    if (flags & eDontUpdateGeometryState)  {
    } else {
        Layer::State& editTemp(currentState());
        editTemp.active = temp.requested;
    }

    if (front.active != temp.active) {
        // invalidate and recompute the visible regions if needed
        flags |= Layer::eVisibleRegion;
+2 −1
Original line number Diff line number Diff line
@@ -227,6 +227,7 @@ public:


    enum { // flags for doTransaction()
        eDontUpdateGeometryState = 0x00000001,
        eVisibleRegion           = 0x00000002,
    };