Changeset 66777 in webkit


Ignore:
Timestamp:
Sep 3, 2010 4:24:14 PM (14 years ago)
Author:
vangelis@chromium.org
Message:

2010-09-02 Vangelis Kokkevis <vangelis@chromium.org>

Reviewed by Darin Fisher.

[chromium] Revert to software compositing if the accelerated
compositor fails to initialize. If we tried to initialize the compositor
for this WebView and failed, next time the associated chrome client is
asked whether it can do accelerated compositing it will return false.
https://bugs.webkit.org/show_bug.cgi?id=45124


  • src/ChromeClientImpl.cpp: (WebKit::ChromeClientImpl::allowsAcceleratedCompositing):
  • src/ChromeClientImpl.h:
  • src/WebViewImpl.cpp: (WebKit::WebViewImpl::WebViewImpl): (WebKit::WebViewImpl::paint): (WebKit::WebViewImpl::allowsAcceleratedCompositing): (WebKit::WebViewImpl::setIsAcceleratedCompositingActive): (WebKit::WebViewImpl::getOnscreenGLES2Context):
  • src/WebViewImpl.h:

2010-09-02 Vangelis Kokkevis <vangelis@chromium.org>

Reviewed by Darin Fisher.

[chromium] Gracefully switch over to software compositing if the accelerated
compositor fails to initialize. LayerRendererChromium::create() will now return 0
if the GLES2Context passed to it is NULL or the LayerRendererChromium failed to initialize
hardware rendering.
https://bugs.webkit.org/show_bug.cgi?id=45124


