TiledLayerChromium.h [plain text]
#ifndef TiledLayerChromium_h
#define TiledLayerChromium_h
#if USE(ACCELERATED_COMPOSITING)
#include "LayerChromium.h"
#include "cc/CCLayerTilingData.h"
#include "cc/CCTiledLayerImpl.h"
namespace WebCore {
class LayerTextureUpdater;
class UpdatableTile;
class TiledLayerChromium : public LayerChromium {
public:
enum TilingOption { AlwaysTile, NeverTile, AutoTile };
virtual ~TiledLayerChromium();
virtual void setIsMask(bool) OVERRIDE;
virtual void pushPropertiesTo(CCLayerImpl*) OVERRIDE;
virtual bool drawsContent() const OVERRIDE;
virtual bool needsContentsScale() const OVERRIDE;
virtual IntSize contentBounds() const OVERRIDE;
virtual void setNeedsDisplayRect(const FloatRect&) OVERRIDE;
virtual void setIsNonCompositedContent(bool) OVERRIDE;
virtual void setLayerTreeHost(CCLayerTreeHost*) OVERRIDE;
void protectTileTextures(const IntRect& layerRect);
virtual void reserveTextures() OVERRIDE;
virtual Region visibleContentOpaqueRegion() const OVERRIDE;
protected:
TiledLayerChromium();
void updateTileSizeAndTilingOption();
void updateBounds();
void setTileSize(const IntSize&);
void setTextureFormat(GC3Denum textureFormat) { m_textureFormat = textureFormat; }
void setBorderTexelOption(CCLayerTilingData::BorderTexelOption);
void setSampledTexelFormat(LayerTextureUpdater::SampledTexelFormat sampledTexelFormat) { m_sampledTexelFormat = sampledTexelFormat; }
size_t numPaintedTiles() { return m_tiler->tiles().size(); }
virtual LayerTextureUpdater* textureUpdater() const = 0;
virtual void createTextureUpdaterIfNeeded() = 0;
void invalidateRect(const IntRect& layerRect);
void resetUpdateState();
void updateLayerRect(CCTextureUpdater&, const IntRect& layerRect, const CCOcclusionTracker*);
void idleUpdateLayerRect(CCTextureUpdater&, const IntRect& layerRect, const CCOcclusionTracker*);
bool needsIdlePaint(const IntRect& layerRect);
IntRect idlePaintRect(const IntRect& visibleLayerRect);
bool skipsDraw() const { return m_skipsDraw; }
virtual void protectVisibleTileTextures() OVERRIDE;
virtual TextureManager* textureManager() const;
private:
virtual PassOwnPtr<CCLayerImpl> createCCLayerImpl() OVERRIDE;
void createTilerIfNeeded();
void setTilingOption(TilingOption);
bool tileOnlyNeedsPartialUpdate(UpdatableTile*);
bool tileNeedsBufferedUpdate(UpdatableTile*);
void updateTiles(bool idle, int left, int top, int right, int bottom, CCTextureUpdater&, const CCOcclusionTracker*);
UpdatableTile* tileAt(int, int) const;
UpdatableTile* createTile(int, int);
GC3Denum m_textureFormat;
bool m_skipsDraw;
bool m_skipsIdlePaint;
LayerTextureUpdater::SampledTexelFormat m_sampledTexelFormat;
bool m_didPaint;
TilingOption m_tilingOption;
OwnPtr<CCLayerTilingData> m_tiler;
};
}
#endif // USE(ACCELERATED_COMPOSITING)
#endif