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

Commit 414e8b5c authored by Ady Abraham's avatar Ady Abraham
Browse files

SurfaceFlinger: tree vote for FrameRateCompatibility::ExactOrMultiple

Layers that voted with FrameRateCompatibility::ExactOrMultiple
will still allow touch boost as those layers are typically not
interactive and therefore touch is probably meant for a different
layer. For the same reasoning, we should continue to heuristically
calculate frame rate for layers in the same tree.

Bug: 157254751
Test: run Swappy with statistics overlay and observe refresh rate
Test: run YouTube, play a video, scrolling the recommended videos and observe refresh rate
Change-Id: I9311512a663eba61dfcae6277a52c077e135a244
parent 39db2c9b
Loading
Loading
Loading
Loading
+9 −2
Original line number Original line Diff line number Diff line
@@ -1353,8 +1353,15 @@ void Layer::updateTreeHasFrameRateVote() {
    // First traverse the tree and count how many layers has votes
    // First traverse the tree and count how many layers has votes
    int layersWithVote = 0;
    int layersWithVote = 0;
    traverseTree([&layersWithVote](Layer* layer) {
    traverseTree([&layersWithVote](Layer* layer) {
        if (layer->mCurrentState.frameRate.rate > 0 ||
        const auto layerVotedWithDefaultCompatibility = layer->mCurrentState.frameRate.rate > 0 &&
            layer->mCurrentState.frameRate.type == FrameRateCompatibility::NoVote) {
                layer->mCurrentState.frameRate.type == FrameRateCompatibility::Default;
        const auto layerVotedWithNoVote =
                layer->mCurrentState.frameRate.type == FrameRateCompatibility::NoVote;

        // We do not count layers that are ExactOrMultiple for the same reason
        // we are allowing touch boost for those layers. See
        // RefreshRateConfigs::getBestRefreshRate for more details.
        if (layerVotedWithDefaultCompatibility || layerVotedWithNoVote) {
            layersWithVote++;
            layersWithVote++;
        }
        }
    });
    });