Tested by forcing the creation of the gles2 context to fail and loading pages that normally trigger
the compositor.

  • platform/graphics/chromium/LayerRendererChromium.cpp: (WebCore::LayerRendererChromium::create): (WebCore::LayerRendererChromium::LayerRendererChromium): (WebCore::LayerRendererChromium::makeContextCurrent):
Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r66776 r66777  
     12010-09-02  Vangelis Kokkevis  <vangelis@chromium.org>
     2
     3        Reviewed by Darin Fisher.
     4
     5        [chromium] Gracefully switch over to software compositing if the accelerated
     6        compositor fails to initialize. LayerRendererChromium::create() will now return 0
     7        if the GLES2Context passed to it is NULL or the LayerRendererChromium failed to initialize
     8        hardware rendering.
     9        https://bugs.webkit.org/show_bug.cgi?id=45124
     10       
     11        Tested by forcing the creation of the gles2 context to fail and loading pages that normally trigger
     12        the compositor.
     13
     14        * platform/graphics/chromium/LayerRendererChromium.cpp:
     15        (WebCore::LayerRendererChromium::create):
     16        (WebCore::LayerRendererChromium::LayerRendererChromium):
     17        (WebCore::LayerRendererChromium::makeContextCurrent):
     18
    1192010-09-03  Peter Kasting  <pkasting@google.com>
    220
  • trunk/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp

    r66746 r66777  
    7878PassOwnPtr<LayerRendererChromium> LayerRendererChromium::create(PassOwnPtr<GLES2Context> gles2Context)
    7979{
    80     return new LayerRendererChromium(gles2Context);
     80    if (!gles2Context)
     81        return 0;
     82
     83    OwnPtr<LayerRendererChromium> layerRenderer(new LayerRendererChromium(gles2Context));
     84    if (!layerRenderer->hardwareCompositing())
     85        return 0;
     86
     87    return layerRenderer.release();
    8188}
    8289
     
    9299    , m_gles2Context(gles2Context)
    93100{
    94     m_hardwareCompositing = (m_gles2Context && initializeSharedObjects());
     101    m_hardwareCompositing = initializeSharedObjects();
    95102}
    96103
  • trunk/WebKit/chromium/ChangeLog

    r66763 r66777  
     12010-09-02  Vangelis Kokkevis  <vangelis@chromium.org>
     2
     3        Reviewed by Darin Fisher.
     4
     5        [chromium] Revert to software compositing if the accelerated
     6        compositor fails to initialize. If we tried to initialize the compositor
     7        for this WebView and failed, next time the associated chrome client is
     8        asked whether it can do accelerated compositing it will return false.
     9        https://bugs.webkit.org/show_bug.cgi?id=45124
     10       
     11        * src/ChromeClientImpl.cpp:
     12        (WebKit::ChromeClientImpl::allowsAcceleratedCompositing):
     13        * src/ChromeClientImpl.h:
     14        * src/WebViewImpl.cpp:
     15        (WebKit::WebViewImpl::WebViewImpl):
     16        (WebKit::WebViewImpl::paint):
     17        (WebKit::WebViewImpl::allowsAcceleratedCompositing):
     18        (WebKit::WebViewImpl::setIsAcceleratedCompositingActive):
     19        (WebKit::WebViewImpl::getOnscreenGLES2Context):
     20        * src/WebViewImpl.h:
     21
    1222010-09-03  James Robinson  <jamesr@chromium.org>
    223
  • trunk/WebKit/chromium/src/ChromeClientImpl.cpp

    r66746 r66777  
    751751    m_webView->setRootLayerNeedsDisplay();
    752752}
     753
     754bool ChromeClientImpl::allowsAcceleratedCompositing() const
     755{
     756    return m_webView->allowsAcceleratedCompositing();
     757}
    753758#endif
    754759
  • trunk/WebKit/chromium/src/ChromeClientImpl.h

    r66746 r66777  
    151151    // to do an eager layout before the drawing.
    152152    virtual void scheduleCompositingLayerSync();
     153
     154    // Returns true if accelerated compositing is supported.
     155    virtual bool allowsAcceleratedCompositing() const;
    153156#endif
    154157
  • trunk/WebKit/chromium/src/WebViewImpl.cpp

    r66746 r66777  
    266266    , m_layerRenderer(0)
    267267    , m_isAcceleratedCompositingActive(false)
     268    , m_compositorCreationFailed(false)
    268269#endif
    269270#if ENABLE(INPUT_SPEECH)
     
    970971
    971972        // Ask the layer compositor to redraw all the layers.
     973        ASSERT(m_layerRenderer->hardwareCompositing());
    972974        m_layerRenderer->drawLayers(rect, visibleRect, contentRect, IntPoint(view->scrollX(), view->scrollY()));
    973975    }
     
    21062108
    21072109#if USE(ACCELERATED_COMPOSITING)
     2110bool WebViewImpl::allowsAcceleratedCompositing()
     2111{
     2112    return !m_compositorCreationFailed;
     2113}
     2114
    21082115void WebViewImpl::setRootGraphicsLayer(WebCore::PlatformLayer* layer)
    21092116{
     
    21202127    if (active) {
    21212128        m_layerRenderer = LayerRendererChromium::create(getOnscreenGLES2Context());
    2122         if (m_layerRenderer->hardwareCompositing()) {
     2129        if (m_layerRenderer) {
    21232130            m_isAcceleratedCompositingActive = true;
    21242131           
     
    21272134            m_client->didInvalidateRect(IntRect(0, 0, m_size.width, m_size.height));
    21282135        } else {
    2129             m_layerRenderer.clear();
    21302136            m_isAcceleratedCompositingActive = false;
     2137            m_compositorCreationFailed = true;
    21312138        }
    21322139    } else {
     
    22152222PassOwnPtr<GLES2Context> WebViewImpl::getOnscreenGLES2Context()
    22162223{
    2217     return GLES2Context::create(GLES2ContextInternal::create(gles2Context(), false));
     2224    WebGLES2Context* context = gles2Context();
     2225    if (!context)
     2226        return 0;
     2227    return GLES2Context::create(GLES2ContextInternal::create(context, false));
    22182228}
    22192229
  • trunk/WebKit/chromium/src/WebViewImpl.h

    r66746 r66777  
    325325    void setRootLayerNeedsDisplay();
    326326    void setRootGraphicsLayer(WebCore::PlatformLayer*);
     327    bool allowsAcceleratedCompositing();
    327328#endif
    328329    // Onscreen contexts display to the screen associated with this view.
     
    513514    OwnPtr<WebCore::LayerRendererChromium> m_layerRenderer;
    514515    bool m_isAcceleratedCompositingActive;
     516    bool m_compositorCreationFailed;
    515517#endif
    516518    static const WebInputEvent* m_currentInputEvent;
Note: See TracChangeset for help on using the changeset viewer.