Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Move BitmapImage format conversion to a new class name ImageAdapter #22535

Conversation

shallawa
Copy link
Contributor

@shallawa shallawa commented Jan 9, 2024

ab92c87

Move BitmapImage format conversion to a new class name ImageAdapter
https://bugs.webkit.org/show_bug.cgi?id=267254
rdar://120690546

Reviewed by Cameron McCormack.

The classes Image and BitmapImage are overloaded with many platform functions. The
platform-specific format conversion is not tied to BitmapImage or Image. It relies
mostly on the NativeImage. So move the format conversion to a new class named
ImageAdapter. Move also BitmapImage::nativeImageOfSize() and framesNativeImages()
to this new class since they are only used for image format conversion.

* Source/WebCore/Headers.cmake:
* Source/WebCore/PlatformWin.cmake:
* Source/WebCore/Sources.txt:
* Source/WebCore/SourcesCocoa.txt:
* Source/WebCore/SourcesGTK.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/dom/DataTransferMac.mm:
(WebCore::DataTransfer::createDragImage const):
* Source/WebCore/editing/cocoa/HTMLConverter.mm:
(fileWrapperForElement):
* Source/WebCore/loader/cache/CachedImage.cpp:
(WebCore::CachedImage::brokenImage const):
* Source/WebCore/platform/ScrollView.cpp:
(WebCore::ScrollView::paintPanScrollIcon):
* Source/WebCore/platform/audio/cocoa/MediaSessionManagerCocoa.mm:
(WebCore::MediaSessionManagerCocoa::setNowPlayingInfo):
* Source/WebCore/platform/cocoa/DragImageCocoa.mm:
(WebCore::createDragImageFromImage):
* Source/WebCore/platform/graphics/BitmapImage.cpp:
(WebCore::BitmapImage::~BitmapImage):
(WebCore::BitmapImage::destroyDecodedData):
(WebCore::BitmapImage::nativeImageAtIndexCacheIfNeeded):
(WebCore::BitmapImage::nativeImage):
(WebCore::BitmapImage::nativeImageForCurrentFrame):
(WebCore::BitmapImage::draw):
(WebCore::BitmapImage::drawPattern):
(WebCore::BitmapImage::decode):
(WebCore::BitmapImage::dump const):
(WebCore::BitmapImage::frameImageAtIndexCacheIfNeeded): Deleted.
(WebCore::BitmapImage::nativeImageOfSize): Deleted.
(WebCore::BitmapImage::framesNativeImages): Deleted.
* Source/WebCore/platform/graphics/BitmapImage.h:
* Source/WebCore/platform/graphics/Image.cpp:
(WebCore::Image::adapter):
(WebCore::Image::invalidateAdapter):
(WebCore::Image::fillWithSolidColor):
(WebCore::Image::drawTiled):
(WebCore::operator<<):
(WebCore::BitmapImage::invalidatePlatformData): Deleted.
(WebCore::Image::loadPlatformResource): Deleted.
* Source/WebCore/platform/graphics/Image.h:
(WebCore::Image::frameCount const):
(WebCore::Image::nativeImageAtIndex):
(WebCore::Image::nativeImageAtIndexCacheIfNeeded):
(WebCore::Image::nativeImageOfSize): Deleted.
(WebCore::Image::nsImage): Deleted.
(WebCore::Image::snapshotNSImage): Deleted.
(WebCore::Image::tiffRepresentation): Deleted.
(WebCore::Image::getHBITMAP): Deleted.
(WebCore::Image::getHBITMAPOfSize): Deleted.
(WebCore::Image::gdkPixbuf): Deleted.
(WebCore::Image::gdkTexture): Deleted.
(WebCore::Image::drawFrameMatchingSourceSize): Deleted.
* Source/WebCore/platform/graphics/ImageAdapter.cpp: Renamed from Source/WebCore/platform/graphics/win/ImageWin.cpp.
(WebCore::ImageAdapter::loadPlatformResource):
(WebCore::ImageAdapter::invalidate):
(WebCore::ImageAdapter::nativeImageOfSize):
(WebCore::ImageAdapter::allNativeImages):
* Source/WebCore/platform/graphics/ImageAdapter.h: Added.
(WebCore::ImageAdapter::ImageAdapter):
(WebCore::ImageAdapter::image const):
* Source/WebCore/platform/graphics/gtk/ImageAdapterGtk.cpp: Renamed from Source/WebCore/platform/graphics/gtk/ImageGtk.cpp.
(WebCore::ImageAdapter::loadPlatformResource):
(WebCore::ImageAdapter::invalidate):
(WebCore::ImageAdapter::gdkPixbuf):
(WebCore::ImageAdapter::gdkTexture):
* Source/WebCore/platform/graphics/mac/ImageAdapterMac.mm: Renamed from Source/WebCore/platform/graphics/mac/ImageMac.mm.
(WebCore::ImageAdapter::loadPlatformResource):
(WebCore::ImageAdapter::tiffRepresentation):
(WebCore::ImageAdapter::invalidate):
(WebCore::ImageAdapter::nsImage):
(WebCore::ImageAdapter::snapshotNSImage):
* Source/WebCore/platform/graphics/win/ImageAdapterWin.cpp: Renamed from Source/WebCore/platform/graphics/win/ImageCairoWin.cpp.
(WebCore::ImageAdapter::loadPlatformResource):
(WebCore::ImageAdapter::nativeImageOfHBITMAP):
(WebCore::ImageAdapter::invalidate):
(WebCore::ImageAdapter::getHBITMAP):
(WebCore::ImageAdapter::getHBITMAPOfSize):
* Source/WebCore/platform/gtk/CursorGtk.cpp:
(WebCore::createCustomCursor):
* Source/WebCore/platform/mac/CursorMac.mm:
(WebCore::createCustomCursor):
* Source/WebCore/platform/mac/PasteboardMac.mm:
(WebCore::Pasteboard::write):
* Source/WebCore/platform/win/CursorWin.cpp:
(WebCore::createSharedCursor):
(WebCore::loadCursorByName):
* Source/WebCore/platform/win/PasteboardWin.cpp:
(WebCore::Pasteboard::writeImage):
* Source/WebCore/rendering/RenderLayerScrollableArea.cpp:
(WebCore::RenderLayerScrollableArea::drawPlatformResizerImage):
* Source/WebCore/rendering/RenderThemeMac.mm:
(WebCore::createAttachmentPlaceholderImage):
* Source/WebKit/UIProcess/API/gtk/DragSourceGtk3.cpp:
(WebKit::DragSource::DragSource):
* Source/WebKit/UIProcess/API/gtk/DragSourceGtk4.cpp:
(WebKit::DragSource::begin):
* Source/WebKit/UIProcess/gtk/ClipboardGtk3.cpp:
(WebKit::Clipboard::write):
* Source/WebKit/UIProcess/gtk/ClipboardGtk4.cpp:
(WebKit::Clipboard::write):
* Source/WebKit/UIProcess/mac/WebViewImpl.mm:
(WebKit::WebViewImpl::provideDataForPasteboard):
* Source/WebKitLegacy/mac/DOM/DOM.mm:
(-[DOMElement image]):
(-[DOMElement _imageTIFFRepresentation]):
* Source/WebKitLegacy/mac/Misc/WebElementDictionary.mm:
(-[WebElementDictionary _image]):
* Source/WebKitLegacy/mac/WebCoreSupport/WebContextMenuClient.mm:
(WebContextMenuClient::imageForCurrentSharingServicePickerItem):
(WebContextMenuClient::contextMenuForEvent):
* Source/WebKitLegacy/mac/WebCoreSupport/WebFrameLoaderClient.mm:
(webGetNSImage):
* Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:
(-[WebHTMLView pasteboard:provideDataForType:]):
* Tools/TestWebKitAPI/Tests/WebCore/win/BitmapImage.cpp:
(TestWebKitAPI::TEST):

