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

Commit 09781e24 authored by chaviw's avatar chaviw Committed by android-build-merger
Browse files

Merge "Use correct StateSet for LayerVector compare." into pi-dev

am: 4f80b867

Change-Id: I698990676f963cb3f8f1d1d6e3e2ac6bd61a2d74
parents 6e267a4b 4f80b867
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -98,8 +98,9 @@ Layer::Layer(SurfaceFlinger* flinger, const sp<Client>& client, const String8& n
        mQueueItems(),
        mLastFrameNumberReceived(0),
        mAutoRefresh(false),
        mFreezeGeometryUpdates(false) {

        mFreezeGeometryUpdates(false),
        mCurrentChildren(LayerVector::StateSet::Current),
        mDrawingChildren(LayerVector::StateSet::Drawing) {
    mCurrentCrop.makeInvalid();

    uint32_t layerFlags = 0;
@@ -137,7 +138,6 @@ Layer::Layer(SurfaceFlinger* flinger, const sp<Client>& client, const String8& n
    CompositorTiming compositorTiming;
    flinger->getCompositorTiming(&compositorTiming);
    mFrameEventHistory.initializeCompositorTiming(compositorTiming);

}

void Layer::onFirstRef() {}
@@ -1677,7 +1677,7 @@ __attribute__((no_sanitize("unsigned-integer-overflow"))) LayerVector Layer::mak
        return children;
    }

    LayerVector traverse;
    LayerVector traverse(stateSet);
    for (const wp<Layer>& weakRelative : state.zOrderRelatives) {
        sp<Layer> strongRelative = weakRelative.promote();
        if (strongRelative != nullptr) {
@@ -1775,7 +1775,7 @@ LayerVector Layer::makeChildrenTraversalList(LayerVector::StateSet stateSet,
    const LayerVector& children = useDrawing ? mDrawingChildren : mCurrentChildren;
    const State& state = useDrawing ? mDrawingState : mCurrentState;

    LayerVector traverse;
    LayerVector traverse(stateSet);
    for (const wp<Layer>& weakRelative : state.zOrderRelatives) {
        sp<Layer> strongRelative = weakRelative.promote();
        // Only add relative layers that are also descendents of the top most parent of the tree.
+18 −7
Original line number Diff line number Diff line
@@ -19,26 +19,37 @@

namespace android {

LayerVector::LayerVector() = default;
LayerVector::LayerVector(const StateSet stateSet) : mStateSet(stateSet) {}

LayerVector::LayerVector(const LayerVector& rhs) : SortedVector<sp<Layer>>(rhs) {
}
LayerVector::LayerVector(const LayerVector& rhs, const StateSet stateSet)
      : SortedVector<sp<Layer>>(rhs), mStateSet(stateSet) {}

LayerVector::~LayerVector() = default;

// This operator override is needed to prevent mStateSet from getting copied over.
LayerVector& LayerVector::operator=(const LayerVector& rhs) {
    SortedVector::operator=(rhs);
    return *this;
}

int LayerVector::do_compare(const void* lhs, const void* rhs) const
{
    // sort layers per layer-stack, then by z-order and finally by sequence
    const auto& l = *reinterpret_cast<const sp<Layer>*>(lhs);
    const auto& r = *reinterpret_cast<const sp<Layer>*>(rhs);

    uint32_t ls = l->getCurrentState().layerStack;
    uint32_t rs = r->getCurrentState().layerStack;
    const auto& lState =
            (mStateSet == StateSet::Current) ? l->getCurrentState() : l->getDrawingState();
    const auto& rState =
            (mStateSet == StateSet::Current) ? r->getCurrentState() : r->getDrawingState();

    uint32_t ls = lState.layerStack;
    uint32_t rs = rState.layerStack;
    if (ls != rs)
        return (ls > rs) ? 1 : -1;

    int32_t lz = l->getCurrentState().z;
    int32_t rz = r->getCurrentState().z;
    int32_t lz = lState.z;
    int32_t rz = rState.z;
    if (lz != rz)
        return (lz > rz) ? 1 : -1;

+9 −4
Original line number Diff line number Diff line
@@ -32,22 +32,27 @@ class Layer;
 */
class LayerVector : public SortedVector<sp<Layer>> {
public:
    LayerVector();
    LayerVector(const LayerVector& rhs);
    ~LayerVector() override;

    enum class StateSet {
        Invalid,
        Current,
        Drawing,
    };

    explicit LayerVector(const StateSet stateSet);
    LayerVector(const LayerVector& rhs, const StateSet stateSet);
    ~LayerVector() override;

    LayerVector& operator=(const LayerVector& rhs);

    // Sorts layer by layer-stack, Z order, and finally creation order (sequence).
    int do_compare(const void* lhs, const void* rhs) const override;

    using Visitor = std::function<void(Layer*)>;
    void traverseInReverseZOrder(StateSet stateSet, const Visitor& visitor) const;
    void traverseInZOrder(StateSet stateSet, const Visitor& visitor) const;

private:
    const StateSet mStateSet;
};
}

+1 −1
Original line number Diff line number Diff line
@@ -369,7 +369,7 @@ private:

    class State {
    public:
        explicit State(LayerVector::StateSet set) : stateSet(set) {}
        explicit State(LayerVector::StateSet set) : stateSet(set), layersSortedByZ(set) {}
        State& operator=(const State& other) {
            // We explicitly don't copy stateSet so that, e.g., mDrawingState
            // always uses the Drawing StateSet.