WebKit Bugzilla
Attachment 343719 Details for
Bug 186909
: https://hackernoon.com/ uses lots of layer backing store
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch for EWS
patch.txt (text/plain), 25.82 KB, created by
Simon Fraser (smfr)
on 2018-06-27 10:15:34 PDT
(
hide
)
Description:
Patch for EWS
Filename:
MIME Type:
Creator:
Simon Fraser (smfr)
Created:
2018-06-27 10:15:34 PDT
Size:
25.82 KB
patch
obsolete
>Subversion Revision: 233176 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 4cb3fc556301218bd8ab7c0fe79c60e0797518be..c0d0bfc444a6affdd75c092cf4fb1dbfb21763b4 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,43 @@ >+2018-06-25 Simon Fraser <simon.fraser@apple.com> >+ >+ https://hackernoon.com/ uses lots of layer backing store >+ https://bugs.webkit.org/show_bug.cgi?id=186909 >+ rdar://problem/40257540 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ The existing "backing store detached" logic, which was used to eliminate backing store >+ for compositing layers outside the viewport, had a number of bugs that allowed layers >+ to have backing store when they should not. >+ >+ Specifically, any code path that ended up in setNeedsDisplay{InRect}() in PlatformCALayer >+ could trigger backing store creation on layers that should have never had any. >+ >+ Rather than monkeypatch all the GraphicsLayerCA call sites that call setNeedsDisplay{InRect}(), >+ just bail early from the PlatformCALayer* methods that trigger repaints. >+ >+ Tests didn't catch this because they just dumped the state of the backingStoreAttached flag. To fix this, >+ create backingStoreAttachedForTesting() which also tests whether the layer has contents. >+ >+ Test: compositing/backing/backing-store-attachment-outside-viewport.html >+ >+ * platform/graphics/GraphicsLayer.cpp: >+ (WebCore::GraphicsLayer::dumpProperties const): >+ (showGraphicsLayerTree): >+ * platform/graphics/GraphicsLayer.h: >+ (WebCore::GraphicsLayer::backingStoreAttachedForTesting const): >+ * platform/graphics/GraphicsLayerClient.h: >+ * platform/graphics/ca/GraphicsLayerCA.cpp: >+ (WebCore::GraphicsLayerCA::backingStoreAttachedForTesting const): >+ (WebCore::GraphicsLayerCA::setNeedsDisplay): >+ * platform/graphics/ca/GraphicsLayerCA.h: >+ * platform/graphics/ca/PlatformCALayer.h: >+ * platform/graphics/ca/cocoa/PlatformCALayerCocoa.h: >+ * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm: >+ (PlatformCALayerCocoa::setNeedsDisplay): >+ (PlatformCALayerCocoa::setNeedsDisplayInRect): >+ (PlatformCALayerCocoa::hasContents const): >+ > 2018-06-25 Brent Fulgham <bfulgham@apple.com> > > REGRESSION(r229722): WebKitLegacy clients can crash when loading alternate page >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 1356b783856eefa4887f8c8ececdd9052327257b..0d52061caa6baa5cfc488e5681616e2981016058 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,22 @@ >+2018-06-25 Simon Fraser <simon.fraser@apple.com> >+ >+ https://hackernoon.com/ uses lots of layer backing store >+ https://bugs.webkit.org/show_bug.cgi?id=186909 >+ rdar://problem/40257540 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ PlatformCALayerRemote was actually holding onto backing stores for layers with >+ backing store detached, which could increase memory use. When told that backing stores >+ are not attached, explicitly throw away the backing, and re-create it (via setNeedsDisplay) >+ when attached. This is now similar to what PlatformLayerCACocoa does. >+ >+ * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp: >+ (WebKit::PlatformCALayerRemote::setNeedsDisplayInRect): >+ (WebKit::PlatformCALayerRemote::setNeedsDisplay): >+ (WebKit::PlatformCALayerRemote::hasContents const): >+ * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.h: >+ > 2018-06-25 Youenn Fablet <youenn@apple.com> > > NetworkLoadChecker should not check CORS for 304 responses triggered by WebProcess revalidation >diff --git a/Source/bmalloc/ChangeLog b/Source/bmalloc/ChangeLog >index c6e6ab4eb65dd19dfa52981a065b9b71f001f521..fe596f5bdc674c02730f8682acdd785a5be94b81 100644 >--- a/Source/bmalloc/ChangeLog >+++ b/Source/bmalloc/ChangeLog >@@ -1,3 +1,16 @@ >+2018-06-25 Simon Fraser <simon.fraser@apple.com> >+ >+ https://hackernoon.com/ uses lots of layer backing store >+ https://bugs.webkit.org/show_bug.cgi?id=186909 >+ rdar://problem/40257540 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Drive-by typo fix. >+ >+ * bmalloc/Scavenger.cpp: >+ (bmalloc::dumpStats): >+ > 2018-06-24 Yusuke Suzuki <utatane.tea@gmail.com> > > [bmalloc][Linux] Remove static initializers for PerProcess<>::s_object >diff --git a/Source/WebCore/platform/graphics/BitmapImage.cpp b/Source/WebCore/platform/graphics/BitmapImage.cpp >index bf36de05cd4fc5b7682cd8e38534b5280310aaa3..015c0d5f42d44dfe658cede8eabeeab74893e2e4 100644 >--- a/Source/WebCore/platform/graphics/BitmapImage.cpp >+++ b/Source/WebCore/platform/graphics/BitmapImage.cpp >@@ -390,6 +390,8 @@ bool BitmapImage::canDestroyDecodedData() > > BitmapImage::StartAnimationStatus BitmapImage::internalStartAnimation() > { >+ LOG_WITH_STREAM(Images, stream << "BitmapImage " << this << " internalStartAnimation"); >+ > if (!canAnimate()) > return StartAnimationStatus::CannotStart; > >diff --git a/Source/WebCore/platform/graphics/GraphicsLayer.cpp b/Source/WebCore/platform/graphics/GraphicsLayer.cpp >index 99e98ba909d43e90d4ebb7eef91d21b0df83f458..33fdd82328c6f26ce49dd6fbcb00771841cd6e69 100644 >--- a/Source/WebCore/platform/graphics/GraphicsLayer.cpp >+++ b/Source/WebCore/platform/graphics/GraphicsLayer.cpp >@@ -787,7 +787,7 @@ void GraphicsLayer::dumpProperties(TextStream& ts, LayerTreeAsTextBehavior behav > ts << indent << "(acceleratesDrawing " << m_acceleratesDrawing << ")\n"; > > if (behavior & LayerTreeAsTextIncludeBackingStoreAttached) >- ts << indent << "(backingStoreAttached " << backingStoreAttached() << ")\n"; >+ ts << indent << "(backingStoreAttached " << backingStoreAttachedForTesting() << ")\n"; > > if (!m_transform.isIdentity()) { > ts << indent << "(transform "; >@@ -931,7 +931,7 @@ void showGraphicsLayerTree(const WebCore::GraphicsLayer* layer) > if (!layer) > return; > >- String output = layer->layerTreeAsText(WebCore::LayerTreeAsTextDebug | WebCore::LayerTreeAsTextIncludeVisibleRects | WebCore::LayerTreeAsTextIncludeTileCaches | WebCore::LayerTreeAsTextIncludeContentLayers); >+ String output = layer->layerTreeAsText(WebCore::LayerTreeAsTextShowAll); > fprintf(stderr, "%s\n", output.utf8().data()); > } > #endif >diff --git a/Source/WebCore/platform/graphics/GraphicsLayer.h b/Source/WebCore/platform/graphics/GraphicsLayer.h >index 10eda15fc3f48fcabf123df167cf9908626cbb4b..58b02e9f082afbb4a2dc4548ae5b4cf467f0542a 100644 >--- a/Source/WebCore/platform/graphics/GraphicsLayer.h >+++ b/Source/WebCore/platform/graphics/GraphicsLayer.h >@@ -552,6 +552,7 @@ public: > WEBCORE_EXPORT virtual double backingStoreMemoryEstimate() const; > > virtual bool backingStoreAttached() const { return true; } >+ virtual bool backingStoreAttachedForTesting() const { return backingStoreAttached(); } > > void setCanDetachBackingStore(bool b) { m_canDetachBackingStore = b; } > bool canDetachBackingStore() const { return m_canDetachBackingStore; } >diff --git a/Source/WebCore/platform/graphics/GraphicsLayerClient.h b/Source/WebCore/platform/graphics/GraphicsLayerClient.h >index b2fc8f6e7da8d2e581e8b05d1afc5f6073db2913..c3aa277467a14b7b76eaf59846a8a1ea3f8f7bc1 100644 >--- a/Source/WebCore/platform/graphics/GraphicsLayerClient.h >+++ b/Source/WebCore/platform/graphics/GraphicsLayerClient.h >@@ -72,6 +72,7 @@ enum LayerTreeAsTextBehaviorFlags { > LayerTreeAsTextIncludePageOverlayLayers = 1 << 6, > LayerTreeAsTextIncludeAcceleratesDrawing = 1 << 7, > LayerTreeAsTextIncludeBackingStoreAttached = 1 << 8, >+ LayerTreeAsTextShowAll = 0xFFFF > }; > typedef unsigned LayerTreeAsTextBehavior; > >diff --git a/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp b/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp >index 31bf2fc0b7587a4932e0f19d55e98ea329f75efc..5ce7ca3ce36f637a3774e927f3d8cb44d8d8bc7c 100644 >--- a/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp >+++ b/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp >@@ -881,14 +881,16 @@ bool GraphicsLayerCA::backingStoreAttached() const > return m_layer->backingStoreAttached(); > } > >+bool GraphicsLayerCA::backingStoreAttachedForTesting() const >+{ >+ return m_layer->backingStoreAttached() || m_layer->hasContents(); >+} >+ > void GraphicsLayerCA::setNeedsDisplay() > { > if (!drawsContent()) > return; > >- if (!backingStoreAttached()) >- return; >- > m_needsFullRepaint = true; > m_dirtyRects.clear(); > noteLayerPropertyChanged(DirtyRectsChanged); >@@ -2349,6 +2351,8 @@ void GraphicsLayerCA::updateCoverage(const CommitState& commitState) > || commitState.ancestorWithTransformAnimationIntersectsCoverageRect // FIXME: Compute backing exactly for descendants of animating layers. > || (isRunningTransformAnimation() && !animationExtent()); // Create backing if we don't know the animation extent. > >+ LOG_WITH_STREAM(Compositing, stream << "GraphicsLayerCA " << this << " id " << primaryLayerID() << " setBackingStoreAttached: " << requiresBacking); >+ > m_layer->setBackingStoreAttached(requiresBacking); > if (m_layerClones) { > for (auto& it : *m_layerClones) >diff --git a/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h b/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h >index ee41cd43d468ad62bc4130ca9b74b62027f29de9..296da67eb972ba08f6ca9f325a7595b0ffe8653b 100644 >--- a/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h >+++ b/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h >@@ -264,6 +264,7 @@ private: > bool isRunningTransformAnimation() const; > > WEBCORE_EXPORT bool backingStoreAttached() const override; >+ WEBCORE_EXPORT bool backingStoreAttachedForTesting() const override; > > bool animationIsRunning(const String& animationName) const > { >diff --git a/Source/WebCore/platform/graphics/ca/PlatformCALayer.h b/Source/WebCore/platform/graphics/ca/PlatformCALayer.h >index 744662b2b425fef4f07d5a82930d4610851250d0..d7074db6df3f57aa36faec60fb38b7454b882e9d 100644 >--- a/Source/WebCore/platform/graphics/ca/PlatformCALayer.h >+++ b/Source/WebCore/platform/graphics/ca/PlatformCALayer.h >@@ -180,6 +180,7 @@ public: > virtual bool supportsSubpixelAntialiasedText() const = 0; > virtual void setSupportsSubpixelAntialiasedText(bool) = 0; > >+ virtual bool hasContents() const = 0; > virtual CFTypeRef contents() const = 0; > virtual void setContents(CFTypeRef) = 0; > >diff --git a/Source/WebCore/platform/graphics/ca/cocoa/PlatformCALayerCocoa.h b/Source/WebCore/platform/graphics/ca/cocoa/PlatformCALayerCocoa.h >index e59cb0dc71b65223781b4bd10ac6bc5c0494dd21..13446cddb332517f8b18c57b3cc9260e34b875cc 100644 >--- a/Source/WebCore/platform/graphics/ca/cocoa/PlatformCALayerCocoa.h >+++ b/Source/WebCore/platform/graphics/ca/cocoa/PlatformCALayerCocoa.h >@@ -116,6 +116,7 @@ public: > bool supportsSubpixelAntialiasedText() const override; > void setSupportsSubpixelAntialiasedText(bool) override; > >+ bool hasContents() const override; > CFTypeRef contents() const override; > void setContents(CFTypeRef) override; > >diff --git a/Source/WebCore/platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm b/Source/WebCore/platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm >index ca1c45f13219c6a97599c1d1e9e7fd4ca0e11d96..e4eed9ae195f1070b43308f2b6e8753237aa916f 100644 >--- a/Source/WebCore/platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm >+++ b/Source/WebCore/platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm >@@ -391,6 +391,9 @@ void PlatformCALayerCocoa::animationEnded(const String& animationKey) > > void PlatformCALayerCocoa::setNeedsDisplay() > { >+ if (!m_backingStoreAttached) >+ return; >+ > BEGIN_BLOCK_OBJC_EXCEPTIONS > [m_layer setNeedsDisplay]; > END_BLOCK_OBJC_EXCEPTIONS >@@ -398,6 +401,9 @@ void PlatformCALayerCocoa::setNeedsDisplay() > > void PlatformCALayerCocoa::setNeedsDisplayInRect(const FloatRect& dirtyRect) > { >+ if (!m_backingStoreAttached) >+ return; >+ > BEGIN_BLOCK_OBJC_EXCEPTIONS > [m_layer setNeedsDisplayInRect:dirtyRect]; > END_BLOCK_OBJC_EXCEPTIONS >@@ -638,6 +644,7 @@ void PlatformCALayerCocoa::setBackingStoreAttached(bool attached) > { > if (attached == m_backingStoreAttached) > return; >+ > m_backingStoreAttached = attached; > > if (attached) >@@ -739,6 +746,11 @@ void PlatformCALayerCocoa::setSupportsSubpixelAntialiasedText(bool supportsSubpi > updateContentsFormat(); > } > >+bool PlatformCALayerCocoa::hasContents() const >+{ >+ return [m_layer contents]; >+} >+ > CFTypeRef PlatformCALayerCocoa::contents() const > { > return (__bridge CFTypeRef)[m_layer contents]; >diff --git a/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp b/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp >index 53968fcdb38ccdf4266746f3f1712c09eaadeee8..d8c27a7ff5065b9255bf4f6e29b07f8488e93d29 100644 >--- a/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp >+++ b/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp >@@ -190,7 +190,9 @@ void PlatformCALayerRemote::didCommit() > void PlatformCALayerRemote::ensureBackingStore() > { > ASSERT(owner()); >- >+ >+ ASSERT(m_properties.backingStoreAttached); >+ > if (!m_properties.backingStore) > m_properties.backingStore = std::make_unique<RemoteLayerBackingStore>(this); > >@@ -202,11 +204,16 @@ void PlatformCALayerRemote::updateBackingStore() > if (!m_properties.backingStore) > return; > >+ ASSERT(m_properties.backingStoreAttached); >+ > m_properties.backingStore->ensureBackingStore(m_properties.bounds.size(), m_properties.contentsScale, m_acceleratesDrawing, m_wantsDeepColorBackingStore, m_properties.opaque); > } > > void PlatformCALayerRemote::setNeedsDisplayInRect(const FloatRect& rect) > { >+ if (!m_properties.backingStoreAttached) >+ return; >+ > ensureBackingStore(); > > // FIXME: Need to map this through contentsRect/etc. >@@ -215,6 +222,9 @@ void PlatformCALayerRemote::setNeedsDisplayInRect(const FloatRect& rect) > > void PlatformCALayerRemote::setNeedsDisplay() > { >+ if (!m_properties.backingStoreAttached) >+ return; >+ > ensureBackingStore(); > > m_properties.backingStore->setNeedsDisplay(); >@@ -536,13 +546,18 @@ void PlatformCALayerRemote::setUserInteractionEnabled(bool value) > m_properties.notePropertiesChanged(RemoteLayerTreeTransaction::UserInteractionEnabledChanged); > } > >-void PlatformCALayerRemote::setBackingStoreAttached(bool value) >+void PlatformCALayerRemote::setBackingStoreAttached(bool attached) > { >- if (m_properties.backingStoreAttached == value) >+ if (m_properties.backingStoreAttached == attached) > return; > >- m_properties.backingStoreAttached = value; >+ m_properties.backingStoreAttached = attached; > m_properties.notePropertiesChanged(RemoteLayerTreeTransaction::BackingStoreAttachmentChanged); >+ >+ if (attached) >+ setNeedsDisplay(); >+ else >+ m_properties.backingStore = nullptr; > } > > bool PlatformCALayerRemote::backingStoreAttached() const >@@ -617,6 +632,11 @@ void PlatformCALayerRemote::setSupportsSubpixelAntialiasedText(bool) > { > } > >+bool PlatformCALayerRemote::hasContents() const >+{ >+ return !!m_properties.backingStore; >+} >+ > CFTypeRef PlatformCALayerRemote::contents() const > { > return nullptr; >diff --git a/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.h b/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.h >index 8f84ca3d24cda1e0f4e1d556aeab7f1e8d5a47ce..39e97a4ad8e67fe81a27b7f62f92de573a965e2f 100644 >--- a/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.h >+++ b/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.h >@@ -120,6 +120,7 @@ public: > bool supportsSubpixelAntialiasedText() const override; > void setSupportsSubpixelAntialiasedText(bool) override; > >+ bool hasContents() const override; > CFTypeRef contents() const override; > void setContents(CFTypeRef) override; > >diff --git a/Source/bmalloc/bmalloc/Scavenger.cpp b/Source/bmalloc/bmalloc/Scavenger.cpp >index de99c176bc9cc89453d354e2804b5b794a89cf67..edb014de9b2fcbcae545cc7b9afc41d7bf3ac3f2 100644 >--- a/Source/bmalloc/bmalloc/Scavenger.cpp >+++ b/Source/bmalloc/bmalloc/Scavenger.cpp >@@ -158,7 +158,7 @@ inline void dumpStats() > task_vm_info_data_t vmInfo; > mach_msg_type_number_t vmSize = TASK_VM_INFO_COUNT; > if (KERN_SUCCESS == task_info(mach_task_self(), TASK_VM_INFO, (task_info_t)(&vmInfo), &vmSize)) { >- dump("phys_footrpint", vmInfo.phys_footprint); >+ dump("phys_footprint", vmInfo.phys_footprint); > dump("internal+compressed", vmInfo.internal + vmInfo.compressed); > } > #endif >diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index d08a7524934dd97200a992a1e6e4bff669a57fb4..6ce1bf986309ad5b2776b1173ad168776858cda1 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,16 @@ >+2018-06-25 Simon Fraser <simon.fraser@apple.com> >+ >+ https://hackernoon.com/ uses lots of layer backing store >+ https://bugs.webkit.org/show_bug.cgi?id=186909 >+ rdar://problem/40257540 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ New test. >+ >+ * compositing/backing/backing-store-attachment-outside-viewport-expected.txt: Added. >+ * compositing/backing/backing-store-attachment-outside-viewport.html: Added. >+ > 2018-06-25 Chris Dumez <cdumez@apple.com> > > performance-api/performance-observer-no-document-leak.html is flaky >diff --git a/LayoutTests/compositing/backing/backing-store-attachment-outside-viewport-expected.txt b/LayoutTests/compositing/backing/backing-store-attachment-outside-viewport-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..5000839a61149164c6f528c66413223544a98bdf >--- /dev/null >+++ b/LayoutTests/compositing/backing/backing-store-attachment-outside-viewport-expected.txt >@@ -0,0 +1,35 @@ >+(GraphicsLayer >+ (anchor 0.00 0.00) >+ (bounds 785.00 3821.00) >+ (backingStoreAttached 1) >+ (children 1 >+ (GraphicsLayer >+ (bounds 785.00 3821.00) >+ (contentsOpaque 1) >+ (backingStoreAttached 1) >+ (children 3 >+ (GraphicsLayer >+ (position 8.00 13.00) >+ (bounds 600.00 600.00) >+ (drawsContent 1) >+ (backingStoreAttached 1) >+ ) >+ (GraphicsLayer >+ (position 8.00 1613.00) >+ (bounds 600.00 600.00) >+ (drawsContent 1) >+ (backingStoreAttached 0) >+ ) >+ (GraphicsLayer >+ (position 8.00 3213.00) >+ (bounds 600.00 600.00) >+ (drawsContent 1) >+ (backingStoreAttached 0) >+ ) >+ ) >+ ) >+ ) >+) >+I'm attached. >+I'm detached. >+I'm detached. Triggers repaint >diff --git a/LayoutTests/compositing/backing/backing-store-attachment-outside-viewport.html b/LayoutTests/compositing/backing/backing-store-attachment-outside-viewport.html >new file mode 100644 >index 0000000000000000000000000000000000000000..6191cea98ff896201676290209fee50d3e2db755 >--- /dev/null >+++ b/LayoutTests/compositing/backing/backing-store-attachment-outside-viewport.html >@@ -0,0 +1,41 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<style> >+.layerized { >+ transform: translateZ(0); >+ width: 600px; >+ height: 600px; >+} >+.vspace { >+ height: 1000px; >+} >+</style> >+<script> >+if (window.testRunner) { >+ testRunner.dumpAsText(); >+ testRunner.waitUntilDone(); >+} >+ >+window.onload = function() { >+ if (!window.testRunner) >+ return; >+ >+ document.getElementById('repainting').style.color = 'blue'; >+ setTimeout(function() { >+ var out = document.getElementById('out'); >+ out.innerText = internals.layerTreeAsText(document, internals.LAYER_TREE_INCLUDES_BACKING_STORE_ATTACHED); >+ testRunner.notifyDone(); >+ }, 0); >+}; >+</script> >+</head> >+<body> >+<pre id="out"></pre> >+<div class="layerized">I'm attached.</div> >+<div class="vspace"></div> >+<div class="layerized">I'm detached.</div> >+<div class="vspace"></div> >+<div class="layerized">I'm detached. <span id="repainting">Triggers repaint</span></div> >+</body> >+</html> >diff --git a/LayoutTests/fast/images/animated-gif-iframe-webkit-transform.html b/LayoutTests/fast/images/animated-gif-iframe-webkit-transform.html >index a414c49c74b47ad0c80384ec0a36f4e802445bce..c0b86772aff406a2a667642b80665ede7572e449 100644 >--- a/LayoutTests/fast/images/animated-gif-iframe-webkit-transform.html >+++ b/LayoutTests/fast/images/animated-gif-iframe-webkit-transform.html >@@ -6,12 +6,12 @@ > <body> > <p id="description"></p> > <div id="scroller" style="width: 800px; overflow: hidden"> >- <div id="scroller-cont" style="height: 245px; width: 1600px; position: relative; top: 0; left: 0; -webkit-transform: translate(0px, 0px) translateZ(0px);"> >- <div id="wrapper1" style="-webkit-transform: translate3d(0px, 0px, 0px); width: 800px; height: 245px; float: left; margin: 0; padding: 0"> >+ <div id="scroller-cont" style="height: 245px; width: 1410px; position: relative; top: 0; left: 0; -webkit-transform: translate(0px, 0px) translateZ(0px);"> >+ <div id="wrapper1" style="-webkit-transform: translate3d(0px, 0px, 0px); width: 710px; height: 245px; float: left; margin: 0; padding: 0"> > <iframe id="testFrame1" src="resources/iframe-with-animated-gif.html" style="width: 245px; height: 245px;" onload="frameLoaded()"></iframe> > </div> >- <div id="wrapper2" style="-webkit-transform: translate3d(0px, 0px, 0px); width: 800px; height: 245px; float: left; margin: 0; padding: 0"> >- <iframe id="testFrame2" src="resources/iframe-with-animated-gif2.html" style="width: 245px; height: 245px;" onload="frameLoaded()"></iframe> >+ <div id="wrapper2" style="-webkit-transform: translate3d(0px, 0px, 0px); width: 700px; height: 245px; float: left; margin: 0; padding: 0"> >+ <iframe id="testFrame2" src="resources/iframe-with-animated-gif2.html" style="margin-left: 100px; width: 245px; height: 245px;" onload="frameLoaded()"></iframe> > </div> > </div> > </div> >@@ -52,7 +52,7 @@ function translateImagesLeft() > shouldBeFalse("isFirstImagePaused()"); > debug("Translating images left so that first image is no longer visible, but second image is."); > forceLayout(); >- document.getElementById("scroller-cont").style["-webkit-transform"] = "translate(-800px, 0px)"; >+ document.getElementById("scroller-cont").style["-webkit-transform"] = "translate(-610px, 0px)"; > shouldBecomeEqual("isFirstImagePaused()", "true", checkSecondImageUnpaused); > } > >diff --git a/LayoutTests/fast/images/animated-gif-webkit-transform.html b/LayoutTests/fast/images/animated-gif-webkit-transform.html >index 7493bde8bd0eb075fbdad98ba3430aedd15318af..a55a9586041bcc11588793aa2143871b0815b482 100644 >--- a/LayoutTests/fast/images/animated-gif-webkit-transform.html >+++ b/LayoutTests/fast/images/animated-gif-webkit-transform.html >@@ -4,13 +4,13 @@ > <script src="../../resources/js-test-pre.js"></script> > </head> > <body onload="runTest()"> >-<div id="scroller" style="width: 800px; overflow: hidden"> >- <div id="scroller-cont" style="height: 245px; width: 1600px; position: relative; top: 0; left: 0; -webkit-transform: translate(0px, 0px) translateZ(0px);"> >- <div id="wrapper1" style="-webkit-transform: translate3d(0px, 0px, 0px); width: 800px; height: 245px; float: left; margin: 0; padding: 0"> >+<div id="scroller" style="width: 800px; overflow: scroll"> >+ <div id="scroller-cont" style="height: 245px; width: 1410px; position: relative; top: 0; left: 0; -webkit-transform: translate(0px, 0px) translateZ(0px);"> >+ <div id="wrapper1" style="-webkit-transform: translate3d(0px, 0px, 0px); width: 710px; height: 245px; float: left; margin: 0; padding: 0"> > <img id="a" src="resources/animated.gif"/> > </div> >- <div id="wrapper2" style="-webkit-transform: translate3d(0px, 0px, 0px); width: 800px; height: 245px; float: left; margin: 0; padding: 0"> >- <img id="b" src="resources/animated-10color.gif"/> >+ <div id="wrapper2" style="-webkit-transform: translate3d(0px, 0px, 0px); width: 700px; height: 245px; float: left; margin: 0; padding: 0"> >+ <img id="b" src="resources/animated-10color.gif" style="margin-left: 100px;"/> > </div> > </div> > </div> >@@ -42,7 +42,7 @@ function translateImagesLeft() { > shouldBeFalse("isFirstImagePaused()"); > debug("Translating images left so that first image is no longer visible, but second image is."); > forceLayout(); >- document.getElementById("scroller-cont").style["-webkit-transform"] = "translate(-800px, 0px)"; >+ document.getElementById("scroller-cont").style["-webkit-transform"] = "translate(-610px, 0px)"; > shouldBecomeEqual("isFirstImagePaused()", "true", checkSecondImageUnpaused); > } > >diff --git a/LayoutTests/platform/ios/compositing/backing/backing-store-attachment-outside-viewport-expected.txt b/LayoutTests/platform/ios/compositing/backing/backing-store-attachment-outside-viewport-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..f533dafe86bbae49ee0cce26d5a1c7fc18ba37cd >--- /dev/null >+++ b/LayoutTests/platform/ios/compositing/backing/backing-store-attachment-outside-viewport-expected.txt >@@ -0,0 +1,35 @@ >+(GraphicsLayer >+ (anchor 0.00 0.00) >+ (bounds 800.00 3821.00) >+ (backingStoreAttached 1) >+ (children 1 >+ (GraphicsLayer >+ (bounds 800.00 3821.00) >+ (contentsOpaque 1) >+ (backingStoreAttached 1) >+ (children 3 >+ (GraphicsLayer >+ (position 8.00 13.00) >+ (bounds 600.00 600.00) >+ (drawsContent 1) >+ (backingStoreAttached 1) >+ ) >+ (GraphicsLayer >+ (position 8.00 1613.00) >+ (bounds 600.00 600.00) >+ (drawsContent 1) >+ (backingStoreAttached 0) >+ ) >+ (GraphicsLayer >+ (position 8.00 3213.00) >+ (bounds 600.00 600.00) >+ (drawsContent 1) >+ (backingStoreAttached 0) >+ ) >+ ) >+ ) >+ ) >+) >+I'm attached. >+I'm detached. >+I'm detached. Triggers repaint
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 186909
:
343307
|
343309
|
343310
|
343311
|
343316
|
343678
|
343719
|
343720