Bug 1207590 - Don't use SingleTiledContentClient for layers that are larger than the maximum texture size. r=mattwoodrow

--HG--
extra : commitid : AqImLRfZYFc
This commit is contained in:
Markus Stange 2015-09-23 12:26:56 +02:00
Родитель cf402a9a94
Коммит a1f6ba9da5
4 изменённых файлов: 27 добавлений и 1 удалений

Просмотреть файл

@ -410,9 +410,16 @@ ClientTiledPaintedLayer::RenderLayer()
ClientManager()->GetPaintedLayerCallback();
void *data = ClientManager()->GetPaintedLayerCallbackData();
IntSize layerSize = mVisibleRegion.GetBounds().Size();
if (mContentClient && !mContentClient->SupportsLayerSize(layerSize, ClientManager())) {
ClearCachedResources();
MOZ_ASSERT(!mContentClient);
}
if (!mContentClient) {
#if defined(MOZ_B2G) || defined(XP_MACOSX)
if (mCreationHint == LayerManager::NONE) {
if (mCreationHint == LayerManager::NONE &&
SingleTiledContentClient::ClientSupportsLayerSize(layerSize, ClientManager())) {
mContentClient = new SingleTiledContentClient(this, ClientManager());
} else
#endif

Просмотреть файл

@ -40,6 +40,19 @@ SingleTiledContentClient::UpdatedBuffer(TiledBufferType aType)
mTiledBuffer->ClearPaintedRegion();
}
/* static */ bool
SingleTiledContentClient::ClientSupportsLayerSize(const IntSize& aSize, ClientLayerManager* aManager)
{
int32_t maxTextureSize = aManager->GetMaxTextureSize();
return aSize.width <= maxTextureSize && aSize.height <= maxTextureSize;
}
bool
SingleTiledContentClient::SupportsLayerSize(const IntSize& aSize, ClientLayerManager* aManager) const
{
return ClientSupportsLayerSize(aSize, aManager);
}
ClientSingleTiledLayerBuffer::ClientSingleTiledLayerBuffer(ClientTiledPaintedLayer* aPaintedLayer,
CompositableClient* aCompositableClient,
ClientLayerManager* aManager)

Просмотреть файл

@ -119,6 +119,7 @@ protected:
}
public:
static bool ClientSupportsLayerSize(const IntSize& aSize, ClientLayerManager* aManager);
virtual void ClearCachedResources() override;
@ -127,6 +128,8 @@ public:
virtual ClientTiledLayerBuffer* GetTiledBuffer() override { return mTiledBuffer; }
virtual ClientTiledLayerBuffer* GetLowPrecisionTiledBuffer() override { return nullptr; }
virtual bool SupportsLayerSize(const IntSize& aSize, ClientLayerManager* aManager) const override;
private:
nsRefPtr<ClientSingleTiledLayerBuffer> mTiledBuffer;
};

Просмотреть файл

@ -623,6 +623,9 @@ public:
};
virtual void UpdatedBuffer(TiledBufferType aType) = 0;
virtual bool SupportsLayerSize(const gfx::IntSize& aSize, ClientLayerManager* aManager) const
{ return true; }
private:
const char* mName;
};