Title: [102652] trunk/Source
Revision
102652
Author
[email protected]
Date
2011-12-12 19:08:19 -0800 (Mon, 12 Dec 2011)

Log Message

Resizing Cappuccino is very laggy on WebKit since Safari 5.1
<http://webkit.org/b/71354> and <rdar://problem/10565998>

Reviewed by Anders Carlsson.

Source/WebCore: 

* WebCore.exp.in: Export FloatPoint(const NSPoint&)

Source/WebKit2: 

On Mac, we already cache the window rect through the WindowAndViewFramesChanged
message, so simply return that in WebChromeClient::windowRect() instead of
sending a synchronous query to the UIProcess.

Changed WindowAndViewFramesChanged to pass FloatRect/FloatPoint rather than
IntRect/IntPoint to match the ChromeClient::windowRect() return type.

* UIProcess/API/mac/WKView.mm:
(-[WKView _updateWindowAndViewFrames]):
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::setWindowFrame):
* UIProcess/WebPageProxy.h:
* UIProcess/mac/WebPageProxyMac.mm:
(WebKit::WebPageProxy::windowAndViewFramesChanged):
* WebProcess/Plugins/PluginView.cpp:
(WebKit::PluginView::windowAndViewFramesChanged):
* WebProcess/Plugins/PluginView.h:
* WebProcess/WebCoreSupport/WebChromeClient.cpp:
(WebKit::WebChromeClient::windowRect):
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::windowAndViewFramesChanged):
* WebProcess/WebPage/WebPage.h:
(WebKit::WebPage::windowFrameInScreenCoordinates):
(WebKit::WebPage::viewFrameInWindowCoordinates):
(WebKit::WebPage::accessibilityPosition):
* WebProcess/WebPage/mac/WKAccessibilityWebPageObject.mm:
(-[WKAccessibilityWebPageObject accessibilityAttributeValue:]):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (102651 => 102652)


--- trunk/Source/WebCore/ChangeLog	2011-12-13 02:56:57 UTC (rev 102651)
+++ trunk/Source/WebCore/ChangeLog	2011-12-13 03:08:19 UTC (rev 102652)
@@ -1,3 +1,12 @@
+2011-12-12  Andreas Kling  <[email protected]>
+
+        Resizing Cappuccino is very laggy on WebKit since Safari 5.1
+        <http://webkit.org/b/71354> and <rdar://problem/10565998>
+
+        Reviewed by Anders Carlsson.
+
+        * WebCore.exp.in: Export FloatPoint(const NSPoint&)
+
 2011-12-12  Jarred Nicholls  <[email protected]>
 
         [Qt] QTKIT-based video support must target OS X 10.5 or higher

Modified: trunk/Source/WebCore/WebCore.exp.in (102651 => 102652)


--- trunk/Source/WebCore/WebCore.exp.in	2011-12-13 02:56:57 UTC (rev 102651)
+++ trunk/Source/WebCore/WebCore.exp.in	2011-12-13 03:08:19 UTC (rev 102652)
@@ -140,6 +140,7 @@
 __ZN7WebCore10ClientRectC1Ev
 __ZN7WebCore10CredentialC1ERKN3WTF6StringES4_NS_21CredentialPersistenceE
 __ZN7WebCore10CredentialC1Ev
+__ZN7WebCore10FloatPointC1ERK8_NSPoint
 __ZN7WebCore10FloatPointC1ERKNS_8IntPointE
 __ZN7WebCore10JSDocument6s_infoE
 __ZN7WebCore10MouseEvent6createERKN3WTF12AtomicStringENS1_10PassRefPtrINS_9DOMWindowEEERKNS_18PlatformMouseEventEiNS5_INS_4NodeEEE

Modified: trunk/Source/WebKit2/ChangeLog (102651 => 102652)


