New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 591029 link

Starred by 3 users

Issue metadata

Status: Fixed
Owner:
Last visit > 30 days ago
Closed: Apr 2016
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Linux , Windows , Mac
Pri: 1
Type: Bug-Regression



Sign in to add a comment

Regression: 'fiberlamp' demo is not working after saving image from the page.

Reported by rk...@etouch.net, Mar 1 2016

Issue description

Chrome Version: 50.0.2661.5 Revision c836bc532e4bd4bacb0be5bb10efd493b0057679-refs/branch-heads/2661@{#19}(32/64 bit)
OS: All(Win-7 Aero enabled)

What steps will reproduce the problem?
1. Launch chrome,navigate to http://fieldsofnoise.org/fiberlamp
2. Right click on demo and select 'Save Image As' option,then click on 'Show All' option from download bar(navigate to chrome://downloads page ).
3. Come back to previous page and click on demo,observe.

Demo is not working after step 2.

Demo should work.

This is a regression issue,broken in 'M-49',below is bisect info:

Good Build: 49.0.2622.0
Bad Build: 49.0.2623.0

Narrow Build:
https://chromium.googlesource.com/chromium/src/+log/88257b623292f90c9dd33e98e5c9e0c241fb97fd..1aa3ac45628b36da02fb46f3cc47b6fc09544155?pretty=fuller&n=100

Suspecting: r 369680 ?


 
Actual_Demo.mov
1.8 MB Download
Expected_Demo.mov
2.1 MB Download
Labels: -M-49 M-50
I can't reproduce this on linux. It is unlikely to be r369680 though since border-radius does not seem to be used at all on that page.
Labels: Needs-Feedback
I can't reproduce on cros, either. Is this still reproducible by anyone?
Status: WontFix (was: Assigned)
I can't reproduce on Mac retina 49.0.2323.87 either.

Comment 5 by rk...@etouch.net, Mar 15 2016

Labels: -Needs-Feedback
Status: Assigned (was: WontFix)
With response to comment 4:

Issue is reproducible on Mac,Windows and Linux using latest canary  51.0.2678.0, kindly refer the attached video.
Actual_issue.mp4
965 KB Download

Comment 6 by junov@chromium.org, Mar 15 2016

Owner: junov@chromium.org

Comment 7 by junov@chromium.org, Mar 15 2016

I can reproduce on Linux, but it requires enabling GPU accelerated 2D canvas, which is off by default on linux.  Has to be turned on using --ignore-gpu-blacklist

I recorded a trace. It shows that after switching to and frome the show all pane, the animation is still running, but the canvas layer is no longer processed during compositor updates.  It looks like the state of Canvas2DLayerBridge is confused.  I will keep investigating.

Comment 8 by junov@chromium.org, Mar 22 2016

Cc: danakj@chromium.org enne@chromium.org
+cc enne, danakj: I need you advice.

What I have fond is that the animation halts because the layer has lost its reference to the layer tree host, so compositor invalidations are no longer propagated. This happens when we switch back to the fiberlamp tab.  What I found is that the CompositorLayerMapping is torn down and never re-created.  The compositor activity seem to be in response to a re-layout caused by a change to the frame size.  The frame size change is because after click "show all" and coming back, the download bar has disappeared.

When the animation is frozen, resizing the window will unfreeze the animation (after a small delay)

Below is a stack trace that shows where the canvas layer's reference to the layer tree host is lost when switching back to the tab that has the canvas

#0  cc::Layer::SetLayerTreeHost (this=0x67ce70ff020, host=0x0) at ../../cc/layers/layer.cc:143
#1  0x00007f38d79b166c in cc::TextureLayer::SetLayerTreeHost (this=0x67ce70ff020, host=0x0) at ../../cc/layers/texture_layer.cc:194
#2  0x00007f38d795db7e in cc::Layer::SetLayerTreeHost (this=0x67ce6680020, host=0x0) at ../../cc/layers/layer.cc:146
#3  0x00007f38d799bf87 in cc::PictureLayer::SetLayerTreeHost (this=0x67ce6680020, host=0x0) at ../../cc/layers/picture_layer.cc:68
#4  0x00007f38d795db7e in cc::Layer::SetLayerTreeHost (this=0x67ce6680820, host=0x0) at ../../cc/layers/layer.cc:146
#5  0x00007f38d799bf87 in cc::PictureLayer::SetLayerTreeHost (this=0x67ce6680820, host=0x0) at ../../cc/layers/picture_layer.cc:68
#6  0x00007f38d795e3e1 in cc::Layer::SetParent (this=0x67ce6680820, layer=0x0) at ../../cc/layers/layer.cc:254
#7  0x00007f38d795eb84 in cc::Layer::RemoveChildOrDependent (this=0x67ce5896420, child=0x67ce6680820) at ../../cc/layers/layer.cc:305
#8  0x00007f38d795da06 in cc::Layer::RemoveFromParent (this=0x67ce6680820) at ../../cc/layers/layer.cc:282
#9  0x00007f38c1a4ed71 in cc_blink::WebLayerImpl::removeFromParent (this=0x67ce6007200) at ../../cc/blink/web_layer_impl.cc:79
#10 0x00007f38d8752cfb in blink::GraphicsLayer::removeFromParent (this=0x2fe15c736810) at ../../third_party/WebKit/Source/platform/graphics/GraphicsLayer.cpp:267
#11 0x00007f38c28ebde0 in blink::CompositedLayerMapping::updateSquashingLayers (this=0x2fe15c7441f0, needsSquashingLayers=false)
    at ../../third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp:1719
#12 0x00007f38c28eac7d in blink::CompositedLayerMapping::~CompositedLayerMapping (this=0x2fe15c7441f0)
    at ../../third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp:208
#13 0x00007f38c28ebfe9 in blink::CompositedLayerMapping::~CompositedLayerMapping (this=0x2fe15c7441f0)
    at ../../third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp:185
#14 0x00007f38c21d7dfb in WTF::OwnedPtrDeleter<blink::DOMObjectHolderBase>::deletePtr (ptr=0x2fe15c7441f0) at ../../third_party/WebKit/Source/wtf/OwnPtrCommon.h:54
#15 0x00007f38c22870d7 in WTF::OwnPtr<blink::ThreadDebugger>::clear (this=0x67ce5ccc950) at ../../third_party/WebKit/Source/wtf/OwnPtr.h:137
#16 0x00007f38c3063688 in blink::PaintLayer::clearCompositedLayerMapping (this=0x3e7d19008498, layerBeingDestroyed=false)
    at ../../third_party/WebKit/Source/core/paint/PaintLayer.cpp:2337
#17 0x00007f38c2906367 in blink::PaintLayerCompositor::allocateOrClearCompositedLayerMapping (this=0x2fe15c6681c0, layer=0x3e7d19008498, 
    compositedLayerUpdate=blink::RemoveOwnCompositedLayerMapping) at ../../third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.cpp:499
#18 0x00007f38c28fdfd5 in blink::CompositingLayerAssigner::assignLayersToBackingsInternal (this=0x7ffc29da0b68, layer=0x3e7d19008498, squashingState=..., 
    layersNeedingPaintInvalidation=...) at ../../third_party/WebKit/Source/core/layout/compositing/CompositingLayerAssigner.cpp:264
