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

Side by Side Diff: third_party/WebKit/Source/core/layout/LayoutImage.cpp

Issue 2229643002: Don't invalidate paint on background image change if it's obscured (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@BackgroundObscured
Patch Set: - Created 4 years, 4 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) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2000 Dirk Mueller (mueller@kde.org) 4 * (C) 2000 Dirk Mueller (mueller@kde.org)
5 * (C) 2006 Allan Sandfeld Jensen (kde@carewolf.com) 5 * (C) 2006 Allan Sandfeld Jensen (kde@carewolf.com)
6 * (C) 2006 Samuel Weinig (sam.weinig@gmail.com) 6 * (C) 2006 Samuel Weinig (sam.weinig@gmail.com)
7 * Copyright (C) 2003, 2004, 2005, 2006, 2008, 2009, 2010, 2011 Apple Inc. All r ights reserved. 7 * Copyright (C) 2003, 2004, 2005, 2006, 2008, 2009, 2010, 2011 Apple Inc. All r ights reserved.
8 * Copyright (C) 2010 Google Inc. All rights reserved. 8 * Copyright (C) 2010 Google Inc. All rights reserved.
9 * Copyright (C) Research In Motion Limited 2011-2012. All rights reserved. 9 * Copyright (C) Research In Motion Limited 2011-2012. All rights reserved.
10 * 10 *
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 if (!LayoutBoxModelObject::boxShadowShouldBeAppliedToBackground(bleedAvoidan ce)) 209 if (!LayoutBoxModelObject::boxShadowShouldBeAppliedToBackground(bleedAvoidan ce))
210 return false; 210 return false;
211 211
212 return !const_cast<LayoutImage*>(this)->backgroundIsKnownToBeObscured(); 212 return !const_cast<LayoutImage*>(this)->backgroundIsKnownToBeObscured();
213 } 213 }
214 214
215 bool LayoutImage::foregroundIsKnownToBeOpaqueInRect(const LayoutRect& localRect, unsigned) const 215 bool LayoutImage::foregroundIsKnownToBeOpaqueInRect(const LayoutRect& localRect, unsigned) const
216 { 216 {
217 if (!m_imageResource->hasImage() || m_imageResource->errorOccurred()) 217 if (!m_imageResource->hasImage() || m_imageResource->errorOccurred())
218 return false; 218 return false;
219 if (m_imageResource->cachedImage() && !m_imageResource->cachedImage()->isLoa ded()) 219 if (!m_imageResource->cachedImage() || !m_imageResource->cachedImage()->isLo aded())
220 return false; 220 return false;
221 if (!contentBoxRect().contains(localRect)) 221 if (!contentBoxRect().contains(localRect))
222 return false; 222 return false;
223 EFillBox backgroundClip = style()->backgroundClip(); 223 EFillBox backgroundClip = style()->backgroundClip();
224 // Background paints under borders. 224 // Background paints under borders.
225 if (backgroundClip == BorderFillBox && style()->hasBorder() && !style()->bor derObscuresBackground()) 225 if (backgroundClip == BorderFillBox && style()->hasBorder() && !style()->bor derObscuresBackground())
226 return false; 226 return false;
227 // Background shows in padding area. 227 // Background shows in padding area.
228 if ((backgroundClip == BorderFillBox || backgroundClip == PaddingFillBox) && style()->hasPadding()) 228 if ((backgroundClip == BorderFillBox || backgroundClip == PaddingFillBox) && style()->hasPadding())
229 return false; 229 return false;
230 // Object-position may leave parts of the content box empty, regardless of t he value of object-fit. 230 // Object-position may leave parts of the content box empty, regardless of t he value of object-fit.
231 if (style()->objectPosition() != ComputedStyle::initialObjectPosition()) 231 if (style()->objectPosition() != ComputedStyle::initialObjectPosition())
232 return false; 232 return false;
233 // Object-fit may leave parts of the content box empty. 233 // Object-fit may leave parts of the content box empty.
234 ObjectFit objectFit = style()->getObjectFit(); 234 ObjectFit objectFit = style()->getObjectFit();
235 if (objectFit != ObjectFitFill && objectFit != ObjectFitCover) 235 if (objectFit != ObjectFitFill && objectFit != ObjectFitCover)
236 return false; 236 return false;
237 if (!m_imageResource->cachedImage())
chrishtr 2016/08/09 16:05:17 ?
Xianzhu 2016/08/09 18:51:48 This is combined into the condition at line 219.
chrishtr 2016/08/09 22:07:54 Ah ok.
238 return false;
239 // Check for image with alpha. 237 // Check for image with alpha.
240 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "PaintImage", " data", InspectorPaintImageEvent::data(this, *m_imageResource->cachedImage())); 238 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "PaintImage", " data", InspectorPaintImageEvent::data(this, *m_imageResource->cachedImage()));
241 return m_imageResource->cachedImage()->getImage()->currentFrameKnownToBeOpaq ue(Image::PreCacheMetadata); 239 return m_imageResource->cachedImage()->getImage()->currentFrameKnownToBeOpaq ue(Image::PreCacheMetadata);
242 } 240 }
243 241
244 bool LayoutImage::computeBackgroundIsKnownToBeObscured() const 242 bool LayoutImage::computeBackgroundIsKnownToBeObscured() const
245 { 243 {
246 if (!styleRef().hasBackground()) 244 if (!styleRef().hasBackground())
247 return false; 245 return false;
248 246
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
309 return nullptr; 307 return nullptr;
310 308
311 ImageResource* cachedImage = m_imageResource->cachedImage(); 309 ImageResource* cachedImage = m_imageResource->cachedImage();
312 if (cachedImage && cachedImage->getImage() && cachedImage->getImage()->isSVG Image()) 310 if (cachedImage && cachedImage->getImage() && cachedImage->getImage()->isSVG Image())
313 return toSVGImage(cachedImage->getImage())->embeddedReplacedContent(); 311 return toSVGImage(cachedImage->getImage())->embeddedReplacedContent();
314 312
315 return nullptr; 313 return nullptr;
316 } 314 }
317 315
318 } // namespace blink 316 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698