void SVGFilterRecordingContext::endContent(FilterData* filterData)
{
    ASSERT(filterData->m_state == FilterData::RecordingContent);

    SourceGraphic* sourceGraphic = filterData->filter->sourceGraphic();
    ASSERT(sourceGraphic);

    GraphicsContext* context = &paintingContext();

    // Use the context that contains the filtered content.
    ASSERT(m_paintController);
    ASSERT(m_context);
    context = m_context.get();
    context->beginRecording(filterData->filter->filterRegion());
    m_paintController->commitNewDisplayItems();
    m_paintController->paintArtifact().replay(*context);

    sourceGraphic->setPicture(context->endRecording());

    // Content is cached by the source graphic so temporaries can be freed.
    m_paintController = nullptr;
    m_context = nullptr;

    filterData->m_state = FilterData::ReadyToPaint;
}
GraphicsContext* SVGFilterRecordingContext::beginContent(FilterData* filterData)
{
    ASSERT(filterData->m_state == FilterData::Initial);

    GraphicsContext* context = &paintingContext();

    // Create a new context so the contents of the filter can be drawn and cached.
    m_paintController = PaintController::create();
    m_context = adoptPtr(new GraphicsContext(*m_paintController));
    context = m_context.get();

    filterData->m_state = FilterData::RecordingContent;
    return context;
}
GraphicsContext* SVGFilterRecordingContext::beginContent(FilterData* filterData)
{
    ASSERT(filterData->m_state == FilterData::Initial);

    GraphicsContext* context = paintingContext();

    // Create a new context so the contents of the filter can be drawn and cached.
    m_displayItemList = DisplayItemList::create();
    m_context = adoptPtr(new GraphicsContext(m_displayItemList.get()));
    context = m_context.get();

    filterData->m_state = FilterData::RecordingContent;
    return context;
}