static void getElementCTM(SVGElement* element, AffineTransform& transform)
{
    ASSERT(element);
    element->document()->updateLayoutIgnorePendingStylesheets();

    SVGElement* stopAtElement = SVGLocatable::nearestViewportElement(element);
    ASSERT(stopAtElement);

    AffineTransform localTransform;
    Node* current = element;

    while (current && current->isSVGElement()) {
        SVGElement* currentElement = toSVGElement(current);
        if (currentElement->isSVGStyledElement()) {
            localTransform = currentElement->renderer()->localToParentTransform();
            transform = localTransform.multiply(transform);
        }
        // For getCTM() computation, stop at the nearest viewport element
        if (currentElement == stopAtElement)
            break;

        current = current->parentOrShadowHostNode();
    }
}