CCDebugRectHistory.cpp [plain text]
#include "config.h"
#if USE(ACCELERATED_COMPOSITING)
#include "CCDebugRectHistory.h"
#include "CCDamageTracker.h"
#include "CCLayerImpl.h"
#include "CCLayerTreeHost.h"
#include "CCMathUtil.h"
namespace WebCore {
CCDebugRectHistory::CCDebugRectHistory()
{
}
bool CCDebugRectHistory::enabled(const CCSettings& settings)
{
return settings.showPaintRects || settings.showPropertyChangedRects || settings.showSurfaceDamageRects;
}
void CCDebugRectHistory::saveDebugRectsForCurrentFrame(CCLayerImpl* rootLayer, const Vector<CCLayerImpl*>& renderSurfaceLayerList, const CCSettings& settings)
{
m_debugRects.clear();
if (settings.showPaintRects)
savePaintRects(rootLayer);
if (settings.showPropertyChangedRects)
savePropertyChangedRects(renderSurfaceLayerList);
if (settings.showSurfaceDamageRects)
saveSurfaceDamageRects(renderSurfaceLayerList);
}
void CCDebugRectHistory::savePaintRects(CCLayerImpl* layer)
{
if (!layer->updateRect().isEmpty() && layer->drawsContent())
m_debugRects.append(CCDebugRect(PaintRectType, CCMathUtil::mapClippedRect(layer->screenSpaceTransform(), layer->updateRect())));
for (unsigned i = 0; i < layer->children().size(); ++i)
savePaintRects(layer->children()[i].get());
}
void CCDebugRectHistory::savePropertyChangedRects(const Vector<CCLayerImpl*>& renderSurfaceLayerList)
{
for (int surfaceIndex = renderSurfaceLayerList.size() - 1; surfaceIndex >= 0 ; --surfaceIndex) {
CCLayerImpl* renderSurfaceLayer = renderSurfaceLayerList[surfaceIndex];
CCRenderSurface* renderSurface = renderSurfaceLayer->renderSurface();
ASSERT(renderSurface);
const Vector<CCLayerImpl*>& layerList = renderSurface->layerList();
for (unsigned layerIndex = 0; layerIndex < layerList.size(); ++layerIndex) {
CCLayerImpl* layer = layerList[layerIndex];
if (CCLayerTreeHostCommon::renderSurfaceContributesToTarget<CCLayerImpl>(layer, renderSurfaceLayer->id()))
continue;
if (layer->layerPropertyChanged())
m_debugRects.append(CCDebugRect(PropertyChangedRectType, CCMathUtil::mapClippedRect(layer->screenSpaceTransform(), FloatRect(FloatPoint::zero(), layer->bounds()))));
}
}
}
void CCDebugRectHistory::saveSurfaceDamageRects(const Vector<CCLayerImpl* >& renderSurfaceLayerList)
{
for (int surfaceIndex = renderSurfaceLayerList.size() - 1; surfaceIndex >= 0 ; --surfaceIndex) {
CCLayerImpl* renderSurfaceLayer = renderSurfaceLayerList[surfaceIndex];
CCRenderSurface* renderSurface = renderSurfaceLayer->renderSurface();
ASSERT(renderSurface);
m_debugRects.append(CCDebugRect(SurfaceDamageRectType, CCMathUtil::mapClippedRect(renderSurface->screenSpaceTransform(), renderSurface->damageTracker()->currentDamageRect())));
}
}
}
#endif // USE(ACCELERATED_COMPOSITING)