Canonical link: https://commits.webkit.org/273772@main

ad338a9

Misc iOS, tvOS & watchOS macOS Linux Windows
βœ… πŸ§ͺ style βœ… πŸ›  ios βœ… πŸ›  mac βœ… πŸ›  wpe βœ… πŸ›  wincairo
βœ… πŸ§ͺ bindings βœ… πŸ›  ios-sim βœ… πŸ›  mac-AS-debug   πŸ§ͺ wpe-wk2
βœ… πŸ§ͺ webkitperl βœ… πŸ§ͺ ios-wk2 βœ… πŸ§ͺ api-mac βœ… πŸ§ͺ api-wpe
  πŸ§ͺ ios-wk2-wpt βœ… πŸ§ͺ mac-wk1 βœ… πŸ›  gtk
βœ… πŸ§ͺ api-ios βœ… πŸ§ͺ mac-wk2 βœ… πŸ§ͺ gtk-wk2
βœ… πŸ›  tv βœ… πŸ§ͺ mac-AS-debug-wk2 βœ… πŸ§ͺ api-gtk
βœ… πŸ›  tv-sim
βœ… πŸ›  πŸ§ͺ merge βœ… πŸ›  watch
βœ… πŸ›  watch-sim

@shallawa shallawa requested review from a team, cdumez and rniwa as code owners January 9, 2024 06:39
@shallawa shallawa self-assigned this Jan 9, 2024
@shallawa shallawa added the Images For bugs in image handling. label Jan 9, 2024
@webkit-ews-buildbot webkit-ews-buildbot added the merging-blocked Applied to prevent a change from being merged label Jan 9, 2024
@shallawa shallawa removed the merging-blocked Applied to prevent a change from being merged label Jan 9, 2024
@shallawa shallawa force-pushed the eng/Move-BitmapImage-format-conversion-to-a-new-class-name-ImageAdapter branch from 14f9381 to 329c2f9 Compare January 9, 2024 07:10
@shallawa shallawa force-pushed the eng/Move-BitmapImage-format-conversion-to-a-new-class-name-ImageAdapter branch from 329c2f9 to 3223206 Compare January 9, 2024 08:24
@webkit-ews-buildbot webkit-ews-buildbot added the merging-blocked Applied to prevent a change from being merged label Jan 9, 2024
@shallawa shallawa removed the merging-blocked Applied to prevent a change from being merged label Jan 9, 2024
@shallawa shallawa force-pushed the eng/Move-BitmapImage-format-conversion-to-a-new-class-name-ImageAdapter branch from 3223206 to 12499cf Compare January 9, 2024 13:50
@shallawa shallawa requested review from smfr and heycam and removed request for a team, rniwa and cdumez January 9, 2024 21:07
@shallawa shallawa force-pushed the eng/Move-BitmapImage-format-conversion-to-a-new-class-name-ImageAdapter branch from 12499cf to fc2130d Compare January 25, 2024 20:59
RefPtr<NativeImage> nativeImageOfSize(const IntSize&);
Vector<Ref<NativeImage>> allNativeImages();

