// Copyright 2022 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_VIZ_SERVICE_DISPLAY_OVERLAY_COMBINATION_CACHE_H_ #define COMPONENTS_VIZ_SERVICE_DISPLAY_OVERLAY_COMBINATION_CACHE_H_ #include <bitset> #include <map> #include <memory> #include <utility> #include <vector> #include "base/containers/span.h" #include "components/viz/common/display/overlay_strategy.h" #include "components/viz/service/display/overlay_candidate.h" #include "components/viz/service/display/overlay_proposed_candidate.h" #include "components/viz/service/viz_service_export.h" #include "ui/gfx/geometry/rect_f.h" namespace viz { // Uniquely identifies OverlayProposedCandidates as it will be stored in the // OverlayCombinationCache. An overlay with the same strategy and the same // rounded display_rect are considered identical. struct OverlayCacheKey { … }; // A vector of proposed candidates to try and promote to overlays, as determined // by the OverlayCombinationCache. There is also a flag that indicates that this // entire combination has been successfully promoted to overlays the last time // it was tested. struct VIZ_SERVICE_EXPORT OverlayCombinationToTest { … }; class CombinationIdMapper; // Attempts to determine the optimal combination of candidates that we should // attempt to promote to overlays each frame, based on total expected relative // power gain, and past success/failure of these combinations being promoted. class VIZ_SERVICE_EXPORT OverlayCombinationCache { … }; // Manages the mapping from OverlayProposedCandidates to CandidateIds ids based // on their OverlayCacheKey. There are a fixed number of available ids, based on // the maximum size of a CandidateCombination. class VIZ_SERVICE_EXPORT CombinationIdMapper { … }; } // namespace viz #endif // COMPONENTS_VIZ_SERVICE_DISPLAY_OVERLAY_COMBINATION_CACHE_H_