Chromium Code Reviews| Index: Source/core/frame/FrameView.cpp |
| diff --git a/Source/core/frame/FrameView.cpp b/Source/core/frame/FrameView.cpp |
| index add17f97e6f65830268df93b0136af9dba331407..0ce09b6ed15dccd3b1169fcbd8c21ac0963a8050 100644 |
| --- a/Source/core/frame/FrameView.cpp |
| +++ b/Source/core/frame/FrameView.cpp |
| @@ -2535,6 +2535,9 @@ void FrameView::updateLayoutAndStyleForPainting() |
| updateCompositedSelectionIfNeeded(); |
| + if (RuntimeEnabledFeatures::frameTimingSupportEnabled()) |
| + updateFrameTimingRequestsIfNeeded(); |
| + |
| scrollContentsIfNeededRecursive(); |
| invalidateTreeIfNeededRecursive(); |
| @@ -2545,6 +2548,17 @@ void FrameView::updateLayoutAndStyleForPainting() |
| ASSERT(lifecycle().state() == DocumentLifecycle::PaintInvalidationClean); |
| } |
| +void FrameView::updateFrameTimingRequestsIfNeeded() |
| +{ |
| + GraphicsLayerFrameTimingRequests graphicsLayerTimingRequests; |
|
chrishtr
2015/05/08 16:52:04
Add a TODO(mpb) to add the dirty bit.
MikeB
2015/05/08 18:37:34
Done.
|
| + 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 tree looking for any FrameViews that need |
| @@ -4004,4 +4018,50 @@ LayoutObject* FrameView::viewportLayoutObject() |
| return nullptr; |
| } |
| +void FrameView::collectFrameTimingRequestsRecursive( |
| + GraphicsLayerFrameTimingRequests& graphicsLayerTimingRequests) |
|
chrishtr
2015/05/08 16:52:04
Put this on the same line. Blink has no 80-column
MikeB
2015/05/08 18:37:34
Done.
|
| +{ |
| + for (Frame* frame = m_frame.get(); frame; |
| + frame = frame->tree().traverseNext(m_frame.get())) { |
|
chrishtr
2015/05/08 16:52:04
same here IMO. Consider reducing lines in the rest
MikeB
2015/05/08 18:37:34
Done.
|
| + if (!frame->isLocalFrame()) |
| + continue; |
| + LocalFrame* localFrame = toLocalFrame(frame); |
| + LayoutRect rect = localFrame->contentLayoutObject()->viewRect(); |
| + |
| + DeprecatedPaintLayer::mapRectToPaintInvalidationBacking( |
| + localFrame->contentLayoutObject(), |
| + localFrame->contentLayoutObject()->containerForPaintInvalidation(), |
| + rect); |
| + |
| + const DeprecatedPaintLayer* layer = localFrame->contentLayoutObject() |
| + ->enclosingLayer() |
| + ->enclosingLayerForPaintInvalidationCrossingFrameBoundaries(); |
|
chrishtr
2015/05/08 16:52:04
containerForPaintInvalidation() is the same as thi
MikeB
2015/05/08 18:37:34
Done.
|
| + const GraphicsLayer* graphicsLayer = !layer ? nullptr : |
| + layer->graphicsLayerBacking(); |
| + |
| + if (!graphicsLayer) |
| + continue; |
| + |
| + GraphicsLayerFrameTimingRequests::iterator requestIterator = |
| + graphicsLayerTimingRequests.find(graphicsLayer); |
|
chrishtr
2015/05/08 16:52:04
I think you can just write:
graphicsLayerTimingRe
MikeB
2015/05/08 18:37:34
error: no viable overloaded operator[] for type 'G
|
| + std::vector<std::pair<int64_t, WebRect>> *graphicsLayerTimingRects; |
| + if (requestIterator == graphicsLayerTimingRequests.end()) { |
| + graphicsLayerTimingRects = &graphicsLayerTimingRequests.add( |
| + graphicsLayer, |
| + std::vector<std::pair<int64_t, WebRect>>()).storedValue->value; |
| + } else { |
| + graphicsLayerTimingRects = &requestIterator->value; |
| + } |
| + graphicsLayerTimingRects->push_back( |
| + std::make_pair(frame->frameID(), enclosingIntRect(rect))); |
| + |
| + if (frame != m_frame.get()) { |
|
chrishtr
2015/05/08 16:52:04
Factor into two methods, one which does the recurs
MikeB
2015/05/08 18:37:34
Done.
|
| + if (FrameView* view = localFrame->view()) { |
| + view->collectFrameTimingRequestsRecursive( |
| + graphicsLayerTimingRequests); |
| + } |
| + } |
| + } |
| +} |
| + |
| } // namespace blink |