diff options
author | 2021-05-21 22:50:56 +0000 | |
---|---|---|
committer | 2021-06-02 17:38:39 +0000 | |
commit | ac977e6de0cdebddebc2db0efd8cbec94c2bc996 (patch) | |
tree | 3a89d4d71ada965e0d7f758d0d7e4179412e7785 /services/surfaceflinger/Layer.cpp | |
parent | f1804968780f975fa8fe361c480a15e8dd85d131 (diff) |
SF - plumbing game mode for metrics (Part 1)
This change adds a game mode in the Layer metadata that gets updated every
time a game app comes to the foreground. The gameMode is then set on the
Layer based on the metadata and reparenting.
The game mode will then be
updated in TimeStats as a dimension (Part 2, in a separate CL later).
Bug: 186025682
Test: libsurfaceflinger_unittest:GameModeTest
Change-Id: I09deffc01d1b318cc08d0475611289dec055c190
Diffstat (limited to 'services/surfaceflinger/Layer.cpp')
-rw-r--r-- | services/surfaceflinger/Layer.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp index a7c870483b..d78a8223c4 100644 --- a/services/surfaceflinger/Layer.cpp +++ b/services/surfaceflinger/Layer.cpp @@ -1651,12 +1651,25 @@ size_t Layer::getChildrenCount() const { return count; } +void Layer::setGameModeForTree(int parentGameMode) { + int gameMode = parentGameMode; + auto& currentState = getCurrentState(); + if (currentState.metadata.has(METADATA_GAME_MODE)) { + gameMode = currentState.metadata.getInt32(METADATA_GAME_MODE, 0); + } + setGameMode(gameMode); + for (const sp<Layer>& child : mCurrentChildren) { + child->setGameModeForTree(gameMode); + } +} + void Layer::addChild(const sp<Layer>& layer) { mChildrenChanged = true; setTransactionFlags(eTransactionNeeded); mCurrentChildren.add(layer); layer->setParent(this); + layer->setGameModeForTree(mGameMode); updateTreeHasFrameRateVote(); } @@ -1668,6 +1681,7 @@ ssize_t Layer::removeChild(const sp<Layer>& layer) { const auto removeResult = mCurrentChildren.remove(layer); updateTreeHasFrameRateVote(); + layer->setGameModeForTree(0); layer->updateTreeHasFrameRateVote(); return removeResult; |