Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(344)

Side by Side Diff: third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.cpp

Issue 2251303003: Implement position: sticky updates on compositor (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Merge with master and add comments to WebLayerStickyPositionConstraint members. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Apple Inc. All rights reserved. 2 * Copyright (C) 2011 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 1019 matching lines...) Expand 10 before | Expand all | Expand 10 after
1030 // calculations below. 1030 // calculations below.
1031 if (toLocalFrame(frame)->localFrameRoot() != m_page->mainFrame()) 1031 if (toLocalFrame(frame)->localFrameRoot() != m_page->mainFrame())
1032 continue; 1032 continue;
1033 1033
1034 FrameView* frameView = toLocalFrame(frame)->view(); 1034 FrameView* frameView = toLocalFrame(frame)->view();
1035 if (!frameView || frameView->shouldThrottleRendering()) 1035 if (!frameView || frameView->shouldThrottleRendering())
1036 continue; 1036 continue;
1037 1037
1038 if (frameView->hasBackgroundAttachmentFixedObjects()) 1038 if (frameView->hasBackgroundAttachmentFixedObjects())
1039 reasons |= MainThreadScrollingReason::kHasBackgroundAttachmentFixedO bjects; 1039 reasons |= MainThreadScrollingReason::kHasBackgroundAttachmentFixedO bjects;
1040 if (frameView->hasStickyPositionObjects())
1041 reasons |= MainThreadScrollingReason::kHasStickyPositionObjects;
1042 FrameView::ScrollingReasons scrollingReasons = frameView->getScrollingRe asons(); 1040 FrameView::ScrollingReasons scrollingReasons = frameView->getScrollingRe asons();
1043 const bool mayBeScrolledByInput = (scrollingReasons == FrameView::Scroll able); 1041 const bool mayBeScrolledByInput = (scrollingReasons == FrameView::Scroll able);
1044 const bool mayBeScrolledByScript = mayBeScrolledByInput || (scrollingRea sons == 1042 const bool mayBeScrolledByScript = mayBeScrolledByInput || (scrollingRea sons ==
1045 FrameView::NotScrollableExplicitlyDisabled); 1043 FrameView::NotScrollableExplicitlyDisabled);
1046 1044
1047 // TODO(awoloszyn) Currently crbug.com/304810 will let certain 1045 // TODO(awoloszyn) Currently crbug.com/304810 will let certain
1048 // overflow:hidden elements scroll on the compositor thread, so we shoul d 1046 // overflow:hidden elements scroll on the compositor thread, so we shoul d
1049 // not let this move there path as an optimization, when we have slow-re paint 1047 // not let this move there path as an optimization, when we have slow-re paint
1050 // elements. 1048 // elements.
1051 if (mayBeScrolledByScript && hasVisibleSlowRepaintViewportConstrainedObj ects(frameView)) { 1049 if (mayBeScrolledByScript && hasVisibleSlowRepaintViewportConstrainedObj ects(frameView)) {
(...skipping 22 matching lines...) Expand all
1074 bool frameIsScrollable = frameView && frameView->isScrollable(); 1072 bool frameIsScrollable = frameView && frameView->isScrollable();
1075 if (frameIsScrollable != m_wasFrameScrollable) 1073 if (frameIsScrollable != m_wasFrameScrollable)
1076 return true; 1074 return true;
1077 1075
1078 if (WebLayer* scrollLayer = frameView ? toWebLayer(frameView->layerForScroll ing()) : nullptr) 1076 if (WebLayer* scrollLayer = frameView ? toWebLayer(frameView->layerForScroll ing()) : nullptr)
1079 return WebSize(frameView->contentsSize()) != scrollLayer->bounds(); 1077 return WebSize(frameView->contentsSize()) != scrollLayer->bounds();
1080 return false; 1078 return false;
1081 } 1079 }
1082 1080
1083 } // namespace blink 1081 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698