1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef TiledLayerChromium_h
6 #define TiledLayerChromium_h
8 #if USE(ACCELERATED_COMPOSITING)
10 #include "CCLayerTilingData.h"
11 #include "LayerChromium.h"
12 #include "LayerTextureUpdater.h"
17 class TiledLayerChromium
: public LayerChromium
{
19 enum TilingOption
{ AlwaysTile
, NeverTile
, AutoTile
};
21 virtual ~TiledLayerChromium();
23 virtual void setIsMask(bool) OVERRIDE
;
25 virtual void pushPropertiesTo(CCLayerImpl
*) OVERRIDE
;
27 virtual bool drawsContent() const OVERRIDE
;
28 virtual bool needsContentsScale() const OVERRIDE
;
30 virtual IntSize
contentBounds() const OVERRIDE
;
32 virtual void setNeedsDisplayRect(const FloatRect
&) OVERRIDE
;
34 virtual void setUseLCDText(bool) OVERRIDE
;
36 virtual void setLayerTreeHost(CCLayerTreeHost
*) OVERRIDE
;
38 virtual void setTexturePriorities(const CCPriorityCalculator
&) OVERRIDE
;
40 virtual Region
visibleContentOpaqueRegion() const OVERRIDE
;
42 virtual void update(CCTextureUpdateQueue
&, const CCOcclusionTracker
*, CCRenderingStats
&) OVERRIDE
;
47 void updateTileSizeAndTilingOption();
50 // Exposed to subclasses for testing.
51 void setTileSize(const IntSize
&);
52 void setTextureFormat(GC3Denum textureFormat
) { m_textureFormat
= textureFormat
; }
53 void setBorderTexelOption(CCLayerTilingData::BorderTexelOption
);
54 void setSampledTexelFormat(LayerTextureUpdater::SampledTexelFormat sampledTexelFormat
) { m_sampledTexelFormat
= sampledTexelFormat
; }
55 size_t numPaintedTiles() { return m_tiler
->tiles().size(); }
57 virtual LayerTextureUpdater
* textureUpdater() const = 0;
58 virtual void createTextureUpdaterIfNeeded() = 0;
60 // Set invalidations to be potentially repainted during update().
61 void invalidateContentRect(const IntRect
& contentRect
);
63 // Reset state on tiles that will be used for updating the layer.
64 void resetUpdateState();
66 // After preparing an update, returns true if more painting is needed.
67 bool needsIdlePaint();
68 IntRect
idlePaintRect();
70 bool skipsDraw() const { return m_skipsDraw
; }
72 // Virtual for testing
73 virtual CCPrioritizedTextureManager
* textureManager() const;
76 virtual PassOwnPtr
<CCLayerImpl
> createCCLayerImpl() OVERRIDE
;
78 void createTilerIfNeeded();
79 void setTilingOption(TilingOption
);
81 bool tileOnlyNeedsPartialUpdate(UpdatableTile
*);
82 bool tileNeedsBufferedUpdate(UpdatableTile
*);
84 void markOcclusionsAndRequestTextures(int left
, int top
, int right
, int bottom
, const CCOcclusionTracker
*);
86 bool updateTiles(int left
, int top
, int right
, int bottom
, CCTextureUpdateQueue
&, const CCOcclusionTracker
*, CCRenderingStats
&, bool& didPaint
);
87 bool haveTexturesForTiles(int left
, int top
, int right
, int bottom
, bool ignoreOcclusions
);
88 IntRect
markTilesForUpdate(int left
, int top
, int right
, int bottom
, bool ignoreOcclusions
);
89 void updateTileTextures(const IntRect
& paintRect
, int left
, int top
, int right
, int bottom
, CCTextureUpdateQueue
&, const CCOcclusionTracker
*, CCRenderingStats
&);
91 UpdatableTile
* tileAt(int, int) const;
92 UpdatableTile
* createTile(int, int);
94 GC3Denum m_textureFormat
;
97 LayerTextureUpdater::SampledTexelFormat m_sampledTexelFormat
;
99 TilingOption m_tilingOption
;
100 OwnPtr
<CCLayerTilingData
> m_tiler
;
104 #endif // USE(ACCELERATED_COMPOSITING)