Changeset 116731 in webkit


Ignore:
Timestamp:
May 10, 2012 11:33:58 PM (12 years ago)
Author:
commit-queue@webkit.org
Message:

[Chromium] Move instantiation of texture uploader to LayerRendererChromium.
https://bugs.webkit.org/show_bug.cgi?id=85893

Patch by David Reveman <reveman@chromium.org> on 2012-05-10
Reviewed by Adrienne Walker.

Source/WebCore:

Move instantiation of texture uploader to LayerRendererChromium and
allow CCProxy to decide between a throttled or unthrottled uploader
using a flag passed to the LayerRendererChromium constructor.

  • platform/graphics/chromium/LayerRendererChromium.cpp:

(WebCore::LayerRendererChromium::create):
(WebCore::LayerRendererChromium::LayerRendererChromium):
(WebCore::LayerRendererChromium::initializeSharedObjects):

  • platform/graphics/chromium/LayerRendererChromium.h:

(LayerRendererChromium):

  • platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:

(WebCore::CCLayerTreeHostImpl::initializeLayerRenderer):

  • platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:

(CCLayerTreeHostImpl):

  • platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:

(WebCore::CCSingleThreadProxy::initializeLayerRenderer):
(WebCore::CCSingleThreadProxy::recreateContext):

  • platform/graphics/chromium/cc/CCThreadProxy.cpp:

(WebCore::CCThreadProxy::initializeLayerRendererOnImplThread):
(WebCore::CCThreadProxy::recreateContextOnImplThread):

Source/WebKit/chromium:

  • tests/CCLayerTreeHostImplTest.cpp:

(WebKitTests::CCLayerTreeHostImplTest::CCLayerTreeHostImplTest):
(WebKitTests::TEST_F):

  • tests/LayerRendererChromiumTest.cpp:

(FakeLayerRendererChromium::FakeLayerRendererChromium):
(LayerRendererChromiumTest::LayerRendererChromiumTest):
(TEST):

