<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[213721] tags/Safari-604.1.10</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/213721">213721</a></dd>
<dt>Author</dt> <dd>jmarcell@apple.com</dd>
<dt>Date</dt> <dd>2017-03-10 11:15:23 -0800 (Fri, 10 Mar 2017)</dd>
</dl>
<h3>Log Message</h3>
<pre>Merge <a href="http://trac.webkit.org/projects/webkit/changeset/213715">r213715</a>. rdar://problem/24709033</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#tagsSafari604110SourceWebCoreChangeLog">tags/Safari-604.1.10/Source/WebCore/ChangeLog</a></li>
<li><a href="#tagsSafari604110SourceWebCorehtmlHTMLImageElementcpp">tags/Safari-604.1.10/Source/WebCore/html/HTMLImageElement.cpp</a></li>
<li><a href="#tagsSafari604110SourceWebCorehtmlHTMLImageElementh">tags/Safari-604.1.10/Source/WebCore/html/HTMLImageElement.h</a></li>
<li><a href="#tagsSafari604110SourceWebCorepageFrameViewcpp">tags/Safari-604.1.10/Source/WebCore/page/FrameView.cpp</a></li>
<li><a href="#tagsSafari604110SourceWebCorepageFrameViewh">tags/Safari-604.1.10/Source/WebCore/page/FrameView.h</a></li>
<li><a href="#tagsSafari604110SourceWebCoreplatformgraphicsBitmapImagecpp">tags/Safari-604.1.10/Source/WebCore/platform/graphics/BitmapImage.cpp</a></li>
<li><a href="#tagsSafari604110SourceWebCoreplatformgraphicsBitmapImageh">tags/Safari-604.1.10/Source/WebCore/platform/graphics/BitmapImage.h</a></li>
<li><a href="#tagsSafari604110SourceWebCoreplatformgraphicsImageh">tags/Safari-604.1.10/Source/WebCore/platform/graphics/Image.h</a></li>
<li><a href="#tagsSafari604110SourceWebCoreplatformgraphicsImageFrameCachecpp">tags/Safari-604.1.10/Source/WebCore/platform/graphics/ImageFrameCache.cpp</a></li>
<li><a href="#tagsSafari604110SourceWebCoreplatformgraphicsImageFrameCacheh">tags/Safari-604.1.10/Source/WebCore/platform/graphics/ImageFrameCache.h</a></li>
<li><a href="#tagsSafari604110SourceWebCoreplatformgraphicsImageSourceh">tags/Safari-604.1.10/Source/WebCore/platform/graphics/ImageSource.h</a></li>
<li><a href="#tagsSafari604110SourceWebCoreplatformgraphicsTiledBackingh">tags/Safari-604.1.10/Source/WebCore/platform/graphics/TiledBacking.h</a></li>
<li><a href="#tagsSafari604110SourceWebCorerenderingRenderElementcpp">tags/Safari-604.1.10/Source/WebCore/rendering/RenderElement.cpp</a></li>
<li><a href="#tagsSafari604110SourceWebCorerenderingRenderElementh">tags/Safari-604.1.10/Source/WebCore/rendering/RenderElement.h</a></li>
<li><a href="#tagsSafari604110SourceWebCorerenderingRenderObjectcpp">tags/Safari-604.1.10/Source/WebCore/rendering/RenderObject.cpp</a></li>
<li><a href="#tagsSafari604110SourceWebCorerenderingRenderObjecth">tags/Safari-604.1.10/Source/WebCore/rendering/RenderObject.h</a></li>
<li><a href="#tagsSafari604110SourceWebCorerenderingRenderReplacedh">tags/Safari-604.1.10/Source/WebCore/rendering/RenderReplaced.h</a></li>
<li><a href="#tagsSafari604110SourceWebCorerenderingRenderViewcpp">tags/Safari-604.1.10/Source/WebCore/rendering/RenderView.cpp</a></li>
<li><a href="#tagsSafari604110SourceWebCorerenderingRenderViewh">tags/Safari-604.1.10/Source/WebCore/rendering/RenderView.h</a></li>
<li><a href="#tagsSafari604110SourceWebKit2ChangeLog">tags/Safari-604.1.10/Source/WebKit2/ChangeLog</a></li>
<li><a href="#tagsSafari604110SourceWebKit2UIProcessAPICWKPreferencescpp">tags/Safari-604.1.10/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp</a></li>
<li><a href="#tagsSafari604110SourceWebKit2UIProcessAPICWKPreferencesRefPrivateh">tags/Safari-604.1.10/Source/WebKit2/UIProcess/API/C/WKPreferencesRefPrivate.h</a></li>
<li><a href="#tagsSafari604110ToolsChangeLog">tags/Safari-604.1.10/Tools/ChangeLog</a></li>
<li><a href="#tagsSafari604110ToolsDumpRenderTreemacDumpRenderTreemm">tags/Safari-604.1.10/Tools/DumpRenderTree/mac/DumpRenderTree.mm</a></li>
<li><a href="#tagsSafari604110ToolsWebKitTestRunnerTestControllercpp">tags/Safari-604.1.10/Tools/WebKitTestRunner/TestController.cpp</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="tagsSafari604110SourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: tags/Safari-604.1.10/Source/WebCore/ChangeLog (213720 => 213721)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-604.1.10/Source/WebCore/ChangeLog        2017-03-10 19:12:26 UTC (rev 213720)
+++ tags/Safari-604.1.10/Source/WebCore/ChangeLog        2017-03-10 19:15:23 UTC (rev 213721)
</span><span class="lines">@@ -1,3 +1,21 @@
</span><ins>+2017-03-10 Jason Marcell <jmarcell@apple.com>
+
+ Merge r213715. rdar://problem/24709033
+
+ 2017-03-10 Commit Queue <commit-queue@webkit.org>
+
+ Unreviewed, rolling out r213618.
+ https://bugs.webkit.org/show_bug.cgi?id=169475
+
+ Suspect this is the cause of a large memory regression
+ (Requested by jonlee_ on #webkit).
+
+ Reverted changeset:
+
+ "Enable async image decoding for large images"
+ https://bugs.webkit.org/show_bug.cgi?id=165039
+ http://trac.webkit.org/changeset/213618
+
</ins><span class="cx"> 2017-03-10 Antti Koivisto <antti@apple.com>
</span><span class="cx">
</span><span class="cx"> Allow the page to render before <link> stylesheet tags in body
</span></span></pre></div>
<a id="tagsSafari604110SourceWebCorehtmlHTMLImageElementcpp"></a>
<div class="modfile"><h4>Modified: tags/Safari-604.1.10/Source/WebCore/html/HTMLImageElement.cpp (213720 => 213721)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-604.1.10/Source/WebCore/html/HTMLImageElement.cpp        2017-03-10 19:12:26 UTC (rev 213720)
+++ tags/Safari-604.1.10/Source/WebCore/html/HTMLImageElement.cpp        2017-03-10 19:15:23 UTC (rev 213721)
</span><span class="lines">@@ -289,18 +289,8 @@
</span><span class="cx"> // image height and width for the alt text instead.
</span><span class="cx"> if (!m_imageLoader.image() && !renderImageResource.cachedImage())
</span><span class="cx"> renderImage.setImageSizeForAltText();
</span><del>-
- renderImage.registerForAsyncImageDecodingCallback();
</del><span class="cx"> }
</span><del>-
-void HTMLImageElement::willDetachRenderers()
-{
- if (!is<RenderImage>(renderer()))
- return;
</del><span class="cx">
</span><del>- renderer()->unregisterForAsyncImageDecodingCallback();
-}
-
</del><span class="cx"> Node::InsertionNotificationRequest HTMLImageElement::insertedInto(ContainerNode& insertionPoint)
</span><span class="cx"> {
</span><span class="cx"> if (m_formSetByParser) {
</span></span></pre></div>
<a id="tagsSafari604110SourceWebCorehtmlHTMLImageElementh"></a>
<div class="modfile"><h4>Modified: tags/Safari-604.1.10/Source/WebCore/html/HTMLImageElement.h (213720 => 213721)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-604.1.10/Source/WebCore/html/HTMLImageElement.h        2017-03-10 19:12:26 UTC (rev 213720)
+++ tags/Safari-604.1.10/Source/WebCore/html/HTMLImageElement.h        2017-03-10 19:15:23 UTC (rev 213721)
</span><span class="lines">@@ -105,7 +105,6 @@
</span><span class="cx"> void collectStyleForPresentationAttribute(const QualifiedName&, const AtomicString&, MutableStyleProperties&) override;
</span><span class="cx">
</span><span class="cx"> void didAttachRenderers() override;
</span><del>- void willDetachRenderers() override;
</del><span class="cx"> RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) override;
</span><span class="cx"> void setBestFitURLAndDPRFromImageCandidate(const ImageCandidate&);
</span><span class="cx">
</span></span></pre></div>
<a id="tagsSafari604110SourceWebCorepageFrameViewcpp"></a>
<div class="modfile"><h4>Modified: tags/Safari-604.1.10/Source/WebCore/page/FrameView.cpp (213720 => 213721)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-604.1.10/Source/WebCore/page/FrameView.cpp        2017-03-10 19:12:26 UTC (rev 213720)
+++ tags/Safari-604.1.10/Source/WebCore/page/FrameView.cpp        2017-03-10 19:15:23 UTC (rev 213721)
</span><span class="lines">@@ -1058,10 +1058,6 @@
</span><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> renderView->compositor().flushPendingLayerChanges(&rootFrameForFlush == m_frame.ptr());
</span><del>-
- if (TiledBacking* tiledBacking = this->tiledBacking())
- requestAsyncDecodingForImagesInAbsoluteRectIncludingSubframes(tiledBacking->tileCoverageRect());
-
</del><span class="cx"> return true;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -2531,20 +2527,7 @@
</span><span class="cx"> updateLayoutViewport();
</span><span class="cx"> viewportContentsChanged();
</span><span class="cx"> }
</span><del>-
-void FrameView::applyRecursivelyWithAbsoluteRect(const IntRect& rect, const std::function<void(FrameView&, const IntRect&)>& apply)
-{
- apply(*this, rect);
</del><span class="cx">
</span><del>- // Recursive call for subframes. We cache the current FrameView's windowClipRect to avoid recomputing it for every subframe.
- IntRect windowClipRect = contentsToWindow(rect);
- SetForScope<IntRect*> windowClipRectCache(m_cachedWindowClipRect, &windowClipRect);
- for (Frame* childFrame = frame().tree().firstChild(); childFrame; childFrame = childFrame->tree().nextSibling()) {
- if (auto* childView = childFrame->view())
- childView->applyRecursivelyWithAbsoluteRect(rect, apply);
- }
-}
-
</del><span class="cx"> void FrameView::applyRecursivelyWithVisibleRect(const std::function<void (FrameView& frameView, const IntRect& visibleRect)>& apply)
</span><span class="cx"> {
</span><span class="cx"> IntRect windowClipRect = this->windowClipRect();
</span><span class="lines">@@ -2598,30 +2581,6 @@
</span><span class="cx"> });
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void FrameView::requestAsyncDecodingForImagesInAbsoluteRect(const IntRect& rect)
-{
- if (!frame().view()) {
- // The frame is being destroyed.
- return;
- }
-
- if (rect.isEmpty())
- return;
-
- if (auto* renderView = frame().contentRenderer())
- renderView->requestAsyncDecodingForImagesInAbsoluteRect(rect);
-}
-
-void FrameView::requestAsyncDecodingForImagesInAbsoluteRectIncludingSubframes(const IntRect& rect)
-{
- if (!frame().settings().largeImageAsyncDecodingEnabled())
- return;
-
- applyRecursivelyWithAbsoluteRect(rect, [] (FrameView& frameView, const IntRect& rect) {
- frameView.requestAsyncDecodingForImagesInAbsoluteRect(rect);
- });
-}
-
</del><span class="cx"> void FrameView::updateLayerPositionsAfterScrolling()
</span><span class="cx"> {
</span><span class="cx"> // If we're scrolling as a result of updating the view size after layout, we'll update widgets and layer positions soon anyway.
</span></span></pre></div>
<a id="tagsSafari604110SourceWebCorepageFrameViewh"></a>
<div class="modfile"><h4>Modified: tags/Safari-604.1.10/Source/WebCore/page/FrameView.h (213720 => 213721)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-604.1.10/Source/WebCore/page/FrameView.h        2017-03-10 19:12:26 UTC (rev 213720)
+++ tags/Safari-604.1.10/Source/WebCore/page/FrameView.h        2017-03-10 19:15:23 UTC (rev 213721)
</span><span class="lines">@@ -275,7 +275,6 @@
</span><span class="cx">
</span><span class="cx"> void viewportContentsChanged();
</span><span class="cx"> WEBCORE_EXPORT void resumeVisibleImageAnimationsIncludingSubframes();
</span><del>- void requestAsyncDecodingForImagesInAbsoluteRectIncludingSubframes(const IntRect&);
</del><span class="cx">
</span><span class="cx"> String mediaType() const;
</span><span class="cx"> WEBCORE_EXPORT void setMediaType(const String&);
</span><span class="lines">@@ -646,11 +645,9 @@
</span><span class="cx"> void performPostLayoutTasks();
</span><span class="cx"> void autoSizeIfEnabled();
</span><span class="cx">
</span><del>- void applyRecursivelyWithAbsoluteRect(const IntRect&, const std::function<void(FrameView& frameView, const IntRect& rect)>&);
</del><span class="cx"> void applyRecursivelyWithVisibleRect(const std::function<void (FrameView& frameView, const IntRect& visibleRect)>&);
</span><span class="cx"> void resumeVisibleImageAnimations(const IntRect& visibleRect);
</span><span class="cx"> void updateScriptedAnimationsAndTimersThrottlingState(const IntRect& visibleRect);
</span><del>- void requestAsyncDecodingForImagesInAbsoluteRect(const IntRect&);
</del><span class="cx">
</span><span class="cx"> void updateLayerFlushThrottling();
</span><span class="cx"> WEBCORE_EXPORT void adjustTiledBackingCoverage();
</span></span></pre></div>
<a id="tagsSafari604110SourceWebCoreplatformgraphicsBitmapImagecpp"></a>
<div class="modfile"><h4>Modified: tags/Safari-604.1.10/Source/WebCore/platform/graphics/BitmapImage.cpp (213720 => 213721)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-604.1.10/Source/WebCore/platform/graphics/BitmapImage.cpp        2017-03-10 19:12:26 UTC (rev 213720)
+++ tags/Safari-604.1.10/Source/WebCore/platform/graphics/BitmapImage.cpp        2017-03-10 19:15:23 UTC (rev 213721)
</span><span class="lines">@@ -67,7 +67,7 @@
</span><span class="cx"> {
</span><span class="cx"> if (!destroyAll)
</span><span class="cx"> m_source.destroyDecodedDataBeforeFrame(m_currentFrame);
</span><del>- else if (m_source.hasAsyncDecodingQueue())
</del><ins>+ else if (m_source.hasDecodingQueue())
</ins><span class="cx"> m_source.destroyAllDecodedDataExcludeFrame(m_currentFrame);
</span><span class="cx"> else
</span><span class="cx"> m_source.destroyAllDecodedData();
</span><span class="lines">@@ -74,7 +74,7 @@
</span><span class="cx">
</span><span class="cx"> // There's no need to throw away the decoder unless we're explicitly asked
</span><span class="cx"> // to destroy all of the frames.
</span><del>- if (!destroyAll || m_source.hasAsyncDecodingQueue())
</del><ins>+ if (!destroyAll || m_source.hasDecodingQueue())
</ins><span class="cx"> m_source.clearFrameBufferCache(m_currentFrame);
</span><span class="cx"> else
</span><span class="cx"> m_source.clear(data());
</span><span class="lines">@@ -103,7 +103,7 @@
</span><span class="cx"> NativeImagePtr BitmapImage::frameImageAtIndex(size_t index, const std::optional<SubsamplingLevel>& subsamplingLevel, const std::optional<IntSize>& sizeForDrawing, const GraphicsContext* targetContext)
</span><span class="cx"> {
</span><span class="cx"> if (!frameHasValidNativeImageAtIndex(index, subsamplingLevel, sizeForDrawing)) {
</span><del>- LOG(Images, "BitmapImage::%s - %p - url: %s [subsamplingLevel was %d, resampling]", __FUNCTION__, this, sourceURL().utf8().data(), static_cast<int>(frameSubsamplingLevelAtIndex(index)));
</del><ins>+ LOG(Images, "BitmapImage::%s - %p - url: %s [subsamplingLevel was %d, resampling]", __FUNCTION__, this, sourceURL().characters8(), static_cast<int>(frameSubsamplingLevelAtIndex(index)));
</ins><span class="cx"> invalidatePlatformData();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -164,41 +164,26 @@
</span><span class="cx"> m_sizeForDrawing = enclosingIntRect(destRect).size();
</span><span class="cx"> StartAnimationResult result = internalStartAnimation();
</span><span class="cx">
</span><del>- if (result == StartAnimationResult::DecodingActive && showDebugBackground()) {
- fillWithSolidColor(context, destRect, Color::yellow, op);
</del><ins>+ Color color;
+ if (result == StartAnimationResult::DecodingActive && showDebugBackground())
+ color = Color::yellow;
+ else
+ color = singlePixelSolidColor();
+
+ if (color.isValid()) {
+ fillWithSolidColor(context, destRect, color, op);
</ins><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- NativeImagePtr image;
- if (frameIsBeingDecodedAtIndex(m_currentFrame, m_sizeForDrawing)) {
- ASSERT(!canAnimate() && !m_currentFrame);
- m_needsRepaint = true;
</del><ins>+ float scale = subsamplingScale(context, destRect, srcRect);
+ m_currentSubsamplingLevel = allowSubsampling() ? m_source.subsamplingLevelForScale(scale) : SubsamplingLevel::Default;
+ LOG(Images, "BitmapImage::%s - %p - url: %s [m_currentFrame = %ld subsamplingLevel = %d scale = %.4f]", __FUNCTION__, this, sourceURL().characters8(), m_currentFrame, static_cast<int>(m_currentSubsamplingLevel), scale);
</ins><span class="cx">
</span><del>- if (!frameHasDecodedNativeImage(m_currentFrame)) {
- if (showDebugBackground())
- fillWithSolidColor(context, destRect, Color::yellow, op);
- return;
- }
-
- image = frameImageAtIndex(m_currentFrame);
- } else {
- float scale = subsamplingScale(context, destRect, srcRect);
- m_currentSubsamplingLevel = allowSubsampling() ? m_source.subsamplingLevelForScale(scale) : SubsamplingLevel::Default;
- LOG(Images, "BitmapImage::%s - %p - url: %s [subsamplingLevel = %d scale = %.4f]", __FUNCTION__, this, sourceURL().utf8().data(), static_cast<int>(m_currentSubsamplingLevel), scale);
-
- ASSERT_IMPLIES(result == StartAnimationResult::DecodingActive, m_source.frameHasValidNativeImageAtIndex(m_currentFrame, m_currentSubsamplingLevel, m_sizeForDrawing));
- image = frameImageAtIndex(m_currentFrame, m_currentSubsamplingLevel, m_sizeForDrawing, &context);
- }
-
</del><ins>+ ASSERT_IMPLIES(result == StartAnimationResult::DecodingActive, m_source.frameHasValidNativeImageAtIndex(m_currentFrame, m_currentSubsamplingLevel, m_sizeForDrawing));
+ auto image = frameImageAtIndex(m_currentFrame, m_currentSubsamplingLevel, m_sizeForDrawing, &context);
</ins><span class="cx"> if (!image) // If it's too early we won't have an image yet.
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- Color color = singlePixelSolidColor();
- if (color.isValid()) {
- fillWithSolidColor(context, destRect, color, op);
- return;
- }
-
</del><span class="cx"> ImageOrientation orientation(description.imageOrientation());
</span><span class="cx"> if (description.respectImageOrientation() == RespectImageOrientation)
</span><span class="cx"> orientation = frameOrientationAtIndex(m_currentFrame);
</span><span class="lines">@@ -282,11 +267,11 @@
</span><span class="cx">
</span><span class="cx"> if (m_frameTimer)
</span><span class="cx"> return StartAnimationResult::TimerActive;
</span><del>-
</del><ins>+
</ins><span class="cx"> // Don't start a new animation until we draw the frame that is currently being decoded.
</span><span class="cx"> size_t nextFrame = (m_currentFrame + 1) % frameCount();
</span><span class="cx"> if (frameIsBeingDecodedAtIndex(nextFrame, m_sizeForDrawing)) {
</span><del>- LOG(Images, "BitmapImage::%s - %p - url: %s [nextFrame = %ld is being decoded]", __FUNCTION__, this, sourceURL().utf8().data(), nextFrame);
</del><ins>+ LOG(Images, "BitmapImage::%s - %p - url: %s [nextFrame = %ld is being decoded]", __FUNCTION__, this, sourceURL().characters8(), nextFrame);
</ins><span class="cx"> return StartAnimationResult::DecodingActive;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -332,9 +317,9 @@
</span><span class="cx">
</span><span class="cx"> #if !LOG_DISABLED
</span><span class="cx"> if (isAsyncDecode)
</span><del>- LOG(Images, "BitmapImage::%s - %p - url: %s [requesting async decoding for nextFrame = %ld]", __FUNCTION__, this, sourceURL().utf8().data(), nextFrame);
</del><ins>+ LOG(Images, "BitmapImage::%s - %p - url: %s [requesting async decoding for nextFrame = %ld]", __FUNCTION__, this, sourceURL().characters8(), nextFrame);
</ins><span class="cx"> else
</span><del>- LOG(Images, "BitmapImage::%s - %p - url: %s [cachedFrameCount = %ld nextFrame = %ld]", __FUNCTION__, this, sourceURL().utf8().data(), ++m_cachedFrameCount, nextFrame);
</del><ins>+ LOG(Images, "BitmapImage::%s - %p - url: %s [cachedFrameCount = %ld nextFrame = %ld]", __FUNCTION__, this, sourceURL().characters8(), ++m_cachedFrameCount, nextFrame);
</ins><span class="cx"> #else
</span><span class="cx"> UNUSED_PARAM(isAsyncDecode);
</span><span class="cx"> #endif
</span><span class="lines">@@ -361,7 +346,7 @@
</span><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx"> }
</span><del>-
</del><ins>+
</ins><span class="cx"> // Don't advance to nextFrame unless its decoding has finished or was not required.
</span><span class="cx"> size_t nextFrame = (m_currentFrame + 1) % frameCount();
</span><span class="cx"> if (!frameIsBeingDecodedAtIndex(nextFrame, m_sizeForDrawing))
</span><span class="lines">@@ -370,7 +355,7 @@
</span><span class="cx"> // Force repaint if showDebugBackground() is on.
</span><span class="cx"> if (showDebugBackground())
</span><span class="cx"> imageObserver()->changedInRect(this);
</span><del>- LOG(Images, "BitmapImage::%s - %p - url: %s [lateFrameCount = %ld nextFrame = %ld]", __FUNCTION__, this, sourceURL().utf8().data(), ++m_lateFrameCount, nextFrame);
</del><ins>+ LOG(Images, "BitmapImage::%s - %p - url: %s [lateFrameCount = %ld nextFrame = %ld]", __FUNCTION__, this, sourceURL().characters8(), ++m_lateFrameCount, nextFrame);
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -384,7 +369,7 @@
</span><span class="cx"> if (imageObserver())
</span><span class="cx"> imageObserver()->animationAdvanced(this);
</span><span class="cx">
</span><del>- LOG(Images, "BitmapImage::%s - %p - url: %s [m_currentFrame = %ld]", __FUNCTION__, this, sourceURL().utf8().data(), m_currentFrame);
</del><ins>+ LOG(Images, "BitmapImage::%s - %p - url: %s [m_currentFrame = %ld]", __FUNCTION__, this, sourceURL().characters8(), m_currentFrame);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void BitmapImage::stopAnimation()
</span><span class="lines">@@ -410,42 +395,13 @@
</span><span class="cx"> void BitmapImage::newFrameNativeImageAvailableAtIndex(size_t index)
</span><span class="cx"> {
</span><span class="cx"> UNUSED_PARAM(index);
</span><del>- if (canAnimate()) {
- ASSERT(index == (m_currentFrame + 1) % frameCount());
-
- // Don't advance to nextFrame unless the timer was fired before its decoding finishes.
- if (canAnimate() && !m_frameTimer)
- internalAdvanceAnimation();
- else
- LOG(Images, "BitmapImage::%s - %p - url: %s [earlyFrameCount = %ld nextFrame = %ld]", __FUNCTION__, this, sourceURL().utf8().data(), ++m_earlyFrameCount, index);
- } else {
- ASSERT(index == m_currentFrame && !m_currentFrame);
-
- if (m_needsRepaint) {
- imageObserver()->changedInRect(this, nullptr);
- m_needsRepaint = false;
- }
-
- // Keep the number of decoding threads under control.
- if (m_source.isAsyncDecodingQueueIdle())
- m_source.stopAsyncDecodingQueue();
- }
-}
</del><ins>+ ASSERT(index == (m_currentFrame + 1) % frameCount());
</ins><span class="cx">
</span><del>-void BitmapImage::requestAsyncDecoding(const IntSize& sizeForDrawing)
-{
- if (!isLargeImageAsyncDecodingRequired())
- return;
-
- ASSERT(!m_currentFrame);
- bool isAsyncDecode = m_source.requestFrameAsyncDecodingAtIndex(0, m_currentSubsamplingLevel, sizeForDrawing);
-
-#if !LOG_DISABLED
- if (isAsyncDecode)
- LOG(Images, "BitmapImage::%s - %p - url: %s", __FUNCTION__, this, sourceURL().utf8().data());
-#else
- UNUSED_PARAM(isAsyncDecode);
-#endif
</del><ins>+ // Don't advance to nextFrame unless the timer was fired before its decoding finishes.
+ if (canAnimate() && !m_frameTimer)
+ internalAdvanceAnimation();
+ else
+ LOG(Images, "BitmapImage::%s - %p - url: %s [earlyFrameCount = %ld nextFrame = %ld]", __FUNCTION__, this, sourceURL().characters8(), ++m_earlyFrameCount, index);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void BitmapImage::dump(TextStream& ts) const
</span></span></pre></div>
<a id="tagsSafari604110SourceWebCoreplatformgraphicsBitmapImageh"></a>
<div class="modfile"><h4>Modified: tags/Safari-604.1.10/Source/WebCore/platform/graphics/BitmapImage.h (213720 => 213721)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-604.1.10/Source/WebCore/platform/graphics/BitmapImage.h        2017-03-10 19:12:26 UTC (rev 213720)
+++ tags/Safari-604.1.10/Source/WebCore/platform/graphics/BitmapImage.h        2017-03-10 19:15:23 UTC (rev 213721)
</span><span class="lines">@@ -173,7 +173,6 @@
</span><span class="cx"> void stopAnimation() override;
</span><span class="cx"> void resetAnimation() override;
</span><span class="cx"> void newFrameNativeImageAvailableAtIndex(size_t) override;
</span><del>- void requestAsyncDecoding(const IntSize& sizeForDrawing) override;
</del><span class="cx">
</span><span class="cx"> // Handle platform-specific data
</span><span class="cx"> void invalidatePlatformData();
</span><span class="lines">@@ -208,7 +207,6 @@
</span><span class="cx"> RepetitionCount m_repetitionsComplete { RepetitionCountNone }; // How many repetitions we've finished.
</span><span class="cx"> double m_desiredFrameStartTime { 0 }; // The system time at which we hope to see the next call to startAnimation().
</span><span class="cx"> bool m_animationFinished { false };
</span><del>- bool m_needsRepaint { false };
</del><span class="cx">
</span><span class="cx"> float m_frameDecodingDurationForTesting { 0 };
</span><span class="cx"> double m_desiredFrameDecodeTimeForTesting { 0 };
</span></span></pre></div>
<a id="tagsSafari604110SourceWebCoreplatformgraphicsImageh"></a>
<div class="modfile"><h4>Modified: tags/Safari-604.1.10/Source/WebCore/platform/graphics/Image.h (213720 => 213721)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-604.1.10/Source/WebCore/platform/graphics/Image.h        2017-03-10 19:12:26 UTC (rev 213720)
+++ tags/Safari-604.1.10/Source/WebCore/platform/graphics/Image.h        2017-03-10 19:15:23 UTC (rev 213721)
</span><span class="lines">@@ -130,7 +130,6 @@
</span><span class="cx"> virtual void stopAnimation() {}
</span><span class="cx"> virtual void resetAnimation() {}
</span><span class="cx"> virtual void newFrameNativeImageAvailableAtIndex(size_t) { }
</span><del>- virtual void requestAsyncDecoding(const IntSize&) { }
</del><span class="cx">
</span><span class="cx"> // Typically the CachedImage that owns us.
</span><span class="cx"> ImageObserver* imageObserver() const { return m_imageObserver; }
</span></span></pre></div>
<a id="tagsSafari604110SourceWebCoreplatformgraphicsImageFrameCachecpp"></a>
<div class="modfile"><h4>Modified: tags/Safari-604.1.10/Source/WebCore/platform/graphics/ImageFrameCache.cpp (213720 => 213721)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-604.1.10/Source/WebCore/platform/graphics/ImageFrameCache.cpp        2017-03-10 19:12:26 UTC (rev 213720)
+++ tags/Safari-604.1.10/Source/WebCore/platform/graphics/ImageFrameCache.cpp        2017-03-10 19:15:23 UTC (rev 213721)
</span><span class="lines">@@ -67,7 +67,7 @@
</span><span class="cx">
</span><span class="cx"> ImageFrameCache::~ImageFrameCache()
</span><span class="cx"> {
</span><del>- ASSERT(!hasAsyncDecodingQueue());
</del><ins>+ ASSERT(!hasDecodingQueue());
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void ImageFrameCache::destroyDecodedData(size_t frameCount, size_t excludeFrame)
</span><span class="lines">@@ -256,7 +256,7 @@
</span><span class="cx"> Ref<WorkQueue> ImageFrameCache::decodingQueue()
</span><span class="cx"> {
</span><span class="cx"> if (!m_decodingQueue)
</span><del>- m_decodingQueue = WorkQueue::create("org.webkit.ImageDecoder", WorkQueue::Type::Serial, WorkQueue::QOS::Default);
</del><ins>+ m_decodingQueue = WorkQueue::create("org.webkit.ImageDecoder", WorkQueue::Type::Serial, WorkQueue::QOS::UserInteractive);
</ins><span class="cx">
</span><span class="cx"> return *m_decodingQueue;
</span><span class="cx"> }
</span><span class="lines">@@ -263,7 +263,7 @@
</span><span class="cx">
</span><span class="cx"> void ImageFrameCache::startAsyncDecodingQueue()
</span><span class="cx"> {
</span><del>- if (hasAsyncDecodingQueue() || !isDecoderAvailable())
</del><ins>+ if (hasDecodingQueue() || !isDecoderAvailable())
</ins><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> m_frameRequestQueue.open();
</span><span class="lines">@@ -306,7 +306,7 @@
</span><span class="cx"> if (frame.hasValidNativeImage(subsamplingLevel, sizeForDrawing))
</span><span class="cx"> return false;
</span><span class="cx">
</span><del>- if (!hasAsyncDecodingQueue())
</del><ins>+ if (!hasDecodingQueue())
</ins><span class="cx"> startAsyncDecodingQueue();
</span><span class="cx">
</span><span class="cx"> frame.enqueueSizeForDecoding(sizeForDrawing);
</span><span class="lines">@@ -314,18 +314,9 @@
</span><span class="cx"> return true;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-bool ImageFrameCache::isAsyncDecodingQueueIdle() const
-{
- for (const ImageFrame& frame : m_frames) {
- if (frame.isBeingDecoded())
- return false;
- }
- return true;
-}
-
</del><span class="cx"> void ImageFrameCache::stopAsyncDecodingQueue()
</span><span class="cx"> {
</span><del>- if (!hasAsyncDecodingQueue())
</del><ins>+ if (!hasDecodingQueue())
</ins><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> m_frameRequestQueue.close();
</span></span></pre></div>
<a id="tagsSafari604110SourceWebCoreplatformgraphicsImageFrameCacheh"></a>
<div class="modfile"><h4>Modified: tags/Safari-604.1.10/Source/WebCore/platform/graphics/ImageFrameCache.h (213720 => 213721)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-604.1.10/Source/WebCore/platform/graphics/ImageFrameCache.h        2017-03-10 19:12:26 UTC (rev 213720)
+++ tags/Safari-604.1.10/Source/WebCore/platform/graphics/ImageFrameCache.h        2017-03-10 19:15:23 UTC (rev 213721)
</span><span class="lines">@@ -71,8 +71,7 @@
</span><span class="cx"> void startAsyncDecodingQueue();
</span><span class="cx"> bool requestFrameAsyncDecodingAtIndex(size_t, SubsamplingLevel, const IntSize&);
</span><span class="cx"> void stopAsyncDecodingQueue();
</span><del>- bool hasAsyncDecodingQueue() const { return m_decodingQueue; }
- bool isAsyncDecodingQueueIdle() const;
</del><ins>+ bool hasDecodingQueue() { return m_decodingQueue; }
</ins><span class="cx">
</span><span class="cx"> // Image metadata which is calculated either by the ImageDecoder or directly
</span><span class="cx"> // from the NativeImage if this class was created for a memory image.
</span></span></pre></div>
<a id="tagsSafari604110SourceWebCoreplatformgraphicsImageSourceh"></a>
<div class="modfile"><h4>Modified: tags/Safari-604.1.10/Source/WebCore/platform/graphics/ImageSource.h (213720 => 213721)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-604.1.10/Source/WebCore/platform/graphics/ImageSource.h        2017-03-10 19:12:26 UTC (rev 213720)
+++ tags/Safari-604.1.10/Source/WebCore/platform/graphics/ImageSource.h        2017-03-10 19:15:23 UTC (rev 213721)
</span><span class="lines">@@ -70,8 +70,7 @@
</span><span class="cx">
</span><span class="cx"> bool isAsyncDecodingRequired();
</span><span class="cx"> bool requestFrameAsyncDecodingAtIndex(size_t index, SubsamplingLevel subsamplingLevel, const IntSize& sizeForDrawing) { return m_frameCache->requestFrameAsyncDecodingAtIndex(index, subsamplingLevel, sizeForDrawing); }
</span><del>- bool hasAsyncDecodingQueue() const { return m_frameCache->hasAsyncDecodingQueue(); }
- bool isAsyncDecodingQueueIdle() const { return m_frameCache->isAsyncDecodingQueueIdle(); }
</del><ins>+ bool hasDecodingQueue() const { return m_frameCache->hasDecodingQueue(); }
</ins><span class="cx"> void stopAsyncDecodingQueue() { m_frameCache->stopAsyncDecodingQueue(); }
</span><span class="cx">
</span><span class="cx"> // Image metadata which is calculated by the decoder or can deduced by the case of the memory NativeImage.
</span></span></pre></div>
<a id="tagsSafari604110SourceWebCoreplatformgraphicsTiledBackingh"></a>
<div class="modfile"><h4>Modified: tags/Safari-604.1.10/Source/WebCore/platform/graphics/TiledBacking.h (213720 => 213721)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-604.1.10/Source/WebCore/platform/graphics/TiledBacking.h        2017-03-10 19:12:26 UTC (rev 213720)
+++ tags/Safari-604.1.10/Source/WebCore/platform/graphics/TiledBacking.h        2017-03-10 19:15:23 UTC (rev 213721)
</span><span class="lines">@@ -145,12 +145,11 @@
</span><span class="cx"> virtual IntRect bounds() const = 0;
</span><span class="cx"> virtual IntRect boundsWithoutMargin() const = 0;
</span><span class="cx">
</span><ins>+ // Exposed for testing
</ins><span class="cx"> virtual IntRect tileCoverageRect() const = 0;
</span><ins>+ virtual IntRect tileGridExtent() const = 0;
</ins><span class="cx"> virtual void setScrollingModeIndication(ScrollingModeIndication) = 0;
</span><span class="cx">
</span><del>- // Exposed for testing
- virtual IntRect tileGridExtent() const = 0;
-
</del><span class="cx"> #if USE(CA)
</span><span class="cx"> virtual PlatformCALayer* tiledScrollingIndicatorLayer() = 0;
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="tagsSafari604110SourceWebCorerenderingRenderElementcpp"></a>
<div class="modfile"><h4>Modified: tags/Safari-604.1.10/Source/WebCore/rendering/RenderElement.cpp (213720 => 213721)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-604.1.10/Source/WebCore/rendering/RenderElement.cpp        2017-03-10 19:12:26 UTC (rev 213720)
+++ tags/Safari-604.1.10/Source/WebCore/rendering/RenderElement.cpp        2017-03-10 19:15:23 UTC (rev 213721)
</span><span class="lines">@@ -154,8 +154,6 @@
</span><span class="cx"> view().removeRendererWithPausedImageAnimations(*this);
</span><span class="cx"> if (isRegisteredForVisibleInViewportCallback())
</span><span class="cx"> view().unregisterForVisibleInViewportCallback(*this);
</span><del>- if (isRegisteredForAsyncImageDecodingCallback())
- view().unregisterForAsyncImageDecodingCallback(*this);
</del><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> RenderPtr<RenderElement> RenderElement::createFor(Element& element, RenderStyle&& style, RendererCreationType creationType)
</span><span class="lines">@@ -1436,20 +1434,23 @@
</span><span class="cx"> return visibleRect.intersects(enclosingIntRect(absoluteClippedOverflowRect()));
</span><span class="cx"> }
</span><span class="cx">
</span><del>-bool RenderElement::intersectsAbsoluteRect(const IntRect& rect) const
</del><ins>+static bool shouldRepaintForImageAnimation(const RenderElement& renderer, const IntRect& visibleRect)
</ins><span class="cx"> {
</span><del>- if (style().visibility() != VISIBLE)
</del><ins>+ const Document& document = renderer.document();
+ if (document.activeDOMObjectsAreSuspended())
</ins><span class="cx"> return false;
</span><del>- if (view().frameView().isOffscreen())
</del><ins>+ if (renderer.style().visibility() != VISIBLE)
</ins><span class="cx"> return false;
</span><ins>+ if (renderer.view().frameView().isOffscreen())
+ return false;
</ins><span class="cx">
</span><span class="cx"> // Use background rect if we are the root or if we are the body and the background is propagated to the root.
</span><span class="cx"> // FIXME: This is overly conservative as the image may not be a background-image, in which case it will not
</span><span class="cx"> // be propagated to the root. At this point, we unfortunately don't have access to the image anymore so we
</span><span class="cx"> // can no longer check if it is a background image.
</span><del>- bool backgroundIsPaintedByRoot = isDocumentElementRenderer();
- if (isBody()) {
- auto& rootRenderer = *parent(); // If <body> has a renderer then <html> does too.
</del><ins>+ bool backgroundIsPaintedByRoot = renderer.isDocumentElementRenderer();
+ if (renderer.isBody()) {
+ auto& rootRenderer = *renderer.parent(); // If <body> has a renderer then <html> does too.
</ins><span class="cx"> ASSERT(rootRenderer.isDocumentElementRenderer());
</span><span class="cx"> ASSERT(is<HTMLHtmlElement>(rootRenderer.element()));
</span><span class="cx"> // FIXME: Should share body background propagation code.
</span><span class="lines">@@ -1456,8 +1457,11 @@
</span><span class="cx"> backgroundIsPaintedByRoot = !rootRenderer.hasBackground();
</span><span class="cx">
</span><span class="cx"> }
</span><del>- LayoutRect backgroundPaintingRect = backgroundIsPaintedByRoot ? view().backgroundRect() : absoluteClippedOverflowRect();
- return rect.intersects(enclosingIntRect(backgroundPaintingRect));
</del><ins>+ LayoutRect backgroundPaintingRect = backgroundIsPaintedByRoot ? renderer.view().backgroundRect() : renderer.absoluteClippedOverflowRect();
+ if (!visibleRect.intersects(enclosingIntRect(backgroundPaintingRect)))
+ return false;
+
+ return true;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void RenderElement::registerForVisibleInViewportCallback()
</span><span class="lines">@@ -1492,7 +1496,7 @@
</span><span class="cx"> {
</span><span class="cx"> auto& frameView = view().frameView();
</span><span class="cx"> auto visibleRect = frameView.windowToContents(frameView.windowClipRect());
</span><del>- if (document().activeDOMObjectsAreSuspended() || !intersectsAbsoluteRect(visibleRect)) {
</del><ins>+ if (!shouldRepaintForImageAnimation(*this, visibleRect)) {
</ins><span class="cx"> // FIXME: It would be better to pass the image along with the renderer
</span><span class="cx"> // so that we can be smarter about detecting if the image is inside the
</span><span class="cx"> // viewport in repaintForPausedImageAnimationsIfNeeded().
</span><span class="lines">@@ -1505,7 +1509,7 @@
</span><span class="cx"> bool RenderElement::repaintForPausedImageAnimationsIfNeeded(const IntRect& visibleRect)
</span><span class="cx"> {
</span><span class="cx"> ASSERT(m_hasPausedImageAnimations);
</span><del>- if (document().activeDOMObjectsAreSuspended() || !intersectsAbsoluteRect(visibleRect))
</del><ins>+ if (!shouldRepaintForImageAnimation(*this, visibleRect))
</ins><span class="cx"> return false;
</span><span class="cx">
</span><span class="cx"> repaint();
</span><span class="lines">@@ -1516,25 +1520,7 @@
</span><span class="cx">
</span><span class="cx"> return true;
</span><span class="cx"> }
</span><del>-
-void RenderElement::registerForAsyncImageDecodingCallback()
-{
- if (isRegisteredForAsyncImageDecodingCallback())
- return;
</del><span class="cx">
</span><del>- view().registerForAsyncImageDecodingCallback(*this);
- setIsRegisteredForAsyncImageDecodingCallback(true);
-}
-
-void RenderElement::unregisterForAsyncImageDecodingCallback()
-{
- if (!isRegisteredForAsyncImageDecodingCallback())
- return;
-
- view().unregisterForAsyncImageDecodingCallback(*this);
- setIsRegisteredForAsyncImageDecodingCallback(false);
-}
-
</del><span class="cx"> const RenderStyle* RenderElement::getCachedPseudoStyle(PseudoId pseudo, const RenderStyle* parentStyle) const
</span><span class="cx"> {
</span><span class="cx"> if (pseudo < FIRST_INTERNAL_PSEUDOID && !style().hasPseudoStyle(pseudo))
</span></span></pre></div>
<a id="tagsSafari604110SourceWebCorerenderingRenderElementh"></a>
<div class="modfile"><h4>Modified: tags/Safari-604.1.10/Source/WebCore/rendering/RenderElement.h (213720 => 213721)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-604.1.10/Source/WebCore/rendering/RenderElement.h        2017-03-10 19:12:26 UTC (rev 213720)
+++ tags/Safari-604.1.10/Source/WebCore/rendering/RenderElement.h        2017-03-10 19:15:23 UTC (rev 213721)
</span><span class="lines">@@ -138,7 +138,6 @@
</span><span class="cx">
</span><span class="cx"> bool borderImageIsLoadedAndCanBeRendered() const;
</span><span class="cx"> bool mayCauseRepaintInsideViewport(const IntRect* visibleRect = nullptr) const;
</span><del>- bool intersectsAbsoluteRect(const IntRect&) const;
</del><span class="cx">
</span><span class="cx"> // Returns true if this renderer requires a new stacking context.
</span><span class="cx"> bool createsGroup() const { return isTransparent() || hasMask() || hasClipPath() || hasFilter() || hasBackdropFilter() || hasBlendMode(); }
</span><span class="lines">@@ -191,9 +190,6 @@
</span><span class="cx"> bool repaintForPausedImageAnimationsIfNeeded(const IntRect& visibleRect);
</span><span class="cx"> bool hasPausedImageAnimations() const { return m_hasPausedImageAnimations; }
</span><span class="cx"> void setHasPausedImageAnimations(bool b) { m_hasPausedImageAnimations = b; }
</span><del>-
- void registerForAsyncImageDecodingCallback();
- void unregisterForAsyncImageDecodingCallback();
</del><span class="cx">
</span><span class="cx"> void setRenderBoxNeedsLazyRepaint(bool b) { m_renderBoxNeedsLazyRepaint = b; }
</span><span class="cx"> bool renderBoxNeedsLazyRepaint() const { return m_renderBoxNeedsLazyRepaint; }
</span></span></pre></div>
<a id="tagsSafari604110SourceWebCorerenderingRenderObjectcpp"></a>
<div class="modfile"><h4>Modified: tags/Safari-604.1.10/Source/WebCore/rendering/RenderObject.cpp (213720 => 213721)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-604.1.10/Source/WebCore/rendering/RenderObject.cpp        2017-03-10 19:12:26 UTC (rev 213720)
+++ tags/Safari-604.1.10/Source/WebCore/rendering/RenderObject.cpp        2017-03-10 19:15:23 UTC (rev 213721)
</span><span class="lines">@@ -1995,12 +1995,6 @@
</span><span class="cx"> if (visible != VisibilityUnknown || hasRareData())
</span><span class="cx"> ensureRareData().setVisibleInViewportState(visible);
</span><span class="cx"> }
</span><del>-
-void RenderObject::setIsRegisteredForAsyncImageDecodingCallback(bool registered)
-{
- if (registered || hasRareData())
- ensureRareData().setIsRegisteredForAsyncImageDecodingCallback(registered);
-}
</del><span class="cx">
</span><span class="cx"> RenderObject::RareDataMap& RenderObject::rareDataMap()
</span><span class="cx"> {
</span></span></pre></div>
<a id="tagsSafari604110SourceWebCorerenderingRenderObjecth"></a>
<div class="modfile"><h4>Modified: tags/Safari-604.1.10/Source/WebCore/rendering/RenderObject.h (213720 => 213721)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-604.1.10/Source/WebCore/rendering/RenderObject.h        2017-03-10 19:12:26 UTC (rev 213720)
+++ tags/Safari-604.1.10/Source/WebCore/rendering/RenderObject.h        2017-03-10 19:15:23 UTC (rev 213721)
</span><span class="lines">@@ -458,8 +458,6 @@
</span><span class="cx"> NotVisibleInViewport,
</span><span class="cx"> };
</span><span class="cx"> VisibleInViewportState visibleInViewportState() { return m_bitfields.hasRareData() ? rareData().visibleInViewportState() : VisibilityUnknown; }
</span><del>-
- bool isRegisteredForAsyncImageDecodingCallback() { return m_bitfields.hasRareData() && rareData().isRegisteredForAsyncImageDecodingCallback(); }
</del><span class="cx">
</span><span class="cx"> bool hasLayer() const { return m_bitfields.hasLayer(); }
</span><span class="cx">
</span><span class="lines">@@ -571,7 +569,6 @@
</span><span class="cx"> void setHasOutlineAutoAncestor(bool = true);
</span><span class="cx"> void setIsRegisteredForVisibleInViewportCallback(bool);
</span><span class="cx"> void setVisibleInViewportState(VisibleInViewportState);
</span><del>- void setIsRegisteredForAsyncImageDecodingCallback(bool);
</del><span class="cx">
</span><span class="cx"> // Hook so that RenderTextControl can return the line height of its inner renderer.
</span><span class="cx"> // For other renderers, the value is the same as lineHeight(false).
</span><span class="lines">@@ -988,7 +985,6 @@
</span><span class="cx"> , m_hasOutlineAutoAncestor(false)
</span><span class="cx"> , m_isRegisteredForVisibleInViewportCallback(false)
</span><span class="cx"> , m_visibleInViewportState(VisibilityUnknown)
</span><del>- , m_isRegisteredForAsyncImageDecodingCallback(false)
</del><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> ADD_BOOLEAN_BITFIELD(isDragging, IsDragging);
</span><span class="lines">@@ -999,7 +995,6 @@
</span><span class="cx"> // From RenderElement
</span><span class="cx"> ADD_BOOLEAN_BITFIELD(isRegisteredForVisibleInViewportCallback, IsRegisteredForVisibleInViewportCallback);
</span><span class="cx"> ADD_ENUM_BITFIELD(visibleInViewportState, VisibleInViewportState, VisibleInViewportState, 2);
</span><del>- ADD_BOOLEAN_BITFIELD(isRegisteredForAsyncImageDecodingCallback, IsRegisteredForAsyncImageDecodingCallback);
</del><span class="cx"> std::unique_ptr<RenderStyle> cachedFirstLineStyle;
</span><span class="cx"> };
</span><span class="cx">
</span></span></pre></div>
<a id="tagsSafari604110SourceWebCorerenderingRenderReplacedh"></a>
<div class="modfile"><h4>Modified: tags/Safari-604.1.10/Source/WebCore/rendering/RenderReplaced.h (213720 => 213721)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-604.1.10/Source/WebCore/rendering/RenderReplaced.h        2017-03-10 19:12:26 UTC (rev 213720)
+++ tags/Safari-604.1.10/Source/WebCore/rendering/RenderReplaced.h        2017-03-10 19:15:23 UTC (rev 213721)
</span><span class="lines">@@ -32,7 +32,6 @@
</span><span class="cx"> LayoutUnit computeReplacedLogicalWidth(ShouldComputePreferred = ComputeActual) const override;
</span><span class="cx"> LayoutUnit computeReplacedLogicalHeight() const override;
</span><span class="cx">
</span><del>- LayoutSize intrinsicSize() const final { return m_intrinsicSize; }
</del><span class="cx"> LayoutRect replacedContentRect(const LayoutSize& intrinsicSize) const;
</span><span class="cx">
</span><span class="cx"> bool hasReplacedLogicalWidth() const;
</span><span class="lines">@@ -46,6 +45,7 @@
</span><span class="cx">
</span><span class="cx"> void layout() override;
</span><span class="cx">
</span><ins>+ LayoutSize intrinsicSize() const final { return m_intrinsicSize; }
</ins><span class="cx"> void computeIntrinsicRatioInformation(FloatSize& intrinsicSize, double& intrinsicRatio) const override;
</span><span class="cx">
</span><span class="cx"> void computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidth, LayoutUnit& maxLogicalWidth) const final;
</span></span></pre></div>
<a id="tagsSafari604110SourceWebCorerenderingRenderViewcpp"></a>
<div class="modfile"><h4>Modified: tags/Safari-604.1.10/Source/WebCore/rendering/RenderView.cpp (213720 => 213721)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-604.1.10/Source/WebCore/rendering/RenderView.cpp        2017-03-10 19:12:26 UTC (rev 213720)
+++ tags/Safari-604.1.10/Source/WebCore/rendering/RenderView.cpp        2017-03-10 19:15:23 UTC (rev 213721)
</span><span class="lines">@@ -35,13 +35,10 @@
</span><span class="cx"> #include "HTMLHtmlElement.h"
</span><span class="cx"> #include "HTMLIFrameElement.h"
</span><span class="cx"> #include "HitTestResult.h"
</span><del>-#include "Image.h"
</del><span class="cx"> #include "ImageQualityController.h"
</span><span class="cx"> #include "NodeTraversal.h"
</span><span class="cx"> #include "Page.h"
</span><del>-#include "RenderDescendantIterator.h"
</del><span class="cx"> #include "RenderGeometryMap.h"
</span><del>-#include "RenderImage.h"
</del><span class="cx"> #include "RenderIterator.h"
</span><span class="cx"> #include "RenderLayer.h"
</span><span class="cx"> #include "RenderLayerBacking.h"
</span><span class="lines">@@ -1425,40 +1422,6 @@
</span><span class="cx"> removeRendererWithPausedImageAnimations(*renderer);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void RenderView::registerForAsyncImageDecodingCallback(RenderElement& renderer)
-{
- ASSERT(!m_asyncDecodingImageRenderers.contains(&renderer));
- m_asyncDecodingImageRenderers.add(&renderer);
-}
-
-void RenderView::unregisterForAsyncImageDecodingCallback(RenderElement& renderer)
-{
- ASSERT(m_asyncDecodingImageRenderers.contains(&renderer));
- m_asyncDecodingImageRenderers.remove(&renderer);
-}
-
-void RenderView::requestAsyncDecodingForImagesInAbsoluteRect(const IntRect& rect)
-{
- for (auto* renderer : m_asyncDecodingImageRenderers) {
- if (!renderer->intersectsAbsoluteRect(rect))
- continue;
-
- auto& renderImage = downcast<RenderImage>(*renderer);
-
- CachedImage* image = renderImage.cachedImage();
- if (!image || !image->hasImage())
- continue;
-
- // Get the destination rectangle of the image scaled by the all the scaling factors
- // that will eventually be applied to the graphics context.
- LayoutRect replacedContentRect = renderImage.replacedContentRect(renderImage.intrinsicSize());
- FloatRect rect = snapRectToDevicePixels(replacedContentRect, document().deviceScaleFactor());
- rect.scale(frame().page()->pageScaleFactor() * frame().pageZoomFactor() * document().deviceScaleFactor());
-
- image->image()->requestAsyncDecoding(expandedIntSize(rect.size()));
- }
-}
-
</del><span class="cx"> RenderView::RepaintRegionAccumulator::RepaintRegionAccumulator(RenderView* view)
</span><span class="cx"> : m_rootView(view ? view->document().topDocument().renderView() : nullptr)
</span><span class="cx"> {
</span></span></pre></div>
<a id="tagsSafari604110SourceWebCorerenderingRenderViewh"></a>
<div class="modfile"><h4>Modified: tags/Safari-604.1.10/Source/WebCore/rendering/RenderView.h (213720 => 213721)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-604.1.10/Source/WebCore/rendering/RenderView.h        2017-03-10 19:12:26 UTC (rev 213720)
+++ tags/Safari-604.1.10/Source/WebCore/rendering/RenderView.h        2017-03-10 19:15:23 UTC (rev 213721)
</span><span class="lines">@@ -231,9 +231,6 @@
</span><span class="cx"> void resumePausedImageAnimationsIfNeeded(IntRect visibleRect);
</span><span class="cx"> void addRendererWithPausedImageAnimations(RenderElement&);
</span><span class="cx"> void removeRendererWithPausedImageAnimations(RenderElement&);
</span><del>- void registerForAsyncImageDecodingCallback(RenderElement&);
- void unregisterForAsyncImageDecodingCallback(RenderElement&);
- void requestAsyncDecodingForImagesInAbsoluteRect(const IntRect&);
</del><span class="cx">
</span><span class="cx"> class RepaintRegionAccumulator {
</span><span class="cx"> WTF_MAKE_NONCOPYABLE(RepaintRegionAccumulator);
</span><span class="lines">@@ -391,7 +388,6 @@
</span><span class="cx">
</span><span class="cx"> HashSet<RenderElement*> m_renderersWithPausedImageAnimation;
</span><span class="cx"> HashSet<RenderElement*> m_visibleInViewportRenderers;
</span><del>- HashSet<RenderElement*> m_asyncDecodingImageRenderers;
</del><span class="cx"> Vector<RefPtr<RenderWidget>> m_protectedRenderWidgets;
</span><span class="cx">
</span><span class="cx"> #if ENABLE(SERVICE_CONTROLS)
</span></span></pre></div>
<a id="tagsSafari604110SourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: tags/Safari-604.1.10/Source/WebKit2/ChangeLog (213720 => 213721)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-604.1.10/Source/WebKit2/ChangeLog        2017-03-10 19:12:26 UTC (rev 213720)
+++ tags/Safari-604.1.10/Source/WebKit2/ChangeLog        2017-03-10 19:15:23 UTC (rev 213721)
</span><span class="lines">@@ -1,3 +1,21 @@
</span><ins>+2017-03-10 Jason Marcell <jmarcell@apple.com>
+
+ Merge r213715. rdar://problem/24709033
+
+ 2017-03-10 Commit Queue <commit-queue@webkit.org>
+
+ Unreviewed, rolling out r213618.
+ https://bugs.webkit.org/show_bug.cgi?id=169475
+
+ Suspect this is the cause of a large memory regression
+ (Requested by jonlee_ on #webkit).
+
+ Reverted changeset:
+
+ "Enable async image decoding for large images"
+ https://bugs.webkit.org/show_bug.cgi?id=165039
+ http://trac.webkit.org/changeset/213618
+
</ins><span class="cx"> 2017-03-10 Zan Dobersek <zdobersek@igalia.com>
</span><span class="cx">
</span><span class="cx"> [WK2] Guard GLib-specific typedefs in InjectedBundle.h with USE(GLIB)
</span></span></pre></div>
<a id="tagsSafari604110SourceWebKit2UIProcessAPICWKPreferencescpp"></a>
<div class="modfile"><h4>Modified: tags/Safari-604.1.10/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp (213720 => 213721)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-604.1.10/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp        2017-03-10 19:12:26 UTC (rev 213720)
+++ tags/Safari-604.1.10/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp        2017-03-10 19:15:23 UTC (rev 213721)
</span><span class="lines">@@ -1691,26 +1691,6 @@
</span><span class="cx"> return toImpl(preferencesRef)->linkPreloadEnabled();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void WKPreferencesSetLargeImageAsyncDecodingEnabled(WKPreferencesRef preferencesRef, bool flag)
-{
- toImpl(preferencesRef)->setLargeImageAsyncDecodingEnabled(flag);
-}
-
-bool WKPreferencesGetLargeImageAsyncDecodingEnabled(WKPreferencesRef preferencesRef)
-{
- return toImpl(preferencesRef)->largeImageAsyncDecodingEnabled();
-}
-
-void WKPreferencesSetAnimatedImageAsyncDecodingEnabled(WKPreferencesRef preferencesRef, bool flag)
-{
- toImpl(preferencesRef)->setAnimatedImageAsyncDecodingEnabled(flag);
-}
-
-bool WKPreferencesGetAnimatedImageAsyncDecodingEnabled(WKPreferencesRef preferencesRef)
-{
- return toImpl(preferencesRef)->animatedImageAsyncDecodingEnabled();
-}
-
</del><span class="cx"> void WKPreferencesSetShouldSuppressKeyboardInputDuringProvisionalNavigation(WKPreferencesRef preferencesRef, bool flag)
</span><span class="cx"> {
</span><span class="cx"> toImpl(preferencesRef)->setShouldSuppressKeyboardInputDuringProvisionalNavigation(flag);
</span></span></pre></div>
<a id="tagsSafari604110SourceWebKit2UIProcessAPICWKPreferencesRefPrivateh"></a>
<div class="modfile"><h4>Modified: tags/Safari-604.1.10/Source/WebKit2/UIProcess/API/C/WKPreferencesRefPrivate.h (213720 => 213721)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-604.1.10/Source/WebKit2/UIProcess/API/C/WKPreferencesRefPrivate.h        2017-03-10 19:12:26 UTC (rev 213720)
+++ tags/Safari-604.1.10/Source/WebKit2/UIProcess/API/C/WKPreferencesRefPrivate.h        2017-03-10 19:15:23 UTC (rev 213721)
</span><span class="lines">@@ -465,14 +465,6 @@
</span><span class="cx"> WK_EXPORT void WKPreferencesSetSubtleCryptoEnabled(WKPreferencesRef, bool flag);
</span><span class="cx"> WK_EXPORT bool WKPreferencesGetSubtleCryptoEnabled(WKPreferencesRef);
</span><span class="cx">
</span><del>-// Defaults to true.
-WK_EXPORT void WKPreferencesSetLargeImageAsyncDecodingEnabled(WKPreferencesRef preferencesRef, bool flag);
-WK_EXPORT bool WKPreferencesGetLargeImageAsyncDecodingEnabled(WKPreferencesRef preferencesRef);
-
-// Defaults to true.
-WK_EXPORT void WKPreferencesSetAnimatedImageAsyncDecodingEnabled(WKPreferencesRef preferencesRef, bool flag);
-WK_EXPORT bool WKPreferencesGetAnimatedImageAsyncDecodingEnabled(WKPreferencesRef preferencesRef);
-
</del><span class="cx"> // Defaults to false
</span><span class="cx"> WK_EXPORT void WKPreferencesSetShouldSuppressKeyboardInputDuringProvisionalNavigation(WKPreferencesRef, bool flag);
</span><span class="cx"> WK_EXPORT bool WKPreferencesGetShouldSuppressKeyboardInputDuringProvisionalNavigation(WKPreferencesRef);
</span></span></pre></div>
<a id="tagsSafari604110ToolsChangeLog"></a>
<div class="modfile"><h4>Modified: tags/Safari-604.1.10/Tools/ChangeLog (213720 => 213721)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-604.1.10/Tools/ChangeLog        2017-03-10 19:12:26 UTC (rev 213720)
+++ tags/Safari-604.1.10/Tools/ChangeLog        2017-03-10 19:15:23 UTC (rev 213721)
</span><span class="lines">@@ -1,3 +1,21 @@
</span><ins>+2017-03-10 Jason Marcell <jmarcell@apple.com>
+
+ Merge r213715. rdar://problem/24709033
+
+ 2017-03-10 Commit Queue <commit-queue@webkit.org>
+
+ Unreviewed, rolling out r213618.
+ https://bugs.webkit.org/show_bug.cgi?id=169475
+
+ Suspect this is the cause of a large memory regression
+ (Requested by jonlee_ on #webkit).
+
+ Reverted changeset:
+
+ "Enable async image decoding for large images"
+ https://bugs.webkit.org/show_bug.cgi?id=165039
+ http://trac.webkit.org/changeset/213618
+
</ins><span class="cx"> 2017-03-09 Brian Nicholson <bnicholson@mozilla.com> and Alex Christensen <achristensen@webkit.org>
</span><span class="cx">
</span><span class="cx"> Expose public APIs for content filters
</span></span></pre></div>
<a id="tagsSafari604110ToolsDumpRenderTreemacDumpRenderTreemm"></a>
<div class="modfile"><h4>Modified: tags/Safari-604.1.10/Tools/DumpRenderTree/mac/DumpRenderTree.mm (213720 => 213721)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-604.1.10/Tools/DumpRenderTree/mac/DumpRenderTree.mm        2017-03-10 19:12:26 UTC (rev 213720)
+++ tags/Safari-604.1.10/Tools/DumpRenderTree/mac/DumpRenderTree.mm        2017-03-10 19:15:23 UTC (rev 213721)
</span><span class="lines">@@ -956,8 +956,6 @@
</span><span class="cx"> [preferences setHiddenPageCSSAnimationSuspensionEnabled:NO];
</span><span class="cx">
</span><span class="cx"> [preferences setMediaStreamEnabled:YES];
</span><del>-
- [preferences setLargeImageAsyncDecodingEnabled:NO];
</del><span class="cx">
</span><span class="cx"> [WebPreferences _clearNetworkLoaderSession];
</span><span class="cx"> [WebPreferences _setCurrentNetworkLoaderSessionCookieAcceptPolicy:NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain];
</span></span></pre></div>
<a id="tagsSafari604110ToolsWebKitTestRunnerTestControllercpp"></a>
<div class="modfile"><h4>Modified: tags/Safari-604.1.10/Tools/WebKitTestRunner/TestController.cpp (213720 => 213721)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-604.1.10/Tools/WebKitTestRunner/TestController.cpp        2017-03-10 19:12:26 UTC (rev 213720)
+++ tags/Safari-604.1.10/Tools/WebKitTestRunner/TestController.cpp        2017-03-10 19:15:23 UTC (rev 213721)
</span><span class="lines">@@ -719,8 +719,6 @@
</span><span class="cx"> WKCookieManagerDeleteAllCookies(WKContextGetCookieManager(m_context.get()));
</span><span class="cx">
</span><span class="cx"> WKPreferencesSetMockCaptureDevicesEnabled(preferences, true);
</span><del>-
- WKPreferencesSetLargeImageAsyncDecodingEnabled(preferences, false);
</del><span class="cx">
</span><span class="cx"> platformResetPreferencesToConsistentValues();
</span><span class="cx"> }
</span></span></pre>
</div>
</div>
</body>
</html>