| Index: Source/core/frame/FrameView.cpp
|
| diff --git a/Source/core/frame/FrameView.cpp b/Source/core/frame/FrameView.cpp
|
| index 42e9234e65c291eb04322b879a93c15d5934e03e..b497b353a92354124eda30f142498aa8af585694 100644
|
| --- a/Source/core/frame/FrameView.cpp
|
| +++ b/Source/core/frame/FrameView.cpp
|
| @@ -2548,6 +2548,9 @@ void FrameView::updateLayoutAndStyleForPaintingInternal()
|
|
|
| updateCompositedSelectionIfNeeded();
|
|
|
| + if (RuntimeEnabledFeatures::frameTimingSupportEnabled())
|
| + updateFrameTimingRequestsIfNeeded();
|
| +
|
| scrollContentsIfNeededRecursive();
|
|
|
| invalidateTreeIfNeededRecursive();
|
| @@ -2558,6 +2561,18 @@ void FrameView::updateLayoutAndStyleForPaintingInternal()
|
| ASSERT(lifecycle().state() == DocumentLifecycle::PaintInvalidationClean);
|
| }
|
|
|
| +void FrameView::updateFrameTimingRequestsIfNeeded()
|
| +{
|
| + GraphicsLayerFrameTimingRequests graphicsLayerTimingRequests;
|
| + // TODO(mpb) use a 'dirty' bit to not call this every time.
|
| + collectFrameTimingRequestsRecursive(graphicsLayerTimingRequests);
|
| +
|
| + for (const auto& iter : graphicsLayerTimingRequests) {
|
| + const GraphicsLayer* graphicsLayer = iter.key;
|
| + graphicsLayer->platformLayer()->setFrameTimingRequests(iter.value);
|
| + }
|
| +}
|
| +
|
| void FrameView::updateLayoutAndStyleIfNeededRecursive()
|
| {
|
| // We have to crawl our entire subtree looking for any FrameViews that need
|
| @@ -4017,4 +4032,34 @@ LayoutObject* FrameView::viewportLayoutObject()
|
| return nullptr;
|
| }
|
|
|
| +void FrameView::collectFrameTimingRequestsRecursive(GraphicsLayerFrameTimingRequests& graphicsLayerTimingRequests)
|
| +{
|
| + collectFrameTimingRequests(graphicsLayerTimingRequests);
|
| +
|
| + for (Frame* child = m_frame->tree().firstChild(); child; child = child->tree().nextSibling()) {
|
| + if (!child->isLocalFrame())
|
| + continue;
|
| +
|
| + toLocalFrame(child)->view()->collectFrameTimingRequestsRecursive(graphicsLayerTimingRequests);
|
| + }
|
| +}
|
| +
|
| +void FrameView::collectFrameTimingRequests(GraphicsLayerFrameTimingRequests& graphicsLayerTimingRequests)
|
| +{
|
| + if (!m_frame->isLocalFrame())
|
| + return;
|
| + Frame* frame = m_frame.get();
|
| + LocalFrame* localFrame = toLocalFrame(frame);
|
| + LayoutRect viewRect = localFrame->contentLayoutObject()->viewRect();
|
| + const LayoutBoxModelObject* paintInvalidationContainer = localFrame->contentLayoutObject()->containerForPaintInvalidation();
|
| + const GraphicsLayer* graphicsLayer = paintInvalidationContainer->enclosingLayer()->graphicsLayerBacking();
|
| +
|
| + if (!graphicsLayer)
|
| + return;
|
| +
|
| + DeprecatedPaintLayer::mapRectToPaintInvalidationBacking(localFrame->contentLayoutObject(), paintInvalidationContainer, viewRect);
|
| +
|
| + graphicsLayerTimingRequests.add(graphicsLayer, std::vector<std::pair<int64_t, WebRect>>()).storedValue->value.push_back(std::make_pair(m_frame->frameID(), enclosingIntRect(viewRect)));
|
| +}
|
| +
|
| } // namespace blink
|
|
|