IntersectionObserver/ElementVisibilityObserver is leaking in AutoplayUmaHelper |
||||
Issue descriptionA recent patch for AutoplayUmaHelper was reverted since some leaks are detected. commit 36d7422fbb9f27d2a931e91edcabe473a2d55772 Author: megjablon <megjablon@chromium.org> Date: Tue Aug 23 02:12:37 2016 Revert "Record the offscreen playing duration of autoplaying muted videos" This reverts commit cc74c3a6422be9a25c635021a57f7f0950c0381c. Tests failing on https://build.chromium.org/p/chromium.webkit/builders/WebKit%20Linux%20Leak: media/autoplay-muted.html media/autoplay-unmute-offscreen.html media/autoplay-when-visible.html 15:30:48.155 15954 worker/3 media/autoplay-unmute-offscreen.html leaked 15:30:48.155 15954 Xlib: extension "RANDR" missing on display ":9". 15:30:48.155 15954 Xlib: extension "RANDR" missing on display ":9". 15:30:48.155 15954 [4:4:0822/153047:2028208541:WARNING:webmediaplayer_impl.cc(372)] Using MultibufferDataSource 15:30:48.155 15954 [4:4:0822/153047:2028209045:WARNING:webmediaplayer_impl.cc(372)] Using MultibufferDataSource 15:30:48.158 18115 [35/36] media/autoplay-unmute-offscreen.html failed unexpectedly (leak detected: ({"numberOfLiveActiveDOMObjects":[2,3]})) 15:30:48.157 15954 worker/3 media/autoplay-unmute-offscreen.html failed: 15:30:48.157 15954 worker/3 leak detected: ({"numberOfLiveActiveDOMObjects":[2,3]}) TBR=isherman@chromium.org, mlamouri@chromium.org BUG= 617681 Review-Url: https://codereview.chromium.org/2266253002 Cr-Commit-Position: refs/heads/master@{#413635} [modify] https://crrev.com/36d7422fbb9f27d2a931e91edcabe473a2d55772/third_party/WebKit/LayoutTests/media/video-autoplay-experiment-modes-expected.txt [modify] https://crrev.com/36d7422fbb9f27d2a931e91edcabe473a2d55772/third_party/WebKit/Source/core/html/AutoplayUmaHelper.cpp [modify] https://crrev.com/36d7422fbb9f27d2a931e91edcabe473a2d55772/third_party/WebKit/Source/core/html/AutoplayUmaHelper.h [modify] https://crrev.com/36d7422fbb9f27d2a931e91edcabe473a2d55772/tools/metrics/histograms/histograms.xml The leaks are flaky on debug build but 100% reproducible on release build. To my best knowledge the leak should be IntersectionObserver/ElementVisibilityObserver. Did some tracing, and found that each ElementVisibilityObserver->start() has a matching stop() call.
,
Aug 23 2016
I think we should revert the CL and reland with the fix. > is there a way to see what are the leaking ActiveDOMObjects? There's no easy way, unfortunately :/ However, I guess the leaking ActiveDOMObject is HTMLMediaElement.
,
Aug 23 2016
> There's no easy way, unfortunately :/ However, I guess the leaking ActiveDOMObject is HTMLMediaElement. I think so, too. But the info is not enough to debug the leak. I suspect the leak is because that some persistent reference in the graph is preventing the HTMLMediaElement to be GC'ed, event if the document is unloaded. Does this sound reasonable? Is there other possible reasons?
,
Aug 26 2016
,
Aug 31 2016
Did some more logging. Seems like we can exclude the following classes: - Document - HTMLMediaElement - ElementVisibilityObserver - IntersectionObserver - IntersectionObservation - IntersectionObservationController Looking into more. [1:1:0831/174904:112999682081:INFO:Document.cpp(458)] Document::Document() [1:1:0831/174904:112999682425:INFO:ActiveDOMObject.cpp(40)] ActiveDOMObject::ActiveDOMObject() [1:1:0831/174904:112999682561:INFO:ActiveDOMObject.cpp(40)] ActiveDOMObject::ActiveDOMObject() [1:1:0831/174904:112999701153:INFO:Document.cpp(458)] Document::Document() [1:1:0831/174904:112999701278:INFO:ActiveDOMObject.cpp(40)] ActiveDOMObject::ActiveDOMObject() [1:1:0831/174904:112999701351:INFO:ActiveDOMObject.cpp(40)] ActiveDOMObject::ActiveDOMObject() [1:1:0831/174904:112999719550:INFO:ActiveDOMObject.cpp(40)] ActiveDOMObject::ActiveDOMObject() [1:1:0831/174904:112999721507:INFO:ActiveDOMObject.cpp(40)] ActiveDOMObject::ActiveDOMObject() [1:1:0831/174904:112999728844:INFO:ActiveDOMObject.cpp(40)] ActiveDOMObject::ActiveDOMObject() [1:1:0831/174904:112999728943:INFO:AutoplayUmaHelper.cpp(40)] AutoplayUmaHelper::AutoplayUmaHelper() [1:1:0831/174904:112999728996:INFO:HTMLMediaElement.cpp(448)] HTMLMediaElement::HTMLMediaElement() [1:1:0831/174904:112999729538:INFO:ActiveDOMObject.cpp(40)] ActiveDOMObject::ActiveDOMObject() [1:1:0831/174904:112999729619:INFO:AutoplayUmaHelper.cpp(40)] AutoplayUmaHelper::AutoplayUmaHelper() [1:1:0831/174904:112999729670:INFO:HTMLMediaElement.cpp(448)] HTMLMediaElement::HTMLMediaElement() [57943:57964:0831/174904:113000094278:INFO:audio_manager_pulse.cc(204)] Not implemented! [57943:57964:0831/174904:113000096964:INFO:audio_manager_pulse.cc(204)] Not implemented! [1:1:0831/174904:113000102571:INFO:ElementVisibilityObserver.cpp(28)] ElementVisibilityObserver::ElementVisibilityObserver() [1:1:0831/174904:113000102737:INFO:IntersectionObserver.cpp(188)] IntersectionObserver::IntersectionObserver() [1:1:0831/174904:113000102816:INFO:ActiveDOMObject.cpp(40)] ActiveDOMObject::ActiveDOMObject() [1:1:0831/174904:113000102878:INFO:IntersectionObserverController.cpp(25)] IntersectionObserverController::IntersectionObserverController() [1:1:0831/174904:113000102954:INFO:IntersectionObservation.cpp(23)] IntersectionObservation::IntersectionObservation() [1:1:0831/174904:113000105443:INFO:ActiveDOMObject.cpp(40)] ActiveDOMObject::ActiveDOMObject() [1:1:0831/174904:113000212944:INFO:ActiveDOMObject.cpp(40)] ActiveDOMObject::ActiveDOMObject() [1:1:0831/174904:113000213207:INFO:ElementVisibilityObserver.cpp(28)] ElementVisibilityObserver::ElementVisibilityObserver() [1:1:0831/174904:113000213262:INFO:IntersectionObserver.cpp(188)] IntersectionObserver::IntersectionObserver() [1:1:0831/174904:113000213323:INFO:IntersectionObservation.cpp(23)] IntersectionObservation::IntersectionObservation() [1:1:0831/174904:113000218940:INFO:Document.cpp(458)] Document::Document() [1:1:0831/174904:113000219035:INFO:ActiveDOMObject.cpp(40)] ActiveDOMObject::ActiveDOMObject() [1:1:0831/174904:113000219090:INFO:ActiveDOMObject.cpp(40)] ActiveDOMObject::ActiveDOMObject() [1:1:0831/174904:113000231243:INFO:HTMLMediaElement.cpp(478)] HTMLMediaElement::dispose() [1:1:0831/174904:113000231337:INFO:ActiveDOMObject.cpp(47)] ActiveDOMObject::~ActiveDOMObject() [1:1:0831/174904:113000231391:INFO:ActiveDOMObject.cpp(47)] ActiveDOMObject::~ActiveDOMObject() [1:1:0831/174904:113000231438:INFO:ActiveDOMObject.cpp(47)] ActiveDOMObject::~ActiveDOMObject() [1:1:0831/174904:113000231483:INFO:ActiveDOMObject.cpp(47)] ActiveDOMObject::~ActiveDOMObject() [1:1:0831/174904:113000231577:INFO:ElementVisibilityObserver.cpp(33)] ElementVisibilityObserver::~ElementVisibilityObserver() [1:1:0831/174904:113000231632:INFO:IntersectionObservation.cpp(28)] IntersectionObservation::~IntersectionObservation() [1:1:0831/174904:113000231672:INFO:ElementVisibilityObserver.cpp(33)] ElementVisibilityObserver::~ElementVisibilityObserver() [1:1:0831/174904:113000231713:INFO:IntersectionObservation.cpp(28)] IntersectionObservation::~IntersectionObservation() [1:1:0831/174904:113000231773:INFO:AutoplayUmaHelper.cpp(45)] AutoplayUmaHelper::~AutoplayUmaHelper() [1:1:0831/174904:113000231873:INFO:ActiveDOMObject.cpp(47)] ActiveDOMObject::~ActiveDOMObject() [1:1:0831/174904:113000231982:INFO:IntersectionObserver.cpp(218)] IntersectionObserver::~IntersectionObserver() [1:1:0831/174904:113000232096:INFO:Document.cpp(516)] Document::~Document() [1:1:0831/174904:113000232151:INFO:HTMLMediaElement.cpp(466)] HTMLMediaElement::~HTMLMediaElement() [1:1:0831/174904:113000232204:INFO:ActiveDOMObject.cpp(47)] ActiveDOMObject::~ActiveDOMObject() [1:1:0831/174904:113000235349:INFO:HTMLMediaElement.cpp(478)] HTMLMediaElement::dispose() [1:1:0831/174904:113000235415:INFO:ActiveDOMObject.cpp(47)] ActiveDOMObject::~ActiveDOMObject() [1:1:0831/174904:113000235499:INFO:AutoplayUmaHelper.cpp(45)] AutoplayUmaHelper::~AutoplayUmaHelper() [1:1:0831/174904:113000235551:INFO:IntersectionObserverController.cpp(30)] IntersectionObserverController::~IntersectionObserverController() [1:1:0831/174904:113000235594:INFO:ActiveDOMObject.cpp(47)] ActiveDOMObject::~ActiveDOMObject() [1:1:0831/174904:113000235643:INFO:ActiveDOMObject.cpp(47)] ActiveDOMObject::~ActiveDOMObject() [1:1:0831/174904:113000235701:INFO:IntersectionObserver.cpp(218)] IntersectionObserver::~IntersectionObserver() [1:1:0831/174904:113000235755:INFO:Document.cpp(516)] Document::~Document() [1:1:0831/174904:113000235814:INFO:HTMLMediaElement.cpp(466)] HTMLMediaElement::~HTMLMediaElement() [1:1:0831/174904:113000235857:INFO:ActiveDOMObject.cpp(47)] ActiveDOMObject::~ActiveDOMObject()
,
Sep 6 2016
,
Sep 12 2016
Steps to repro: 1. Set up and make a release build 2. third_party/WebKit/Tools/Scripts/run-webkit-tests -t LinuxRel media/autoplay-muted.html --enable-leak-detection Also, you can minimize autoplay-muted.html by removing all other tests except for the first one.
,
Sep 12 2016
Steps to repro: 0. Apply patch https://codereview.chromium.org/2331893003/
,
Sep 13 2016
The leak is no longer repro on ToT. Seems it has been fixed somewhere. I'll land the patch again and see if the bots are still reporting leaks.
,
Sep 13 2016
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/d791630a5f638c81b21284a7a8a22778c315cdde commit d791630a5f638c81b21284a7a8a22778c315cdde Author: zqzhang <zqzhang@chromium.org> Date: Tue Sep 13 09:50:42 2016 Reland "Record the offscreen playing duration of autoplaying muted videos" Seems the memory leak has already been fixed somewhere. Relanding this CL. BUG= 617681 , 640195 TBR=mlamouri@chromium.org,isherman@chromium.org Review-Url: https://codereview.chromium.org/2331893003 Cr-Commit-Position: refs/heads/master@{#418208} [modify] https://crrev.com/d791630a5f638c81b21284a7a8a22778c315cdde/third_party/WebKit/LayoutTests/media/video-autoplay-experiment-modes-expected.txt [modify] https://crrev.com/d791630a5f638c81b21284a7a8a22778c315cdde/third_party/WebKit/Source/core/html/AutoplayUmaHelper.cpp [modify] https://crrev.com/d791630a5f638c81b21284a7a8a22778c315cdde/third_party/WebKit/Source/core/html/AutoplayUmaHelper.h [modify] https://crrev.com/d791630a5f638c81b21284a7a8a22778c315cdde/tools/metrics/histograms/histograms.xml
,
Sep 14 2016
It sounds like this is fixed. Somehow.
,
Oct 27 2016
|
||||
►
Sign in to add a comment |
||||
Comment 1 by zqzh...@chromium.org
, Aug 23 2016