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

Commit c09f5470 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Provide a fixed transform hint if the layer is in a fixed orientation...

Merge "Provide a fixed transform hint if the layer is in a fixed orientation 1/2" into rvc-dev am: 942c5370

Change-Id: I99b4c2956343ef5e90633affaaf66772428deb0c
parents fa4a5e0b 942c5370
Loading
Loading
Loading
Loading
+6 −0
Original line number Original line Diff line number Diff line
@@ -116,6 +116,7 @@ status_t layer_state_t::write(Parcel& output) const
    output.writeInt32(frameRateSelectionPriority);
    output.writeInt32(frameRateSelectionPriority);
    output.writeFloat(frameRate);
    output.writeFloat(frameRate);
    output.writeByte(frameRateCompatibility);
    output.writeByte(frameRateCompatibility);
    output.writeUint32(fixedTransformHint);
    return NO_ERROR;
    return NO_ERROR;
}
}


@@ -198,6 +199,7 @@ status_t layer_state_t::read(const Parcel& input)
    frameRateSelectionPriority = input.readInt32();
    frameRateSelectionPriority = input.readInt32();
    frameRate = input.readFloat();
    frameRate = input.readFloat();
    frameRateCompatibility = input.readByte();
    frameRateCompatibility = input.readByte();
    fixedTransformHint = static_cast<ui::Transform::RotationFlags>(input.readUint32());
    return NO_ERROR;
    return NO_ERROR;
}
}


