Loading libs/nativewindow/ANativeWindow.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -213,6 +213,7 @@ int ANativeWindow_query(const ANativeWindow* window, ANativeWindowQuery what, in case ANATIVEWINDOW_QUERY_DEFAULT_WIDTH: case ANATIVEWINDOW_QUERY_DEFAULT_HEIGHT: case ANATIVEWINDOW_QUERY_TRANSFORM_HINT: case ANATIVEWINDOW_QUERY_BUFFER_AGE: // these are part of the VNDK API break; case ANATIVEWINDOW_QUERY_MIN_SWAP_INTERVAL: Loading services/surfaceflinger/CompositionEngine/include/compositionengine/DisplayCreationArgs.h +9 −36 Original line number Diff line number Diff line Loading @@ -21,13 +21,10 @@ #include <string> #include <ui/DisplayId.h> #include <ui/PixelFormat.h> #include <ui/Size.h> #include <ui/StaticDisplayInfo.h> #include "DisplayHardware/DisplayIdentification.h" #include "DisplayHardware/PowerAdvisor.h" #include "DisplayIdGenerator.h" namespace android::compositionengine { Loading @@ -37,24 +34,14 @@ class CompositionEngine; * A parameter object for creating Display instances */ struct DisplayCreationArgs { struct Physical { DisplayId id; ui::DisplayConnectionType type; }; // Required for physical displays. Gives the HWC display id for the existing // display along with the connection type. std::optional<Physical> physical; // Unset for virtual displays std::optional<ui::DisplayConnectionType> connectionType; // Size of the display in pixels ui::Size pixels = ui::Size::INVALID; // Pixel format of the display ui::PixelFormat pixelFormat = static_cast<ui::PixelFormat>(PIXEL_FORMAT_UNKNOWN); // True if virtual displays should be created with the HWC API if possible bool useHwcVirtualDisplays = false; // True if this display should be considered secure bool isSecure = false; Loading @@ -67,9 +54,6 @@ struct DisplayCreationArgs { // Debugging. Human readable name for the display. std::string name; // Generator for IDs of virtual displays, which are backed by the GPU. DisplayIdGenerator<GpuVirtualDisplayId>* gpuVirtualDisplayIdGenerator; }; /** Loading @@ -80,29 +64,18 @@ class DisplayCreationArgsBuilder { public: DisplayCreationArgs build() { return std::move(mArgs); } DisplayCreationArgsBuilder& setPhysical(DisplayCreationArgs::Physical physical) { mArgs.physical = physical; return *this; } DisplayCreationArgsBuilder& setPixels(ui::Size pixels) { mArgs.pixels = pixels; DisplayCreationArgsBuilder& setId(DisplayId id) { mArgs.id = id; return *this; } DisplayCreationArgsBuilder& setPixelFormat(ui::PixelFormat pixelFormat) { mArgs.pixelFormat = pixelFormat; DisplayCreationArgsBuilder& setConnectionType(ui::DisplayConnectionType connectionType) { mArgs.connectionType = connectionType; return *this; } DisplayCreationArgsBuilder& setUseHwcVirtualDisplays(bool useHwcVirtualDisplays) { mArgs.useHwcVirtualDisplays = useHwcVirtualDisplays; return *this; } DisplayCreationArgsBuilder& setGpuVirtualDisplayIdGenerator( DisplayIdGenerator<GpuVirtualDisplayId>& generator) { mArgs.gpuVirtualDisplayIdGenerator = &generator; DisplayCreationArgsBuilder& setPixels(ui::Size pixels) { mArgs.pixels = pixels; return *this; } Loading services/surfaceflinger/CompositionEngine/include/compositionengine/LayerFE.h +27 −2 Original line number Diff line number Diff line Loading @@ -78,6 +78,30 @@ public: virtual void prepareCompositionState(StateSubset) = 0; struct ClientCompositionTargetSettings { enum class BlurSetting { Disabled, BackgroundBlurOnly, BlurRegionsOnly, Enabled, }; friend std::string toString(BlurSetting blurSetting) { switch (blurSetting) { case BlurSetting::Enabled: return "Enabled"; case BlurSetting::BlurRegionsOnly: return "BlurRegionsOnly"; case BlurSetting::BackgroundBlurOnly: return "BackgroundBlurOnly"; case BlurSetting::Disabled: return "Disabled"; } } friend std::ostream& operator<<(std::ostream& os, const BlurSetting& setting) { return os << toString(setting); } // The clip region, or visible region that is being rendered to const Region& clip; Loading Loading @@ -110,8 +134,8 @@ public: // This may be requested by the HWC const bool clearContent; // If set to true, change the layer settings to not use any blurs. const bool disableBlurs; // Configure layer settings for using blurs BlurSetting blurSetting; }; // A superset of LayerSettings required by RenderEngine to compose a layer Loading Loading @@ -186,6 +210,7 @@ static inline void PrintTo(const LayerFE::ClientCompositionTargetSettings& setti PrintTo(settings.dataspace, os); *os << "\n .realContentIsVisible = " << settings.realContentIsVisible; *os << "\n .clearContent = " << settings.clearContent; *os << "\n .blurSetting = " << settings.blurSetting; *os << "\n}"; } Loading services/surfaceflinger/CompositionEngine/include/compositionengine/RenderSurfaceCreationArgs.h +14 −25 Original line number Diff line number Diff line Loading @@ -24,21 +24,17 @@ struct ANativeWindow; namespace android { namespace compositionengine { class Display; namespace android::compositionengine { /** * A parameter object for creating RenderSurface instances */ struct RenderSurfaceCreationArgs { // The initial width of the surface int32_t displayWidth; int32_t displayWidth = -1; // The initial height of the surface int32_t displayHeight; int32_t displayHeight = -1; // The ANativeWindow for the buffer queue for this surface sp<ANativeWindow> nativeWindow; Loading @@ -46,22 +42,16 @@ struct RenderSurfaceCreationArgs { // The DisplaySurface for this surface sp<DisplaySurface> displaySurface; size_t maxTextureCacheSize; // The maximum size of the renderengine::ExternalTexture cache size_t maxTextureCacheSize = 0; private: friend class RenderSurfaceCreationArgsBuilder; // Not defaulted to disable aggregate initialization. RenderSurfaceCreationArgs() {} }; /** * A helper for setting up a RenderSurfaceCreationArgs value in-line. * Prefer this builder over raw structure initialization. * * Instead of: * * RenderSurfaceCreationArgs{1000, 1000, nativeWindow, displaySurface} * * Prefer: * * RenderSurfaceCreationArgsBuilder().setDisplayWidth(1000).setDisplayHeight(1000) * .setNativeWindow(nativeWindow).setDisplaySurface(displaySurface).Build(); */ class RenderSurfaceCreationArgsBuilder { public: RenderSurfaceCreationArgs build() { return std::move(mArgs); } Loading @@ -75,11 +65,11 @@ public: return *this; } RenderSurfaceCreationArgsBuilder& setNativeWindow(sp<ANativeWindow> nativeWindow) { mArgs.nativeWindow = nativeWindow; mArgs.nativeWindow = std::move(nativeWindow); return *this; } RenderSurfaceCreationArgsBuilder& setDisplaySurface(sp<DisplaySurface> displaySurface) { mArgs.displaySurface = displaySurface; mArgs.displaySurface = std::move(displaySurface); return *this; } Loading @@ -92,5 +82,4 @@ private: RenderSurfaceCreationArgs mArgs; }; } // namespace compositionengine } // namespace android } // namespace android::compositionengine services/surfaceflinger/CompositionEngine/include/compositionengine/impl/Display.h +0 −6 Original line number Diff line number Diff line Loading @@ -80,19 +80,13 @@ public: // Internal virtual void setConfiguration(const compositionengine::DisplayCreationArgs&); virtual std::optional<DisplayId> maybeAllocateDisplayIdForVirtualDisplay(ui::Size, ui::PixelFormat) const; std::unique_ptr<compositionengine::OutputLayer> createOutputLayer(const sp<LayerFE>&) const; // Testing void setDisplayIdForTesting(DisplayId displayId); private: bool mIsVirtual = false; bool mIsDisconnected = false; DisplayId mId; Hwc2::PowerAdvisor* mPowerAdvisor = nullptr; DisplayIdGenerator<GpuVirtualDisplayId>* mGpuVirtualDisplayIdGenerator; }; // This template factory function standardizes the implementation details of the Loading Loading
libs/nativewindow/ANativeWindow.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -213,6 +213,7 @@ int ANativeWindow_query(const ANativeWindow* window, ANativeWindowQuery what, in case ANATIVEWINDOW_QUERY_DEFAULT_WIDTH: case ANATIVEWINDOW_QUERY_DEFAULT_HEIGHT: case ANATIVEWINDOW_QUERY_TRANSFORM_HINT: case ANATIVEWINDOW_QUERY_BUFFER_AGE: // these are part of the VNDK API break; case ANATIVEWINDOW_QUERY_MIN_SWAP_INTERVAL: Loading
services/surfaceflinger/CompositionEngine/include/compositionengine/DisplayCreationArgs.h +9 −36 Original line number Diff line number Diff line Loading @@ -21,13 +21,10 @@ #include <string> #include <ui/DisplayId.h> #include <ui/PixelFormat.h> #include <ui/Size.h> #include <ui/StaticDisplayInfo.h> #include "DisplayHardware/DisplayIdentification.h" #include "DisplayHardware/PowerAdvisor.h" #include "DisplayIdGenerator.h" namespace android::compositionengine { Loading @@ -37,24 +34,14 @@ class CompositionEngine; * A parameter object for creating Display instances */ struct DisplayCreationArgs { struct Physical { DisplayId id; ui::DisplayConnectionType type; }; // Required for physical displays. Gives the HWC display id for the existing // display along with the connection type. std::optional<Physical> physical; // Unset for virtual displays std::optional<ui::DisplayConnectionType> connectionType; // Size of the display in pixels ui::Size pixels = ui::Size::INVALID; // Pixel format of the display ui::PixelFormat pixelFormat = static_cast<ui::PixelFormat>(PIXEL_FORMAT_UNKNOWN); // True if virtual displays should be created with the HWC API if possible bool useHwcVirtualDisplays = false; // True if this display should be considered secure bool isSecure = false; Loading @@ -67,9 +54,6 @@ struct DisplayCreationArgs { // Debugging. Human readable name for the display. std::string name; // Generator for IDs of virtual displays, which are backed by the GPU. DisplayIdGenerator<GpuVirtualDisplayId>* gpuVirtualDisplayIdGenerator; }; /** Loading @@ -80,29 +64,18 @@ class DisplayCreationArgsBuilder { public: DisplayCreationArgs build() { return std::move(mArgs); } DisplayCreationArgsBuilder& setPhysical(DisplayCreationArgs::Physical physical) { mArgs.physical = physical; return *this; } DisplayCreationArgsBuilder& setPixels(ui::Size pixels) { mArgs.pixels = pixels; DisplayCreationArgsBuilder& setId(DisplayId id) { mArgs.id = id; return *this; } DisplayCreationArgsBuilder& setPixelFormat(ui::PixelFormat pixelFormat) { mArgs.pixelFormat = pixelFormat; DisplayCreationArgsBuilder& setConnectionType(ui::DisplayConnectionType connectionType) { mArgs.connectionType = connectionType; return *this; } DisplayCreationArgsBuilder& setUseHwcVirtualDisplays(bool useHwcVirtualDisplays) { mArgs.useHwcVirtualDisplays = useHwcVirtualDisplays; return *this; } DisplayCreationArgsBuilder& setGpuVirtualDisplayIdGenerator( DisplayIdGenerator<GpuVirtualDisplayId>& generator) { mArgs.gpuVirtualDisplayIdGenerator = &generator; DisplayCreationArgsBuilder& setPixels(ui::Size pixels) { mArgs.pixels = pixels; return *this; } Loading
services/surfaceflinger/CompositionEngine/include/compositionengine/LayerFE.h +27 −2 Original line number Diff line number Diff line Loading @@ -78,6 +78,30 @@ public: virtual void prepareCompositionState(StateSubset) = 0; struct ClientCompositionTargetSettings { enum class BlurSetting { Disabled, BackgroundBlurOnly, BlurRegionsOnly, Enabled, }; friend std::string toString(BlurSetting blurSetting) { switch (blurSetting) { case BlurSetting::Enabled: return "Enabled"; case BlurSetting::BlurRegionsOnly: return "BlurRegionsOnly"; case BlurSetting::BackgroundBlurOnly: return "BackgroundBlurOnly"; case BlurSetting::Disabled: return "Disabled"; } } friend std::ostream& operator<<(std::ostream& os, const BlurSetting& setting) { return os << toString(setting); } // The clip region, or visible region that is being rendered to const Region& clip; Loading Loading @@ -110,8 +134,8 @@ public: // This may be requested by the HWC const bool clearContent; // If set to true, change the layer settings to not use any blurs. const bool disableBlurs; // Configure layer settings for using blurs BlurSetting blurSetting; }; // A superset of LayerSettings required by RenderEngine to compose a layer Loading Loading @@ -186,6 +210,7 @@ static inline void PrintTo(const LayerFE::ClientCompositionTargetSettings& setti PrintTo(settings.dataspace, os); *os << "\n .realContentIsVisible = " << settings.realContentIsVisible; *os << "\n .clearContent = " << settings.clearContent; *os << "\n .blurSetting = " << settings.blurSetting; *os << "\n}"; } Loading
services/surfaceflinger/CompositionEngine/include/compositionengine/RenderSurfaceCreationArgs.h +14 −25 Original line number Diff line number Diff line Loading @@ -24,21 +24,17 @@ struct ANativeWindow; namespace android { namespace compositionengine { class Display; namespace android::compositionengine { /** * A parameter object for creating RenderSurface instances */ struct RenderSurfaceCreationArgs { // The initial width of the surface int32_t displayWidth; int32_t displayWidth = -1; // The initial height of the surface int32_t displayHeight; int32_t displayHeight = -1; // The ANativeWindow for the buffer queue for this surface sp<ANativeWindow> nativeWindow; Loading @@ -46,22 +42,16 @@ struct RenderSurfaceCreationArgs { // The DisplaySurface for this surface sp<DisplaySurface> displaySurface; size_t maxTextureCacheSize; // The maximum size of the renderengine::ExternalTexture cache size_t maxTextureCacheSize = 0; private: friend class RenderSurfaceCreationArgsBuilder; // Not defaulted to disable aggregate initialization. RenderSurfaceCreationArgs() {} }; /** * A helper for setting up a RenderSurfaceCreationArgs value in-line. * Prefer this builder over raw structure initialization. * * Instead of: * * RenderSurfaceCreationArgs{1000, 1000, nativeWindow, displaySurface} * * Prefer: * * RenderSurfaceCreationArgsBuilder().setDisplayWidth(1000).setDisplayHeight(1000) * .setNativeWindow(nativeWindow).setDisplaySurface(displaySurface).Build(); */ class RenderSurfaceCreationArgsBuilder { public: RenderSurfaceCreationArgs build() { return std::move(mArgs); } Loading @@ -75,11 +65,11 @@ public: return *this; } RenderSurfaceCreationArgsBuilder& setNativeWindow(sp<ANativeWindow> nativeWindow) { mArgs.nativeWindow = nativeWindow; mArgs.nativeWindow = std::move(nativeWindow); return *this; } RenderSurfaceCreationArgsBuilder& setDisplaySurface(sp<DisplaySurface> displaySurface) { mArgs.displaySurface = displaySurface; mArgs.displaySurface = std::move(displaySurface); return *this; } Loading @@ -92,5 +82,4 @@ private: RenderSurfaceCreationArgs mArgs; }; } // namespace compositionengine } // namespace android } // namespace android::compositionengine
services/surfaceflinger/CompositionEngine/include/compositionengine/impl/Display.h +0 −6 Original line number Diff line number Diff line Loading @@ -80,19 +80,13 @@ public: // Internal virtual void setConfiguration(const compositionengine::DisplayCreationArgs&); virtual std::optional<DisplayId> maybeAllocateDisplayIdForVirtualDisplay(ui::Size, ui::PixelFormat) const; std::unique_ptr<compositionengine::OutputLayer> createOutputLayer(const sp<LayerFE>&) const; // Testing void setDisplayIdForTesting(DisplayId displayId); private: bool mIsVirtual = false; bool mIsDisconnected = false; DisplayId mId; Hwc2::PowerAdvisor* mPowerAdvisor = nullptr; DisplayIdGenerator<GpuVirtualDisplayId>* mGpuVirtualDisplayIdGenerator; }; // This template factory function standardizes the implementation details of the Loading