#19 0x00007f38c28fe461 in blink::CompositingLayerAssigner::assignLayersToBackingsInternal (this=0x7ffc29da0b68, layer=0x3e7d190080f8, squashingState=..., 
    layersNeedingPaintInvalidation=...) at ../../third_party/WebKit/Source/core/layout/compositing/CompositingLayerAssigner.cpp:309
#20 0x00007f38c28fe461 in blink::CompositingLayerAssigner::assignLayersToBackingsInternal (this=0x7ffc29da0b68, layer=0x3e7d19008010, squashingState=..., 
    layersNeedingPaintInvalidation=...) at ../../third_party/WebKit/Source/core/layout/compositing/CompositingLayerAssigner.cpp:309
#21 0x00007f38c28fde39 in blink::CompositingLayerAssigner::assign (this=0x7ffc29da0b68, updateRoot=0x3e7d19008010, layersNeedingPaintInvalidation=...)
    at ../../third_party/WebKit/Source/core/layout/compositing/CompositingLayerAssigner.cpp:57
#22 0x00007f38c290532a in blink::PaintLayerCompositor::updateIfNeeded (this=0x2fe15c6681c0)
    at ../../third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.cpp:375
#23 0x00007f38c2904e9b in blink::PaintLayerCompositor::updateIfNeededRecursive (this=0x2fe15c6681c0)
    at ../../third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.cpp:230
#24 0x00007f38c2db716e in blink::FrameView::updateLifecyclePhasesInternal (this=0x109a62cddb50, phases=blink::FrameView::AllPhases)
    at ../../third_party/WebKit/Source/core/frame/FrameView.cpp:2439
