Changeset 71210 in webkit


Ignore:
Timestamp:
Nov 2, 2010 9:16:58 PM (14 years ago)
Author:
commit-queue@webkit.org
Message:

2010-11-02 Al Patrick <apatrick@chromium.org>

Reviewed by Kenneth Russell.

Added PluginLayerChromium, which composites plugin instances that have an associated OpenGL backing texture.

https://bugs.webkit.org/show_bug.cgi?id=48032

  • WebCore.gypi:
  • loader/SubframeLoader.cpp (WebCore::SubframeLoader::loadPlugin):
  • platform/graphics/chromium/LayerChromium.cpp: (WebCore::LayerChromium::setNeedsDisplay):
  • platform/graphics/chromium/LayerRendererChromium.cpp: (WebCore::LayerRendererChromium::initializeSharedObjects): (WebCore::LayerRendererChromium::cleanupSharedObjects):
  • platform/graphics/chromium/LayerRendererChromium.h: (WebCore::LayerRendererChromium::pluginLayerSharedValues):
  • platform/graphics/chromium/PluginLayerChromium.cpp: Added. (WebCore::PluginLayerChromium::SharedValues::SharedValues): (WebCore::PluginLayerChromium::SharedValues::~SharedValues): (WebCore::PluginLayerChromium::create): (WebCore::PluginLayerChromium::PluginLayerChromium): (WebCore::PluginLayerChromium::updateContents): (WebCore::PluginLayerChromium::draw):
  • platform/graphics/chromium/PluginLayerChromium.h: Added. (WebCore::PluginLayerChromium::drawsContent): (WebCore::PluginLayerChromium::setTextureId): (WebCore::PluginLayerChromium::SharedValues::shaderProgram): (WebCore::PluginLayerChromium::SharedValues::shaderSamplerLocation): (WebCore::PluginLayerChromium::SharedValues::shaderMatrixLocation): (WebCore::PluginLayerChromium::SharedValues::shaderAlphaLocation): (WebCore::PluginLayerChromium::SharedValues::initialized):

2010-11-02 Al Patrick <apatrick@chromium.org>

Reviewed by Kenneth Russell.

[chromium] Plugin instances can propagate the ID of the OpenGL texture they render to.

https://bugs.webkit.org/show_bug.cgi?id=48032

  • public/WebPlugin.h: (WebKit::WebPlugin::getBackingTextureId):
  • public/WebPluginContainer.h: (WebKit::WebPluginContainer::commitBackingTexture):
  • src/WebPluginContainerImpl.cpp: (WebKit::WebPluginContainerImpl::commitBackingTexture): (WebKit::WebPluginContainerImpl::platformLayer): (WebKit::WebPluginContainerImpl::WebPluginContainerImpl):
  • src/WebPluginContainerImpl.h:
