Changeset 77546 in webkit


Ignore:
Timestamp:
Feb 3, 2011 3:38:42 PM (13 years ago)
Author:
andersca@apple.com
Message:

2011-02-03 Anders Carlsson <andersca@apple.com>

Reviewed by Dan Bernstein.

Change DidSetSize to take a LayerTreeContext parameter
https://bugs.webkit.org/show_bug.cgi?id=53724

Since SetSize can cause layout to happen, we need to pass along a layer tree context to
the DidSetSize message so the UI process can enter/exit accelerated compositing mode appropriately.


  • Shared/LayerTreeContext.h:
  • Shared/mac/LayerTreeContextMac.mm: Add equality operators to LayerTreeContext.
  • UIProcess/DrawingAreaProxy.h: (WebKit::DrawingAreaProxy::didSetSize): This now takes a LayerTreeContext parameter.


  • UIProcess/DrawingAreaProxy.messages.in: Add LayerTreeContext parameter.
  • UIProcess/DrawingAreaProxyImpl.cpp: Get rid of m_isInAcceleratedCompositingMode and use the current layer context instead.

(WebKit::DrawingAreaProxyImpl::paint):
Bail if the call to DidSetSize ended up entering accelerated compositing mode.

(WebKit::DrawingAreaProxyImpl::didSetSize):
If the new layer tree context is different, enter/exit accelerated compositing mode accordingly.

(WebKit::DrawingAreaProxyImpl::enterAcceleratedCompositingMode):
(WebKit::DrawingAreaProxyImpl::exitAcceleratedCompositingMode):
Update the layer tree context.

  • UIProcess/DrawingAreaProxyImpl.h: (WebKit::DrawingAreaProxyImpl::isInAcceleratedCompositingMode): Add simple getter.
  • WebProcess/WebPage/DrawingAreaImpl.cpp: (WebKit::DrawingAreaImpl::setSize): Pass along the layer tree context.
