OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> | 2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> |
3 * 1999 Lars Knoll <knoll@kde.org> | 3 * 1999 Lars Knoll <knoll@kde.org> |
4 * 1999 Antti Koivisto <koivisto@kde.org> | 4 * 1999 Antti Koivisto <koivisto@kde.org> |
5 * 2000 Dirk Mueller <mueller@kde.org> | 5 * 2000 Dirk Mueller <mueller@kde.org> |
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. |
7 * (C) 2006 Graham Dennis (graham.dennis@gmail.com) | 7 * (C) 2006 Graham Dennis (graham.dennis@gmail.com) |
8 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) | 8 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) |
9 * Copyright (C) 2009 Google Inc. All rights reserved. | 9 * Copyright (C) 2009 Google Inc. All rights reserved. |
10 * | 10 * |
(...skipping 3709 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3720 return ScrollBehaviorInstant; | 3720 return ScrollBehaviorInstant; |
3721 } | 3721 } |
3722 | 3722 |
3723 void FrameView::paint(GraphicsContext& context, const CullRect& cullRect) const | 3723 void FrameView::paint(GraphicsContext& context, const CullRect& cullRect) const |
3724 { | 3724 { |
3725 paint(context, GlobalPaintNormalPhase, cullRect); | 3725 paint(context, GlobalPaintNormalPhase, cullRect); |
3726 } | 3726 } |
3727 | 3727 |
3728 void FrameView::paint(GraphicsContext& context, const GlobalPaintFlags globalPai
ntFlags, const CullRect& cullRect) const | 3728 void FrameView::paint(GraphicsContext& context, const GlobalPaintFlags globalPai
ntFlags, const CullRect& cullRect) const |
3729 { | 3729 { |
3730 // TODO(skyostil): Remove this early-out in favor of painting cached scrollb
ars. | |
3731 if (shouldThrottleRendering()) | |
3732 return; | |
3733 FramePainter(*this).paint(context, globalPaintFlags, cullRect); | 3730 FramePainter(*this).paint(context, globalPaintFlags, cullRect); |
3734 } | 3731 } |
3735 | 3732 |
3736 void FrameView::paintContents(GraphicsContext& context, const GlobalPaintFlags g
lobalPaintFlags, const IntRect& damageRect) const | 3733 void FrameView::paintContents(GraphicsContext& context, const GlobalPaintFlags g
lobalPaintFlags, const IntRect& damageRect) const |
3737 { | 3734 { |
3738 if (shouldThrottleRendering()) | |
3739 return; | |
3740 FramePainter(*this).paintContents(context, globalPaintFlags, damageRect); | 3735 FramePainter(*this).paintContents(context, globalPaintFlags, damageRect); |
3741 } | 3736 } |
3742 | 3737 |
3743 bool FrameView::isPointInScrollbarCorner(const IntPoint& pointInRootFrame) | 3738 bool FrameView::isPointInScrollbarCorner(const IntPoint& pointInRootFrame) |
3744 { | 3739 { |
3745 if (!scrollbarCornerPresent()) | 3740 if (!scrollbarCornerPresent()) |
3746 return false; | 3741 return false; |
3747 | 3742 |
3748 IntPoint framePoint = convertFromRootFrame(pointInRootFrame); | 3743 IntPoint framePoint = convertFromRootFrame(pointInRootFrame); |
3749 | 3744 |
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4025 const SecurityOrigin* origin = frame().securityContext()->securityOrigin(); | 4020 const SecurityOrigin* origin = frame().securityContext()->securityOrigin(); |
4026 for (Frame* parentFrame = m_frame->tree().parent(); parentFrame; parentFrame
= parentFrame->tree().parent()) { | 4021 for (Frame* parentFrame = m_frame->tree().parent(); parentFrame; parentFrame
= parentFrame->tree().parent()) { |
4027 const SecurityOrigin* parentOrigin = parentFrame->securityContext()->sec
urityOrigin(); | 4022 const SecurityOrigin* parentOrigin = parentFrame->securityContext()->sec
urityOrigin(); |
4028 if (!origin->canAccess(parentOrigin)) { | 4023 if (!origin->canAccess(parentOrigin)) { |
4029 m_crossOriginForThrottling = true; | 4024 m_crossOriginForThrottling = true; |
4030 break; | 4025 break; |
4031 } | 4026 } |
4032 } | 4027 } |
4033 | 4028 |
4034 bool becameUnthrottled = wasThrottled && !canThrottleRendering(); | 4029 bool becameUnthrottled = wasThrottled && !canThrottleRendering(); |
4035 if (becameUnthrottled) | 4030 if (becameUnthrottled) { |
| 4031 // Start ticking animation frames again if necessary. |
4036 page()->animator().scheduleVisualUpdate(m_frame.get()); | 4032 page()->animator().scheduleVisualUpdate(m_frame.get()); |
| 4033 // Force a full repaint of this frame to ensure we are not left with a |
| 4034 // partially painted version of this frame's contents if we skipped |
| 4035 // painting them while the frame was throttled. |
| 4036 if (LayoutView* layoutView = this->layoutView()) |
| 4037 layoutView->setShouldDoFullPaintInvalidation(PaintInvalidationBecame
Visible); |
| 4038 } |
4037 } | 4039 } |
4038 | 4040 |
4039 bool FrameView::shouldThrottleRendering() const | 4041 bool FrameView::shouldThrottleRendering() const |
4040 { | 4042 { |
4041 return canThrottleRendering() && lifecycle().throttlingAllowed(); | 4043 return canThrottleRendering() && lifecycle().throttlingAllowed(); |
4042 } | 4044 } |
4043 | 4045 |
4044 bool FrameView::canThrottleRendering() const | 4046 bool FrameView::canThrottleRendering() const |
4045 { | 4047 { |
4046 if (!RuntimeEnabledFeatures::renderingPipelineThrottlingEnabled()) | 4048 if (!RuntimeEnabledFeatures::renderingPipelineThrottlingEnabled()) |
4047 return false; | 4049 return false; |
4048 return m_hiddenForThrottling && m_crossOriginForThrottling; | 4050 return m_hiddenForThrottling && m_crossOriginForThrottling; |
4049 } | 4051 } |
4050 | 4052 |
4051 LayoutBox& FrameView::boxForScrollControlPaintInvalidation() const | 4053 LayoutBox& FrameView::boxForScrollControlPaintInvalidation() const |
4052 { | 4054 { |
4053 ASSERT(layoutView()); | 4055 ASSERT(layoutView()); |
4054 return *layoutView(); | 4056 return *layoutView(); |
4055 } | 4057 } |
4056 | 4058 |
4057 } // namespace blink | 4059 } // namespace blink |
OLD | NEW |