Location:
trunk/Source
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r116730 r116731  
     12012-05-10  David Reveman  <reveman@chromium.org>
     2
     3        [Chromium] Move instantiation of texture uploader to LayerRendererChromium.
     4        https://bugs.webkit.org/show_bug.cgi?id=85893
     5
     6        Reviewed by Adrienne Walker.
     7
     8        Move instantiation of texture uploader to LayerRendererChromium and
     9        allow CCProxy to decide between a throttled or unthrottled uploader
     10        using a flag passed to the LayerRendererChromium constructor.
     11
     12        * platform/graphics/chromium/LayerRendererChromium.cpp:
     13        (WebCore::LayerRendererChromium::create):
     14        (WebCore::LayerRendererChromium::LayerRendererChromium):
     15        (WebCore::LayerRendererChromium::initializeSharedObjects):
     16        * platform/graphics/chromium/LayerRendererChromium.h:
     17        (LayerRendererChromium):
     18        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
     19        (WebCore::CCLayerTreeHostImpl::initializeLayerRenderer):
     20        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
     21        (CCLayerTreeHostImpl):
     22        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
     23        (WebCore::CCSingleThreadProxy::initializeLayerRenderer):
     24        (WebCore::CCSingleThreadProxy::recreateContext):
     25        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
     26        (WebCore::CCThreadProxy::initializeLayerRendererOnImplThread):
     27        (WebCore::CCThreadProxy::recreateContextOnImplThread):
     28
    1292012-05-10  MORITA Hajime  <morrita@google.com>
    230
  • trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp

    r116351 r116731  
    144144}
    145145
     146class UnthrottledTextureUploader : public TextureUploader {
     147    WTF_MAKE_NONCOPYABLE(UnthrottledTextureUploader);
     148public:
     149    static PassOwnPtr<UnthrottledTextureUploader> create()
     150    {
     151        return adoptPtr(new UnthrottledTextureUploader());
     152    }
     153    virtual ~UnthrottledTextureUploader() { }
     154
     155    virtual bool isBusy() { return false; }
     156    virtual void beginUploads() { }
     157    virtual void endUploads() { }
     158    virtual void uploadTexture(GraphicsContext3D* context, LayerTextureUpdater::Texture* texture, TextureAllocator* allocator, const IntRect sourceRect, const IntRect destRect) { texture->updateRect(context, allocator, sourceRect, destRect); }
     159
     160protected:
     161    UnthrottledTextureUploader() { }
     162};
     163
    146164} // anonymous namespace
    147165
     
    195213
    196214
    197 PassOwnPtr<LayerRendererChromium> LayerRendererChromium::create(LayerRendererChromiumClient* client, PassRefPtr<GraphicsContext3D> context, PassOwnPtr<TextureUploader> uploader)
    198 {
    199     OwnPtr<LayerRendererChromium> layerRenderer(adoptPtr(new LayerRendererChromium(client, context, uploader)));
     215PassOwnPtr<LayerRendererChromium> LayerRendererChromium::create(LayerRendererChromiumClient* client, PassRefPtr<GraphicsContext3D> context, TextureUploaderOption textureUploaderSetting)
     216{
     217    OwnPtr<LayerRendererChromium> layerRenderer(adoptPtr(new LayerRendererChromium(client, context, textureUploaderSetting)));
    200218    if (!layerRenderer->initialize())
    201219        return nullptr;
     
    206224LayerRendererChromium::LayerRendererChromium(LayerRendererChromiumClient* client,
    207225                                             PassRefPtr<GraphicsContext3D> context,
    208                                              PassOwnPtr<TextureUploader> uploader)
     226                                             TextureUploaderOption textureUploaderSetting)
    209227    : m_client(client)
    210228    , m_currentRenderSurface(0)
    211229    , m_currentManagedTexture(0)
    212230    , m_offscreenFramebufferId(0)
    213     , m_textureUploader(uploader)
    214231    , m_context(context)
    215232    , m_defaultRenderSurface(0)
     
    217234    , m_isViewportChanged(false)
    218235    , m_isFramebufferDiscarded(false)
     236    , m_textureUploaderSetting(m_textureUploaderSetting)
    219237{
    220238}
     
    13831401                                                           m_capabilities.maxTextureSize);
    13841402    m_textureCopier = AcceleratedTextureCopier::create(m_context.get());
     1403    if (m_textureUploaderSetting == ThrottledUploader)
     1404        m_textureUploader = ThrottledTextureUploader::create(m_context.get());
     1405    else
     1406        m_textureUploader = UnthrottledTextureUploader::create();
    13851407    m_contentsTextureAllocator = TrackingTextureAllocator::create(m_context.get());
    13861408    m_renderSurfaceTextureAllocator = TrackingTextureAllocator::create(m_context.get());
  • trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h

    r116351 r116731  
    7575};
    7676
     77enum TextureUploaderOption { ThrottledUploader, UnthrottledUploader };
     78
    7779// Class that handles drawing of composited render layers using GL.
    7880class LayerRendererChromium {
    7981    WTF_MAKE_NONCOPYABLE(LayerRendererChromium);
    8082public:
    81     static PassOwnPtr<LayerRendererChromium> create(LayerRendererChromiumClient*, PassRefPtr<GraphicsContext3D>, PassOwnPtr<TextureUploader>);
     83    static PassOwnPtr<LayerRendererChromium> create(LayerRendererChromiumClient*, PassRefPtr<GraphicsContext3D>, TextureUploaderOption);
    8284
    8385    ~LayerRendererChromium();
     
    145147    bool isFramebufferDiscarded() const { return m_isFramebufferDiscarded; }
    146148
    147     LayerRendererChromium(LayerRendererChromiumClient*, PassRefPtr<GraphicsContext3D>, PassOwnPtr<TextureUploader>);
     149    LayerRendererChromium(LayerRendererChromiumClient*, PassRefPtr<GraphicsContext3D>, TextureUploaderOption);
    148150    bool initialize();
    149151
     
    299301    bool m_isViewportChanged;
    300302    bool m_isFramebufferDiscarded;
     303    TextureUploaderOption m_textureUploaderSetting;
    301304};
    302305
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp

    r116714 r116731  
    527527}
    528528
    529 bool CCLayerTreeHostImpl::initializeLayerRenderer(PassRefPtr<GraphicsContext3D> context, PassOwnPtr<TextureUploader> uploader)
     529bool CCLayerTreeHostImpl::initializeLayerRenderer(PassRefPtr<GraphicsContext3D> context, TextureUploaderOption textureUploader)
    530530{
    531531    OwnPtr<LayerRendererChromium> layerRenderer;
    532     layerRenderer = LayerRendererChromium::create(this, context, uploader);
     532    layerRenderer = LayerRendererChromium::create(this, context, textureUploader);
    533533
    534534    // Since we now have a new context/layerRenderer, we cannot continue to use the old
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h

    r116351 r116731  
    123123    int frameNumber() const { return m_frameNumber; }
    124124
    125     bool initializeLayerRenderer(PassRefPtr<GraphicsContext3D>, PassOwnPtr<TextureUploader>);
     125    bool initializeLayerRenderer(PassRefPtr<GraphicsContext3D>, TextureUploaderOption);
    126126    bool isContextLost();
    127127    LayerRendererChromium* layerRenderer() { return m_layerRenderer.get(); }
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.cpp

    r116714 r116731  
    3939namespace WebCore {
    4040
    41 class UnthrottledTextureUploader : public TextureUploader {
    42     WTF_MAKE_NONCOPYABLE(UnthrottledTextureUploader);
    43 public:
    44     static PassOwnPtr<UnthrottledTextureUploader> create()
    45     {
    46         return adoptPtr(new UnthrottledTextureUploader());
    47     }
    48     virtual ~UnthrottledTextureUploader() { }
    49 
    50     virtual bool isBusy() { return false; }
    51     virtual void beginUploads() { }
    52     virtual void endUploads() { }
    53     virtual void uploadTexture(GraphicsContext3D* context, LayerTextureUpdater::Texture* texture, TextureAllocator* allocator, const IntRect sourceRect, const IntRect destRect) { texture->updateRect(context, allocator, sourceRect, destRect); }
    54 
    55 protected:
    56     UnthrottledTextureUploader() { }
    57 };
    58 
    5941PassOwnPtr<CCProxy> CCSingleThreadProxy::create(CCLayerTreeHost* layerTreeHost)
    6042{
     
    156138    {
    157139        DebugScopedSetImplThread impl;
    158         bool ok = m_layerTreeHostImpl->initializeLayerRenderer(m_contextBeforeInitialization.release(), UnthrottledTextureUploader::create());
     140        bool ok = m_layerTreeHostImpl->initializeLayerRenderer(m_contextBeforeInitialization.release(), UnthrottledUploader);
    159141        if (ok) {
    160142            m_layerRendererInitialized = true;
     
    180162        DebugScopedSetImplThread impl;
    181163        m_layerTreeHost->deleteContentsTexturesOnImplThread(m_layerTreeHostImpl->contentsTextureAllocator());
    182         initialized = m_layerTreeHostImpl->initializeLayerRenderer(context, UnthrottledTextureUploader::create());
     164        initialized = m_layerTreeHostImpl->initializeLayerRenderer(context, UnthrottledUploader);
    183165        if (initialized) {
    184166            m_layerRendererCapabilitiesForMainThread = m_layerTreeHostImpl->layerRendererCapabilities();
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp

    r116587 r116731  
    5858namespace WebCore {
    5959
    60 // FIXME: remove when ThrottledTextureUploader is ready to be used.
    61 class UnthrottledTextureUploader : public TextureUploader {
    62     WTF_MAKE_NONCOPYABLE(UnthrottledTextureUploader);
    63 public:
    64     static PassOwnPtr<UnthrottledTextureUploader> create(PassRefPtr<GraphicsContext3D> context)
    65     {
    66         return adoptPtr(new UnthrottledTextureUploader(context));
    67     }
    68     virtual ~UnthrottledTextureUploader() { }
    69 
    70     virtual bool isBusy() { return false; }
    71     virtual void beginUploads() { }
    72     virtual void endUploads() { }
    73     virtual void uploadTexture(GraphicsContext3D* context, LayerTextureUpdater::Texture* texture, TextureAllocator* allocator, const IntRect sourceRect, const IntRect destRect) { texture->updateRect(context, allocator, sourceRect, destRect); }
    74 
    75 protected:
    76     explicit UnthrottledTextureUploader(PassRefPtr<GraphicsContext3D>) { }
    77 };
     60namespace {
     61
     62// FIXME: Use ThrottledUploader by default.
     63static TextureUploaderOption textureUploader = UnthrottledUploader;
     64
     65} // anonymous namespace
    7866
    7967PassOwnPtr<CCProxy> CCThreadProxy::create(CCLayerTreeHost* layerTreeHost)
     
    835823    ASSERT(isImplThread());
    836824    ASSERT(m_contextBeforeInitializationOnImplThread);
    837     OwnPtr<TextureUploader> uploader = UnthrottledTextureUploader::create(m_contextBeforeInitializationOnImplThread.get());
    838     *initializeSucceeded = m_layerTreeHostImpl->initializeLayerRenderer(m_contextBeforeInitializationOnImplThread.release(), uploader.release());
     825    *initializeSucceeded = m_layerTreeHostImpl->initializeLayerRenderer(m_contextBeforeInitializationOnImplThread.release(), textureUploader);
    839826    if (*initializeSucceeded) {
    840827        *capabilities = m_layerTreeHostImpl->layerRendererCapabilities();
     
    886873    ASSERT(isImplThread());
    887874    m_layerTreeHost->deleteContentsTexturesOnImplThread(m_layerTreeHostImpl->contentsTextureAllocator());
    888     OwnPtr<TextureUploader> uploader = UnthrottledTextureUploader::create(contextPtr);
    889     *recreateSucceeded = m_layerTreeHostImpl->initializeLayerRenderer(adoptRef(contextPtr), uploader.release());
     875    *recreateSucceeded = m_layerTreeHostImpl->initializeLayerRenderer(adoptRef(contextPtr), textureUploader);
    890876    if (*recreateSucceeded) {
    891877        *capabilities = m_layerTreeHostImpl->layerRendererCapabilities();
  • trunk/Source/WebKit/chromium/ChangeLog

    r116727 r116731  
     12012-05-10  David Reveman  <reveman@chromium.org>
     2
     3        [Chromium] Move instantiation of texture uploader to LayerRendererChromium.
     4        https://bugs.webkit.org/show_bug.cgi?id=85893
     5
     6        Reviewed by Adrienne Walker.
     7
     8        * tests/CCLayerTreeHostImplTest.cpp:
     9        (WebKitTests::CCLayerTreeHostImplTest::CCLayerTreeHostImplTest):
     10        (WebKitTests::TEST_F):
     11        * tests/LayerRendererChromiumTest.cpp:
     12        (FakeLayerRendererChromium::FakeLayerRendererChromium):
     13        (LayerRendererChromiumTest::LayerRendererChromiumTest):
     14        (TEST):
     15
    1162012-05-10  Min Qin  <qinmin@google.com>
    217
  • trunk/Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp

    r116587 r116731  
    2929#include "CCAnimationTestCommon.h"
    3030#include "CCLayerTestCommon.h"
    31 #include "CCTiledLayerTestCommon.h"
    3231#include "FakeWebGraphicsContext3D.h"
    3332#include "GraphicsContext3DPrivate.h"
     
    6160        CCSettings settings;
    6261        m_hostImpl = CCLayerTreeHostImpl::create(settings, this);
    63         m_hostImpl->initializeLayerRenderer(createContext(), adoptPtr(new FakeTextureUploader));
     62        m_hostImpl->initializeLayerRenderer(createContext(), UnthrottledUploader);
    6463        m_hostImpl->setViewportSize(IntSize(10, 10));
    6564    }
     
    877876TEST_F(CCLayerTreeHostImplTest, viewportCovered)
    878877{
    879     m_hostImpl->initializeLayerRenderer(createContext(), adoptPtr(new FakeTextureUploader));
     878    m_hostImpl->initializeLayerRenderer(createContext(), UnthrottledUploader);
    880879    m_hostImpl->setBackgroundColor(Color::gray);
    881880
     
    988987    ReshapeTrackerContext* reshapeTracker = new ReshapeTrackerContext();
    989988    RefPtr<GraphicsContext3D> context = GraphicsContext3DPrivate::createGraphicsContextFromWebContext(adoptPtr(reshapeTracker), GraphicsContext3D::RenderDirectlyToHostWindow);
    990     m_hostImpl->initializeLayerRenderer(context, adoptPtr(new FakeTextureUploader));
     989    m_hostImpl->initializeLayerRenderer(context, UnthrottledUploader);
    991990
    992991    CCLayerImpl* root = new FakeDrawableCCLayerImpl(1);
     
    10371036    settings.partialSwapEnabled = true;
    10381037    OwnPtr<CCLayerTreeHostImpl> layerTreeHostImpl = CCLayerTreeHostImpl::create(settings, this);
    1039     layerTreeHostImpl->initializeLayerRenderer(context, adoptPtr(new FakeTextureUploader()));
     1038    layerTreeHostImpl->initializeLayerRenderer(context, UnthrottledUploader);
    10401039    layerTreeHostImpl->setViewportSize(IntSize(500, 500));
    10411040
     
    11361135    EXPECT_FALSE(layer2->didLoseContextCalled());
    11371136
    1138     m_hostImpl->initializeLayerRenderer(createContext(), adoptPtr(new FakeTextureUploader));
     1137    m_hostImpl->initializeLayerRenderer(createContext(), UnthrottledUploader);
    11391138
    11401139    EXPECT_TRUE(root->didLoseContextCalled());
     
    11511150{
    11521151    // The context initialization will fail, but we should still be able to call finishAllRendering() without any ill effects.
    1153     m_hostImpl->initializeLayerRenderer(GraphicsContext3DPrivate::createGraphicsContextFromWebContext(adoptPtr(new FakeWebGraphicsContext3DMakeCurrentFails), GraphicsContext3D::RenderDirectlyToHostWindow), adoptPtr(new FakeTextureUploader));
     1152    m_hostImpl->initializeLayerRenderer(GraphicsContext3DPrivate::createGraphicsContextFromWebContext(adoptPtr(new FakeWebGraphicsContext3DMakeCurrentFails), GraphicsContext3D::RenderDirectlyToHostWindow), UnthrottledUploader);
    11541153    m_hostImpl->finishAllRendering();
    11551154}
     
    11811180        EXPECT_GT(renderPass->quadList().size(), 0u);
    11821181        m_hostImpl->didDrawAllLayers(frame);
    1183         m_hostImpl->initializeLayerRenderer(createContext(), adoptPtr(new FakeTextureUploader));
     1182        m_hostImpl->initializeLayerRenderer(createContext(), UnthrottledUploader);
    11841183    }
    11851184}
     
    13561355    // Lose the context, replacing it with a StrictWebGraphicsContext3D, that
    13571356    // will warn if any resource from the previous context gets used.
    1358     m_hostImpl->initializeLayerRenderer(StrictWebGraphicsContext3D::createGraphicsContext(), adoptPtr(new FakeTextureUploader));
     1357    m_hostImpl->initializeLayerRenderer(StrictWebGraphicsContext3D::createGraphicsContext(), UnthrottledUploader);
    13591358    EXPECT_TRUE(m_hostImpl->prepareToDraw(frame));
    13601359    m_hostImpl->drawLayers(frame);
  • trunk/Source/WebKit/chromium/tests/LayerRendererChromiumTest.cpp

    r116351 r116731  
    2626#include "LayerRendererChromium.h"
    2727
    28 #include "CCTiledLayerTestCommon.h"
    2928#include "FakeWebGraphicsContext3D.h"
    3029#include "GraphicsContext3D.h"
     
    3736using namespace WebCore;
    3837using namespace WebKit;
    39 using namespace WebKitTests;
    4038
    4139class FrameCountingMemoryAllocationSettingContext : public FakeWebGraphicsContext3D {
     
    9492class FakeLayerRendererChromium : public LayerRendererChromium {
    9593public:
    96     FakeLayerRendererChromium(LayerRendererChromiumClient* client, PassRefPtr<GraphicsContext3D> context, PassOwnPtr<TextureUploader> uploader) : LayerRendererChromium(client, context, uploader) { }
     94    FakeLayerRendererChromium(LayerRendererChromiumClient* client, PassRefPtr<GraphicsContext3D> context) : LayerRendererChromium(client, context, UnthrottledUploader) { }
    9795
    9896    // LayerRendererChromium methods.
     
    110108        , m_context(GraphicsContext3DPrivate::createGraphicsContextFromWebContext(adoptPtr(new FrameCountingMemoryAllocationSettingContext()), GraphicsContext3D::RenderDirectlyToHostWindow))
    111109        , m_mockContext(*static_cast<FrameCountingMemoryAllocationSettingContext*>(GraphicsContext3DPrivate::extractWebGraphicsContext3D(m_context.get())))
    112         , m_layerRendererChromium(&m_mockClient, m_context.release(), adoptPtr(new FakeTextureUploader()))
     110        , m_layerRendererChromium(&m_mockClient, m_context.release())
    113111    {
    114112    }
     
    274272{
    275273    FakeLayerRendererChromiumClient mockClient;
    276     FakeLayerRendererChromium layerRendererChromium(&mockClient, GraphicsContext3DPrivate::createGraphicsContextFromWebContext(adoptPtr(new ForbidSynchronousCallContext), GraphicsContext3D::RenderDirectlyToHostWindow), adoptPtr(new FakeTextureUploader()));
     274    FakeLayerRendererChromium layerRendererChromium(&mockClient, GraphicsContext3DPrivate::createGraphicsContextFromWebContext(adoptPtr(new ForbidSynchronousCallContext), GraphicsContext3D::RenderDirectlyToHostWindow));
    277275
    278276    EXPECT_TRUE(layerRendererChromium.initialize());
Note: See TracChangeset for help on using the changeset viewer.