Changeset 76452 in webkit


Ignore:
Timestamp:
Jan 22, 2011 11:36:34 AM (13 years ago)
Author:
andersca@apple.com
Message:

2011-01-22 Anders Carlsson <andersca@apple.com>

Reviewed by Sam Weinig.

Add an asynchronous WKPageForceRepaint
https://bugs.webkit.org/show_bug.cgi?id=52964
<rdar://problem/8898527>

  • UIProcess/API/C/WKPage.cpp: (WKPageForceRepaint): Call WebPageProxy::forceRepaint.
  • UIProcess/API/C/WKPage.h: Add WKPageForceRepaint.
  • UIProcess/GenericCallback.h: Add a "generic" VoidCallback class.
  • UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::forceRepaint): Insert the callback in the m_voidCallbacks map and send a forceRepaint message.

(WebKit::WebPageProxy::voidCallback):
Call the right void callback.

(WebKit::WebPageProxy::processDidCrash):
Invalidate m_voidCallbacks.

  • UIProcess/WebPageProxy.messages.in: Add a VoidCallback message.
  • WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp: (WebKit::ChunkedUpdateDrawingArea::forceRepaint): Force a repaint.
  • WebProcess/WebPage/ChunkedUpdateDrawingArea.h: Add forceRepaint.
  • WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::forceRepaint): Call forceRepaint on the drawing area.
  • WebProcess/WebPage/WebPage.messages.in: Add a ForceRepaint message.