#25 0x00007f38c2db6e82 in blink::FrameView::updateAllLifecyclePhases (this=0x109a62cddb50) at ../../third_party/WebKit/Source/core/frame/FrameView.cpp:2382
#26 0x00007f38c2ff8391 in blink::PageAnimator::updateAllLifecyclePhases (this=0x65a5dc61870, rootFrame=...)
    at ../../third_party/WebKit/Source/core/page/PageAnimator.cpp:85
#27 0x00007f38d8070a75 in blink::PageWidgetDelegate::updateAllLifecyclePhases (page=..., root=...) at ../../third_party/WebKit/Source/web/PageWidgetDelegate.cpp:62
#28 0x00007f38d8151448 in blink::WebViewImpl::updateAllLifecyclePhases (this=0x2fe15c6d8010) at ../../third_party/WebKit/Source/web/WebViewImpl.cpp:1953
#29 0x00007f38d81535a0 in blink::WebViewImpl::resizeViewWhileAnchored (this=0x2fe15c6d8010, view=0x109a62cddb50)
    at ../../third_party/WebKit/Source/web/WebViewImpl.cpp:1860
#30 0x00007f38d81538e6 in blink::WebViewImpl::resize (this=0x2fe15c6d8010, newSize=...) at ../../third_party/WebKit/Source/web/WebViewImpl.cpp:1899
#31 0x00007f38d4ec80b0 in content::RenderWidget::Resize (this=0x67ce5396020, params=...) at ../../content/renderer/render_widget.cc:1152
#32 0x00007f38d4ec4612 in content::RenderWidget::OnResize (this=0x67ce5396020, params=...) at ../../content/renderer/render_widget.cc:577
#33 0x00007f38d4ea0fdd in content::RenderViewImpl::OnResize (this=0x67ce5396020, params=...) at ../../content/renderer/render_view_impl.cc:2684
#34 0x00007f38d4ed3c69 in base::DispatchToMethodImpl<content::RenderWidget*, void (content::RenderWidget::*)(content::ResizeParams const&), content::ResizeParams, 0ul> (obj=@0x7ffc29da1c78: 0x67ce5396020, method=&virtual content::RenderWidget::OnResize(content::ResizeParams const&), arg=empty std::tuple)
    at ../../base/tuple.h:166
#35 0x00007f38d4ed3bc5 in base::DispatchToMethod<content::RenderWidget*, void (content::RenderWidget::*)(content::ResizeParams const&), content::ResizeParams> (
    obj=@0x7ffc29da1c78: 0x67ce5396020, method=&virtual content::RenderWidget::OnResize(content::ResizeParams const&), arg=empty std::tuple)
    at ../../base/tuple.h:173
#36 0x00007f38d4ed3b6f in IPC::DispatchToMethod<content::RenderWidget, void (content::RenderWidget::*)(content::ResizeParams const&), void, std::tuple<content::ResizeParams> > (obj=0x67ce5396020, method=&virtual content::RenderWidget::OnResize(content::ResizeParams const&), tuple=empty std::tuple)
    at ../../ipc/ipc_message_templates.h:25
#37 0x00007f38d4ecd174 in IPC::MessageT<ViewMsg_Resize_Meta, std::tuple<content::ResizeParams>, void>::Dispatch<content::RenderWidget, content::RenderWidget, void, void (content::RenderWidget::*)(content::ResizeParams const&)> (msg=0x67ce5fd31c0, obj=0x67ce5396020, sender=0x67ce5396020, parameter=0x0, 
    func=&virtual content::RenderWidget::OnResize(content::ResizeParams const&)) at ../../ipc/ipc_message_templates.h:119
#38 0x00007f38d4ec2e6f in content::RenderWidget::OnMessageReceived (this=0x67ce5396020, message=...) at ../../content/renderer/render_widget.cc:467
#39 0x00007f38d4e98faf in content::RenderViewImpl::OnMessageReceived (this=0x67ce5396020, message=...) at ../../content/renderer/render_view_impl.cc:1418
#40 0x00007f38d1b0cd5b in IPC::MessageRouter::RouteMessage (this=0x67ce5269a60, msg=...) at ../../ipc/message_router.cc:52
#41 0x00007f38d4829478 in content::ChildThreadImpl::ChildThreadMessageRouter::RouteMessage (this=0x67ce5269a60, msg=...)
    at ../../content/child/child_thread_impl.cc:334