@@ -433,6 +435,10 @@ void layer_state_t::merge(const layer_state_t& other) {
        frameRate = other.frameRate;
        frameRate = other.frameRate;
        frameRateCompatibility = other.frameRateCompatibility;
        frameRateCompatibility = other.frameRateCompatibility;
    }
    }
    if (other.what & eFixedTransformHintChanged) {
        what |= eFixedTransformHintChanged;
        fixedTransformHint = other.fixedTransformHint;
    }
    if ((other.what & what) != other.what) {
    if ((other.what & what) != other.what) {
        ALOGE("Unmerged SurfaceComposer Transaction properties. LayerState::merge needs updating? "
        ALOGE("Unmerged SurfaceComposer Transaction properties. LayerState::merge needs updating? "
              "other.what=0x%" PRIu64 " what=0x%" PRIu64,
              "other.what=0x%" PRIu64 " what=0x%" PRIu64,
+16 −0
Original line number Original line Diff line number Diff line
@@ -1437,6 +1437,22 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setFrame
    return *this;
    return *this;
}
}


SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setFixedTransformHint(
        const sp<SurfaceControl>& sc, int32_t fixedTransformHint) {
    layer_state_t* s = getLayerState(sc);
    if (!s) {
        mStatus = BAD_INDEX;
        return *this;
    }

    const ui::Transform::RotationFlags transform = fixedTransformHint == -1
            ? ui::Transform::ROT_INVALID
            : ui::Transform::toRotationFlags(static_cast<ui::Rotation>(fixedTransformHint));
    s->what |= layer_state_t::eFixedTransformHintChanged;
    s->fixedTransformHint = transform;
    return *this;
}

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------


DisplayState& SurfaceComposerClient::Transaction::getDisplayState(const sp<IBinder>& token) {
DisplayState& SurfaceComposerClient::Transaction::getDisplayState(const sp<IBinder>& token) {
+13 −1
Original line number Original line Diff line number Diff line
@@ -35,6 +35,7 @@
#include <ui/Rect.h>
#include <ui/Rect.h>
#include <ui/Region.h>
#include <ui/Region.h>
#include <ui/Rotation.h>
#include <ui/Rotation.h>
#include <ui/Transform.h>
#include <utils/Errors.h>
#include <utils/Errors.h>


namespace android {
namespace android {
@@ -103,6 +104,7 @@ struct layer_state_t {
        eFrameRateChanged = 0x40'00000000,
        eFrameRateChanged = 0x40'00000000,
        eBackgroundBlurRadiusChanged = 0x80'00000000,
        eBackgroundBlurRadiusChanged = 0x80'00000000,
        eProducerDisconnect = 0x100'00000000,
        eProducerDisconnect = 0x100'00000000,
        eFixedTransformHintChanged = 0x200'00000000,
    };
    };


    layer_state_t()
    layer_state_t()
@@ -136,7 +138,8 @@ struct layer_state_t {
            shadowRadius(0.0f),
            shadowRadius(0.0f),
            frameRateSelectionPriority(-1),
            frameRateSelectionPriority(-1),
            frameRate(0.0f),
            frameRate(0.0f),
            frameRateCompatibility(ANATIVEWINDOW_FRAME_RATE_COMPATIBILITY_DEFAULT) {
            frameRateCompatibility(ANATIVEWINDOW_FRAME_RATE_COMPATIBILITY_DEFAULT),
            fixedTransformHint(ui::Transform::ROT_INVALID) {
        matrix.dsdx = matrix.dtdy = 1.0f;
        matrix.dsdx = matrix.dtdy = 1.0f;
        matrix.dsdy = matrix.dtdx = 0.0f;
        matrix.dsdy = matrix.dtdx = 0.0f;
        hdrMetadata.validTypes = 0;
        hdrMetadata.validTypes = 0;
@@ -225,6 +228,15 @@ struct layer_state_t {
    // Layer frame rate and compatibility. See ANativeWindow_setFrameRate().
    // Layer frame rate and compatibility. See ANativeWindow_setFrameRate().
    float frameRate;
    float frameRate;
    int8_t frameRateCompatibility;
    int8_t frameRateCompatibility;

    // Set by window manager indicating the layer and all its children are
    // in a different orientation than the display. The hint suggests that
    // the graphic producers should receive a transform hint as if the
    // display was in this orientation. When the display changes to match
    // the layer orientation, the graphic producer may not need to allocate
    // a buffer of a different size. -1 means the transform hint is not set,
    // otherwise the value will be a valid ui::Rotation.
    ui::Transform::RotationFlags fixedTransformHint;
};
};


struct ComposerState {
struct ComposerState {
+8 −0
Original line number Original line Diff line number Diff line
@@ -519,6 +519,14 @@ public:
        Transaction& setFrameRate(const sp<SurfaceControl>& sc, float frameRate,
        Transaction& setFrameRate(const sp<SurfaceControl>& sc, float frameRate,
                                  int8_t compatibility);
                                  int8_t compatibility);


        // Set by window manager indicating the layer and all its children are
        // in a different orientation than the display. The hint suggests that
        // the graphic producers should receive a transform hint as if the
        // display was in this orientation. When the display changes to match
        // the layer orientation, the graphic producer may not need to allocate
        // a buffer of a different size.
        Transaction& setFixedTransformHint(const sp<SurfaceControl>& sc, int32_t transformHint);

        status_t setDisplaySurface(const sp<IBinder>& token,
        status_t setDisplaySurface(const sp<IBinder>& token,
                const sp<IGraphicBufferProducer>& bufferProducer);
                const sp<IGraphicBufferProducer>& bufferProducer);


+7 −0
Original line number Original line Diff line number Diff line
@@ -843,6 +843,13 @@ void BufferLayer::updateCloneBufferInfo() {
    mDrawingState.inputInfo = tmpInputInfo;
    mDrawingState.inputInfo = tmpInputInfo;
}
}


void BufferLayer::setTransformHint(ui::Transform::RotationFlags displayTransformHint) const {
    mTransformHint = getFixedTransformHint();
    if (mTransformHint == ui::Transform::ROT_INVALID) {
        mTransformHint = displayTransformHint;
    }
}

} // namespace android
} // namespace android


#if defined(__gl_h_)
#if defined(__gl_h_)
Loading