blob: a396754f8ed8b5b714fd65f65bcae9404c97dfbc [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "config.h"
#include "core/paint/LayerFixedPositionRecorder.h"
#include "core/layout/LayoutBoxModelObject.h"
#include "platform/RuntimeEnabledFeatures.h"
#include "platform/graphics/GraphicsContext.h"
#include "platform/graphics/paint/FixedPositionContainerDisplayItem.h"
#include "platform/graphics/paint/FixedPositionDisplayItem.h"
#include "platform/graphics/paint/PaintController.h"
namespace blink {
LayerFixedPositionRecorder::LayerFixedPositionRecorder(GraphicsContext& graphicsContext, const LayoutBoxModelObject& layoutObject)
: m_graphicsContext(graphicsContext)
, m_layoutObject(layoutObject)
, m_isFixedPosition(layoutObject.style()->position() == FixedPosition)
, m_isFixedPositionContainer(layoutObject.canContainFixedPositionObjects())
{
if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled())
return;
if (m_isFixedPosition)
m_graphicsContext.paintController().createAndAppend<BeginFixedPositionDisplayItem>(m_layoutObject);
// TODO(trchen): Adding a pair of display items on every transformed
// element can be expensive. Investigate whether we can optimize out some
// of them if applicable.
if (m_isFixedPositionContainer)
m_graphicsContext.paintController().createAndAppend<BeginFixedPositionContainerDisplayItem>(m_layoutObject);
}
LayerFixedPositionRecorder::~LayerFixedPositionRecorder()
{
if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled())
return;
if (m_isFixedPositionContainer)
m_graphicsContext.paintController().endItem<EndFixedPositionDisplayItem>(m_layoutObject);
if (m_isFixedPosition)
m_graphicsContext.paintController().endItem<EndFixedPositionDisplayItem>(m_layoutObject);
}
} // namespace blink