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

Commit d75fa0d5 authored by Brian Lindahl's avatar Brian Lindahl Committed by Android (Google) Code Review
Browse files

Merge "Invert content priority so that higher value is higher priority" into main

parents c1663cb5 acec6141
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
@@ -5100,14 +5100,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));

@@ -5163,14 +5163,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