[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
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