summaryrefslogtreecommitdiff
path: root/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputCompositionState.h
diff options
context:
space:
mode:
Diffstat (limited to 'services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputCompositionState.h')
-rw-r--r--services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputCompositionState.h55
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;
};