Image& m_image;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What do you think about making this a WeakRef, for safety?

// Test that there is no crash when BitmapImage::getHBITMAPOfSize() is called
// for an image with empty frames (BitmapImage::frameAtIndex(i) return null), WebKit Bug 102689.

TEST(WebCore, BitmapImageEmptyFrameTest)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we preserve this test?

@shallawa shallawa force-pushed the eng/Move-BitmapImage-format-conversion-to-a-new-class-name-ImageAdapter branch from fc2130d to b2e2924 Compare January 29, 2024 19:15
@webkit-ews-buildbot webkit-ews-buildbot added the merging-blocked Applied to prevent a change from being merged label Jan 29, 2024
@shallawa shallawa removed the merging-blocked Applied to prevent a change from being merged label Jan 29, 2024
@shallawa shallawa force-pushed the eng/Move-BitmapImage-format-conversion-to-a-new-class-name-ImageAdapter branch from b2e2924 to 84ddfe9 Compare January 29, 2024 23:39
@shallawa shallawa force-pushed the eng/Move-BitmapImage-format-conversion-to-a-new-class-name-ImageAdapter branch from 84ddfe9 to 2537a05 Compare January 30, 2024 04:49
@webkit-ews-buildbot webkit-ews-buildbot added the merging-blocked Applied to prevent a change from being merged label Jan 30, 2024
@shallawa shallawa removed the merging-blocked Applied to prevent a change from being merged label Jan 30, 2024
@shallawa shallawa force-pushed the eng/Move-BitmapImage-format-conversion-to-a-new-class-name-ImageAdapter branch from 2537a05 to a10f772 Compare January 30, 2024 05:45
@webkit-early-warning-system
Copy link
Collaborator

Starting EWS tests for a10f772. Live statuses available at the PR page, #22535

@webkit-ews-buildbot webkit-ews-buildbot added the merging-blocked Applied to prevent a change from being merged label Jan 30, 2024
@shallawa shallawa removed the merging-blocked Applied to prevent a change from being merged label Jan 30, 2024
@shallawa shallawa force-pushed the eng/Move-BitmapImage-format-conversion-to-a-new-class-name-ImageAdapter branch from a10f772 to c565bc6 Compare January 30, 2024 06:41
@webkit-ews-buildbot webkit-ews-buildbot added the merging-blocked Applied to prevent a change from being merged label Jan 30, 2024
@shallawa shallawa removed the merging-blocked Applied to prevent a change from being merged label Jan 30, 2024
@shallawa shallawa force-pushed the eng/Move-BitmapImage-format-conversion-to-a-new-class-name-ImageAdapter branch from c565bc6 to ad8781a Compare January 30, 2024 11:46
@webkit-ews-buildbot webkit-ews-buildbot added the merging-blocked Applied to prevent a change from being merged label Jan 30, 2024
@shallawa shallawa removed the merging-blocked Applied to prevent a change from being merged label Jan 30, 2024
@shallawa shallawa force-pushed the eng/Move-BitmapImage-format-conversion-to-a-new-class-name-ImageAdapter branch from ad8781a to 44a1c83 Compare January 30, 2024 15:22
@shallawa shallawa force-pushed the eng/Move-BitmapImage-format-conversion-to-a-new-class-name-ImageAdapter branch from 44a1c83 to ad338a9 Compare January 30, 2024 17:12
@shallawa shallawa added the merge-queue Applied to send a pull request to merge-queue label Jan 30, 2024
https://bugs.webkit.org/show_bug.cgi?id=267254
rdar://120690546

