Bug 213277
Summary: | [WinCairo][WK2] The entire content area is unnecessarily repainted just by clicking a text | ||
---|---|---|---|
Product: | WebKit | Reporter: | Fujii Hironori <Hironori.Fujii> |
Component: | WebKit2 | Assignee: | Nobody <webkit-unassigned> |
Status: | NEW | ||
Severity: | Normal | ||
Priority: | P2 | ||
Version: | WebKit Nightly Build | ||
Hardware: | Unspecified | ||
OS: | Unspecified |
Fujii Hironori
[WinCairo] The entire content area is repainted unnecessarily just by clicking a text
I observe this issue with WinCairo WebKit2, but not with WinCairo WebKit1.
You need to use your debugger to obverse this issue.
1. Put a break point at DrawingAreaCoordinatedGraphics::setNeedsDisplay in web process
2. Open a simple non-AC mode page. For example, http://example.com/
3. Click a text in the page
4. The break point is hit
Callstack:
> WebKit2.dll!WebKit::DrawingAreaCoordinatedGraphics::setNeedsDisplay() Line 91 C++
> WebKit2.dll!WebKit::DrawingAreaCoordinatedGraphics::scheduleRenderingUpdate() Line 355 C++
> WebKit2.dll!WebKit::WebPage::scheduleFullEditorStateUpdate() Line 6309 C++
> WebKit2.dll!WebKit::WebPage::didChangeSelectionOrOverflowScrollPosition() Line 5592 C++
> WebKit2.dll!WebKit::WebPage::didChangeSelection() Line 5544 C++
> WebKit2.dll!WebKit::WebEditorClient::respondToChangedSelection(WebCore::Frame * frame=0x00000159996a9d10) Line 247 C++
> WebKit2.dll!WebCore::Editor::respondToChangedSelection(const WebCore::VisibleSelection & __formal={...}, WTF::OptionSet<enum WebCore::FrameSelection::SetSelectionOption> options={...}) Line 3669 C++
> WebKit2.dll!WebCore::FrameSelection::setSelectionWithoutUpdatingAppearance(const WebCore::VisibleSelection & newSelectionPossiblyWithoutDirection={...}, WTF::OptionSet<enum WebCore::FrameSelection::SetSelectionOption> options={...}, WebCore::FrameSelection::CursorAlignOnScroll align=AlignCursorOnScrollIfNeeded, WebCore::TextGranularity granularity=CharacterGranularity) Line 402 C++
> WebKit2.dll!WebCore::FrameSelection::setSelection(const WebCore::VisibleSelection & selection={...}, WTF::OptionSet<enum WebCore::FrameSelection::SetSelectionOption> options={...}, WebCore::AXTextStateChangeIntent intent={...}, WebCore::FrameSelection::CursorAlignOnScroll align=AlignCursorOnScrollIfNeeded, WebCore::TextGranularity granularity=CharacterGranularity) Line 412 C++
> WebKit2.dll!WebCore::FrameSelection::setSelectionByMouseIfDifferent(const WebCore::VisibleSelection & passedNewSelection={...}, WebCore::TextGranularity granularity=CharacterGranularity, WebCore::FrameSelection::EndPointsAdjustmentMode endpointsAdjustmentMode=DoNotAdjust) Line 329 C++
> WebKit2.dll!WebCore::EventHandler::updateSelectionForMouseDownDispatchingSelectStart(WebCore::Node * targetNode=0x00000159dda58010, const WebCore::VisibleSelection & selection={...}, WebCore::TextGranularity granularity=CharacterGranularity) Line 551 C++
> WebKit2.dll!WebCore::EventHandler::handleMousePressEventSingleClick(const WebCore::MouseEventWithHitTestResults & event={...}) Line 754 C++
> WebKit2.dll!WebCore::EventHandler::handleMousePressEvent(const WebCore::MouseEventWithHitTestResults & event={...}) Line 853 C++
> WebKit2.dll!WebCore::EventHandler::handleMousePressEvent(const WebCore::PlatformMouseEvent & platformMouseEvent={...}) Line 1851 C++
> WebKit2.dll!WebCore::UserInputBridge::handleMousePressEvent(const WebCore::PlatformMouseEvent & mouseEvent={...}, WebCore::InputSource __formal=User) Line 58 C++
> WebKit2.dll!WebKit::handleMouseEvent(const WebKit::WebMouseEvent & mouseEvent={...}, WebKit::WebPage * page=0x0000015999677330) Line 2721 C++
> WebKit2.dll!WebKit::WebPage::mouseEvent(const WebKit::WebMouseEvent & mouseEvent={...}) Line 2788 C++
> WebKit2.dll!IPC::callMemberFunctionImpl<WebKit::WebPage,void (__cdecl WebKit::WebPage::*)(WebKit::WebMouseEvent const &),std::tuple<WebKit::WebMouseEvent>,0>(WebKit::WebPage * object=0x0000015999677330, void(WebKit::WebPage::*)(const WebKit::WebMouseEvent &) function=0x00000022be0fd5b0, std::tuple<WebKit::WebMouseEvent> && args={...}, std::integer_sequence<unsigned __int64,0> __formal={...}) Line 42 C++
> WebKit2.dll!IPC::callMemberFunction<WebKit::WebPage,void (__cdecl WebKit::WebPage::*)(WebKit::WebMouseEvent const &),std::tuple<WebKit::WebMouseEvent>,std::integer_sequence<unsigned __int64,0>>(std::tuple<WebKit::WebMouseEvent> && args={...}, WebKit::WebPage * object=0x0000015999677330, void(WebKit::WebPage::*)(const WebKit::WebMouseEvent &) function=0x00000022be0fd690) Line 48 C++
> WebKit2.dll!IPC::handleMessage<Messages::WebPage::MouseEvent,WebKit::WebPage,void (__cdecl WebKit::WebPage::*)(WebKit::WebMouseEvent const &)>(IPC::Decoder & decoder={...}, WebKit::WebPage * object=0x0000015999677330, void(WebKit::WebPage::*)(const WebKit::WebMouseEvent &) function=0x00000022be0fe360) Line 115 C++
> WebKit2.dll!WebKit::WebPage::didReceiveWebPageMessage(IPC::Connection & connection={...}, IPC::Decoder & decoder={...}) Line 1072 C++
> WebKit2.dll!WebKit::WebPage::didReceiveMessage(IPC::Connection & connection={...}, IPC::Decoder & decoder={...}) Line 4607 C++
> WebKit2.dll!IPC::MessageReceiverMap::dispatchMessage(IPC::Connection & connection={...}, IPC::Decoder & decoder={...}) Line 124 C++
> WebKit2.dll!WebKit::WebProcess::didReceiveMessage(IPC::Connection & connection={...}, IPC::Decoder & decoder={...}) Line 770 C++
> WebKit2.dll!IPC::Connection::dispatchMessage(IPC::Decoder & decoder={...}) Line 1002 C++
> WebKit2.dll!IPC::Connection::dispatchMessage(std::unique_ptr<IPC::Decoder,std::default_delete<IPC::Decoder>> message={...}) Line 1072 C++
> WebKit2.dll!IPC::Connection::dispatchOneIncomingMessage() Line 1140 C++
> WebKit2.dll!IPC::Connection::enqueueIncomingMessage::__l2::<lambda>() Line 979 C++
> WebKit2.dll!WTF::Detail::CallableWrapper<void <lambda>(void),void>::call() Line 52 C++
> WTF.dll!WTF::Function<void __cdecl(void)>::operator()() Line 85 C++
> WTF.dll!WTF::RunLoop::performWork() Line 141 C++
> WTF.dll!WTF::RunLoop::wndProc(HWND__ * hWnd=0x0000000000390bfe, unsigned int message=1025, unsigned __int64 wParam=1484337169072, __int64 lParam=0) Line 57 C++
> WTF.dll!WTF::RunLoop::RunLoopWndProc(HWND__ * hWnd=0x0000000000390bfe, unsigned int message=1025, unsigned __int64 wParam=1484337169072, __int64 lParam=0) Line 39 C++
> user32.dll!00007ffb15755c0d() Unknown
> user32.dll!00007ffb15755602() Unknown
> WTF.dll!WTF::RunLoop::run() Line 74 C++
> WebKit2.dll!WebKit::AuxiliaryProcessMain<WebKit::WebProcess,WebKit::WebProcessMainWin>(int argc=7, char * * argv=0x0000015999626fe0) Line 69 C++
> WebKit2.dll!WebKit::WebProcessMain(int argc=7, char * * argv=0x0000015999626fe0) Line 58 C++
> WebKitWebProcess.exe!main(int argc=7, char * * argv=0x0000015999626fe0) Line 35 C++
> [Inline Frame] WebKitWebProcess.exe!invoke_main() Line 78 C++
> WebKitWebProcess.exe!__scrt_common_main_seh() Line 288 C++
> kernel32.dll!00007ffb14ca7bd4() Unknown
> ntdll.dll!00007ffb16c4ce51() Unknown
Attachments | ||
---|---|---|
Add attachment proposed patch, testcase, etc. |
Fujii Hironori
There is a FIXME comment in WebPage::scheduleFullEditorStateUpdate()
> // FIXME: Scheduling a compositing layer flush here can be more expensive than necessary.
> // Instead, we should just compute and send post-layout editor state during the next frame.
It was added by:
Bug 193070 – REGRESSION (r239441): [iOS] Selection UI sometimes doesn't change after tapping "select all" in the callout bar