#42 0x00007f38d1b0ccde in IPC::MessageRouter::OnMessageReceived (this=0x67ce5269a60, msg=...) at ../../ipc/message_router.cc:44
#43 0x00007f38d482cb9d in content::ChildThreadImpl::OnMessageReceived (this=0x67ce5269a28, msg=...) at ../../content/child/child_thread_impl.cc:669
#44 0x00007f38d1ad3633 in IPC::ChannelProxy::Context::OnDispatchMessage (this=0x67ce52c67a0, message=...) at ../../ipc/ipc_channel_proxy.cc:293
#45 0x00007f38d1ad7f81 in base::internal::RunnableAdapter<void (IPC::ChannelProxy::Context::*)(IPC::Message const&)>::Run<IPC::Message const&> (
    this=0x7ffc29da44f0, object=0x67ce52c67a0, args=...) at ../../base/bind_internal.h:181
#46 0x00007f38d1ad7eb1 in base::internal::InvokeHelper<false, void, base::internal::RunnableAdapter<void (IPC::ChannelProxy::Context::*)(IPC::Message const&)> >::MakeItSo<IPC::ChannelProxy::Context*, IPC::Message const&>(base::internal::RunnableAdapter<void (IPC::ChannelProxy::Context::*)(IPC::Message const&)>, IPC::ChannelProxy::Context*&&, IPC::Message const&) (runnable=..., args=..., args=...) at ../../base/bind_internal.h:301
---Type <return> to continue, or q <return> to quit---
#47 0x00007f38d1ad7e60 in base::internal::Invoker<base::IndexSequence<0ul, 1ul>, base::internal::BindState<base::internal::RunnableAdapter<void (IPC::ChannelProxy::Context::*)(IPC::Message const&)>, void (IPC::ChannelProxy::Context*, IPC::Message const&), IPC::ChannelProxy::Context*, IPC::Message const&>, base::internal::InvokeHelper<false, void, base::internal::RunnableAdapter<void (IPC::ChannelProxy::Context::*)(IPC::Message const&)> >, void ()>::Run(base::internal::BindStateBase*) (
    base=0x67ce5fd31a0) at ../../base/bind_internal.h:352
#48 0x00007f38d91f11ee in base::Callback<void (), (base::internal::CopyMode)1>::Run() const (this=0x7ffc29da4850) at ../../base/callback.h:397
#49 0x00007f38d920f11e in base::debug::TaskAnnotator::RunTask (this=0x67ce525df40, queue_function=0x7f38c14afced <.L.str.13> "TaskQueueManager::PostTask", 
    pending_task=...) at ../../base/debug/task_annotator.cc:51
#50 0x00007f38c1466672 in scheduler::TaskQueueManager::ProcessTaskFromWorkQueue (this=0x67ce525de20, work_queue=0x67ce55400e0, out_previous_task=0x7ffc29da4b18)
    at ../../components/scheduler/base/task_queue_manager.cc:288
#51 0x00007f38c14645f2 in scheduler::TaskQueueManager::DoWork (this=0x67ce525de20, run_time=..., from_main_thread=false)
    at ../../components/scheduler/base/task_queue_manager.cc:200
#52 0x00007f38c146bdbe in base::internal::RunnableAdapter<void (scheduler::TaskQueueManager::*)(base::TimeTicks, bool)>::Run<base::TimeTicks const&, bool const&> (
    this=0x7ffc29da4e00, object=0x67ce525de20, args=@0x67ce55550c0: false, args=@0x67ce55550c0: false) at ../../base/bind_internal.h:181
#53 0x00007f38c146bcba in base::internal::InvokeHelper<true, void, base::internal::RunnableAdapter<void (scheduler::TaskQueueManager::*)(base::TimeTicks, bool)> >::MakeItSo<base::WeakPtr<scheduler::TaskQueueManager>, base::TimeTicks const&, bool const&> (runnable=..., weak_ptr=..., args=@0x67ce55550c0: false, 
    args=@0x67ce55550c0: false) at ../../base/bind_internal.h:314