Reviewed by Cameron McCormack.

The classes Image and BitmapImage are overloaded with many platform functions. The
platform-specific format conversion is not tied to BitmapImage or Image. It relies
mostly on the NativeImage. So move the format conversion to a new class named
ImageAdapter. Move also BitmapImage::nativeImageOfSize() and framesNativeImages()
to this new class since they are only used for image format conversion.

* Source/WebCore/Headers.cmake:
* Source/WebCore/PlatformWin.cmake:
* Source/WebCore/Sources.txt:
* Source/WebCore/SourcesCocoa.txt:
* Source/WebCore/SourcesGTK.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/dom/DataTransferMac.mm:
(WebCore::DataTransfer::createDragImage const):
* Source/WebCore/editing/cocoa/HTMLConverter.mm:
(fileWrapperForElement):
* Source/WebCore/loader/cache/CachedImage.cpp:
(WebCore::CachedImage::brokenImage const):
* Source/WebCore/platform/ScrollView.cpp:
(WebCore::ScrollView::paintPanScrollIcon):
* Source/WebCore/platform/audio/cocoa/MediaSessionManagerCocoa.mm:
(WebCore::MediaSessionManagerCocoa::setNowPlayingInfo):
* Source/WebCore/platform/cocoa/DragImageCocoa.mm:
(WebCore::createDragImageFromImage):
* Source/WebCore/platform/graphics/BitmapImage.cpp:
(WebCore::BitmapImage::~BitmapImage):
(WebCore::BitmapImage::destroyDecodedData):
(WebCore::BitmapImage::nativeImageAtIndexCacheIfNeeded):
(WebCore::BitmapImage::nativeImage):
(WebCore::BitmapImage::nativeImageForCurrentFrame):
(WebCore::BitmapImage::draw):
(WebCore::BitmapImage::drawPattern):
(WebCore::BitmapImage::decode):
(WebCore::BitmapImage::dump const):
(WebCore::BitmapImage::frameImageAtIndexCacheIfNeeded): Deleted.
(WebCore::BitmapImage::nativeImageOfSize): Deleted.
(WebCore::BitmapImage::framesNativeImages): Deleted.
* Source/WebCore/platform/graphics/BitmapImage.h:
* Source/WebCore/platform/graphics/Image.cpp:
(WebCore::Image::adapter):
(WebCore::Image::invalidateAdapter):
(WebCore::Image::fillWithSolidColor):
(WebCore::Image::drawTiled):
(WebCore::operator<<):
(WebCore::BitmapImage::invalidatePlatformData): Deleted.
(WebCore::Image::loadPlatformResource): Deleted.
* Source/WebCore/platform/graphics/Image.h:
(WebCore::Image::frameCount const):
(WebCore::Image::nativeImageAtIndex):
(WebCore::Image::nativeImageAtIndexCacheIfNeeded):
(WebCore::Image::nativeImageOfSize): Deleted.
(WebCore::Image::nsImage): Deleted.
(WebCore::Image::snapshotNSImage): Deleted.
(WebCore::Image::tiffRepresentation): Deleted.
(WebCore::Image::getHBITMAP): Deleted.
(WebCore::Image::getHBITMAPOfSize): Deleted.
(WebCore::Image::gdkPixbuf): Deleted.
(WebCore::Image::gdkTexture): Deleted.
(WebCore::Image::drawFrameMatchingSourceSize): Deleted.
* Source/WebCore/platform/graphics/ImageAdapter.cpp: Renamed from Source/WebCore/platform/graphics/win/ImageWin.cpp.
(WebCore::ImageAdapter::loadPlatformResource):
(WebCore::ImageAdapter::invalidate):
(WebCore::ImageAdapter::nativeImageOfSize):
(WebCore::ImageAdapter::allNativeImages):
* Source/WebCore/platform/graphics/ImageAdapter.h: Added.
(WebCore::ImageAdapter::ImageAdapter):
(WebCore::ImageAdapter::image const):
* Source/WebCore/platform/graphics/gtk/ImageAdapterGtk.cpp: Renamed from Source/WebCore/platform/graphics/gtk/ImageGtk.cpp.
(WebCore::ImageAdapter::loadPlatformResource):
(WebCore::ImageAdapter::invalidate):
(WebCore::ImageAdapter::gdkPixbuf):
(WebCore::ImageAdapter::gdkTexture):
* Source/WebCore/platform/graphics/mac/ImageAdapterMac.mm: Renamed from Source/WebCore/platform/graphics/mac/ImageMac.mm.
(WebCore::ImageAdapter::loadPlatformResource):
(WebCore::ImageAdapter::tiffRepresentation):
(WebCore::ImageAdapter::invalidate):
(WebCore::ImageAdapter::nsImage):
(WebCore::ImageAdapter::snapshotNSImage):
* Source/WebCore/platform/graphics/win/ImageAdapterWin.cpp: Renamed from Source/WebCore/platform/graphics/win/ImageCairoWin.cpp.
(WebCore::ImageAdapter::loadPlatformResource):
(WebCore::ImageAdapter::nativeImageOfHBITMAP):
(WebCore::ImageAdapter::invalidate):
(WebCore::ImageAdapter::getHBITMAP):
(WebCore::ImageAdapter::getHBITMAPOfSize):
* Source/WebCore/platform/gtk/CursorGtk.cpp:
(WebCore::createCustomCursor):
* Source/WebCore/platform/mac/CursorMac.mm:
(WebCore::createCustomCursor):
* Source/WebCore/platform/mac/PasteboardMac.mm:
(WebCore::Pasteboard::write):
* Source/WebCore/platform/win/CursorWin.cpp:
(WebCore::createSharedCursor):
(WebCore::loadCursorByName):
* Source/WebCore/platform/win/PasteboardWin.cpp:
(WebCore::Pasteboard::writeImage):
* Source/WebCore/rendering/RenderLayerScrollableArea.cpp:
(WebCore::RenderLayerScrollableArea::drawPlatformResizerImage):
* Source/WebCore/rendering/RenderThemeMac.mm:
(WebCore::createAttachmentPlaceholderImage):
* Source/WebKit/UIProcess/API/gtk/DragSourceGtk3.cpp:
(WebKit::DragSource::DragSource):
* Source/WebKit/UIProcess/API/gtk/DragSourceGtk4.cpp:
(WebKit::DragSource::begin):
* Source/WebKit/UIProcess/gtk/ClipboardGtk3.cpp:
(WebKit::Clipboard::write):
* Source/WebKit/UIProcess/gtk/ClipboardGtk4.cpp:
(WebKit::Clipboard::write):
* Source/WebKit/UIProcess/mac/WebViewImpl.mm:
(WebKit::WebViewImpl::provideDataForPasteboard):
* Source/WebKitLegacy/mac/DOM/DOM.mm:
(-[DOMElement image]):
(-[DOMElement _imageTIFFRepresentation]):
* Source/WebKitLegacy/mac/Misc/WebElementDictionary.mm:
(-[WebElementDictionary _image]):
* Source/WebKitLegacy/mac/WebCoreSupport/WebContextMenuClient.mm:
(WebContextMenuClient::imageForCurrentSharingServicePickerItem):
(WebContextMenuClient::contextMenuForEvent):
* Source/WebKitLegacy/mac/WebCoreSupport/WebFrameLoaderClient.mm:
(webGetNSImage):
* Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:
(-[WebHTMLView pasteboard:provideDataForType:]):
* Tools/TestWebKitAPI/Tests/WebCore/win/BitmapImage.cpp:
(TestWebKitAPI::TEST):

Canonical link: https://commits.webkit.org/273772@main
@webkit-commit-queue webkit-commit-queue force-pushed the eng/Move-BitmapImage-format-conversion-to-a-new-class-name-ImageAdapter branch from ad338a9 to ab92c87 Compare January 30, 2024 19:15
@webkit-commit-queue webkit-commit-queue merged commit ab92c87 into WebKit:main Jan 30, 2024
@webkit-commit-queue
Copy link
Collaborator

Committed 273772@main (ab92c87): https://commits.webkit.org/273772@main

Reviewed commits have been landed. Closing PR #22535 and removing active labels.

@webkit-commit-queue webkit-commit-queue removed the merge-queue Applied to send a pull request to merge-queue label Jan 30, 2024
@shallawa shallawa deleted the eng/Move-BitmapImage-format-conversion-to-a-new-class-name-ImageAdapter branch February 1, 2024 05:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Images For bugs in image handling.
Projects
None yet
5 participants