From ac977e6de0cdebddebc2db0efd8cbec94c2bc996 Mon Sep 17 00:00:00 2001 From: Adithya Srinivasan Date: Fri, 21 May 2021 22:50:56 +0000 Subject: 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 --- services/surfaceflinger/SurfaceFlinger.cpp | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'services/surfaceflinger/SurfaceFlinger.cpp') diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 881ee5b8f4..3f75af2908 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -4018,6 +4018,13 @@ uint32_t SurfaceFlinger::setClientStateLocked( std::optional dequeueBufferTimestamp; if (what & layer_state_t::eMetadataChanged) { dequeueBufferTimestamp = s.metadata.getInt64(METADATA_DEQUEUE_TIME); + auto gameMode = s.metadata.getInt32(METADATA_GAME_MODE, -1); + if (gameMode != -1) { + // The transaction will be received on the Task layer and needs to be applied to all + // child layers. Child layers that are added at a later point will obtain the game mode + // info through addChild(). + layer->setGameModeForTree(gameMode); + } if (layer->setMetadata(s.metadata)) flags |= eTraversalNeeded; } if (what & layer_state_t::eColorSpaceAgnosticChanged) { -- cgit v1.2.3-59-g8ed1b