Location:
trunk/Source/WebKit2
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r76442 r76452  
     12011-01-22  Anders Carlsson  <andersca@apple.com>
     2
     3        Reviewed by Sam Weinig.
     4
     5        Add an asynchronous WKPageForceRepaint
     6        https://bugs.webkit.org/show_bug.cgi?id=52964
     7        <rdar://problem/8898527>
     8
     9        * UIProcess/API/C/WKPage.cpp:
     10        (WKPageForceRepaint):
     11        Call WebPageProxy::forceRepaint.
     12
     13        * UIProcess/API/C/WKPage.h:
     14        Add WKPageForceRepaint.
     15
     16        * UIProcess/GenericCallback.h:
     17        Add a "generic" VoidCallback class.
     18
     19        * UIProcess/WebPageProxy.cpp:
     20        (WebKit::WebPageProxy::forceRepaint):
     21        Insert the callback in the m_voidCallbacks map and send a forceRepaint message.
     22
     23        (WebKit::WebPageProxy::voidCallback):
     24        Call the right void callback.
     25
     26        (WebKit::WebPageProxy::processDidCrash):
     27        Invalidate m_voidCallbacks.
     28
     29        * UIProcess/WebPageProxy.messages.in:
     30        Add a VoidCallback message.
     31
     32        * WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp:
     33        (WebKit::ChunkedUpdateDrawingArea::forceRepaint):
     34        Force a repaint.
     35
     36        * WebProcess/WebPage/ChunkedUpdateDrawingArea.h:
     37        Add forceRepaint.
     38
     39        * WebProcess/WebPage/WebPage.cpp:
     40        (WebKit::WebPage::forceRepaint):
     41        Call forceRepaint on the drawing area.
     42
     43        * WebProcess/WebPage/WebPage.messages.in:
     44        Add a ForceRepaint message.
     45
    1462011-01-21  Nikolas Zimmermann  <nzimmermann@rim.com>
    247
  • trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp

    r76066 r76452  
    430430}
    431431#endif
     432
     433void WKPageForceRepaint(WKPageRef pageRef, void* context, WKPageForceRepaintFunction callback)
     434{
     435    toImpl(pageRef)->forceRepaint(VoidCallback::create(context, callback));
     436}
  • trunk/Source/WebKit2/UIProcess/API/C/WKPage.h

    r76361 r76452  
    342342#endif
    343343
     344typedef void (*WKPageForceRepaintFunction)(WKErrorRef, void*);
     345WK_EXPORT void WKPageForceRepaint(WKPageRef page, void* context, WKPageForceRepaintFunction function);
     346
    344347#ifdef __cplusplus
    345348}
  • trunk/Source/WebKit2/UIProcess/GenericCallback.h

    r73808 r76452  
    3535
    3636namespace WebKit {
     37
     38class VoidCallback : public RefCounted<VoidCallback> {
     39public:
     40    typedef void (*CallbackFunction)(WKErrorRef, void*);
     41
     42    static PassRefPtr<VoidCallback> create(void* context, CallbackFunction callback)
     43    {
     44        return adoptRef(new VoidCallback(context, callback));
     45    }
     46
     47    VoidCallback()
     48    {
     49        ASSERT(!m_callback);
     50    }
     51
     52    void performCallback()
     53    {
     54        ASSERT(m_callback);
     55
     56        m_callback(0, m_context);
     57
     58        m_callback = 0;
     59    }
     60   
     61    void invalidate()
     62    {
     63        ASSERT(m_callback);
     64
     65        RefPtr<WebError> error = WebError::create();
     66        m_callback(toAPI(error.get()), m_context);
     67       
     68        m_callback = 0;
     69    }
     70
     71    uint64_t callbackID() const { return m_callbackID; }
     72
     73private:
     74    static uint64_t generateCallbackID()
     75    {
     76        static uint64_t uniqueCallbackID = 1;
     77        return uniqueCallbackID++;
     78    }
     79
     80    VoidCallback(void* context, CallbackFunction callback)
     81        : m_context(context)
     82        , m_callback(callback)
     83        , m_callbackID(generateCallbackID())
     84    {
     85    }
     86
     87    void* m_context;
     88    CallbackFunction m_callback;
     89    uint64_t m_callbackID;
     90};
    3791
    3892template<typename APIReturnValueType, typename InternalReturnValueType = typename APITypeInfo<APIReturnValueType>::ImplType>
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp

    r76361 r76452  
    10031003}
    10041004
     1005void WebPageProxy::forceRepaint(PassRefPtr<VoidCallback> prpCallback)
     1006{
     1007    RefPtr<VoidCallback> callback = prpCallback;
     1008
     1009    if (!isValid()) {
     1010        callback->invalidate();
     1011        return;
     1012    }
     1013
     1014    uint64_t callbackID = callback->callbackID();
     1015    m_voidCallbacks.set(callbackID, callback.get());
     1016    process()->send(Messages::WebPage::ForceRepaint(callbackID), m_pageID);
     1017}
     1018
    10051019void WebPageProxy::preferencesDidChange()
    10061020{
     
    21412155}
    21422156
     2157void WebPageProxy::voidCallback(uint64_t callbackID)
     2158{
     2159    RefPtr<VoidCallback> callback = m_voidCallbacks.take(callbackID);
     2160    if (!callback) {
     2161        // FIXME: Log error or assert.
     2162        return;
     2163    }
     2164
     2165    callback->performCallback();
     2166}
     2167
    21432168void WebPageProxy::dataCallback(const CoreIPC::DataReference& dataReference, uint64_t callbackID)
    21442169{
     
    22502275    m_toolTip = String();
    22512276
     2277    invalidateCallbackMap(m_voidCallbacks);
    22522278    invalidateCallbackMap(m_dataCallbacks);
    22532279    invalidateCallbackMap(m_stringCallbacks);
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.h

    r76417 r76452  
    274274    void getWebArchiveOfFrame(WebFrameProxy*, PassRefPtr<DataCallback>);
    275275    void runJavaScriptInMainFrame(const String&, PassRefPtr<StringCallback>);
    276 
     276    void forceRepaint(PassRefPtr<VoidCallback>);
     277   
    277278    float headerHeight(WebFrameProxy*);
    278279    float footerHeight(WebFrameProxy*);
     
    511512    void didReceiveEvent(uint32_t opaqueType, bool handled);
    512513
     514    void voidCallback(uint64_t);
    513515    void dataCallback(const CoreIPC::DataReference&, uint64_t);
    514516    void stringCallback(const String&, uint64_t);
     
    557559#endif
    558560
     561    HashMap<uint64_t, RefPtr<VoidCallback> > m_voidCallbacks;
    559562    HashMap<uint64_t, RefPtr<DataCallback> > m_dataCallbacks;
    560563    HashMap<uint64_t, RefPtr<StringCallback> > m_stringCallbacks;
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in

    r76361 r76452  
    114114
    115115    # Callback messages
     116    VoidCallback(uint64_t callbackID)
    116117    DataCallback(CoreIPC::DataReference resultData, uint64_t callbackID)
    117118    StringCallback(WTF::String resultString, uint64_t callbackID)
  • trunk/Source/WebKit2/WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp

    r76061 r76452  
    9696}
    9797
     98void ChunkedUpdateDrawingArea::forceRepaint()
     99{
     100    m_isWaitingForUpdate = false;
     101    display();
     102}
     103
    98104void ChunkedUpdateDrawingArea::scheduleDisplay()
    99105{
  • trunk/Source/WebKit2/WebProcess/WebPage/ChunkedUpdateDrawingArea.h

    r76061 r76452  
    4343    virtual void scroll(const WebCore::IntRect& scrollRect, const WebCore::IntSize& scrollOffset);
    4444    virtual void display();
     45    virtual void forceRepaint();
    4546
    4647#if USE(ACCELERATED_COMPOSITING)
  • trunk/Source/WebKit2/WebProcess/WebPage/DrawingArea.h

    r76417 r76452  
    5757
    5858    virtual void pageBackgroundTransparencyChanged() { }
     59    virtual void onPageClose() { }
     60    virtual void forceRepaint() { }
    5961
    60     virtual void onPageClose() { }
    61    
    6262#if USE(ACCELERATED_COMPOSITING)
    6363    virtual void attachCompositingContext() = 0;
  • trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp

    r76434 r76452  
    11881188}
    11891189
     1190void WebPage::forceRepaint(uint64_t callbackID)
     1191{
     1192    m_drawingArea->forceRepaint();
     1193    send(Messages::WebPageProxy::VoidCallback(callbackID));
     1194}
     1195   
    11901196void WebPage::preferencesDidChange(const WebPreferencesStore& store)
    11911197{
  • trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h

    r76403 r76452  
    376376    void getWebArchiveOfFrame(uint64_t frameID, uint64_t callbackID);
    377377    void runJavaScriptInMainFrame(const String&, uint64_t callbackID);
     378    void forceRepaint(uint64_t callbackID);
    378379
    379380    void preferencesDidChange(const WebPreferencesStore&);
  • trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in

    r76403 r76452  
    6565    GetWebArchiveOfFrame(uint64_t frameID, uint64_t callbackID)
    6666    RunJavaScriptInMainFrame(WTF::String script, uint64_t callbackID)
     67
     68    # FIXME: This should be a drawing area message.
     69    ForceRepaint(uint64_t callbackID)
    6770
    6871    PreferencesDidChange(WebKit::WebPreferencesStore store)
Note: See TracChangeset for help on using the changeset viewer.