void TiledLayerChromium::prepareToUpdateIdle(const IntRect& layerRect, const CCOcclusionTracker* occlusion) { // Abort if we have already prepared a paint or run out of memory. if (m_skipsIdlePaint || !m_paintRect.isEmpty()) return; ASSERT(m_tiler); updateBounds(); if (m_tiler->isEmpty()) return; // Protect any textures in the pre-paint area so we don't end up just // reclaiming them below. IntRect idlePaintLayerRect = idlePaintRect(layerRect); protectTileTextures(idlePaintLayerRect); int left, top, right, bottom; m_tiler->layerRectToTileIndices(layerRect, left, top, right, bottom); // Prepaint anything that was occluded but inside the layer's visible region. prepareToUpdateTiles(true, left, top, right, bottom, 0); if (!m_paintRect.isEmpty() || m_skipsIdlePaint) return; // Expand outwards until we find a dirty row or column to update. int prepaintLeft, prepaintTop, prepaintRight, prepaintBottom; m_tiler->layerRectToTileIndices(idlePaintLayerRect, prepaintLeft, prepaintTop, prepaintRight, prepaintBottom); while (!m_skipsIdlePaint && (left > prepaintLeft || top > prepaintTop || right < prepaintRight || bottom < prepaintBottom)) { if (bottom < prepaintBottom) { ++bottom; prepareToUpdateTiles(true, left, bottom, right, bottom, 0); if (!m_paintRect.isEmpty() || m_skipsIdlePaint) break; } if (top > prepaintTop) { --top; prepareToUpdateTiles(true, left, top, right, top, 0); if (!m_paintRect.isEmpty() || m_skipsIdlePaint) break; } if (left > prepaintLeft) { --left; prepareToUpdateTiles(true, left, top, left, bottom, 0); if (!m_paintRect.isEmpty() || m_skipsIdlePaint) break; } if (right < prepaintRight) { ++right; prepareToUpdateTiles(true, right, top, right, bottom, 0); if (!m_paintRect.isEmpty() || m_skipsIdlePaint) break; } } }
void TiledLayerChromium::protectVisibleTileTextures() { protectTileTextures(visibleLayerRect()); }
void TiledLayerChromium::protectVisibleTileTextures() { protectTileTextures(IntRect(IntPoint::zero(), contentBounds())); }