Changeset 285949 in webkit
- Timestamp:
- Nov 17, 2021, 12:22:11 PM (5 years ago)
- Location:
- trunk/Source
- Files:
-
- 2 added
- 14 edited
-
WebCore/ChangeLog (modified) (1 diff)
-
WebCore/Headers.cmake (modified) (1 diff)
-
WebCore/Sources.txt (modified) (1 diff)
-
WebCore/WebCore.xcodeproj/project.pbxproj (modified) (4 diffs)
-
WebCore/page/ImageAnalysisQueue.cpp (added)
-
WebCore/page/ImageAnalysisQueue.h (added)
-
WebCore/page/Page.cpp (modified) (3 diffs)
-
WebCore/page/Page.h (modified) (3 diffs)
-
WebKit/ChangeLog (modified) (1 diff)
-
WebKit/UIProcess/API/Cocoa/WKWebView.mm (modified) (1 diff)
-
WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h (modified) (1 diff)
-
WebKit/UIProcess/WebPageProxy.cpp (modified) (1 diff)
-
WebKit/UIProcess/WebPageProxy.h (modified) (1 diff)
-
WebKit/WebProcess/WebPage/WebPage.cpp (modified) (2 diffs)
-
WebKit/WebProcess/WebPage/WebPage.h (modified) (1 diff)
-
WebKit/WebProcess/WebPage/WebPage.messages.in (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r285948 r285949 1 2021-11-17 Wenson Hsieh <wenson_hsieh@apple.com> 2 3 Add a helper class to coordinate batch analysis of images 4 https://bugs.webkit.org/show_bug.cgi?id=233075 5 6 Reviewed by Dean Jackson. 7 8 Introduce ImageAnalysisQueue, which will collect suitable image elements in the main document and coordinate 9 image analysis tasks for up to some (fixed, but easily configurable) maximum number of simultaneous pending 10 tasks. See below for more details. 11 12 * Headers.cmake: 13 * Sources.txt: 14 * WebCore.xcodeproj/project.pbxproj: 15 * page/ImageAnalysisQueue.cpp: Added. 16 (WebCore::ImageAnalysisQueue::ImageAnalysisQueue): 17 (WebCore::ImageAnalysisQueue::enqueueAllImages): 18 19 Iterate through all image elements on the page with cached images, and add them as image analysis tasks to the 20 task queue as long as they are not tiny. Automatically start processing queued tasks afterwards (see below). 21 22 (WebCore::ImageAnalysisQueue::resumeProcessing): 23 24 Run the main processing loop of the task queue; while there are tasks remaining, push up to 5 images to the 25 client layer for image analysis at the same time, until there are no more queued tasks. 26 27 (WebCore::ImageAnalysisQueue::clear): 28 * page/ImageAnalysisQueue.h: Added. 29 30 Introduce the new class. 31 32 * page/Page.cpp: 33 (WebCore::Page::imageOverlayController): 34 35 Drive-by fix: `m_imageOverlayController` was being eagerly initialized here, despite the existence of both 36 `imageOverlayControllerIfExists()` and `imageOverlayController()`. Fix this by lazily creating the 37 ImageOverlayController instead. 38 39 (WebCore::Page::imageAnalysisQueue): 40 * page/Page.h: 41 (WebCore::Page::imageAnalysisQueueIfExists): 42 (WebCore::Page::imageOverlayController): Deleted. 43 1 44 2021-11-17 Alan Bujtas <zalan@apple.com> 2 45 -
trunk/Source/WebCore/Headers.cmake
r285822 r285949 955 955 page/GlobalFrameIdentifier.h 956 956 page/GlobalWindowIdentifier.h 957 page/ImageAnalysisQueue.h 957 958 page/LayoutMilestone.h 958 959 page/MediaCanStartListener.h -
trunk/Source/WebCore/Sources.txt
r285936 r285949 1726 1726 page/FrameViewLayoutContext.cpp 1727 1727 page/History.cpp 1728 page/ImageAnalysisQueue.cpp 1728 1729 page/ImageOverlayController.cpp 1729 1730 page/IntersectionObserver.cpp -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r285936 r285949 5450 5450 F46C447E234654540039A79D /* ClipboardItemBindingsDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = F46C447C234654540039A79D /* ClipboardItemBindingsDataSource.h */; }; 5451 5451 F46D5386273D7E460009FA80 /* ImageOverlay.h in Headers */ = {isa = PBXBuildFile; fileRef = F46D5385273D7E3F0009FA80 /* ImageOverlay.h */; settings = {ATTRIBUTES = (Private, ); }; }; 5452 F46D53A1273EEFA00009FA80 /* ImageAnalysisQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = F46D539D273EECF70009FA80 /* ImageAnalysisQueue.h */; settings = {ATTRIBUTES = (Private, ); }; }; 5452 5453 F473845825DDE9FB006DE8DD /* DataOwnerType.h in Headers */ = {isa = PBXBuildFile; fileRef = F473845725DDE9FB006DE8DD /* DataOwnerType.h */; settings = {ATTRIBUTES = (Private, ); }; }; 5453 5454 F47A09D120A93A9700240FAE /* DisabledAdaptations.h in Headers */ = {isa = PBXBuildFile; fileRef = F47A09CF20A939F600240FAE /* DisabledAdaptations.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 17267 17268 F46D5384273D7E3E0009FA80 /* ImageOverlay.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ImageOverlay.cpp; sourceTree = "<group>"; }; 17268 17269 F46D5385273D7E3F0009FA80 /* ImageOverlay.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ImageOverlay.h; sourceTree = "<group>"; }; 17270 F46D539D273EECF70009FA80 /* ImageAnalysisQueue.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ImageAnalysisQueue.h; sourceTree = "<group>"; }; 17271 F46D539E273EECF70009FA80 /* ImageAnalysisQueue.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ImageAnalysisQueue.cpp; sourceTree = "<group>"; }; 17269 17272 F473845725DDE9FB006DE8DD /* DataOwnerType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DataOwnerType.h; sourceTree = "<group>"; }; 17270 17273 F47A09CF20A939F600240FAE /* DisabledAdaptations.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DisabledAdaptations.h; sourceTree = "<group>"; }; … … 23184 23187 BC94D1510C275C8B006BC617 /* History.h */, 23185 23188 BC94D1520C275C8B006BC617 /* History.idl */, 23189 F46D539E273EECF70009FA80 /* ImageAnalysisQueue.cpp */, 23190 F46D539D273EECF70009FA80 /* ImageAnalysisQueue.h */, 23186 23191 F482434A260C32F10022497C /* ImageOverlayController.cpp */, 23187 23192 F4824348260C32F10022497C /* ImageOverlayController.h */, … … 33856 33861 830D0B6924F57D67007ED122 /* IIRProcessor.h in Headers */, 33857 33862 B27535700B053814002CE64F /* Image.h in Headers */, 33863 F46D53A1273EEFA00009FA80 /* ImageAnalysisQueue.h in Headers */, 33858 33864 55A336F91D821E3C0022C4C7 /* ImageBackingStore.h in Headers */, 33859 33865 31815A311F9A6C8F00FCBF89 /* ImageBitmap.h in Headers */, -
trunk/Source/WebCore/page/Page.cpp
r285655 r285949 77 77 #include "HistoryItem.h" 78 78 #include "IDBConnectionToServer.h" 79 #include "ImageAnalysisQueue.h" 79 80 #include "ImageOverlay.h" 80 81 #include "ImageOverlayController.h" … … 317 318 , m_servicesOverlayController(makeUnique<ServicesOverlayController>(*this)) 318 319 #endif 319 , m_imageOverlayController(makeUnique<ImageOverlayController>(*this))320 320 , m_recentWheelEventDeltaFilter(WheelEventDeltaFilter::create()) 321 321 , m_pageOverlayController(makeUnique<PageOverlayController>(*this)) … … 3705 3705 } 3706 3706 3707 ImageOverlayController& Page::imageOverlayController() 3708 { 3709 if (!m_imageOverlayController) 3710 m_imageOverlayController = makeUnique<ImageOverlayController>(*this); 3711 return *m_imageOverlayController; 3712 } 3713 3707 3714 #if ENABLE(IMAGE_ANALYSIS) 3715 3716 ImageAnalysisQueue& Page::imageAnalysisQueue() 3717 { 3718 if (!m_imageAnalysisQueue) 3719 m_imageAnalysisQueue = makeUnique<ImageAnalysisQueue>(*this); 3720 return *m_imageAnalysisQueue; 3721 } 3708 3722 3709 3723 void Page::updateElementsWithTextRecognitionResults() -
trunk/Source/WebCore/page/Page.h
r285637 r285949 116 116 class HTMLMediaElement; 117 117 class HistoryItem; 118 class ImageAnalysisQueue; 118 119 class ImageOverlayController; 119 120 class InspectorClient; … … 532 533 ServicesOverlayController& servicesOverlayController() { return *m_servicesOverlayController; } 533 534 #endif 534 ImageOverlayController& imageOverlayController() { return *m_imageOverlayController; }535 ImageOverlayController& imageOverlayController(); 535 536 ImageOverlayController* imageOverlayControllerIfExists() { return m_imageOverlayController.get(); } 537 538 #if ENABLE(IMAGE_ANALYSIS) 539 WEBCORE_EXPORT ImageAnalysisQueue& imageAnalysisQueue(); 540 ImageAnalysisQueue* imageAnalysisQueueIfExists() { return m_imageAnalysisQueue.get(); } 541 #endif 536 542 537 543 #if ENABLE(WHEEL_EVENT_LATCHING) … … 1193 1199 std::unique_ptr<ImageOverlayController> m_imageOverlayController; 1194 1200 1201 #if ENABLE(IMAGE_ANALYSIS) 1202 std::unique_ptr<ImageAnalysisQueue> m_imageAnalysisQueue; 1203 #endif 1204 1195 1205 std::unique_ptr<WheelEventDeltaFilter> m_recentWheelEventDeltaFilter; 1196 1206 std::unique_ptr<PageOverlayController> m_pageOverlayController; -
trunk/Source/WebKit/ChangeLog
r285936 r285949 1 2021-11-17 Wenson Hsieh <wenson_hsieh@apple.com> 2 3 Add a helper class to coordinate batch analysis of images 4 https://bugs.webkit.org/show_bug.cgi?id=233075 5 6 Reviewed by Dean Jackson. 7 8 Add a couple of WKWebView SPI methods to kick off (and cancel) batch image analysis for mainframe content. 9 See WebCore ChangeLog for more details. 10 11 * UIProcess/API/Cocoa/WKWebView.mm: 12 (-[WKWebView _startImageAnalysis:]): 13 * UIProcess/API/Cocoa/WKWebViewPrivate.h: 14 * UIProcess/WebPageProxy.cpp: 15 (WebKit::WebPageProxy::startImageAnalysis): 16 * UIProcess/WebPageProxy.h: 17 * WebProcess/WebPage/WebPage.cpp: 18 (WebKit::WebPage::startImageAnalysis): 19 * WebProcess/WebPage/WebPage.h: 20 * WebProcess/WebPage/WebPage.messages.in: 21 1 22 2021-11-17 Dean Jackson <dino@apple.com> 2 23 -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm
r285742 r285949 2205 2205 } 2206 2206 2207 - (void)_startImageAnalysis:(NSString *)identifier 2208 { 2209 #if ENABLE(IMAGE_ANALYSIS) 2210 THROW_IF_SUSPENDED; 2211 2212 if (!_page || !_page->preferences().textRecognitionEnhancementsEnabled()) 2213 return; 2214 2215 _page->startImageAnalysis(identifier); 2216 #endif 2217 } 2218 2207 2219 - (void)_takeFindStringFromSelection:(id)sender 2208 2220 { -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h
r285742 r285949 415 415 - (void)_resumePage:(void (^)(BOOL))completionHandler WK_API_AVAILABLE(macos(12.0), ios(15.0)); 416 416 417 - (void)_startImageAnalysis:(NSString *)identifier WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA)); 418 417 419 @end 418 420 -
trunk/Source/WebKit/UIProcess/WebPageProxy.cpp
r285877 r285949 8637 8637 } 8638 8638 8639 void WebPageProxy::startImageAnalysis(const String& identifier) 8640 { 8641 if (hasRunningProcess()) 8642 send(Messages::WebPage::StartImageAnalysis(identifier)); 8643 } 8644 8639 8645 #endif // ENABLE(IMAGE_ANALYSIS) 8640 8646 -
trunk/Source/WebKit/UIProcess/WebPageProxy.h
r285637 r285949 1702 1702 void updateWithTextRecognitionResult(WebCore::TextRecognitionResult&&, const WebCore::ElementContext&, const WebCore::FloatPoint& location, CompletionHandler<void(TextRecognitionUpdateResult)>&&); 1703 1703 void computeHasImageAnalysisResults(const URL& imageURL, ShareableBitmap& imageBitmap, ImageAnalysisType, CompletionHandler<void(bool)>&&); 1704 void startImageAnalysis(const String& identifier); 1704 1705 #endif 1705 1706 -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp
r285846 r285949 203 203 #include <WebCore/HistoryItem.h> 204 204 #include <WebCore/HitTestResult.h> 205 #include <WebCore/ImageAnalysisQueue.h> 205 206 #include <WebCore/ImageOverlay.h> 206 207 #include <WebCore/InspectorController.h> … … 7632 7633 } 7633 7634 7635 void WebPage::startImageAnalysis(const String& identifier) 7636 { 7637 if (RefPtr document = m_mainFrame->coreFrame()->document()) { 7638 // We only consider main document content for now, to match the behavior of the corresponding feature 7639 // that will trigger this codepath. 7640 corePage()->imageAnalysisQueue().enqueueAllImages(*document, identifier); 7641 } 7642 } 7643 7634 7644 #endif // ENABLE(IMAGE_ANALYSIS) 7635 7645 -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.h
r285846 r285949 1433 1433 void requestTextRecognition(WebCore::Element&, CompletionHandler<void(RefPtr<WebCore::Element>&&)>&&); 1434 1434 void updateWithTextRecognitionResult(const WebCore::TextRecognitionResult&, const WebCore::ElementContext&, const WebCore::FloatPoint& location, CompletionHandler<void(TextRecognitionUpdateResult)>&&); 1435 void startImageAnalysis(const String& identifier); 1435 1436 #endif 1436 1437 -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in
r285640 r285949 645 645 #if ENABLE(IMAGE_ANALYSIS) 646 646 UpdateWithTextRecognitionResult(struct WebCore::TextRecognitionResult result, struct WebCore::ElementContext element, WebCore::FloatPoint location) -> (enum:uint8_t WebKit::TextRecognitionUpdateResult result) Async 647 StartImageAnalysis(String identifier) 647 648 #endif 648 649
Note:
See TracChangeset
for help on using the changeset viewer.