|
|
Chromium Code Reviews|
Created:
4 years, 6 months ago by DaleCurtis Modified:
4 years, 6 months ago CC:
chromium-reviews, feature-media-reviews_chromium.org Base URL:
https://chromium.googlesource.com/chromium/src.git@master Target Ref:
refs/pending/heads/master Project:
chromium Visibility:
Public. |
DescriptionFreeze media time and audio rendering when the system suspends.
Allows us to avoid unexpected differences between what the audio
renderer and video renderer think the current time is. Causes the
wall clock time calculations to return false for "is time moving."
With this information the video renderer (and other callers) can
accurately act upon frozen moments and not expire frames due to
a difference of opinion on what the current time is (audio only
updates its base every Render() call).
BUG=620478
TEST=new unittests
Committed: https://crrev.com/e3fb958aa538c5b146afea7f9df498a579d3e5a4
Cr-Commit-Position: refs/heads/master@{#400454}
Patch Set 1 #Patch Set 2 : Add observer on |task_runner_|. #
Total comments: 1
Messages
Total messages: 40 (16 generated)
Description was changed from ========== Freeze time when the system suspends. Allows us to avoid unexpected differences between what the audio renderer and video renderer think the current time is. Causes the wall clock time calculations to return false for "is time moving." With this information the video renderer (and other callers) can accurately act upon frozen moments and not expire frames due to a difference of opinion on what the current time is (audio only updates its base every Render() call). BUG=620478 TEST=new unittests ========== to ========== Freeze media time and audio rendering when the system suspends. Allows us to avoid unexpected differences between what the audio renderer and video renderer think the current time is. Causes the wall clock time calculations to return false for "is time moving." With this information the video renderer (and other callers) can accurately act upon frozen moments and not expire frames due to a difference of opinion on what the current time is (audio only updates its base every Render() call). BUG=620478 TEST=new unittests ==========
Patchset #1 (id:1) has been deleted
dalecurtis@chromium.org changed reviewers: + xhwang@chromium.org
dalecurtis@chromium.org changed reviewers: + sandersd@chromium.org
xhwang@ is out for GoogleServe, so +sandersd@ for review.
lgtm
The CQ bit was checked by dalecurtis@chromium.org
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/2072843002/20001
The CQ bit was unchecked by commit-bot@chromium.org
Try jobs failed on following builders: linux_chromium_rel_ng on tryserver.chromium.linux (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.linux/builders/linux_chromium_...)
The CQ bit was checked by dalecurtis@chromium.org
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/2072843002/20001
nice, LGTM I am gonna test this on Netflix as well.
Hmm, looks like this is breaking WebGL conformance tests somehow... will take a closer look.
dalecurtis@chromium.org changed reviewers: + kbr@chromium.org
Hmm, I can't repro any failures locally with the conformance tests on my mac. +kbr: are there any known issues with the GPU bots and suspend/resume behavior? This CL suspends the audio/video clock when the power observer indicates that the system is suspending.
On 2016/06/16 23:40:38, DaleCurtis wrote: > Hmm, I can't repro any failures locally with the conformance tests on my mac. > > +kbr: are there any known issues with the GPU bots and suspend/resume behavior? > This CL suspends the audio/video clock when the power observer indicates that > the system is suspending. Actually, how about video-only? Do we need to do something similar in WallClockTimeSource?
I don't think video-only can suffer from the same problems, but I'll be sure to test before landing.
On 2016/06/16 23:40:38, DaleCurtis wrote: > Hmm, I can't repro any failures locally with the conformance tests on my mac. > > +kbr: are there any known issues with the GPU bots and suspend/resume behavior? > This CL suspends the audio/video clock when the power observer indicates that > the system is suspending. No, the GPU bots shouldn't suspend or resume. Did you look at the stack trace in the log? It looks like a basic logic bug. [644:1299:0616/151708:FATAL:observer_list.h(164)] Check failed: false. Observers can only be added once! 0 Chromium Framework 0x000000010cc15ce3 _ZN4base5debug10StackTraceC1Ev + 19 1 Chromium Framework 0x000000010cc347c7 _ZN7logging10LogMessageD2Ev + 71 2 Chromium Framework 0x000000010cc5c309 _ZN4base16ObserverListBaseINS_13PowerObserverEE11AddObserverEPS1_ + 217 3 Chromium Framework 0x000000010cc5b6b2 _ZN4base22ObserverListThreadSafeINS_13PowerObserverEE11AddObserverEPS1_ + 354 4 Chromium Framework 0x000000010df69983 _ZN5media17AudioRendererImplC2ERK13scoped_refptrIN4base22SingleThreadTaskRunnerEEPNS_17AudioRendererSinkE12ScopedVectorINS_12AudioDecoderEERKS1_INS_8MediaLogEE + 963 5 Chromium Framework 0x000000010df6f5e0 _ZN5media22DefaultRendererFactory14CreateRendererERK13scoped_refptrIN4base22SingleThreadTaskRunnerEERKS1_INS2_10TaskRunnerEEPNS_17AudioRendererSinkEPNS_17VideoRendererSinkERKNS2_8CallbackIFvRKNSF_IFviELNS2_8internal8CopyModeE1EEEELSI_1EEE + 176 6 Chromium Framework 0x0000000111ed2336 _ZN5media18WebMediaPlayerImpl14CreateRendererEv + 86 7 Chromium Framework 0x0000000111ed945a _ZN4base8internal7InvokerINS_13IndexSequenceIJLm0EEEENS0_9BindStateINS0_15RunnableAdapterIMN5media18WebMediaPlayerImplEFNSt3__110unique_ptrINS6_8RendererENS8_14default_deleteISA_EEEEvEEEFSD_PS7_EJNS0_17UnretainedWrapperIS7_EEEEELb0EFSD_vEE3RunEPNS0_13BindStateBaseE + 42 8 Chromium Framework 0x000000010df39f6d _ZN5media18PipelineController5StartEPNS_7DemuxerEPNS_8Pipeline6ClientEbb + 301 9 Chromium Framework 0x0000000111ed3f62 _ZN5media18WebMediaPlayerImpl13StartPipelineEv + 1954 10 Chromium Framework 0x0000000111ed419b _ZN5media18WebMediaPlayerImpl21DataSourceInitializedEb + 219 11 Chromium Framework 0x000000010c8fbe8c _ZN4base8internal7InvokerINS_13IndexSequenceIJLm0EEEENS0_9BindStateINS_8CallbackIFvbELNS0_8CopyModeE1EEES6_JRbEEELb0EFvvEE3RunEPNS0_13BindStateBaseE + 28 12 Chromium Framework 0x000000010cc1620b _ZN4base5debug13TaskAnnotator7RunTaskEPKcRKNS_11PendingTaskE + 187 13 Chromium Framework 0x0000000111079aab _ZN9scheduler16TaskQueueManager24ProcessTaskFromWorkQueueEPNS_8internal9WorkQueueEPNS1_13TaskQueueImpl4TaskE + 811 14 Chromium Framework 0x00000001110786bb _ZN9scheduler16TaskQueueManager6DoWorkEN4base9TimeTicksEb + 507 15 Chromium Framework 0x000000010cc1620b _ZN4base5debug13TaskAnnotator7RunTaskEPKcRKNS_11PendingTaskE + 187 16 Chromium Framework 0x000000010cc453dc _ZN4base11MessageLoop7RunTaskERKNS_11PendingTaskE + 572 17 Chromium Framework 0x000000010cc456dc _ZN4base11MessageLoop21DeferOrRunPendingTaskERKNS_11PendingTaskE + 44 18 Chromium Framework 0x000000010cc45a2b _ZN4base11MessageLoop6DoWorkEv + 299 19 Chromium Framework 0x000000010cc07943 _ZN4base24MessagePumpCFRunLoopBase7RunWorkEv + 51 20 Chromium Framework 0x000000010cc359fa _ZN4base3mac15CallWithEHFrameEU13block_pointerFvvE + 10 21 Chromium Framework 0x000000010cc072f4 _ZN4base24MessagePumpCFRunLoopBase13RunWorkSourceEPv + 68 22 CoreFoundation 0x00007fff97f90a01 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17 23 CoreFoundation 0x00007fff97f82b8d __CFRunLoopDoSources0 + 269 24 CoreFoundation 0x00007fff97f821bf __CFRunLoopRun + 927 25 CoreFoundation 0x00007fff97f81bd8 CFRunLoopRunSpecific + 296 26 Foundation 0x00007fff93daeb29 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 278 27 Chromium Framework 0x000000010cc0801e _ZN4base20MessagePumpNSRunLoop5DoRunEPNS_11MessagePump8DelegateE + 126 28 Chromium Framework 0x000000010cc0777f _ZN4base24MessagePumpCFRunLoopBase3RunEPNS_11MessagePump8DelegateE + 127 29 Chromium Framework 0x000000010cc44f37 _ZN4base11MessageLoop10RunHandlerEv + 215 30 Chromium Framework 0x000000010cc65333 _ZN4base7RunLoop3RunEv + 51 31 Chromium Framework 0x000000010cc440e7 _ZN4base11MessageLoop3RunEv + 103 32 Chromium Framework 0x0000000111d8cd0a _ZN7content12RendererMainERKNS_18MainFunctionParamsE + 730 33 Chromium Framework 0x000000010cbbf3e2 _ZN7content21ContentMainRunnerImpl3RunEv + 802 34 Chromium Framework 0x000000010cbbe426 _ZN7content11ContentMainERKNS_17ContentMainParamsE + 54 35 Chromium Framework 0x000000010c59b90a ChromeMain + 58 36 Chromium Helper 0x000000010c534d62 main + 530 37 Chromium Helper 0x000000010c534b44 start + 52
The CQ bit was unchecked by commit-bot@chromium.org
Try jobs failed on following builders: mac_chromium_rel_ng on tryserver.chromium.mac (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.mac/builders/mac_chromium_rel_...)
No, I didn't see those in the logs, thanks for pointing them out. Even after you've pointed that error out, I don't see how you found that in those massive logs... The error didn't seem listed around the test failures when I looked. How did you find it?
On 2016/06/17 00:13:35, DaleCurtis wrote:
> No, I didn't see those in the logs, thanks for pointing them out. Even after
> you've pointed that error out, I don't see how you found that in those massive
> logs... The error didn't seem listed around the test failures when I looked.
How
> did you find it?
I opened "stdio" for "webgl_conformance_tests on Intel GPU on Mac (with patch)
on Mac-10.10" and searched for one of the failing test names
("conformance_textures_video_tex_2d_rgba_rgba_unsigned_byte").
dalecurtis@chromium.org changed reviewers: - kbr@chromium.org
I did the same one with a different test, but didn't pull that crash up. Thanks in any case. Sorry for the noise. The crash is still a mystery though since we add/remove the observer in construction/destruction. It seems like the state of PowerMonitor::Get() must be changing...
dalecurtis@chromium.org changed reviewers: + kbr@chromium.org
Issue was adding the observer on the render thread while removing it on the media thread. The observer list used by the power observer indexes by thread id.
The CQ bit was checked by dalecurtis@chromium.org
The patchset sent to the CQ was uploaded after l-g-t-m from xhwang@chromium.org, sandersd@chromium.org Link to the patchset: https://codereview.chromium.org/2072843002/#ps40001 (title: "Add observer on |task_runner_|.")
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/2072843002/40001
The CQ bit was unchecked by commit-bot@chromium.org
Try jobs failed on following builders: chromeos_daisy_chromium_compile_only_ng on tryserver.chromium.linux (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.linux/builders/chromeos_daisy_...)
OOC, did you test the video-only case? https://chromiumcodereview.appspot.com/2072843002/diff/40001/media/renderers/... File media/renderers/audio_renderer_impl_unittest.cc (right): https://chromiumcodereview.appspot.com/2072843002/diff/40001/media/renderers/... media/renderers/audio_renderer_impl_unittest.cc:765: renderer_->OnSuspend(); Can you actually use TestPowerMonitorSource so we are closer to the real use case? e.g. https://cs.chromium.org/chromium/src/net/url_request/url_request_unittest.cc?...
Did you ever see the video only case hang? I could not reproduce issues. I don't think the test power source adds anything interesting it'll just proxy to our methods and we still need the null check for other tests using ari indirectly.
The CQ bit was checked by dalecurtis@chromium.org
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/2072843002/40001
Message was sent while issue was closed.
Committed patchset #2 (id:40001)
Message was sent while issue was closed.
Description was changed from ========== Freeze media time and audio rendering when the system suspends. Allows us to avoid unexpected differences between what the audio renderer and video renderer think the current time is. Causes the wall clock time calculations to return false for "is time moving." With this information the video renderer (and other callers) can accurately act upon frozen moments and not expire frames due to a difference of opinion on what the current time is (audio only updates its base every Render() call). BUG=620478 TEST=new unittests ========== to ========== Freeze media time and audio rendering when the system suspends. Allows us to avoid unexpected differences between what the audio renderer and video renderer think the current time is. Causes the wall clock time calculations to return false for "is time moving." With this information the video renderer (and other callers) can accurately act upon frozen moments and not expire frames due to a difference of opinion on what the current time is (audio only updates its base every Render() call). BUG=620478 TEST=new unittests Committed: https://crrev.com/e3fb958aa538c5b146afea7f9df498a579d3e5a4 Cr-Commit-Position: refs/heads/master@{#400454} ==========
Message was sent while issue was closed.
Patchset 2 (id:??) landed as https://crrev.com/e3fb958aa538c5b146afea7f9df498a579d3e5a4 Cr-Commit-Position: refs/heads/master@{#400454} |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