--- trunk/Source/WebKit2/ChangeLog	2011-12-13 02:56:57 UTC (rev 102651)
+++ trunk/Source/WebKit2/ChangeLog	2011-12-13 03:08:19 UTC (rev 102652)
@@ -1,3 +1,38 @@
+2011-12-12  Andreas Kling  <[email protected]>
+
+        Resizing Cappuccino is very laggy on WebKit since Safari 5.1
+        <http://webkit.org/b/71354> and <rdar://problem/10565998>
+
+        Reviewed by Anders Carlsson.
+
+        On Mac, we already cache the window rect through the WindowAndViewFramesChanged
+        message, so simply return that in WebChromeClient::windowRect() instead of
+        sending a synchronous query to the UIProcess.
+
+        Changed WindowAndViewFramesChanged to pass FloatRect/FloatPoint rather than
+        IntRect/IntPoint to match the ChromeClient::windowRect() return type.
+
+        * UIProcess/API/mac/WKView.mm:
+        (-[WKView _updateWindowAndViewFrames]):
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::setWindowFrame):
+        * UIProcess/WebPageProxy.h:
+        * UIProcess/mac/WebPageProxyMac.mm:
+        (WebKit::WebPageProxy::windowAndViewFramesChanged):
+        * WebProcess/Plugins/PluginView.cpp:
+        (WebKit::PluginView::windowAndViewFramesChanged):
+        * WebProcess/Plugins/PluginView.h:
+        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
+        (WebKit::WebChromeClient::windowRect):
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::windowAndViewFramesChanged):
+        * WebProcess/WebPage/WebPage.h:
+        (WebKit::WebPage::windowFrameInScreenCoordinates):
+        (WebKit::WebPage::viewFrameInWindowCoordinates):
+        (WebKit::WebPage::accessibilityPosition):
+        * WebProcess/WebPage/mac/WKAccessibilityWebPageObject.mm:
+        (-[WKAccessibilityWebPageObject accessibilityAttributeValue:]):
+
 2011-12-12  Anders Carlsson  <[email protected]>
 
         Add EventDispatcher class to WebKit2

Modified: trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm (102651 => 102652)


--- trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm	2011-12-13 02:56:57 UTC (rev 102651)
+++ trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm	2011-12-13 03:08:19 UTC (rev 102652)
@@ -337,7 +337,7 @@
     NSRect viewFrameInWindowCoordinates = [self convertRect:[self frame] toView:nil];
     NSPoint accessibilityPosition = [[self accessibilityAttributeValue:NSAccessibilityPositionAttribute] pointValue];
     
-    _data->_page->windowAndViewFramesChanged(enclosingIntRect(windowFrameInScreenCoordinates), enclosingIntRect(viewFrameInWindowCoordinates), IntPoint(accessibilityPosition));
+    _data->_page->windowAndViewFramesChanged(windowFrameInScreenCoordinates, viewFrameInWindowCoordinates, accessibilityPosition);
 }
 
 - (void)renewGState

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (102651 => 102652)


--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h	2011-12-13 02:56:57 UTC (rev 102651)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h	2011-12-13 03:08:19 UTC (rev 102652)
@@ -306,7 +306,7 @@
 
 #if PLATFORM(MAC)
     void updateWindowIsVisible(bool windowIsVisible);
-    void windowAndViewFramesChanged(const WebCore::IntRect& windowFrameInScreenCoordinates, const WebCore::IntRect& viewFrameInWindowCoordinates, const WebCore::IntPoint& accessibilityViewCoordinates);
+    void windowAndViewFramesChanged(const WebCore::FloatRect& windowFrameInScreenCoordinates, const WebCore::FloatRect& viewFrameInWindowCoordinates, const WebCore::FloatPoint& accessibilityViewCoordinates);
 
     void setComposition(const String& text, Vector<WebCore::CompositionUnderline> underlines, uint64_t selectionStart, uint64_t selectionEnd, uint64_t replacementRangeStart, uint64_t replacementRangeEnd);
     void confirmComposition();

Modified: trunk/Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm (102651 => 102652)


--- trunk/Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm	2011-12-13 02:56:57 UTC (rev 102651)
+++ trunk/Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm	2011-12-13 03:08:19 UTC (rev 102652)
@@ -151,7 +151,7 @@
     process()->send(Messages::WebPage::SetWindowIsVisible(windowIsVisible), m_pageID);
 }
 
-void WebPageProxy::windowAndViewFramesChanged(const IntRect& windowFrameInScreenCoordinates, const IntRect& viewFrameInWindowCoordinates, const IntPoint& accessibilityViewCoordinates)
+void WebPageProxy::windowAndViewFramesChanged(const FloatRect& windowFrameInScreenCoordinates, const FloatRect& viewFrameInWindowCoordinates, const FloatPoint& accessibilityViewCoordinates)
 {
     if (!isValid())
         return;

Modified: trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp (102651 => 102652)


--- trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp	2011-12-13 02:56:57 UTC (rev 102651)
+++ trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp	2011-12-13 03:08:19 UTC (rev 102652)
@@ -414,12 +414,12 @@
     m_plugin->contentsScaleFactorChanged(scaleFactor);
 }
 