Location:
trunk
Files:
2 added
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r71209 r71210  
     12010-11-02  Al Patrick  <apatrick@chromium.org>
     2
     3        Reviewed by Kenneth Russell.
     4
     5        Added PluginLayerChromium, which composites plugin instances that have an associated OpenGL backing texture.
     6
     7        https://bugs.webkit.org/show_bug.cgi?id=48032
     8
     9        * WebCore.gypi:
     10        * loader/SubframeLoader.cpp
     11        (WebCore::SubframeLoader::loadPlugin):
     12        * platform/graphics/chromium/LayerChromium.cpp:
     13        (WebCore::LayerChromium::setNeedsDisplay):
     14        * platform/graphics/chromium/LayerRendererChromium.cpp:
     15        (WebCore::LayerRendererChromium::initializeSharedObjects):
     16        (WebCore::LayerRendererChromium::cleanupSharedObjects):
     17        * platform/graphics/chromium/LayerRendererChromium.h:
     18        (WebCore::LayerRendererChromium::pluginLayerSharedValues):
     19        * platform/graphics/chromium/PluginLayerChromium.cpp: Added.
     20        (WebCore::PluginLayerChromium::SharedValues::SharedValues):
     21        (WebCore::PluginLayerChromium::SharedValues::~SharedValues):
     22        (WebCore::PluginLayerChromium::create):
     23        (WebCore::PluginLayerChromium::PluginLayerChromium):
     24        (WebCore::PluginLayerChromium::updateContents):
     25        (WebCore::PluginLayerChromium::draw):
     26        * platform/graphics/chromium/PluginLayerChromium.h: Added.
     27        (WebCore::PluginLayerChromium::drawsContent):
     28        (WebCore::PluginLayerChromium::setTextureId):
     29        (WebCore::PluginLayerChromium::SharedValues::shaderProgram):
     30        (WebCore::PluginLayerChromium::SharedValues::shaderSamplerLocation):
     31        (WebCore::PluginLayerChromium::SharedValues::shaderMatrixLocation):
     32        (WebCore::PluginLayerChromium::SharedValues::shaderAlphaLocation):
     33        (WebCore::PluginLayerChromium::SharedValues::initialized):
     34
    1352010-11-02  James Simonsen  <simonjam@chromium.org>
    236
  • trunk/WebCore/WebCore.gypi

    r71143 r71210  
    24562456            'platform/graphics/chromium/MediaPlayerPrivateChromium.h',
    24572457            'platform/graphics/chromium/PlatformIcon.h',
     2458            'platform/graphics/chromium/PluginLayerChromium.cpp',
     2459            'platform/graphics/chromium/PluginLayerChromium.h',
    24582460            'platform/graphics/chromium/SimpleFontDataChromiumWin.cpp',
    24592461            'platform/graphics/chromium/SimpleFontDataLinux.cpp',
  • trunk/WebCore/loader/SubframeLoader.cpp

    r69938 r71210  
    367367    renderer->setWidget(widget);
    368368    m_containsPlugins = true;
    369 
    370 #if ENABLE(PLUGIN_PROXY_FOR_VIDEO)
     369 
     370#if ENABLE(PLUGIN_PROXY_FOR_VIDEO) || ENABLE(3D_PLUGIN)
    371371    pluginElement->setNeedsStyleRecalc(SyntheticStyleChange);
    372372#endif
  • trunk/WebCore/platform/graphics/chromium/LayerChromium.cpp

    r70543 r71210  
    371371    m_dirtyRect.setSize(m_bounds);
    372372    m_contentsDirty = true;
     373    setNeedsCommit();
    373374}
    374375
  • trunk/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp

    r70010 r71210  
    731731    m_canvasLayerSharedValues = adoptPtr(new CanvasLayerChromium::SharedValues(m_context.get()));
    732732    m_videoLayerSharedValues = adoptPtr(new VideoLayerChromium::SharedValues(m_context.get()));
    733     if (!m_layerSharedValues->initialized() || !m_contentLayerSharedValues->initialized() || !m_canvasLayerSharedValues->initialized() || !m_videoLayerSharedValues->initialized()) {
     733    m_pluginLayerSharedValues = adoptPtr(new PluginLayerChromium::SharedValues(m_context.get()));
     734
     735    if (!m_layerSharedValues->initialized() || !m_contentLayerSharedValues->initialized() || !m_canvasLayerSharedValues->initialized()
     736        || !m_videoLayerSharedValues->initialized() || !m_pluginLayerSharedValues->initialized()) {
    734737        cleanupSharedObjects();
    735738        return false;
     
    747750    m_canvasLayerSharedValues.clear();
    748751    m_videoLayerSharedValues.clear();
     752    m_pluginLayerSharedValues.clear();
    749753
    750754    if (m_scrollShaderProgram) {
  • trunk/WebCore/platform/graphics/chromium/LayerRendererChromium.h

    r70543 r71210  
    3939#include "IntRect.h"
    4040#include "LayerChromium.h"
     41#include "PluginLayerChromium.h"
    4142#include "SkBitmap.h"
    4243#include "VideoLayerChromium.h"
     
    108109    const CanvasLayerChromium::SharedValues* canvasLayerSharedValues() const { return m_canvasLayerSharedValues.get(); }
    109110    const VideoLayerChromium::SharedValues* videoLayerSharedValues() const { return m_videoLayerSharedValues.get(); }
     111    const PluginLayerChromium::SharedValues* pluginLayerSharedValues() const { return m_pluginLayerSharedValues.get(); }
    110112
    111113    void resizeOnscreenContent(const IntSize&);
     
    181183    OwnPtr<CanvasLayerChromium::SharedValues> m_canvasLayerSharedValues;
    182184    OwnPtr<VideoLayerChromium::SharedValues> m_videoLayerSharedValues;
     185    OwnPtr<PluginLayerChromium::SharedValues> m_pluginLayerSharedValues;
    183186
    184187    RefPtr<GraphicsContext3D> m_context;
  • trunk/WebKit/chromium/ChangeLog

    r71206 r71210  
     12010-11-02  Al Patrick  <apatrick@chromium.org>
     2
     3        Reviewed by Kenneth Russell.
     4
     5        [chromium] Plugin instances can propagate the ID of the OpenGL texture they render to.
     6
     7        https://bugs.webkit.org/show_bug.cgi?id=48032
     8
     9        * public/WebPlugin.h:
     10        (WebKit::WebPlugin::getBackingTextureId):
     11        * public/WebPluginContainer.h:
     12        (WebKit::WebPluginContainer::commitBackingTexture):
     13        * src/WebPluginContainerImpl.cpp:
     14        (WebKit::WebPluginContainerImpl::commitBackingTexture):
     15        (WebKit::WebPluginContainerImpl::platformLayer):
     16        (WebKit::WebPluginContainerImpl::WebPluginContainerImpl):
     17        * src/WebPluginContainerImpl.h:
     18
    1192010-11-02  Kavita Kanetkar  <kkanetkar@chromium.org>
    220
  • trunk/WebKit/chromium/public/WebPlugin.h

    r69154 r71210  
    6565        const WebRect& frameRect, const WebRect& clipRect,
    6666        const WebVector<WebRect>& cutOutsRects, bool isVisible) = 0;
     67   
     68    // If the plugin instance is backed by an OpenGL texture, return its ID in the
     69    // compositors namespace. Otherwise return 0. Returns 0 by default.
     70    virtual unsigned getBackingTextureId() { return 0; }
    6771
    6872    virtual void updateFocus(bool) = 0;
  • trunk/WebKit/chromium/public/WebPluginContainer.h

    r71186 r71210  
    5555    // WebPlugin::updateGeometry.
    5656    virtual void reportGeometry() = 0;
    57 
     57   
     58    // Called when the backing texture is ready to be composited.
     59    virtual void commitBackingTexture() {}
     60   
    5861    // Drop any references to script objects allocated by the plugin.
    5962    // These are objects derived from WebPlugin::scriptableObject.  This is
  • trunk/WebKit/chromium/src/WebPluginContainerImpl.cpp

    r71186 r71210  
    3434#include "Chrome.h"
    3535#include "ChromeClientImpl.h"
     36#include "PluginLayerChromium.h"
    3637#include "WebClipboard.h"
    3738#include "WebCursorInfo.h"
     
    307308}
    308309
     310void WebPluginContainerImpl::commitBackingTexture()
     311{
     312#if USE(ACCELERATED_COMPOSITING)
     313    if (platformLayer())
     314        platformLayer()->setNeedsDisplay();
     315#endif
     316}
     317
    309318void WebPluginContainerImpl::clearScriptObjects()
    310319{
     
    413422}
    414423
     424#if USE(ACCELERATED_COMPOSITING)
     425WebCore::LayerChromium* WebPluginContainerImpl::platformLayer() const
     426{
     427    // FIXME: In the event of a context lost, the texture needs to be recreated on the compositor's
     428    // context and rebound to the platform layer here.
     429    unsigned backingTextureId = m_webPlugin->getBackingTextureId();
     430    if (!backingTextureId)
     431        return 0;
     432
     433    m_platformLayer->setTextureId(backingTextureId);
     434
     435    return m_platformLayer.get();
     436}
     437#endif
     438
    415439// Private methods -------------------------------------------------------------
     440
     441WebPluginContainerImpl::WebPluginContainerImpl(WebCore::HTMLPlugInElement* element, WebPlugin* webPlugin)
     442    : WebCore::PluginViewBase(0)
     443    , m_element(element)
     444    , m_webPlugin(webPlugin)
     445#if USE(ACCELERATED_COMPOSITING)
     446    , m_platformLayer(PluginLayerChromium::create(0))
     447#endif
     448{
     449}
    416450
    417451WebPluginContainerImpl::~WebPluginContainerImpl()
  • trunk/WebKit/chromium/src/WebPluginContainerImpl.h

    r71186 r71210  
    3232#define WebPluginContainerImpl_h
    3333
     34#include "PluginViewBase.h"
    3435#include "WebPluginContainer.h"
     36#include "Widget.h"
    3537
    36 #include "Widget.h"
    3738#include <wtf/PassRefPtr.h>
    3839#include <wtf/Vector.h>
     
    4445class IntRect;
    4546class KeyboardEvent;
     47class LayerChromium;
    4648class MouseEvent;
     49class PluginLayerChromium;
    4750class ResourceError;
    4851class ResourceResponse;
     
    5558class WebPluginLoadObserver;
    5659
    57 class WebPluginContainerImpl : public WebCore::Widget, public WebPluginContainer {
     60class WebPluginContainerImpl : public WebCore::PluginViewBase, public WebPluginContainer {
    5861public:
    5962    static PassRefPtr<WebPluginContainerImpl> create(WebCore::HTMLPlugInElement* element, WebPlugin* webPlugin)
     
    8285    virtual void scrollRect(int dx, int dy, const WebRect&);
    8386    virtual void reportGeometry();
     87    virtual void commitBackingTexture();
    8488    virtual void clearScriptObjects();
    8589    virtual NPObject* scriptableObjectForElement();
    8690    virtual WebString executeScriptURL(const WebURL&, bool popupsAllowed);
    8791    virtual void loadFrameRequest(const WebURLRequest&, const WebString& target, bool notifyNeeded, void* notifyData);
    88     virtual void zoomLevelChanged(double zoomLevel);
     92    virtual void zoomLevelChanged(double zoomLevel);   
    8993
    9094    // This cannot be null.
     
    119123    void willDestroyPluginLoadObserver(WebPluginLoadObserver*);
    120124
     125#if USE(ACCELERATED_COMPOSITING)
     126    virtual WebCore::LayerChromium* platformLayer() const;
     127#endif
     128
    121129private:
    122     WebPluginContainerImpl(WebCore::HTMLPlugInElement* element, WebPlugin* webPlugin)
    123         : m_element(element)
    124         , m_webPlugin(webPlugin) { }
     130    WebPluginContainerImpl(WebCore::HTMLPlugInElement* element, WebPlugin* webPlugin);
    125131    ~WebPluginContainerImpl();
    126132
     
    140146    WebPlugin* m_webPlugin;
    141147    Vector<WebPluginLoadObserver*> m_pluginLoadObservers;
     148
     149#if USE(ACCELERATED_COMPOSITING)
     150    RefPtr<WebCore::PluginLayerChromium> m_platformLayer;
     151#endif
    142152};
    143153
Note: See TracChangeset for help on using the changeset viewer.