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

Commit acec6141 authored by Brian Lindahl's avatar Brian Lindahl
Browse files

Invert content priority so that higher value is higher priority

Bug: 337330263
Test: atest SurfaceControlPictureProfileTest
Flag: com.android.graphics.libgui.flags.apply_picture_profiles
Change-Id: I50126161e7f3a457f432c433a5d3964489465bea
parent 0b577d98
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -425,7 +425,7 @@ struct layer_state_t {
    PictureProfileHandle pictureProfileHandle{PictureProfileHandle::NONE};

    // A value indicating the significance of the layer's content to the app's desired user
    // experience. A lower priority will result in more likelihood of getting access to limited
    // experience. A higher value will result in more likelihood of getting access to limited
    // resources, such as picture processing hardware.
    int32_t appContentPriority = 0;

+1 −1
Original line number Diff line number Diff line
@@ -810,7 +810,7 @@ void Output::commitPictureProfilesToCompositionState() {
    }
    auto compare = [](const ::android::compositionengine::OutputLayer* lhs,
                      const ::android::compositionengine::OutputLayer* rhs) {
        return lhs->getPictureProfilePriority() > rhs->getPictureProfilePriority();
        return lhs->getPictureProfilePriority() < rhs->getPictureProfilePriority();
    };
    std::priority_queue<::android::compositionengine::OutputLayer*,
                        std::vector<::android::compositionengine::OutputLayer*>, decltype(compare)>
+4 −4
Original line number Diff line number Diff line
@@ -5080,14 +5080,14 @@ TEST_F(OutputUpdateAndWriteCompositionStateTest, assignsDisplayProfileBasedOnLay
    InjectedLayer layer1;
    injectOutputLayer(layer1);
    PictureProfileHandle profileForLayer1(1);
    EXPECT_CALL(*layer1.outputLayer, getPictureProfilePriority()).WillRepeatedly(Return(3));
    EXPECT_CALL(*layer1.outputLayer, getPictureProfilePriority()).WillRepeatedly(Return(1));
    EXPECT_CALL(*layer1.outputLayer, getPictureProfileHandle())
            .WillRepeatedly(ReturnRef(profileForLayer1));

    InjectedLayer layer2;
    injectOutputLayer(layer2);
    PictureProfileHandle profileForLayer2(2);
    EXPECT_CALL(*layer2.outputLayer, getPictureProfilePriority()).WillRepeatedly(Return(1));
    EXPECT_CALL(*layer2.outputLayer, getPictureProfilePriority()).WillRepeatedly(Return(3));
    EXPECT_CALL(*layer2.outputLayer, getPictureProfileHandle())
            .WillRepeatedly(ReturnRef(profileForLayer2));

@@ -5143,14 +5143,14 @@ TEST_F(OutputUpdateAndWriteCompositionStateTest, assignsLayerProfileBasedOnLayer
    InjectedLayer layer1;
    injectOutputLayer(layer1);
    PictureProfileHandle profileForLayer1(1);
    EXPECT_CALL(*layer1.outputLayer, getPictureProfilePriority()).WillRepeatedly(Return(3));
    EXPECT_CALL(*layer1.outputLayer, getPictureProfilePriority()).WillRepeatedly(Return(1));
    EXPECT_CALL(*layer1.outputLayer, getPictureProfileHandle())
            .WillRepeatedly(ReturnRef(profileForLayer1));

    InjectedLayer layer2;
    injectOutputLayer(layer2);
    PictureProfileHandle profileForLayer2(2);
    EXPECT_CALL(*layer2.outputLayer, getPictureProfilePriority()).WillRepeatedly(Return(1));
    EXPECT_CALL(*layer2.outputLayer, getPictureProfilePriority()).WillRepeatedly(Return(3));
    EXPECT_CALL(*layer2.outputLayer, getPictureProfileHandle())
            .WillRepeatedly(ReturnRef(profileForLayer2));

+1 −1
Original line number Diff line number Diff line
@@ -418,7 +418,7 @@ void LayerSnapshot::merge(const RequestedLayerState& requested, bool forceUpdate
    }
    if (forceUpdate || requested.what & layer_state_t::eAppContentPriorityChanged) {
        // TODO(b/337330263): Also consider the system-determined priority of the app
        pictureProfilePriority = requested.appContentPriority;
        pictureProfilePriority = int64_t(requested.appContentPriority) + INT_MAX;
    }

    if (forceUpdate || requested.what & layer_state_t::eDefaultFrameRateCompatibilityChanged) {
+47 −23
Original line number Diff line number Diff line
@@ -2021,16 +2021,13 @@ TEST_F(LayerSnapshotTest, contentDirtyWhenParentGeometryChanges) {
    EXPECT_FALSE(getSnapshot(1)->contentDirty);
}
TEST_F(LayerSnapshotTest, shouldUpdatePictureProfileHandle) {
    if (!com_android_graphics_libgui_flags_apply_picture_profiles()) {
        GTEST_SKIP() << "Flag disabled, skipping test";
    }
    std::vector<TransactionState> transactions;
    transactions.emplace_back();
    transactions.back().states.push_back({});
    transactions.back().states.front().layerId = 1;
    transactions.back().states.front().state.layerId = 1;
    transactions.back().states.front().state.what = layer_state_t::ePictureProfileHandleChanged;
    transactions.back().states.front().state.pictureProfileHandle = PictureProfileHandle(3);
    transactions.back().states.back().layerId = 1;
    transactions.back().states.back().state.layerId = 1;
    transactions.back().states.back().state.what = layer_state_t::ePictureProfileHandleChanged;
    transactions.back().states.back().state.pictureProfileHandle = PictureProfileHandle(3);

    mLifecycleManager.applyTransactions(transactions);
    EXPECT_EQ(mLifecycleManager.getGlobalChanges(), RequestedLayerState::Changes::Content);
@@ -2042,23 +2039,50 @@ TEST_F(LayerSnapshotTest, shouldUpdatePictureProfileHandle) {
}

TEST_F(LayerSnapshotTest, shouldUpdatePictureProfilePriorityFromAppContentPriority) {
    if (!com_android_graphics_libgui_flags_apply_picture_profiles()) {
        GTEST_SKIP() << "Flag disabled, skipping test";
    {
        std::vector<TransactionState> transactions;
        transactions.emplace_back();
        transactions.back().states.push_back({});
        transactions.back().states.back().layerId = 1;
        transactions.back().states.back().state.layerId = 1;
        transactions.back().states.back().state.what = layer_state_t::eAppContentPriorityChanged;
        transactions.back().states.back().state.appContentPriority = 1;
        transactions.back().states.push_back({});
        transactions.back().states.back().layerId = 2;
        transactions.back().states.back().state.layerId = 2;
        transactions.back().states.back().state.what = layer_state_t::eAppContentPriorityChanged;
        transactions.back().states.back().state.appContentPriority = -1;

        mLifecycleManager.applyTransactions(transactions);
        EXPECT_EQ(mLifecycleManager.getGlobalChanges(), RequestedLayerState::Changes::Content);

        update(mSnapshotBuilder);

        EXPECT_GT(getSnapshot(1)->pictureProfilePriority, getSnapshot(2)->pictureProfilePriority);
        EXPECT_EQ(getSnapshot(1)->pictureProfilePriority - getSnapshot(2)->pictureProfilePriority,
                  2);
    }
    {
        std::vector<TransactionState> transactions;
        transactions.emplace_back();
        transactions.back().states.push_back({});
    transactions.back().states.front().layerId = 1;
    transactions.back().states.front().state.layerId = 1;
    transactions.back().states.front().state.what = layer_state_t::eAppContentPriorityChanged;
    transactions.back().states.front().state.appContentPriority = 3;
        transactions.back().states.back().layerId = 1;
        transactions.back().states.back().state.layerId = 1;
        transactions.back().states.back().state.what = layer_state_t::eAppContentPriorityChanged;
        transactions.back().states.back().state.appContentPriority = INT_MIN;
        transactions.back().states.push_back({});
        transactions.back().states.back().layerId = 2;
        transactions.back().states.back().state.layerId = 2;
        transactions.back().states.back().state.what = layer_state_t::eAppContentPriorityChanged;
        transactions.back().states.back().state.appContentPriority = INT_MAX;

        mLifecycleManager.applyTransactions(transactions);
        EXPECT_EQ(mLifecycleManager.getGlobalChanges(), RequestedLayerState::Changes::Content);

        update(mSnapshotBuilder);

    EXPECT_EQ(getSnapshot(1)->pictureProfilePriority, 3);
        EXPECT_GT(getSnapshot(2)->pictureProfilePriority, getSnapshot(1)->pictureProfilePriority);
    }
}

} // namespace android::surfaceflinger::frontend