diff options
Diffstat (limited to 'services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputLayerCompositionState.h')
-rw-r--r-- | services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputLayerCompositionState.h | 53 |
1 files changed, 44 insertions, 9 deletions
diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputLayerCompositionState.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputLayerCompositionState.h index 75394fadb7..7564c54218 100644 --- a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputLayerCompositionState.h +++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputLayerCompositionState.h @@ -16,25 +16,27 @@ #pragma once -#include <cstdint> -#include <optional> -#include <string> - +#include <compositionengine/ProjectionSpace.h> #include <compositionengine/impl/HwcBufferCache.h> -#include <renderengine/Mesh.h> +#include <renderengine/ExternalTexture.h> #include <ui/FloatRect.h> #include <ui/GraphicTypes.h> #include <ui/Rect.h> #include <ui/Region.h> +#include <cstdint> +#include <optional> +#include <string> + // 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 "DisplayHardware/ComposerHal.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" namespace android { @@ -44,8 +46,14 @@ class Layer; class HWComposer; +namespace compositionengine { +class OutputLayer; +} // namespace compositionengine + namespace compositionengine::impl { +// Note that fields that affect HW composer state may need to be mirrored into +// android::compositionengine::impl::planner::LayerState struct OutputLayerCompositionState { // The portion of the layer that is not obscured by opaque layers on top Region visibleRegion; @@ -80,8 +88,29 @@ struct OutputLayerCompositionState { // The dataspace for this layer ui::Dataspace dataspace{ui::Dataspace::UNKNOWN}; - // The Z order index of this layer on this output - uint32_t z{0}; + // Overrides the buffer, acquire fence, and display frame stored in LayerFECompositionState + struct { + std::shared_ptr<renderengine::ExternalTexture> buffer = nullptr; + sp<Fence> acquireFence = nullptr; + Rect displayFrame = {}; + ui::Dataspace dataspace{ui::Dataspace::UNKNOWN}; + ProjectionSpace displaySpace; + Region damageRegion = Region::INVALID_REGION; + Region visibleRegion; + + // The OutputLayer pointed to by this field will be rearranged to draw + // behind the OutputLayer represented by this CompositionState and will + // be visible through it. Unowned - the OutputLayer's lifetime will + // outlast this.) + compositionengine::OutputLayer* peekThroughLayer = nullptr; + // True when this layer's blur has been cached with a previous layer, so that this layer + // does not need to request blurring. + // TODO(b/188816867): support blur regions too, which are less likely to be common if a + // device supports cross-window blurs. Blur region support should be doable, but we would + // need to make sure that layer caching works well with the blur region transform passed + // into RenderEngine + bool disableBackgroundBlur = false; + } overrideInfo; /* * HWC state @@ -100,6 +129,12 @@ struct OutputLayerCompositionState { // The buffer cache for this layer. This is used to lower the // cost of sending reused buffers to the HWC. HwcBufferCache hwcBufferCache; + + // Set to true when overridden info has been sent to HW composer + bool stateOverridden = false; + + // True when this layer was skipped as part of SF-side layer caching. + bool layerSkipped = false; }; // The HWC state is optional, and is only set up if there is any potential @@ -110,7 +145,7 @@ struct OutputLayerCompositionState { void dump(std::string& result) const; // Timestamp for when the layer is queued for client composition - nsecs_t clientCompositionTimestamp; + nsecs_t clientCompositionTimestamp{0}; }; } // namespace compositionengine::impl |