#ifndef CCOverdrawMetrics_h
#define CCOverdrawMetrics_h
#include <wtf/PassOwnPtr.h>
namespace WebKit {
class WebTransformationMatrix;
}
namespace cc {
class IntRect;
class CCLayerTreeHost;
class CCLayerTreeHostImpl;
class CCOverdrawMetrics {
public:
static PassOwnPtr<CCOverdrawMetrics> create(bool recordMetricsForFrame) { return adoptPtr(new CCOverdrawMetrics(recordMetricsForFrame)); }
void didPaint(const IntRect& paintedRect);
void didCullTileForUpload();
void didUpload(const WebKit::WebTransformationMatrix& transformToTarget, const IntRect& uploadRect, const IntRect& opaqueRect);
void didUseContentsTextureMemoryBytes(size_t contentsTextureUseBytes);
void didUseRenderSurfaceTextureMemoryBytes(size_t renderSurfaceUseBytes);
void didCullForDrawing(const WebKit::WebTransformationMatrix& transformToTarget, const IntRect& beforeCullRect, const IntRect& afterCullRect);
void didDraw(const WebKit::WebTransformationMatrix& transformToTarget, const IntRect& afterCullRect, const IntRect& opaqueRect);
void recordMetrics(const CCLayerTreeHost*) const;
void recordMetrics(const CCLayerTreeHostImpl*) const;
float pixelsDrawnOpaque() const { return m_pixelsDrawnOpaque; }
float pixelsDrawnTranslucent() const { return m_pixelsDrawnTranslucent; }
float pixelsCulledForDrawing() const { return m_pixelsCulledForDrawing; }
float pixelsPainted() const { return m_pixelsPainted; }
float pixelsUploadedOpaque() const { return m_pixelsUploadedOpaque; }
float pixelsUploadedTranslucent() const { return m_pixelsUploadedTranslucent; }
int tilesCulledForUpload() const { return m_tilesCulledForUpload; }
private:
enum MetricsType {
UpdateAndCommit,
DrawingToScreen
};
explicit CCOverdrawMetrics(bool recordMetricsForFrame);
template<typename LayerTreeHostType>
void recordMetricsInternal(MetricsType, const LayerTreeHostType*) const;
bool m_recordMetricsForFrame;
float m_pixelsPainted;
float m_pixelsUploadedOpaque;
float m_pixelsUploadedTranslucent;
int m_tilesCulledForUpload;
unsigned long long m_contentsTextureUseBytes;
unsigned long long m_renderSurfaceTextureUseBytes;
float m_pixelsDrawnOpaque;
float m_pixelsDrawnTranslucent;
float m_pixelsCulledForDrawing;
};
}
#endif