-void PluginView::windowAndViewFramesChanged(const IntRect& windowFrameInScreenCoordinates, const IntRect& viewFrameInWindowCoordinates)
+void PluginView::windowAndViewFramesChanged(const FloatRect& windowFrameInScreenCoordinates, const FloatRect& viewFrameInWindowCoordinates)
 {
     if (!m_isInitialized || !m_plugin)
         return;
 
-    m_plugin->windowAndViewFramesChanged(windowFrameInScreenCoordinates, viewFrameInWindowCoordinates);
+    m_plugin->windowAndViewFramesChanged(enclosingIntRect(windowFrameInScreenCoordinates), enclosingIntRect(viewFrameInWindowCoordinates));
 }
 
 bool PluginView::sendComplexTextInput(uint64_t pluginComplexTextInputIdentifier, const String& textInput)

Modified: trunk/Source/WebKit2/WebProcess/Plugins/PluginView.h (102651 => 102652)


--- trunk/Source/WebKit2/WebProcess/Plugins/PluginView.h	2011-12-13 02:56:57 UTC (rev 102651)
+++ trunk/Source/WebKit2/WebProcess/Plugins/PluginView.h	2011-12-13 03:08:19 UTC (rev 102652)
@@ -64,7 +64,7 @@
     void setWindowIsVisible(bool);
     void setWindowIsFocused(bool);
     void setDeviceScaleFactor(float);
-    void windowAndViewFramesChanged(const WebCore::IntRect& windowFrameInScreenCoordinates, const WebCore::IntRect& viewFrameInWindowCoordinates);
+    void windowAndViewFramesChanged(const WebCore::FloatRect& windowFrameInScreenCoordinates, const WebCore::FloatRect& viewFrameInWindowCoordinates);
     bool sendComplexTextInput(uint64_t pluginComplexTextInputIdentifier, const String& textInput);
 #endif
 

Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp (102651 => 102652)


--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp	2011-12-13 02:56:57 UTC (rev 102651)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp	2011-12-13 03:08:19 UTC (rev 102652)
@@ -105,12 +105,16 @@
 
 FloatRect WebChromeClient::windowRect()
 {
+#if PLATFORM(MAC)
+    return m_page->windowFrameInScreenCoordinates();
+#else
     FloatRect newWindowFrame;
 
     if (!WebProcess::shared().connection()->sendSync(Messages::WebPageProxy::GetWindowFrame(), Messages::WebPageProxy::GetWindowFrame::Reply(newWindowFrame), m_page->pageID()))
         return FloatRect();
 
     return newWindowFrame;
+#endif
 }
 
 FloatRect WebChromeClient::pageRect()

Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (102651 => 102652)


--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp	2011-12-13 02:56:57 UTC (rev 102651)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp	2011-12-13 03:08:19 UTC (rev 102652)
@@ -2312,7 +2312,7 @@
         (*it)->setWindowIsVisible(windowIsVisible);
 }
 
-void WebPage::windowAndViewFramesChanged(const WebCore::IntRect& windowFrameInScreenCoordinates, const WebCore::IntRect& viewFrameInWindowCoordinates, const WebCore::IntPoint& accessibilityViewCoordinates)
+void WebPage::windowAndViewFramesChanged(const WebCore::FloatRect& windowFrameInScreenCoordinates, const WebCore::FloatRect& viewFrameInWindowCoordinates, const WebCore::FloatPoint& accessibilityViewCoordinates)
 {
     m_windowFrameInScreenCoordinates = windowFrameInScreenCoordinates;
     m_viewFrameInWindowCoordinates = viewFrameInWindowCoordinates;
@@ -2320,7 +2320,7 @@
     
     // Tell all our plug-in views that the window and view frames have changed.
     for (HashSet<PluginView*>::const_iterator it = m_pluginViews.begin(), end = m_pluginViews.end(); it != end; ++it)
-        (*it)->windowAndViewFramesChanged(windowFrameInScreenCoordinates, viewFrameInWindowCoordinates);
+        (*it)->windowAndViewFramesChanged(enclosingIntRect(windowFrameInScreenCoordinates), enclosingIntRect(viewFrameInWindowCoordinates));
 }
 
 #endif

Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h (102651 => 102652)


--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h	2011-12-13 02:56:57 UTC (rev 102651)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h	2011-12-13 03:08:19 UTC (rev 102652)
@@ -289,8 +289,8 @@
     void removePluginView(PluginView*);
 
     bool windowIsVisible() const { return m_windowIsVisible; }
-    const WebCore::IntRect& windowFrameInScreenCoordinates() const { return m_windowFrameInScreenCoordinates; }
-    const WebCore::IntRect& viewFrameInWindowCoordinates() const { return m_viewFrameInWindowCoordinates; }
+    const WebCore::FloatRect& windowFrameInScreenCoordinates() const { return m_windowFrameInScreenCoordinates; }
+    const WebCore::FloatRect& viewFrameInWindowCoordinates() const { return m_viewFrameInWindowCoordinates; }
 #elif PLATFORM(WIN)
     HWND nativeWindow() const { return m_nativeWindow; }
 #endif
