tdf#158556 speedup docx load

If we want to know if an XText is a header/footer object, no need to
loop over the draw objects, we can just query its service name.

Reduces load time from 167s to 97s

Change-Id: I10158c11dd24c4945b3ea6cfed4916717bd4f2f8
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165269
Tested-by: Noel Grandin <noel.grandin@collabora.co.uk>
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
(cherry picked from commit ab29c857c669bcca3d8eea8a5a9e6ad5eae622d7)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165618
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 2b90914..028b4b4 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -3793,26 +3793,14 @@ void DomainMapper_Impl::ConvertHeaderFooterToTextFrame(bool bDynamicHeightTop, b
namespace
{
// Determines if the XText content is empty (no text, no shapes, no tables)
bool isContentEmpty(uno::Reference<text::XText> const& xText, uno::Reference<text::XTextDocument> const& xTextDocument)
bool isContentEmpty(uno::Reference<text::XText> const& xText)
{
    if (!xText.is())
        return true; // no XText means it's empty

    uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(xTextDocument, uno::UNO_QUERY);
    auto xDrawPage = xDrawPageSupplier->getDrawPage();
    if (xDrawPage && xDrawPage->hasElements())
    {
        for (sal_Int32 i = 0; i < xDrawPage->getCount(); ++i)
        {
            uno::Reference<text::XTextContent> xShape(xDrawPage->getByIndex(i), uno::UNO_QUERY);
            if (xShape.is())
            {
                uno::Reference<text::XTextRange> xAnchor = xShape->getAnchor();
                if (xAnchor.is() && xAnchor->getText() == xText)
                    return false;
            }
        }
    }
    uno::Reference<css::lang::XServiceInfo> xTextServiceInfo(xText, uno::UNO_QUERY);
    if (xTextServiceInfo && xTextServiceInfo->getImplementationName() == "SwXHeadFootText")
        return false;

    uno::Reference<container::XEnumerationAccess> xEnumAccess(xText->getText(), uno::UNO_QUERY);
    uno::Reference<container::XEnumeration> xEnum = xEnumAccess->createEnumeration();
@@ -3959,7 +3947,7 @@ void DomainMapper_Impl::checkIfHeaderFooterIsEmpty(PagePartType ePagePartType, P
    if (!xPageStyle.is())
        return;

    bool bEmpty = isContentEmpty(m_aTextAppendStack.top().xTextAppend, GetTextDocument());
    bool bEmpty = isContentEmpty(m_aTextAppendStack.top().xTextAppend);

    if (eType == PageType::FIRST && bEmpty)
    {