Loading libs/gui/LayerState.cpp +26 −1 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ #include <android/gui/ISurfaceComposerClient.h> #include <android/native_window.h> #include <binder/Parcel.h> #include <com_android_graphics_libgui_flags.h> #include <gui/FrameRateUtils.h> #include <gui/IGraphicBufferProducer.h> #include <gui/LayerState.h> Loading Loading @@ -91,7 +92,9 @@ layer_state_t::layer_state_t() trustedOverlay(gui::TrustedOverlay::UNSET), bufferCrop(Rect::INVALID_RECT), destinationFrame(Rect::INVALID_RECT), dropInputMode(gui::DropInputMode::NONE) { dropInputMode(gui::DropInputMode::NONE), pictureProfileHandle(PictureProfileHandle::NONE), appContentPriority(0) { matrix.dsdx = matrix.dtdy = 1.0f; matrix.dsdy = matrix.dtdx = 0.0f; hdrMetadata.validTypes = 0; Loading Loading @@ -202,6 +205,10 @@ status_t layer_state_t::write(Parcel& output) const if (hasBufferReleaseChannel) { SAFE_PARCEL(output.writeParcelable, *bufferReleaseChannel); } #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS_APPLY_PICTURE_PROFILES SAFE_PARCEL(output.writeInt64, pictureProfileHandle.getId()); SAFE_PARCEL(output.writeInt32, appContentPriority); #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS_APPLY_PICTURE_PROFILES const bool hasLuts = (luts != nullptr); SAFE_PARCEL(output.writeBool, hasLuts); Loading Loading @@ -363,6 +370,12 @@ status_t layer_state_t::read(const Parcel& input) bufferReleaseChannel = std::make_shared<gui::BufferReleaseChannel::ProducerEndpoint>(); SAFE_PARCEL(input.readParcelable, bufferReleaseChannel.get()); } #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS_APPLY_PICTURE_PROFILES int64_t pictureProfileId; SAFE_PARCEL(input.readInt64, &pictureProfileId); pictureProfileHandle = PictureProfileHandle(pictureProfileId); SAFE_PARCEL(input.readInt32, &appContentPriority); #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS_APPLY_PICTURE_PROFILES bool hasLuts; SAFE_PARCEL(input.readBool, &hasLuts); Loading Loading @@ -760,6 +773,16 @@ void layer_state_t::merge(const layer_state_t& other) { what |= eBufferReleaseChannelChanged; bufferReleaseChannel = other.bufferReleaseChannel; } if (com_android_graphics_libgui_flags_apply_picture_profiles()) { if (other.what & ePictureProfileHandleChanged) { what |= ePictureProfileHandleChanged; pictureProfileHandle = other.pictureProfileHandle; } if (other.what & eAppContentPriorityChanged) { what |= eAppContentPriorityChanged; appContentPriority = other.appContentPriority; } } if ((other.what & what) != other.what) { ALOGE("Unmerged SurfaceComposer Transaction properties. LayerState::merge needs updating? " "other.what=0x%" PRIX64 " what=0x%" PRIX64 " unmerged flags=0x%" PRIX64, Loading Loading @@ -841,6 +864,8 @@ uint64_t layer_state_t::diff(const layer_state_t& other) const { CHECK_DIFF(diff, eDimmingEnabledChanged, other, dimmingEnabled); if (other.what & eBufferReleaseChannelChanged) diff |= eBufferReleaseChannelChanged; if (other.what & eLutsChanged) diff |= eLutsChanged; CHECK_DIFF(diff, ePictureProfileHandleChanged, other, pictureProfileHandle); CHECK_DIFF(diff, eAppContentPriorityChanged, other, appContentPriority); return diff; } Loading libs/gui/SurfaceComposerClient.cpp +35 −2 Original line number Diff line number Diff line Loading @@ -20,8 +20,6 @@ #include <stdint.h> #include <sys/types.h> #include <com_android_graphics_libgui_flags.h> #include <android/gui/BnWindowInfosReportedListener.h> #include <android/gui/DisplayState.h> #include <android/gui/EdgeExtensionParameters.h> Loading @@ -29,6 +27,7 @@ #include <android/gui/IWindowInfosListener.h> #include <android/gui/TrustedPresentationThresholds.h> #include <android/os/IInputConstants.h> #include <com_android_graphics_libgui_flags.h> #include <gui/DisplayLuts.h> #include <gui/FrameRateUtils.h> #include <gui/TraceUtils.h> Loading Loading @@ -2451,6 +2450,40 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setBuffe return *this; } SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setPictureProfileHandle( const sp<SurfaceControl>& sc, const PictureProfileHandle& pictureProfileHandle) { if (com_android_graphics_libgui_flags_apply_picture_profiles()) { layer_state_t* s = getLayerState(sc); if (!s) { mStatus = BAD_INDEX; return *this; } s->what |= layer_state_t::ePictureProfileHandleChanged; s->pictureProfileHandle = pictureProfileHandle; registerSurfaceControlForCallback(sc); } return *this; } SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setContentPriority( const sp<SurfaceControl>& sc, int32_t priority) { if (com_android_graphics_libgui_flags_apply_picture_profiles()) { layer_state_t* s = getLayerState(sc); if (!s) { mStatus = BAD_INDEX; return *this; } s->what |= layer_state_t::eAppContentPriorityChanged; s->appContentPriority = priority; registerSurfaceControlForCallback(sc); } return *this; } // --------------------------------------------------------------------------- DisplayState& SurfaceComposerClient::Transaction::getDisplayState(const sp<IBinder>& token) { Loading libs/gui/include/gui/LayerState.h +14 −1 Original line number Diff line number Diff line Loading @@ -47,6 +47,7 @@ #include <ui/BlurRegion.h> #include <ui/GraphicTypes.h> #include <ui/LayerStack.h> #include <ui/PictureProfileHandle.h> #include <ui/Rect.h> #include <ui/Region.h> #include <ui/Rotation.h> Loading Loading @@ -224,6 +225,8 @@ struct layer_state_t { eExtendedRangeBrightnessChanged = 0x10000'00000000, eEdgeExtensionChanged = 0x20000'00000000, eBufferReleaseChannelChanged = 0x40000'00000000, ePictureProfileHandleChanged = 0x80000'00000000, eAppContentPriorityChanged = 0x100000'00000000, }; layer_state_t(); Loading Loading @@ -267,7 +270,8 @@ struct layer_state_t { layer_state_t::eColorSpaceAgnosticChanged | layer_state_t::eColorTransformChanged | layer_state_t::eCornerRadiusChanged | layer_state_t::eDimmingEnabledChanged | layer_state_t::eHdrMetadataChanged | layer_state_t::eShadowRadiusChanged | layer_state_t::eStretchChanged; layer_state_t::eStretchChanged | layer_state_t::ePictureProfileHandleChanged | layer_state_t::eAppContentPriorityChanged; // Changes which invalidates the layer's visible region in CE. static constexpr uint64_t CONTENT_DIRTY = layer_state_t::CONTENT_CHANGES | Loading Loading @@ -412,6 +416,15 @@ struct layer_state_t { float currentHdrSdrRatio = 1.f; float desiredHdrSdrRatio = 1.f; // Enhance the quality of the buffer contents by configurating a picture processing pipeline // with values as specified by this picture profile. PictureProfileHandle pictureProfileHandle{PictureProfileHandle::NONE}; // A value indicating the significance of the layer's content to the app's desired user // experience. A lower priority will result in more likelihood of getting access to limited // resources, such as picture processing hardware. int32_t appContentPriority = 0; gui::CachingHint cachingHint = gui::CachingHint::Enabled; TrustedPresentationThresholds trustedPresentationThresholds; Loading libs/gui/include/gui/SurfaceComposerClient.h +15 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,7 @@ #include <ui/EdgeExtensionEffect.h> #include <ui/FrameStats.h> #include <ui/GraphicTypes.h> #include <ui/PictureProfileHandle.h> #include <ui/PixelFormat.h> #include <ui/Rotation.h> #include <ui/StaticDisplayInfo.h> Loading Loading @@ -776,6 +777,20 @@ public: const sp<SurfaceControl>& sc, const std::shared_ptr<gui::BufferReleaseChannel::ProducerEndpoint>& channel); /** * Configures a surface control to use picture processing hardware, configured as specified * by the picture profile, to enhance the quality of all subsequent buffer contents. */ Transaction& setPictureProfileHandle(const sp<SurfaceControl>& sc, const PictureProfileHandle& pictureProfileHandle); /** * Configures the relative importance of the contents of the layer with respect to the app's * user experience. A lower priority value will give the layer preferred access to limited * resources, such as picture processing, over a layer with a higher priority value. */ Transaction& setContentPriority(const sp<SurfaceControl>& sc, int32_t contentPriority); status_t setDisplaySurface(const sp<IBinder>& token, const sp<IGraphicBufferProducer>& bufferProducer); Loading libs/ui/include/ui/PictureProfileHandle.h +1 −1 Original line number Diff line number Diff line Loading @@ -39,7 +39,7 @@ public: static const PictureProfileHandle NONE; PictureProfileHandle() { *this = NONE; } PictureProfileHandle(PictureProfileId id) : mId(id) {} explicit PictureProfileHandle(PictureProfileId id) : mId(id) {} PictureProfileId const& getId() const { return mId; } Loading Loading
libs/gui/LayerState.cpp +26 −1 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ #include <android/gui/ISurfaceComposerClient.h> #include <android/native_window.h> #include <binder/Parcel.h> #include <com_android_graphics_libgui_flags.h> #include <gui/FrameRateUtils.h> #include <gui/IGraphicBufferProducer.h> #include <gui/LayerState.h> Loading Loading @@ -91,7 +92,9 @@ layer_state_t::layer_state_t() trustedOverlay(gui::TrustedOverlay::UNSET), bufferCrop(Rect::INVALID_RECT), destinationFrame(Rect::INVALID_RECT), dropInputMode(gui::DropInputMode::NONE) { dropInputMode(gui::DropInputMode::NONE), pictureProfileHandle(PictureProfileHandle::NONE), appContentPriority(0) { matrix.dsdx = matrix.dtdy = 1.0f; matrix.dsdy = matrix.dtdx = 0.0f; hdrMetadata.validTypes = 0; Loading Loading @@ -202,6 +205,10 @@ status_t layer_state_t::write(Parcel& output) const if (hasBufferReleaseChannel) { SAFE_PARCEL(output.writeParcelable, *bufferReleaseChannel); } #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS_APPLY_PICTURE_PROFILES SAFE_PARCEL(output.writeInt64, pictureProfileHandle.getId()); SAFE_PARCEL(output.writeInt32, appContentPriority); #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS_APPLY_PICTURE_PROFILES const bool hasLuts = (luts != nullptr); SAFE_PARCEL(output.writeBool, hasLuts); Loading Loading @@ -363,6 +370,12 @@ status_t layer_state_t::read(const Parcel& input) bufferReleaseChannel = std::make_shared<gui::BufferReleaseChannel::ProducerEndpoint>(); SAFE_PARCEL(input.readParcelable, bufferReleaseChannel.get()); } #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS_APPLY_PICTURE_PROFILES int64_t pictureProfileId; SAFE_PARCEL(input.readInt64, &pictureProfileId); pictureProfileHandle = PictureProfileHandle(pictureProfileId); SAFE_PARCEL(input.readInt32, &appContentPriority); #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS_APPLY_PICTURE_PROFILES bool hasLuts; SAFE_PARCEL(input.readBool, &hasLuts); Loading Loading @@ -760,6 +773,16 @@ void layer_state_t::merge(const layer_state_t& other) { what |= eBufferReleaseChannelChanged; bufferReleaseChannel = other.bufferReleaseChannel; } if (com_android_graphics_libgui_flags_apply_picture_profiles()) { if (other.what & ePictureProfileHandleChanged) { what |= ePictureProfileHandleChanged; pictureProfileHandle = other.pictureProfileHandle; } if (other.what & eAppContentPriorityChanged) { what |= eAppContentPriorityChanged; appContentPriority = other.appContentPriority; } } if ((other.what & what) != other.what) { ALOGE("Unmerged SurfaceComposer Transaction properties. LayerState::merge needs updating? " "other.what=0x%" PRIX64 " what=0x%" PRIX64 " unmerged flags=0x%" PRIX64, Loading Loading @@ -841,6 +864,8 @@ uint64_t layer_state_t::diff(const layer_state_t& other) const { CHECK_DIFF(diff, eDimmingEnabledChanged, other, dimmingEnabled); if (other.what & eBufferReleaseChannelChanged) diff |= eBufferReleaseChannelChanged; if (other.what & eLutsChanged) diff |= eLutsChanged; CHECK_DIFF(diff, ePictureProfileHandleChanged, other, pictureProfileHandle); CHECK_DIFF(diff, eAppContentPriorityChanged, other, appContentPriority); return diff; } Loading
libs/gui/SurfaceComposerClient.cpp +35 −2 Original line number Diff line number Diff line Loading @@ -20,8 +20,6 @@ #include <stdint.h> #include <sys/types.h> #include <com_android_graphics_libgui_flags.h> #include <android/gui/BnWindowInfosReportedListener.h> #include <android/gui/DisplayState.h> #include <android/gui/EdgeExtensionParameters.h> Loading @@ -29,6 +27,7 @@ #include <android/gui/IWindowInfosListener.h> #include <android/gui/TrustedPresentationThresholds.h> #include <android/os/IInputConstants.h> #include <com_android_graphics_libgui_flags.h> #include <gui/DisplayLuts.h> #include <gui/FrameRateUtils.h> #include <gui/TraceUtils.h> Loading Loading @@ -2451,6 +2450,40 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setBuffe return *this; } SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setPictureProfileHandle( const sp<SurfaceControl>& sc, const PictureProfileHandle& pictureProfileHandle) { if (com_android_graphics_libgui_flags_apply_picture_profiles()) { layer_state_t* s = getLayerState(sc); if (!s) { mStatus = BAD_INDEX; return *this; } s->what |= layer_state_t::ePictureProfileHandleChanged; s->pictureProfileHandle = pictureProfileHandle; registerSurfaceControlForCallback(sc); } return *this; } SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setContentPriority( const sp<SurfaceControl>& sc, int32_t priority) { if (com_android_graphics_libgui_flags_apply_picture_profiles()) { layer_state_t* s = getLayerState(sc); if (!s) { mStatus = BAD_INDEX; return *this; } s->what |= layer_state_t::eAppContentPriorityChanged; s->appContentPriority = priority; registerSurfaceControlForCallback(sc); } return *this; } // --------------------------------------------------------------------------- DisplayState& SurfaceComposerClient::Transaction::getDisplayState(const sp<IBinder>& token) { Loading
libs/gui/include/gui/LayerState.h +14 −1 Original line number Diff line number Diff line Loading @@ -47,6 +47,7 @@ #include <ui/BlurRegion.h> #include <ui/GraphicTypes.h> #include <ui/LayerStack.h> #include <ui/PictureProfileHandle.h> #include <ui/Rect.h> #include <ui/Region.h> #include <ui/Rotation.h> Loading Loading @@ -224,6 +225,8 @@ struct layer_state_t { eExtendedRangeBrightnessChanged = 0x10000'00000000, eEdgeExtensionChanged = 0x20000'00000000, eBufferReleaseChannelChanged = 0x40000'00000000, ePictureProfileHandleChanged = 0x80000'00000000, eAppContentPriorityChanged = 0x100000'00000000, }; layer_state_t(); Loading Loading @@ -267,7 +270,8 @@ struct layer_state_t { layer_state_t::eColorSpaceAgnosticChanged | layer_state_t::eColorTransformChanged | layer_state_t::eCornerRadiusChanged | layer_state_t::eDimmingEnabledChanged | layer_state_t::eHdrMetadataChanged | layer_state_t::eShadowRadiusChanged | layer_state_t::eStretchChanged; layer_state_t::eStretchChanged | layer_state_t::ePictureProfileHandleChanged | layer_state_t::eAppContentPriorityChanged; // Changes which invalidates the layer's visible region in CE. static constexpr uint64_t CONTENT_DIRTY = layer_state_t::CONTENT_CHANGES | Loading Loading @@ -412,6 +416,15 @@ struct layer_state_t { float currentHdrSdrRatio = 1.f; float desiredHdrSdrRatio = 1.f; // Enhance the quality of the buffer contents by configurating a picture processing pipeline // with values as specified by this picture profile. PictureProfileHandle pictureProfileHandle{PictureProfileHandle::NONE}; // A value indicating the significance of the layer's content to the app's desired user // experience. A lower priority will result in more likelihood of getting access to limited // resources, such as picture processing hardware. int32_t appContentPriority = 0; gui::CachingHint cachingHint = gui::CachingHint::Enabled; TrustedPresentationThresholds trustedPresentationThresholds; Loading
libs/gui/include/gui/SurfaceComposerClient.h +15 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,7 @@ #include <ui/EdgeExtensionEffect.h> #include <ui/FrameStats.h> #include <ui/GraphicTypes.h> #include <ui/PictureProfileHandle.h> #include <ui/PixelFormat.h> #include <ui/Rotation.h> #include <ui/StaticDisplayInfo.h> Loading Loading @@ -776,6 +777,20 @@ public: const sp<SurfaceControl>& sc, const std::shared_ptr<gui::BufferReleaseChannel::ProducerEndpoint>& channel); /** * Configures a surface control to use picture processing hardware, configured as specified * by the picture profile, to enhance the quality of all subsequent buffer contents. */ Transaction& setPictureProfileHandle(const sp<SurfaceControl>& sc, const PictureProfileHandle& pictureProfileHandle); /** * Configures the relative importance of the contents of the layer with respect to the app's * user experience. A lower priority value will give the layer preferred access to limited * resources, such as picture processing, over a layer with a higher priority value. */ Transaction& setContentPriority(const sp<SurfaceControl>& sc, int32_t contentPriority); status_t setDisplaySurface(const sp<IBinder>& token, const sp<IGraphicBufferProducer>& bufferProducer); Loading
libs/ui/include/ui/PictureProfileHandle.h +1 −1 Original line number Diff line number Diff line Loading @@ -39,7 +39,7 @@ public: static const PictureProfileHandle NONE; PictureProfileHandle() { *this = NONE; } PictureProfileHandle(PictureProfileId id) : mId(id) {} explicit PictureProfileHandle(PictureProfileId id) : mId(id) {} PictureProfileId const& getId() const { return mId; } Loading