@@ -356,8 +356,8 @@
 #if PLATFORM(MAC)
     void registerUIProcessAccessibilityTokens(const CoreIPC::DataReference& elemenToken, const CoreIPC::DataReference& windowToken);
     WKAccessibilityWebPageObject* accessibilityRemoteObject();
-    WebCore::IntPoint accessibilityPosition() const { return m_accessibilityPosition; }    
-    
+    const WebCore::FloatPoint& accessibilityPosition() const { return m_accessibilityPosition; }
+
     void sendComplexTextInputToPlugin(uint64_t pluginComplexTextInputIdentifier, const String& textInput);
 
     void setComposition(const String& text, Vector<WebCore::CompositionUnderline> underlines, uint64_t selectionStart, uint64_t selectionEnd, uint64_t replacementRangeStart, uint64_t replacementRangeEnd, EditorState& newState);
@@ -560,7 +560,7 @@
     void performDictionaryLookupForRange(DictionaryPopupInfo::Type, WebCore::Frame*, WebCore::Range*, NSDictionary *options);
 
     void setWindowIsVisible(bool windowIsVisible);
-    void windowAndViewFramesChanged(const WebCore::IntRect& windowFrameInScreenCoordinates, const WebCore::IntRect& viewFrameInWindowCoordinates, const WebCore::IntPoint& accessibilityViewCoordinates);
+    void windowAndViewFramesChanged(const WebCore::FloatRect& windowFrameInScreenCoordinates, const WebCore::FloatRect& viewFrameInWindowCoordinates, const WebCore::FloatPoint& accessibilityViewCoordinates);
 #endif
 
     void unapplyEditCommand(uint64_t commandID);
@@ -637,14 +637,14 @@
     bool m_isSmartInsertDeleteEnabled;
 
     // The frame of the containing window in screen coordinates.
-    WebCore::IntRect m_windowFrameInScreenCoordinates;
+    WebCore::FloatRect m_windowFrameInScreenCoordinates;
 
     // The frame of the view in window coordinates.
-    WebCore::IntRect m_viewFrameInWindowCoordinates;
+    WebCore::FloatRect m_viewFrameInWindowCoordinates;
 
     // The accessibility position of the view.
-    WebCore::IntPoint m_accessibilityPosition;
-    
+    WebCore::FloatPoint m_accessibilityPosition;
+
     // All plug-in views on this web page.
     HashSet<PluginView*> m_pluginViews;
 

Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in (102651 => 102652)


--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in	2011-12-13 02:56:57 UTC (rev 102651)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in	2011-12-13 03:08:19 UTC (rev 102652)
@@ -201,7 +201,7 @@
     SendComplexTextInputToPlugin(uint64_t pluginComplexTextInputIdentifier, String textInput)
 
     SetWindowIsVisible(bool windowIsVisible)
-    WindowAndViewFramesChanged(WebCore::IntRect windowFrameInScreenCoordinates, WebCore::IntRect viewFrameInWindowCoordinates, WebCore::IntPoint accessibilityViewCoordinates)
+    WindowAndViewFramesChanged(WebCore::FloatRect windowFrameInScreenCoordinates, WebCore::FloatRect viewFrameInWindowCoordinates, WebCore::FloatPoint accessibilityViewCoordinates)
     RegisterUIProcessAccessibilityTokens(CoreIPC::DataReference elemenToken, CoreIPC::DataReference windowToken)
     WriteSelectionToPasteboard(WTF::String pasteboardName, WTF::Vector<WTF::String> pasteboardTypes) -> (bool result)
     ReadSelectionFromPasteboard(WTF::String pasteboardName) -> (bool result)

Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/WKAccessibilityWebPageObject.mm (102651 => 102652)


--- trunk/Source/WebKit2/WebProcess/WebPage/mac/WKAccessibilityWebPageObject.mm	2011-12-13 02:56:57 UTC (rev 102651)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/WKAccessibilityWebPageObject.mm	2011-12-13 03:08:19 UTC (rev 102652)
@@ -142,7 +142,7 @@
         return nil;
 
     if ([attribute isEqualToString:NSAccessibilityPositionAttribute]) {
-        WebCore::IntPoint point = m_page->accessibilityPosition();
+        const WebCore::FloatPoint& point = m_page->accessibilityPosition();
         return [NSValue valueWithPoint:NSMakePoint(point.x(), point.y())];
     }
     if ([attribute isEqualToString:NSAccessibilitySizeAttribute]) {
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to