Location:
trunk/Source/WebKit2
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r77534 r77546  
     12011-02-03  Anders Carlsson  <andersca@apple.com>
     2
     3        Reviewed by Dan Bernstein.
     4
     5        Change DidSetSize to take a LayerTreeContext parameter
     6        https://bugs.webkit.org/show_bug.cgi?id=53724
     7
     8        Since SetSize can cause layout to happen, we need to pass along a layer tree context to
     9        the DidSetSize message so the UI process can enter/exit accelerated compositing mode appropriately.
     10       
     11        * Shared/LayerTreeContext.h:
     12        * Shared/mac/LayerTreeContextMac.mm:
     13        Add equality operators to LayerTreeContext.
     14
     15        * UIProcess/DrawingAreaProxy.h:
     16        (WebKit::DrawingAreaProxy::didSetSize):
     17        This now takes a LayerTreeContext parameter.
     18       
     19        * UIProcess/DrawingAreaProxy.messages.in:
     20        Add LayerTreeContext parameter.
     21
     22        * UIProcess/DrawingAreaProxyImpl.cpp:
     23        Get rid of m_isInAcceleratedCompositingMode and use the current layer context instead.
     24
     25        (WebKit::DrawingAreaProxyImpl::paint):
     26        Bail if the call to DidSetSize ended up entering accelerated compositing mode.
     27
     28        (WebKit::DrawingAreaProxyImpl::didSetSize):
     29        If the new layer tree context is different, enter/exit accelerated compositing mode accordingly.
     30
     31        (WebKit::DrawingAreaProxyImpl::enterAcceleratedCompositingMode):
     32        (WebKit::DrawingAreaProxyImpl::exitAcceleratedCompositingMode):
     33        Update the layer tree context.
     34
     35        * UIProcess/DrawingAreaProxyImpl.h:
     36        (WebKit::DrawingAreaProxyImpl::isInAcceleratedCompositingMode):
     37        Add simple getter.
     38
     39        * WebProcess/WebPage/DrawingAreaImpl.cpp:
     40        (WebKit::DrawingAreaImpl::setSize):
     41        Pass along the layer tree context.
     42
    1432011-02-03  Anders Carlsson  <andersca@apple.com>
    244
  • trunk/Source/WebKit2/Shared/LayerTreeContext.h

    r77534 r77546  
    5151};
    5252
     53bool operator==(const LayerTreeContext&, const LayerTreeContext&);
     54
     55inline bool operator!=(const LayerTreeContext& a, const LayerTreeContext& b)
     56{
     57    return !(a == b);
     58}
     59
    5360};
    5461
  • trunk/Source/WebKit2/Shared/mac/LayerTreeContextMac.mm

    r77534 r77546  
    5959}
    6060
     61bool operator==(const LayerTreeContext& a, const LayerTreeContext& b)
     62{
     63    return a.contextID == b.contextID;
     64}
     65
    6166} // namespace WebKit
  • trunk/Source/WebKit2/UIProcess/DrawingAreaProxy.h

    r77533 r77546  
    9898    // FIXME: These should be pure virtual.
    9999    virtual void update(uint64_t sequenceNumber, const UpdateInfo&) { }
    100     virtual void didSetSize(uint64_t sequenceNumber, const UpdateInfo&) { }
     100    virtual void didSetSize(uint64_t sequenceNumber, const UpdateInfo&, const LayerTreeContext&) { }
    101101#if USE(ACCELERATED_COMPOSITING)
    102102    virtual void enterAcceleratedCompositingMode(uint64_t sequenceNumber, const LayerTreeContext&) { }
  • trunk/Source/WebKit2/UIProcess/DrawingAreaProxy.messages.in

    r77533 r77546  
    2323messages -> DrawingAreaProxy {
    2424    Update(uint64_t sequenceNumber, WebKit::UpdateInfo updateInfo)
    25     DidSetSize(uint64_t sequenceNumber, WebKit::UpdateInfo updateInfo)
     25    DidSetSize(uint64_t sequenceNumber, WebKit::UpdateInfo updateInfo, WebKit::LayerTreeContext context)
    2626
    2727#if USE(ACCELERATED_COMPOSITING)
  • trunk/Source/WebKit2/UIProcess/DrawingAreaProxyImpl.cpp

    r77534 r77546  
    5151    : DrawingAreaProxy(DrawingAreaInfo::Impl, webPageProxy)
    5252    , m_isWaitingForDidSetSize(false)
    53     , m_isInAcceleratedCompositingMode(false)
    5453    , m_lastDidSetSizeSequenceNumber(0)
    5554{
     
    6766        return;
    6867
    69     ASSERT(!m_isInAcceleratedCompositingMode);
     68    ASSERT(!isInAcceleratedCompositingMode());
    7069
    7170    if (m_isWaitingForDidSetSize) {
     
    8079    }
    8180
     81    // Dispatching DidSetSize could change the compositing mode, return if that happens.
     82    if (isInAcceleratedCompositingMode())
     83        return;
     84
    8285    m_backingStore->paint(context, rect);
    8386    unpaintedRegion.subtract(IntRect(IntPoint(), m_backingStore->size()));
     
    142145}
    143146
    144 void DrawingAreaProxyImpl::didSetSize(uint64_t sequenceNumber, const UpdateInfo& updateInfo)
     147void DrawingAreaProxyImpl::didSetSize(uint64_t sequenceNumber, const UpdateInfo& updateInfo, const LayerTreeContext& layerTreeContext)
    145148{
    146149    ASSERT(sequenceNumber > m_lastDidSetSizeSequenceNumber);
     
    153156        sendSetSize();
    154157
    155     if (m_isInAcceleratedCompositingMode) {
     158    if (layerTreeContext != m_layerTreeContext) {
     159        if (!m_layerTreeContext.isEmpty()) {
     160            exitAcceleratedCompositingMode();
     161            ASSERT(m_layerTreeContext.isEmpty());
     162        }
     163
     164        if (!layerTreeContext.isEmpty()) {
     165            enterAcceleratedCompositingMode(layerTreeContext);
     166            ASSERT(layerTreeContext == m_layerTreeContext);
     167        }           
     168    }
     169
     170    if (isInAcceleratedCompositingMode()) {
    156171        ASSERT(!m_backingStore);
    157172        return;
     
    180195void DrawingAreaProxyImpl::incorporateUpdate(const UpdateInfo& updateInfo)
    181196{
    182     ASSERT(!m_isInAcceleratedCompositingMode);
     197    ASSERT(!isInAcceleratedCompositingMode());
    183198
    184199    if (updateInfo.updateRectBounds.isEmpty())
     
    216231void DrawingAreaProxyImpl::enterAcceleratedCompositingMode(const LayerTreeContext& layerTreeContext)
    217232{
    218     ASSERT(!m_isInAcceleratedCompositingMode);
    219     m_isInAcceleratedCompositingMode = true;
    220    
     233    ASSERT(!isInAcceleratedCompositingMode());
     234
    221235    m_backingStore = nullptr;
     236    m_layerTreeContext = layerTreeContext;
    222237    m_webPageProxy->enterAcceleratedCompositingMode(layerTreeContext);
    223238}
     
    225240void DrawingAreaProxyImpl::exitAcceleratedCompositingMode()
    226241{
    227     ASSERT(m_isInAcceleratedCompositingMode);
    228     m_isInAcceleratedCompositingMode = false;
    229    
     242    ASSERT(isInAcceleratedCompositingMode());
     243
     244    m_layerTreeContext = LayerTreeContext();   
    230245    m_webPageProxy->exitAcceleratedCompositingMode();
    231246}
  • trunk/Source/WebKit2/UIProcess/DrawingAreaProxyImpl.h

    r77534 r77546  
    2929#include "BackingStore.h"
    3030#include "DrawingAreaProxy.h"
     31#include "LayerTreeContext.h"
    3132
    3233namespace WebKit {
     
    5657    // CoreIPC message handlers
    5758    virtual void update(uint64_t sequenceNumber, const UpdateInfo&);
    58     virtual void didSetSize(uint64_t sequenceNumber, const UpdateInfo&);
     59    virtual void didSetSize(uint64_t sequenceNumber, const UpdateInfo&, const LayerTreeContext&);
    5960    virtual void enterAcceleratedCompositingMode(uint64_t sequenceNumber, const LayerTreeContext&);
    6061    virtual void exitAcceleratedCompositingMode(uint64_t sequenceNumber);
     
    6667    void exitAcceleratedCompositingMode();
    6768
     69    bool isInAcceleratedCompositingMode() const { return !m_layerTreeContext.isEmpty(); }
     70
     71    // The current layer tree context.
     72    LayerTreeContext m_layerTreeContext;
     73   
    6874    // Whether we've sent a SetSize message and are now waiting for a DidSetSize message.
    6975    // Used to throttle SetSize messages so we don't send them faster than the Web process can handle.
    7076    bool m_isWaitingForDidSetSize;
    71 
    72     // Whether we're in accelerated compositing mode or not.
    73     bool m_isInAcceleratedCompositingMode;
    7477
    7578    // The sequence number of the last DidSetSize message
  • trunk/Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.cpp

    r77533 r77546  
    184184
    185185    UpdateInfo updateInfo;
     186    LayerTreeContext layerTreeContext;
     187
     188    if (m_layerTreeHost)
     189        layerTreeContext = m_layerTreeHost->layerTreeContext();
    186190
    187191    if (m_isPaintingSuspended || m_layerTreeHost) {
     
    190194        display(updateInfo);
    191195
    192     m_webPage->send(Messages::DrawingAreaProxy::DidSetSize(generateSequenceNumber(), updateInfo));
     196    m_webPage->send(Messages::DrawingAreaProxy::DidSetSize(generateSequenceNumber(), updateInfo, layerTreeContext));
    193197
    194198    m_inSetSize = false;
Note: See TracChangeset for help on using the changeset viewer.