| OLD | NEW |
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CCLayerTreeHost_h | 5 // Temporary forwarding header |
| 6 #define CCLayerTreeHost_h | 6 #include "cc/layer_tree_host.h" |
| 7 | |
| 8 #include "base/basictypes.h" | |
| 9 #include "base/hash_tables.h" | |
| 10 #include "base/memory/ref_counted.h" | |
| 11 #include "base/memory/scoped_ptr.h" | |
| 12 #include "CCAnimationEvents.h" | |
| 13 #include "CCGraphicsContext.h" | |
| 14 #include "CCLayerTreeHostClient.h" | |
| 15 #include "CCLayerTreeHostCommon.h" | |
| 16 #include "CCOcclusionTracker.h" | |
| 17 #include "CCPrioritizedTextureManager.h" | |
| 18 #include "CCProxy.h" | |
| 19 #include "CCRenderingStats.h" | |
| 20 #include "IntRect.h" | |
| 21 #include "RateLimiter.h" | |
| 22 #include "scoped_ptr_vector.h" | |
| 23 #include "SkColor.h" | |
| 24 #include <limits> | |
| 25 | |
| 26 #if defined(COMPILER_GCC) | |
| 27 namespace BASE_HASH_NAMESPACE { | |
| 28 template<> | |
| 29 struct hash<WebKit::WebGraphicsContext3D*> { | |
| 30 size_t operator()(WebKit::WebGraphicsContext3D* ptr) const { | |
| 31 return hash<size_t>()(reinterpret_cast<size_t>(ptr)); | |
| 32 } | |
| 33 }; | |
| 34 } // namespace BASE_HASH_NAMESPACE | |
| 35 #endif // COMPILER | |
| 36 | |
| 37 namespace cc { | |
| 38 | |
| 39 class CCFontAtlas; | |
| 40 class CCLayerChromium; | |
| 41 class CCLayerTreeHostImpl; | |
| 42 class CCLayerTreeHostImplClient; | |
| 43 class CCPrioritizedTextureManager; | |
| 44 class CCTextureUpdateQueue; | |
| 45 class HeadsUpDisplayLayerChromium; | |
| 46 class Region; | |
| 47 struct CCScrollAndScaleSet; | |
| 48 | |
| 49 struct CCLayerTreeSettings { | |
| 50 CCLayerTreeSettings(); | |
| 51 ~CCLayerTreeSettings(); | |
| 52 | |
| 53 bool acceleratePainting; | |
| 54 bool showFPSCounter; | |
| 55 bool showPlatformLayerTree; | |
| 56 bool showPaintRects; | |
| 57 bool showPropertyChangedRects; | |
| 58 bool showSurfaceDamageRects; | |
| 59 bool showScreenSpaceRects; | |
| 60 bool showReplicaScreenSpaceRects; | |
| 61 bool showOccludingRects; | |
| 62 bool renderVSyncEnabled; | |
| 63 double refreshRate; | |
| 64 size_t maxPartialTextureUpdates; | |
| 65 IntSize defaultTileSize; | |
| 66 IntSize maxUntiledLayerSize; | |
| 67 IntSize minimumOcclusionTrackingSize; | |
| 68 | |
| 69 bool showDebugInfo() const { return showPlatformLayerTree || showFPSCounter
|| showDebugRects(); } | |
| 70 bool showDebugRects() const { return showPaintRects || showPropertyChangedRe
cts || showSurfaceDamageRects || showScreenSpaceRects || showReplicaScreenSpaceR
ects || showOccludingRects; } | |
| 71 }; | |
| 72 | |
| 73 // Provides information on an Impl's rendering capabilities back to the CCLayerT
reeHost | |
| 74 struct RendererCapabilities { | |
| 75 RendererCapabilities(); | |
| 76 ~RendererCapabilities(); | |
| 77 | |
| 78 GC3Denum bestTextureFormat; | |
| 79 bool contextHasCachedFrontBuffer; | |
| 80 bool usingPartialSwap; | |
| 81 bool usingAcceleratedPainting; | |
| 82 bool usingSetVisibility; | |
| 83 bool usingSwapCompleteCallback; | |
| 84 bool usingGpuMemoryManager; | |
| 85 bool usingDiscardFramebuffer; | |
| 86 bool usingEglImage; | |
| 87 int maxTextureSize; | |
| 88 }; | |
| 89 | |
| 90 class CCLayerTreeHost : public RateLimiterClient { | |
| 91 public: | |
| 92 static scoped_ptr<CCLayerTreeHost> create(CCLayerTreeHostClient*, const CCLa
yerTreeSettings&); | |
| 93 virtual ~CCLayerTreeHost(); | |
| 94 | |
| 95 void setSurfaceReady(); | |
| 96 | |
| 97 // Returns true if any CCLayerTreeHost is alive. | |
| 98 static bool anyLayerTreeHostInstanceExists(); | |
| 99 | |
| 100 static bool needsFilterContext() { return s_needsFilterContext; } | |
| 101 static void setNeedsFilterContext(bool needsFilterContext) { s_needsFilterCo
ntext = needsFilterContext; } | |
| 102 bool needsSharedContext() const { return needsFilterContext() || settings().
acceleratePainting; } | |
| 103 | |
| 104 // CCLayerTreeHost interface to CCProxy. | |
| 105 void willBeginFrame() { m_client->willBeginFrame(); } | |
| 106 void didBeginFrame() { m_client->didBeginFrame(); } | |
| 107 void updateAnimations(double monotonicFrameBeginTime); | |
| 108 void layout(); | |
| 109 void beginCommitOnImplThread(CCLayerTreeHostImpl*); | |
| 110 void finishCommitOnImplThread(CCLayerTreeHostImpl*); | |
| 111 void willCommit(); | |
| 112 void commitComplete(); | |
| 113 scoped_ptr<CCGraphicsContext> createContext(); | |
| 114 scoped_ptr<CCInputHandler> createInputHandler(); | |
| 115 virtual scoped_ptr<CCLayerTreeHostImpl> createLayerTreeHostImpl(CCLayerTreeH
ostImplClient*); | |
| 116 void didLoseContext(); | |
| 117 enum RecreateResult { | |
| 118 RecreateSucceeded, | |
| 119 RecreateFailedButTryAgain, | |
| 120 RecreateFailedAndGaveUp, | |
| 121 }; | |
| 122 RecreateResult recreateContext(); | |
| 123 void didCommitAndDrawFrame() { m_client->didCommitAndDrawFrame(); } | |
| 124 void didCompleteSwapBuffers() { m_client->didCompleteSwapBuffers(); } | |
| 125 void deleteContentsTexturesOnImplThread(CCResourceProvider*); | |
| 126 virtual void acquireLayerTextures(); | |
| 127 // Returns false if we should abort this frame due to initialization failure
. | |
| 128 bool initializeRendererIfNeeded(); | |
| 129 void updateLayers(CCTextureUpdateQueue&, size_t contentsMemoryLimitBytes); | |
| 130 | |
| 131 CCLayerTreeHostClient* client() { return m_client; } | |
| 132 | |
| 133 // Only used when compositing on the main thread. | |
| 134 void composite(); | |
| 135 void scheduleComposite(); | |
| 136 | |
| 137 // Composites and attempts to read back the result into the provided | |
| 138 // buffer. If it wasn't possible, e.g. due to context lost, will return | |
| 139 // false. | |
| 140 bool compositeAndReadback(void *pixels, const IntRect&); | |
| 141 | |
| 142 void finishAllRendering(); | |
| 143 | |
| 144 int commitNumber() const { return m_commitNumber; } | |
| 145 | |
| 146 void renderingStats(CCRenderingStats*) const; | |
| 147 | |
| 148 const RendererCapabilities& rendererCapabilities() const; | |
| 149 | |
| 150 // Test only hook | |
| 151 void loseContext(int numTimes); | |
| 152 | |
| 153 void setNeedsAnimate(); | |
| 154 // virtual for testing | |
| 155 virtual void setNeedsCommit(); | |
| 156 void setNeedsRedraw(); | |
| 157 bool commitRequested() const; | |
| 158 | |
| 159 void setAnimationEvents(scoped_ptr<CCAnimationEventsVector>, double wallCloc
kTime); | |
| 160 virtual void didAddAnimation(); | |
| 161 | |
| 162 LayerChromium* rootLayer() { return m_rootLayer.get(); } | |
| 163 const LayerChromium* rootLayer() const { return m_rootLayer.get(); } | |
| 164 void setRootLayer(scoped_refptr<LayerChromium>); | |
| 165 | |
| 166 const CCLayerTreeSettings& settings() const { return m_settings; } | |
| 167 | |
| 168 void setViewportSize(const IntSize& layoutViewportSize, const IntSize& devic
eViewportSize); | |
| 169 | |
| 170 const IntSize& layoutViewportSize() const { return m_layoutViewportSize; } | |
| 171 const IntSize& deviceViewportSize() const { return m_deviceViewportSize; } | |
| 172 | |
| 173 void setPageScaleFactorAndLimits(float pageScaleFactor, float minPageScaleFa
ctor, float maxPageScaleFactor); | |
| 174 | |
| 175 void setBackgroundColor(SkColor color) { m_backgroundColor = color; } | |
| 176 | |
| 177 void setHasTransparentBackground(bool transparent) { m_hasTransparentBackgro
und = transparent; } | |
| 178 | |
| 179 CCPrioritizedTextureManager* contentsTextureManager() const; | |
| 180 | |
| 181 // Delete contents textures' backing resources until they use only bytesLimi
t bytes. This may | |
| 182 // be called on the impl thread while the main thread is running. | |
| 183 void reduceContentsTexturesMemoryOnImplThread(size_t bytesLimit, CCResourceP
rovider*); | |
| 184 // Returns true if there any evicted backing textures that have not been del
eted. | |
| 185 bool evictedContentsTexturesBackingsExist() const; | |
| 186 // Retrieve the list of all contents textures' backings that have been evict
ed, to pass to the | |
| 187 // main thread to unlink them from their owning textures. | |
| 188 void getEvictedContentTexturesBackings(CCPrioritizedTextureManager::BackingV
ector&); | |
| 189 // Unlink the list of contents textures' backings from their owning textures
on the main thread | |
| 190 // before updating layers. | |
| 191 void unlinkEvictedContentTexturesBackings(const CCPrioritizedTextureManager:
:BackingVector&); | |
| 192 // Deletes all evicted backings, unlinking them from their owning textures i
f needed. | |
| 193 // Returns true if this function had to unlink any backings from their ownin
g texture when | |
| 194 // destroying them. If this was the case, the impl layer tree may contain in
valid resources. | |
| 195 bool deleteEvictedContentTexturesBackings(); | |
| 196 | |
| 197 bool visible() const { return m_visible; } | |
| 198 void setVisible(bool); | |
| 199 | |
| 200 void startPageScaleAnimation(const IntSize& targetPosition, bool useAnchor,
float scale, double durationSec); | |
| 201 | |
| 202 void applyScrollAndScale(const CCScrollAndScaleSet&); | |
| 203 void setImplTransform(const WebKit::WebTransformationMatrix&); | |
| 204 | |
| 205 void startRateLimiter(WebKit::WebGraphicsContext3D*); | |
| 206 void stopRateLimiter(WebKit::WebGraphicsContext3D*); | |
| 207 | |
| 208 // RateLimitClient implementation | |
| 209 virtual void rateLimit() OVERRIDE; | |
| 210 | |
| 211 bool bufferedUpdates(); | |
| 212 bool requestPartialTextureUpdate(); | |
| 213 void deleteTextureAfterCommit(scoped_ptr<CCPrioritizedTexture>); | |
| 214 | |
| 215 void setDeviceScaleFactor(float); | |
| 216 float deviceScaleFactor() const { return m_deviceScaleFactor; } | |
| 217 | |
| 218 void setFontAtlas(scoped_ptr<CCFontAtlas>); | |
| 219 | |
| 220 HeadsUpDisplayLayerChromium* hudLayer() const { return m_hudLayer.get(); } | |
| 221 | |
| 222 protected: | |
| 223 CCLayerTreeHost(CCLayerTreeHostClient*, const CCLayerTreeSettings&); | |
| 224 bool initialize(); | |
| 225 | |
| 226 private: | |
| 227 typedef std::vector<scoped_refptr<LayerChromium> > LayerList; | |
| 228 | |
| 229 void initializeRenderer(); | |
| 230 | |
| 231 void update(LayerChromium*, CCTextureUpdateQueue&, const CCOcclusionTracker*
); | |
| 232 bool paintLayerContents(const LayerList&, CCTextureUpdateQueue&); | |
| 233 bool paintMasksForRenderSurface(LayerChromium*, CCTextureUpdateQueue&); | |
| 234 | |
| 235 void updateLayers(LayerChromium*, CCTextureUpdateQueue&); | |
| 236 | |
| 237 void prioritizeTextures(const LayerList&, CCOverdrawMetrics&); | |
| 238 void setPrioritiesForSurfaces(size_t surfaceMemoryBytes); | |
| 239 void setPrioritiesForLayers(const LayerList&); | |
| 240 size_t calculateMemoryForRenderSurfaces(const LayerList& updateList); | |
| 241 | |
| 242 void animateLayers(double monotonicTime); | |
| 243 bool animateLayersRecursive(LayerChromium* current, double monotonicTime); | |
| 244 void setAnimationEventsRecursive(const CCAnimationEventsVector&, LayerChromi
um*, double wallClockTime); | |
| 245 | |
| 246 bool m_animating; | |
| 247 bool m_needsAnimateLayers; | |
| 248 | |
| 249 CCLayerTreeHostClient* m_client; | |
| 250 | |
| 251 int m_commitNumber; | |
| 252 CCRenderingStats m_renderingStats; | |
| 253 | |
| 254 scoped_ptr<CCProxy> m_proxy; | |
| 255 bool m_rendererInitialized; | |
| 256 bool m_contextLost; | |
| 257 int m_numTimesRecreateShouldFail; | |
| 258 int m_numFailedRecreateAttempts; | |
| 259 | |
| 260 scoped_refptr<LayerChromium> m_rootLayer; | |
| 261 scoped_refptr<HeadsUpDisplayLayerChromium> m_hudLayer; | |
| 262 scoped_ptr<CCFontAtlas> m_fontAtlas; | |
| 263 | |
| 264 scoped_ptr<CCPrioritizedTextureManager> m_contentsTextureManager; | |
| 265 scoped_ptr<CCPrioritizedTexture> m_surfaceMemoryPlaceholder; | |
| 266 | |
| 267 CCLayerTreeSettings m_settings; | |
| 268 | |
| 269 IntSize m_layoutViewportSize; | |
| 270 IntSize m_deviceViewportSize; | |
| 271 float m_deviceScaleFactor; | |
| 272 | |
| 273 bool m_visible; | |
| 274 | |
| 275 typedef base::hash_map<WebKit::WebGraphicsContext3D*, scoped_refptr<RateLimi
ter> > RateLimiterMap; | |
| 276 RateLimiterMap m_rateLimiters; | |
| 277 | |
| 278 float m_pageScaleFactor; | |
| 279 float m_minPageScaleFactor, m_maxPageScaleFactor; | |
| 280 WebKit::WebTransformationMatrix m_implTransform; | |
| 281 bool m_triggerIdleUpdates; | |
| 282 | |
| 283 SkColor m_backgroundColor; | |
| 284 bool m_hasTransparentBackground; | |
| 285 | |
| 286 typedef ScopedPtrVector<CCPrioritizedTexture> TextureList; | |
| 287 TextureList m_deleteTextureAfterCommitList; | |
| 288 size_t m_partialTextureUpdateRequests; | |
| 289 | |
| 290 static bool s_needsFilterContext; | |
| 291 | |
| 292 DISALLOW_COPY_AND_ASSIGN(CCLayerTreeHost); | |
| 293 }; | |
| 294 | |
| 295 } // namespace cc | |
| 296 | |
| 297 #endif | |
| OLD | NEW |