void LayerTreeHostProxy::syncLayerParameters(const WebLayerInfo& layerInfo) { WebLayerID id = layerInfo.id; ensureLayer(id); LayerMap::iterator it = m_layers.find(id); GraphicsLayer* layer = it->second; bool needsToUpdateImageTiles = layerInfo.imageIsUpdated || (layerInfo.contentsRect != layer->contentsRect() && layerInfo.imageBackingStoreID); layer->setName(layerInfo.name); layer->setReplicatedByLayer(layerByID(layerInfo.replica)); layer->setMaskLayer(layerByID(layerInfo.mask)); layer->setPosition(layerInfo.pos); layer->setSize(layerInfo.size); layer->setTransform(layerInfo.transform); layer->setAnchorPoint(layerInfo.anchorPoint); layer->setChildrenTransform(layerInfo.childrenTransform); layer->setBackfaceVisibility(layerInfo.backfaceVisible); layer->setContentsOpaque(layerInfo.contentsOpaque); layer->setContentsRect(layerInfo.contentsRect); layer->setDrawsContent(layerInfo.drawsContent); if (needsToUpdateImageTiles) assignImageToLayer(layer, layerInfo.imageBackingStoreID); // Never make the root layer clip. layer->setMasksToBounds(layerInfo.isRootLayer ? false : layerInfo.masksToBounds); layer->setOpacity(layerInfo.opacity); layer->setPreserves3D(layerInfo.preserves3D); Vector<GraphicsLayer*> children; for (size_t i = 0; i < layerInfo.children.size(); ++i) { WebLayerID childID = layerInfo.children[i]; GraphicsLayer* child = layerByID(childID); if (!child) { child = createLayer(childID).leakPtr(); m_layers.add(childID, child); } children.append(child); } layer->setChildren(children); for (size_t i = 0; i < layerInfo.animations.size(); ++i) { const WebKit::WebLayerAnimation anim = layerInfo.animations[i]; switch (anim.operation) { case WebKit::WebLayerAnimation::AddAnimation: { const IntSize boxSize = anim.boxSize; layer->addAnimation(anim.keyframeList, boxSize, anim.animation.get(), anim.name, anim.startTime); break; } case WebKit::WebLayerAnimation::RemoveAnimation: layer->removeAnimation(anim.name); break; case WebKit::WebLayerAnimation::PauseAnimation: double offset = WTF::currentTime() - anim.startTime; layer->pauseAnimation(anim.name, offset); break; } } if (layerInfo.isRootLayer && m_rootLayerID != id) setRootLayerID(id); }