#54 0x00007f38c146bc38 in base::internal::Invoker<base::IndexSequence<0ul, 1ul, 2ul>, base::internal::BindState<base::internal::RunnableAdapter<void (scheduler::TaskQueueManager::*)(base::TimeTicks, bool)>, void (scheduler::TaskQueueManager*, base::TimeTicks, bool), base::WeakPtr<scheduler::TaskQueueManager>, base::TimeTicks, bool>, base::internal::InvokeHelper<true, void, base::internal::RunnableAdapter<void (scheduler::TaskQueueManager::*)(base::TimeTicks, bool)> >, void ()>::Run(base::internal::BindStateBase*) (base=0x67ce55550a0) at ../../base/bind_internal.h:352
#55 0x00007f38d91f11ee in base::Callback<void (), (base::internal::CopyMode)1>::Run() const (this=0x7ffc29da52f8) at ../../base/callback.h:397
#56 0x00007f38d920f11e in base::debug::TaskAnnotator::RunTask (this=0x67ce52c6e90, queue_function=0x7f38d9465706 <.L.str.9> "MessageLoop::PostTask", 
    pending_task=...) at ../../base/debug/task_annotator.cc:51
#57 0x00007f38d928144f in base::MessageLoop::RunTask (this=0x67ce52c6ca0, pending_task=...) at ../../base/message_loop/message_loop.cc:476
#58 0x00007f38d92816d8 in base::MessageLoop::DeferOrRunPendingTask (this=0x67ce52c6ca0, pending_task=...) at ../../base/message_loop/message_loop.cc:485
#59 0x00007f38d92818a2 in base::MessageLoop::DoWork (this=0x67ce52c6ca0) at ../../base/message_loop/message_loop.cc:597
#60 0x00007f38d9293083 in base::MessagePumpDefault::Run (this=0x67ce5274140, delegate=0x67ce52c6ca0) at ../../base/message_loop/message_pump_default.cc:33
#61 0x00007f38d9280e7f in base::MessageLoop::RunHandler (this=0x67ce52c6ca0) at ../../base/message_loop/message_loop.cc:440
#62 0x00007f38d92f80f4 in base::RunLoop::Run (this=0x7ffc29da5778) at ../../base/run_loop.cc:35
#63 0x00007f38d927ff24 in base::MessageLoop::Run (this=0x67ce52c6ca0) at ../../base/message_loop/message_loop.cc:293
#64 0x00007f38d4ef19d8 in content::RendererMain (parameters=...) at ../../content/renderer/renderer_main.cc:219
#65 0x00007f38d3adcd46 in content::RunZygote (main_function_params=..., delegate=0x7ffc29da67c8) at ../../content/app/content_main_runner.cc:316
#66 0x00007f38d3adcff0 in content::RunNamedProcessTypeMain (process_type="zygote", main_function_params=..., delegate=0x7ffc29da67c8)
    at ../../content/app/content_main_runner.cc:403
#67 0x00007f38d3adf5dd in content::ContentMainRunnerImpl::Run (this=0x67ce5274e30) at ../../content/app/content_main_runner.cc:766
#68 0x00007f38d3adc332 in content::ContentMain (params=...) at ../../content/app/content_main.cc:19
#69 0x00007f38d9ed5fe6 in ChromeMain (argc=2, argv=0x7ffc29da6918) at ../../chrome/app/chrome_main.cc:84
#70 0x00007f38d9ed5f72 in main (argc=2, argv=0x7ffc29da6918) at ../../chrome/app/chrome_exe_main_aura.cc:17







Comment 9 by danakj@chromium.org, Mar 22 2016

Cc: vollick@chromium.org wkorman@chromium.org
I think we need input from the blink compositing integration folks. I'm not familiar with GraphicsLayer and below.

chrishtr? I'll add a few others.
It looks like the canvas is losing its backing because Blink decides it doesn't
need to be composited. Is that incorrect? Why did it lose its compositing triggers?

Comment 11 by junov@chromium.org, Mar 29 2016

The issue goes away when if I disable canvas hibernation in the code. Hibernation is this new thing where we free the GPU resources held by canvases in pages that are not visible (e.g. background tabs). While the page is in the background, attempting to paint to the canvas will result in the canvas switch to software rendering mode (not composited). When the page becomes visible again, the canvas is re-uploaded to the GPU, and GPU-accelerated rendering resumes (or at least it is supposed to).  In tests this works fine.
Project Member

Comment 12 by bugdroid1@chromium.org, Apr 4 2016

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/30569cfdd5902ae953a0a9e07d19d828c57f5f6f

commit 30569cfdd5902ae953a0a9e07d19d828c57f5f6f
Author: junov <junov@chromium.org>
Date: Mon Apr 04 20:20:01 2016

