| Index: cc/damage_tracker.h
|
| diff --git a/cc/damage_tracker.h b/cc/damage_tracker.h
|
| index 638cbb270ce9b24689d5095baf174ade4f4d1a13..c7550a26ba32b2b944cd674cf69aec06c92901bd 100644
|
| --- a/cc/damage_tracker.h
|
| +++ b/cc/damage_tracker.h
|
| @@ -1,3 +1,63 @@
|
| -// Copyright 2012 The Chromium Authors. All rights reserved.
|
| +// Copyright 2011 The Chromium Authors. All rights reserved.
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
| +
|
| +#ifndef CCDamageTracker_h
|
| +#define CCDamageTracker_h
|
| +
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "FloatRect.h"
|
| +#include <vector>
|
| +#include <wtf/HashMap.h>
|
| +#include <wtf/Vector.h>
|
| +
|
| +namespace WebKit {
|
| +class WebFilterOperations;
|
| +}
|
| +
|
| +namespace cc {
|
| +
|
| +class CCLayerImpl;
|
| +class CCRenderSurface;
|
| +
|
| +// Computes the region where pixels have actually changed on a RenderSurface. This region is used
|
| +// to scissor what is actually drawn to the screen to save GPU computation and bandwidth.
|
| +class CCDamageTracker {
|
| +public:
|
| + static scoped_ptr<CCDamageTracker> create();
|
| + ~CCDamageTracker();
|
| +
|
| + void didDrawDamagedArea() { m_currentDamageRect = FloatRect(); }
|
| + void forceFullDamageNextUpdate() { m_forceFullDamageNextUpdate = true; }
|
| + void updateDamageTrackingState(const std::vector<CCLayerImpl*>& layerList, int targetSurfaceLayerID, bool targetSurfacePropertyChangedOnlyFromDescendant, const IntRect& targetSurfaceContentRect, CCLayerImpl* targetSurfaceMaskLayer, const WebKit::WebFilterOperations&);
|
| +
|
| + const FloatRect& currentDamageRect() { return m_currentDamageRect; }
|
| +
|
| +private:
|
| + CCDamageTracker();
|
| +
|
| + FloatRect trackDamageFromActiveLayers(const std::vector<CCLayerImpl*>& layerList, int targetSurfaceLayerID);
|
| + FloatRect trackDamageFromSurfaceMask(CCLayerImpl* targetSurfaceMaskLayer);
|
| + FloatRect trackDamageFromLeftoverRects();
|
| +
|
| + FloatRect removeRectFromCurrentFrame(int layerID, bool& layerIsNew);
|
| + void saveRectForNextFrame(int layerID, const FloatRect& targetSpaceRect);
|
| +
|
| + // These helper functions are used only in trackDamageFromActiveLayers().
|
| + void extendDamageForLayer(CCLayerImpl*, FloatRect& targetDamageRect);
|
| + void extendDamageForRenderSurface(CCLayerImpl*, FloatRect& targetDamageRect);
|
| +
|
| + // To correctly track exposed regions, two hashtables of rects are maintained.
|
| + // The "current" map is used to compute exposed regions of the current frame, while
|
| + // the "next" map is used to collect layer rects that are used in the next frame.
|
| + typedef HashMap<int, FloatRect> RectMap;
|
| + scoped_ptr<RectMap> m_currentRectHistory;
|
| + scoped_ptr<RectMap> m_nextRectHistory;
|
| +
|
| + FloatRect m_currentDamageRect;
|
| + bool m_forceFullDamageNextUpdate;
|
| +};
|
| +
|
| +} // namespace cc
|
| +
|
| +#endif // CCDamageTracker_h
|
|
|