diff options
Diffstat (limited to 'services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputCompositionState.h')
-rw-r--r-- | services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputCompositionState.h | 55 |
1 files changed, 34 insertions, 21 deletions
diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputCompositionState.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputCompositionState.h index 66ed2b6d25..f34cb94079 100644 --- a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputCompositionState.h +++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputCompositionState.h @@ -19,16 +19,19 @@ #include <cstdint> #include <math/mat4.h> +#include <ui/FenceTime.h> // TODO(b/129481165): remove the #pragma below and fix conversion issues #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wconversion" +#pragma clang diagnostic ignored "-Wextra" #include <ui/GraphicTypes.h> // TODO(b/129481165): remove the #pragma below and fix conversion issues -#pragma clang diagnostic pop // ignored "-Wconversion" +#pragma clang diagnostic pop // ignored "-Wconversion -Wextra" +#include <compositionengine/ProjectionSpace.h> #include <ui/Rect.h> #include <ui/Region.h> #include <ui/Transform.h> @@ -38,7 +41,7 @@ namespace android { namespace compositionengine::impl { struct OutputCompositionState { - // If false, composition will not per performed for this display + // If false, composition will not be performed for this display bool isEnabled{false}; // If false, this output is not considered secure @@ -50,8 +53,7 @@ struct OutputCompositionState { // If true, the current frame on this output uses device composition bool usesDeviceComposition{false}; - // If true, the client target should be flipped when performing client - // composition + // If true, the client target should be flipped when performing client composition bool flipClientTarget{false}; // If true, the current frame reused the buffer from a previous client composition @@ -63,27 +65,25 @@ struct OutputCompositionState { // The layer stack to display on this display uint32_t layerStackId{~0u}; - // The physical space screen bounds - Rect bounds; + // The common space for all layers in the layer stack. layerStackSpace.content is the Rect + // which gets projected on the display. The orientation of this space is always ROTATION_0. + ProjectionSpace layerStackSpace; - // The logical to physical transformation to use - ui::Transform transform; - - // The physical orientation of the display, expressed as ui::Transform - // orientation flags. - uint32_t orientation{0}; + // Oriented physical display space. It will have the same size as displaySpace oriented to + // match the orientation of layerStackSpace. The orientation of this space is always ROTATION_0. + ProjectionSpace orientedDisplaySpace; - // The logical space user visible bounds - Rect frame; + // The space of the framebuffer. Its bounds match the size of the framebuffer and its + // orientation matches the orientation of the display. Typically the framebuffer space will + // be identical to the physical display space. + ProjectionSpace framebufferSpace; - // The logical space user viewport rectangle - Rect viewport; + // The space of the physical display. It is as big as the currently active display mode. The + // content in this space can be rotated. + ProjectionSpace displaySpace; - // The physical space source clip rectangle - Rect sourceClip; - - // The physical space destination clip rectangle - Rect destinationClip; + // Transformation from layerStackSpace to displaySpace + ui::Transform transform; // If true, RenderEngine filtering should be enabled bool needsFiltering{false}; @@ -116,6 +116,19 @@ struct OutputCompositionState { // Current target dataspace ui::Dataspace targetDataspace{ui::Dataspace::UNKNOWN}; + // The earliest time to send the present command to the HAL + std::chrono::steady_clock::time_point earliestPresentTime; + + // The previous present fence. Used together with earliestPresentTime + // to prevent an early presentation of a frame. + std::shared_ptr<FenceTime> previousPresentFence; + + // Current display brightness + float displayBrightnessNits{-1.f}; + + // SDR white point + float sdrWhitePointNits{-1.f}; + // Debugging void dump(std::string& result) const; }; |