Disable 2D canvas switch to CPU rendering while backgrounded

The switch to software rendering that happens when actively drawing to
a canvas while the containing page is in the background was cause the
compositing layer to get into a corrupted state.  This fix disables
the feature until a permanent solution can be found

BUG= 591029 

Review URL: https://codereview.chromium.org/1857763002

Cr-Commit-Position: refs/heads/master@{#384990}

[modify] https://crrev.com/30569cfdd5902ae953a0a9e07d19d828c57f5f6f/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp
[modify] https://crrev.com/30569cfdd5902ae953a0a9e07d19d828c57f5f6f/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.h
[modify] https://crrev.com/30569cfdd5902ae953a0a9e07d19d828c57f5f6f/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridgeTest.cpp

Status: Fixed (was: Assigned)
Labels: Merge-Request-50
Requesting permission to merge to M50

This is a very simple fix that repairs a wider-spread issue that is causing several in-production websites to malfunction with Chrome 49. There have been reports of canvases going blank after switching tabs.  Engineers from periscopedata.com have have confirmed, in a private thread, that the latest Canary, which has this fix, solves the issue.

Comment 15 by tin...@google.com, Apr 5 2016

Labels: -Merge-Request-50 Merge-Review-50 Hotlist-Merge-Review
[Automated comment] Less than 2 weeks to go before stable on M50, manual review required.
Cc: junov@chromium.org
 Issue 599177  has been merged into this issue.
First, this issue can not be reproduced on my laptop with GPU(Quadro1000M) acceleration

Graphics Feature Status
Canvas: Hardware accelerated
Flash: Hardware accelerated
Flash Stage3D: Hardware accelerated
Flash Stage3D Baseline profile: Hardware accelerated
Compositing: Hardware accelerated
Multiple Raster Threads: Enabled
Rasterization: Software only. Hardware acceleration disabled
Video Decode: Hardware accelerated
Video Encode: Hardware accelerated
WebGL: Hardware accelerated


Second,  Issue 599177  was still reproducible in Chrome Canary:
Version 51.0.2700.0 canary (64-bit)
 

 

Comment 18 by tin...@google.com, Apr 7 2016

Labels: -Merge-Review-50 Merge-Approved-50
Merge approved for M50 (branch 2661). Pls go ahead merge.
Please merge your change to M50 branch 2661 by 5:00 PM PST on April 8th,Friday to make into the desktop Stable final build cut. Thank you.
Project Member

Comment 20 by bugdroid1@chromium.org, Apr 8 2016

Labels: -merge-approved-50 merge-merged-2661
The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/06bb6cf8eb3c04254e4f5187a644ddb086b7afcc

commit 06bb6cf8eb3c04254e4f5187a644ddb086b7afcc
Author: Justin Novosad <junov@chromium.org>
Date: Fri Apr 08 19:05:42 2016

Disable 2D canvas switch to CPU rendering while backgrounded

The switch to software rendering that happens when actively drawing to
a canvas while the containing page is in the background was cause the
compositing layer to get into a corrupted state.  This fix disables
the feature until a permanent solution can be found

BUG= 591029 

Review URL: https://codereview.chromium.org/1857763002

Cr-Commit-Position: refs/heads/master@{#384990}
(cherry picked from commit 30569cfdd5902ae953a0a9e07d19d828c57f5f6f)

Review URL: https://codereview.chromium.org/1877473002 .

Cr-Commit-Position: refs/branch-heads/2661@{#532}
Cr-Branched-From: ef6f6ae5e4c96622286b563658d5cd62a6cf1197-refs/heads/master@{#378081}

[modify] https://crrev.com/06bb6cf8eb3c04254e4f5187a644ddb086b7afcc/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp
[modify] https://crrev.com/06bb6cf8eb3c04254e4f5187a644ddb086b7afcc/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.h
[modify] https://crrev.com/06bb6cf8eb3c04254e4f5187a644ddb086b7afcc/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridgeTest.cpp

Comment 21 by pdr@chromium.org, Apr 11 2016

 Issue 601382  has been merged into this issue.
Labels: TE-Verified-50.0.2661.75 TE-Verified-M50
Tested the issue on Windows 7, Mac 10.10.5, Ubuntu 14.04 using 50.0.2661.75.Observed that 'fiberlamp' demo is working after saving image from the page.
Please find attached screencast.

Marking it as TE-Verified.

Sign in to add a comment