Closed Bug 1336358 Opened 3 years ago Closed 3 years ago

Re-enable RemoteDataDecoder

Categories

(Core :: Audio/Video: Playback, defect)

Unspecified
Android
defect
Not set

Tracking

()

RESOLVED FIXED
mozilla54
Tracking Status
firefox54 --- fixed

People

(Reporter: jya, Assigned: jya)

References

Details

Attachments

(5 files, 3 obsolete files)

In bug 1319987, we disabled the RemoteDataDecoder for intermittent failure.

There appears to be data races occurring causing either the DrainComplete or InputExhausted callbacks to never be called.

This bug aim to track what's going on and re-enable it
The attached patch print some logs on the adb log thingy.

here is the output for the dom/media/mediasource/test/test_EndedEvent.html

02-05 22:08:47.592 12527 13056 I MFRDataDecoder: HandledDemuxedSample: supportRecycling=0 NeedDraining
02-05 22:08:47.592 12527 13056 I MFRDataDecoder: MFR::DrainDecoder
02-05 22:08:47.592 12527 13056 I MFRDataDecoder: MFR::DrainDecoder nothing to drain
02-05 22:08:47.592 12527 13056 I RemoteDataDecoder: Shutdown started
02-05 22:08:47.724 12527 13057 I MFRDataDecoder: Start Decode Video dts:3600000 pts:3600000
02-05 22:08:47.724 12527 13057 I RemoteDataDecoder: Decode started: dts:3600000 pts:3600000
02-05 22:08:47.740 12527 13091 E GeckoRemoteCodecProxy: onInputExhausted mEndOfInput=false
02-05 22:08:47.741 12527 13058 I RemoteDataDecoder: InputExhausted
02-05 22:08:47.747 12527 13057 I MFRDataDecoder: Start Decode Video dts:3633000 pts:3633000
02-05 22:08:47.747 12527 13057 I RemoteDataDecoder: Decode started: dts:3633000 pts:3633000
02-05 22:08:47.757 12527 12540 E GeckoRemoteCodecProxy: onInputExhausted mEndOfInput=false
02-05 22:08:47.757 12527 13108 I RemoteDataDecoder: InputExhausted
02-05 22:08:47.757 12527 13057 I MFRDataDecoder: Start Decode Video dts:3667000 pts:3667000
02-05 22:08:47.757 12527 13057 I RemoteDataDecoder: Decode started: dts:3667000 pts:3667000
02-05 22:08:47.759 12527 12541 E GeckoRemoteCodecProxy: onInputExhausted mEndOfInput=false
02-05 22:08:47.760 12527 13108 I RemoteDataDecoder: InputExhausted
02-05 22:08:47.760 12527 13057 I MFRDataDecoder: Start Decode Video dts:3700000 pts:3700000
02-05 22:08:47.760 12527 13057 I RemoteDataDecoder: Decode started: dts:3700000 pts:3700000
02-05 22:08:47.763 12527 13091 E GeckoRemoteCodecProxy: onInputExhausted mEndOfInput=false
02-05 22:08:47.763 12527 13108 I RemoteDataDecoder: InputExhausted
02-05 22:08:47.763 12527 13057 I MFRDataDecoder: Start Decode Video dts:3733000 pts:3733000
02-05 22:08:47.763 12527 13057 I RemoteDataDecoder: Decode started: dts:3733000 pts:3733000
02-05 22:08:47.829 12527 12540 E GeckoRemoteCodecProxy: onInputExhausted mEndOfInput=false
02-05 22:08:47.829 12527 13108 I RemoteDataDecoder: InputExhausted
02-05 22:08:47.830 12527 13057 I MFRDataDecoder: Start Decode Video dts:3767000 pts:3767000
02-05 22:08:47.830 12527 13057 I RemoteDataDecoder: Decode started: dts:3767000 pts:3767000
02-05 22:08:47.838 12527 12540 E GeckoRemoteCodecProxy: onInputExhausted mEndOfInput=false
02-05 22:08:47.839 12527 13108 I RemoteDataDecoder: InputExhausted
02-05 22:08:47.839 12527 13055 I MFRDataDecoder: Start Decode Video dts:3800000 pts:3800000
02-05 22:08:47.839 12527 13055 I RemoteDataDecoder: Decode started: dts:3800000 pts:3800000
02-05 22:08:47.841 12527 13091 E GeckoRemoteCodecProxy: onInputExhausted mEndOfInput=false
02-05 22:08:47.842 12527 13108 I RemoteDataDecoder: InputExhausted
02-05 22:08:47.842 12527 13056 I MFRDataDecoder: Start Decode Video dts:3833000 pts:3833000
02-05 22:08:47.842 12527 13056 I RemoteDataDecoder: Decode started: dts:3833000 pts:3833000
02-05 22:08:47.848 12527 12541 E GeckoRemoteCodecProxy: onInputExhausted mEndOfInput=false
02-05 22:08:47.848 12527 13108 I RemoteDataDecoder: InputExhausted
02-05 22:08:47.848 12527 13054 I MFRDataDecoder: Start Decode Video dts:3867000 pts:3867000
02-05 22:08:47.848 12527 13054 I RemoteDataDecoder: Decode started: dts:3867000 pts:3867000
02-05 22:08:47.853 12527 13091 I RemoteDataDecoder: HandleOutputFormatChanged
02-05 22:08:47.854 12527 12540 E GeckoRemoteCodecProxy: onInputExhausted mEndOfInput=false
02-05 22:08:47.854 12527 13108 I RemoteDataDecoder: InputExhausted
02-05 22:08:47.855 12527 13057 I MFRDataDecoder: Start Decode Video dts:3900000 pts:3900000
02-05 22:08:47.855 12527 13057 I RemoteDataDecoder: Decode started: dts:3900000 pts:3900000
02-05 22:08:47.858 12527 12541 E GeckoRemoteCodecProxy: onOutput sample={ buffer=org.mozilla.gecko.media.Sample$ArrayBuffer@df6fceb, info={ offset=0, size=8, pts=3600000, flags=1 } }
02-05 22:08:47.858 12527 12541 I RemoteDataDecoder: HandleOutput: pts:3600000 flags:1 size:8
02-05 22:08:47.858 12527 13108 I RemoteDataDecoder: Output
02-05 22:08:47.859 12527 12541 E GeckoRemoteCodecProxy: onInputExhausted mEndOfInput=false
02-05 22:08:47.860 12527 13058 I RemoteDataDecoder: InputExhausted
02-05 22:08:47.860 12527 13057 I MFRDataDecoder: Start Decode Video dts:3933000 pts:3933000
02-05 22:08:47.860 12527 13057 I RemoteDataDecoder: Decode started: dts:3933000 pts:3933000
02-05 22:08:47.861 12527 12540 E GeckoRemoteCodecProxy: onOutput sample={ buffer=org.mozilla.gecko.media.Sample$ArrayBuffer@bfb7a48, info={ offset=0, size=8, pts=3633000, flags=0 } }
02-05 22:08:47.861 12527 12540 I RemoteDataDecoder: HandleOutput: pts:3633000 flags:0 size:8
02-05 22:08:47.863 12527 13108 I RemoteDataDecoder: Output
02-05 22:08:47.872 12527 13091 E GeckoRemoteCodecProxy: onOutput sample={ buffer=org.mozilla.gecko.media.Sample$ArrayBuffer@50530e1, info={ offset=0, size=8, pts=3667000, flags=0 } }
02-05 22:08:47.872 12527 13091 I RemoteDataDecoder: HandleOutput: pts:3667000 flags:0 size:8
02-05 22:08:47.872 12527 13108 I RemoteDataDecoder: Output
02-05 22:08:47.884 12527 12541 E GeckoRemoteCodecProxy: onOutput sample={ buffer=org.mozilla.gecko.media.Sample$ArrayBuffer@7208e06, info={ offset=0, size=8, pts=3700000, flags=0 } }
02-05 22:08:47.884 12527 12541 I RemoteDataDecoder: HandleOutput: pts:3700000 flags:0 size:8
02-05 22:08:47.885 12527 13058 I RemoteDataDecoder: Output
02-05 22:08:47.885 12527 12541 E GeckoRemoteCodecProxy: onOutput sample={ buffer=org.mozilla.gecko.media.Sample$ArrayBuffer@2c67cc7, info={ offset=0, size=8, pts=3733000, flags=0 } }
02-05 22:08:47.885 12527 12541 I RemoteDataDecoder: HandleOutput: pts:3733000 flags:0 size:8
02-05 22:08:47.886 12527 13108 I RemoteDataDecoder: Output
02-05 22:08:47.897 12527 12540 E GeckoRemoteCodecProxy: onOutput sample={ buffer=org.mozilla.gecko.media.Sample$ArrayBuffer@171f2f4, info={ offset=0, size=8, pts=3767000, flags=0 } }
02-05 22:08:47.897 12527 12540 I RemoteDataDecoder: HandleOutput: pts:3767000 flags:0 size:8
02-05 22:08:47.897 12527 13058 I RemoteDataDecoder: Output
02-05 22:13:46.394 12527 13646 I RemoteDataDecoder: Flush started
02-05 22:13:46.421 12527 13647 I RemoteDataDecoder: Shutdown started
02-05 22:13:46.422 12527 13649 W GeckoRemoteCodecProxy: release codec when 5 output buffers unhandled

In this log we can see that even afted a call to CodecProxy::RemoteDataDecoder::Input was called, no onInputExhausted came, even though onOutput was called.
So here the test timedout because the MFR won't use the MediaDataDecoder until the decode promise got resolved.

Here is the log where, all onnputExhausted were called, but after draining no sample with BUFFER_FLAG_END_OF_STREAM flag set was ever returned.

jyavenard@jyaaeroubuntu:~/Work/android-studio$ adb logcat -v threadtime  | grep '\(DataDecoder\|GeckoRemoteCodecProxy\)'
02-06 09:05:33.570  4503  4774 I MFRDataDecoder: HandledDemuxedSample: supportRecycling=0 NeedDraining
02-06 09:05:33.570  4503  4774 I MFRDataDecoder: MFR::DrainDecoder
02-06 09:05:33.570  4503  4774 I MFRDataDecoder: MFR::DrainDecoder nothing to drain
02-06 09:05:33.570  4503  4774 I MediaCodecDataDecoder: Shutdown Started
02-06 09:05:33.598  4503  4774 I MediaCodecDataDecoder: Shutdown Started
02-06 09:05:33.641  4503  4774 I MFRDataDecoder: Start Decode Video dts:3600000 pts:3600000
02-06 09:05:33.641  4503  4774 I MediaCodecDataDecoder: Decode Started
02-06 09:05:33.653  4503  4796 I MediaCodecDataDecoder: WaitForInput: InputExhausted
02-06 09:05:33.653  4503  4774 I MFRDataDecoder: Start Decode Video dts:3633000 pts:3633000
02-06 09:05:33.653  4503  4774 I MediaCodecDataDecoder: Decode Started
02-06 09:05:33.665  4503  4796 I MediaCodecDataDecoder: WaitForInput: InputExhausted
02-06 09:05:33.665  4503  4770 I MFRDataDecoder: Start Decode Video dts:3667000 pts:3667000
02-06 09:05:33.665  4503  4770 I MediaCodecDataDecoder: Decode Started
02-06 09:05:33.674  4503  4796 I MediaCodecDataDecoder: WaitForInput: InputExhausted
02-06 09:05:33.674  4503  4776 I MFRDataDecoder: Start Decode Video dts:3700000 pts:3700000
02-06 09:05:33.674  4503  4776 I MediaCodecDataDecoder: Decode Started
02-06 09:05:33.677  4503  4796 I MediaCodecDataDecoder: WaitForInput: InputExhausted
02-06 09:05:33.678  4503  4774 I MFRDataDecoder: Start Decode Video dts:3733000 pts:3733000
02-06 09:05:33.678  4503  4774 I MediaCodecDataDecoder: Decode Started
02-06 09:05:33.685  4503  4796 I MediaCodecDataDecoder: WaitForInput: InputExhausted
02-06 09:05:33.686  4503  4774 I MFRDataDecoder: Start Decode Video dts:3767000 pts:3767000
02-06 09:05:33.686  4503  4774 I MediaCodecDataDecoder: Decode Started
02-06 09:05:33.688  4503  4796 I MediaCodecDataDecoder: WaitForInput: InputExhausted
02-06 09:05:33.689  4503  4776 I MFRDataDecoder: Start Decode Video dts:3800000 pts:3800000
02-06 09:05:33.689  4503  4776 I MediaCodecDataDecoder: Decode Started
02-06 09:05:33.695  4503  4796 I MediaCodecDataDecoder: WaitForInput: InputExhausted
02-06 09:05:33.696  4503  4771 I MFRDataDecoder: Start Decode Video dts:3833000 pts:3833000
02-06 09:05:33.696  4503  4771 I MediaCodecDataDecoder: Decode Started
02-06 09:05:33.701  4503  4796 I MediaCodecDataDecoder: WaitForInput: InputExhausted
02-06 09:05:33.701  4503  4774 I MFRDataDecoder: Start Decode Video dts:3867000 pts:3867000
02-06 09:05:33.701  4503  4774 I MediaCodecDataDecoder: Decode Started
02-06 09:05:33.706  4503  4796 I MediaCodecDataDecoder: WaitForInput: InputExhausted
02-06 09:05:33.707  4503  4776 I MFRDataDecoder: Start Decode Video dts:3900000 pts:3900000
02-06 09:05:33.707  4503  4776 I MediaCodecDataDecoder: Decode Started
02-06 09:05:33.713  4503  4796 I MediaCodecDataDecoder: WaitForInput: InputExhausted
02-06 09:05:33.714  4503  4776 I MFRDataDecoder: Start Decode Video dts:3933000 pts:3933000
02-06 09:05:33.714  4503  4776 I MediaCodecDataDecoder: Decode Started
02-06 09:05:33.722  4503  4796 I MediaCodecDataDecoder: WaitForInput: InputExhausted
02-06 09:05:33.723  4503  4771 I MFRDataDecoder: Start Decode Video dts:3967000 pts:3967000
02-06 09:05:33.723  4503  4771 I MediaCodecDataDecoder: Decode Started
02-06 09:05:33.727  4503  4796 I MediaCodecDataDecoder: WaitForInput: InputExhausted
02-06 09:05:33.728  4503  4774 I MFRDataDecoder: OnDemuxFailed EOS need draining
02-06 09:05:33.728  4503  4774 I MFRDataDecoder: MFR::DrainDecoder
02-06 09:05:33.728  4503  4774 I MFRDataDecoder: MFR::DrainDecoder start
02-06 09:05:33.728  4503  4774 I MediaCodecDataDecoder: Drain Started
02-06 09:05:33.748  4503  4796 I MediaCodecDataDecoder: HandleEOS: DrainComplete
02-06 09:05:33.748  4503  4796 I MediaCodecDataDecoder: WaitForInput: InputExhausted
02-06 09:05:33.751  4503  4776 I MediaCodecDataDecoder: Flush Started
02-06 09:05:33.757  4503  4796 I MediaCodecDataDecoder: WaitForInput: InputExhausted
02-06 09:05:33.758  4503  4776 I MediaCodecDataDecoder: Shutdown Started
02-06 09:05:33.794  4503  4776 I MediaCodecDataDecoder: Shutdown Started
02-06 09:19:24.950  5852  6646 I MFRDataDecoder: HandledDemuxedSample: supportRecycling=0 NeedDraining
02-06 09:19:24.950  5852  6646 I MFRDataDecoder: MFR::DrainDecoder
02-06 09:19:24.950  5852  6646 I MFRDataDecoder: MFR::DrainDecoder nothing to drain
02-06 09:19:24.950  5852  6646 I RemoteDataDecoder: Shutdown started
02-06 09:19:25.054  5852  6646 I MFRDataDecoder: Start Decode Video dts:3600000 pts:3600000
02-06 09:19:25.054  5852  6646 I RemoteDataDecoder: Decode started: dts:3600000 pts:3600000
02-06 09:19:25.058  5852  5865 E GeckoRemoteCodecProxy: onInputExhausted mEndOfInput=false
02-06 09:19:25.060  5852  6650 I RemoteDataDecoder: InputExhausted
02-06 09:19:25.061  5852  6648 I MFRDataDecoder: Start Decode Video dts:3633000 pts:3633000
02-06 09:19:25.061  5852  6648 I RemoteDataDecoder: Decode started: dts:3633000 pts:3633000
02-06 09:19:25.112  5852  5866 E GeckoRemoteCodecProxy: onInputExhausted mEndOfInput=false
02-06 09:19:25.114  5852  6650 I RemoteDataDecoder: InputExhausted
02-06 09:19:25.115  5852  6649 I MFRDataDecoder: Start Decode Video dts:3667000 pts:3667000
02-06 09:19:25.115  5852  6649 I RemoteDataDecoder: Decode started: dts:3667000 pts:3667000
02-06 09:19:25.119  5852  5865 E GeckoRemoteCodecProxy: onInputExhausted mEndOfInput=false
02-06 09:19:25.120  5852  6650 I RemoteDataDecoder: InputExhausted
02-06 09:19:25.124  5852  6646 I MFRDataDecoder: Start Decode Video dts:3700000 pts:3700000
02-06 09:19:25.124  5852  6646 I RemoteDataDecoder: Decode started: dts:3700000 pts:3700000
02-06 09:19:25.131  5852  5865 E GeckoRemoteCodecProxy: onInputExhausted mEndOfInput=false
02-06 09:19:25.131  5852  6711 I RemoteDataDecoder: InputExhausted
02-06 09:19:25.132  5852  6648 I MFRDataDecoder: Start Decode Video dts:3733000 pts:3733000
02-06 09:19:25.132  5852  6648 I RemoteDataDecoder: Decode started: dts:3733000 pts:3733000
02-06 09:19:25.152  5852  5866 I RemoteDataDecoder: HandleOutputFormatChanged
02-06 09:19:25.152  5852  5865 E GeckoRemoteCodecProxy: onInputExhausted mEndOfInput=false
02-06 09:19:25.152  5852  6711 I RemoteDataDecoder: InputExhausted
02-06 09:19:25.153  5852  6647 I MFRDataDecoder: Start Decode Video dts:3767000 pts:3767000
02-06 09:19:25.153  5852  6647 I RemoteDataDecoder: Decode started: dts:3767000 pts:3767000
02-06 09:19:25.160  5852  5865 E GeckoRemoteCodecProxy: onInputExhausted mEndOfInput=false
02-06 09:19:25.160  5852  6711 I RemoteDataDecoder: InputExhausted
02-06 09:19:25.161  5852  6649 I MFRDataDecoder: Start Decode Video dts:3800000 pts:3800000
02-06 09:19:25.161  5852  6649 I RemoteDataDecoder: Decode started: dts:3800000 pts:3800000
02-06 09:19:25.163  5852  5865 E GeckoRemoteCodecProxy: onOutput sample={ buffer=org.mozilla.gecko.media.Sample$ArrayBuffer@6e9b273, info={ offset=0, size=8, pts=3600000, flags=1 } }
02-06 09:19:25.163  5852  5865 I RemoteDataDecoder: HandleOutput: pts:3600000 flags:1 size:8
02-06 09:19:25.163  5852  6711 I RemoteDataDecoder: Output
02-06 09:19:25.163  5852  6713 E GeckoRemoteCodecProxy: onInputExhausted mEndOfInput=false
02-06 09:19:25.164  5852  6650 I RemoteDataDecoder: InputExhausted
02-06 09:19:25.164  5852  6646 I MFRDataDecoder: Start Decode Video dts:3833000 pts:3833000
02-06 09:19:25.164  5852  6646 I RemoteDataDecoder: Decode started: dts:3833000 pts:3833000
02-06 09:19:25.167  5852  5866 E GeckoRemoteCodecProxy: onInputExhausted mEndOfInput=false
02-06 09:19:25.167  5852  6650 I RemoteDataDecoder: InputExhausted
02-06 09:19:25.168  5852  6647 I MFRDataDecoder: Start Decode Video dts:3867000 pts:3867000
02-06 09:19:25.168  5852  6647 I RemoteDataDecoder: Decode started: dts:3867000 pts:3867000
02-06 09:19:25.168  5852  5865 E GeckoRemoteCodecProxy: onOutput sample={ buffer=org.mozilla.gecko.media.Sample$ArrayBuffer@dd23530, info={ offset=0, size=8, pts=3633000, flags=0 } }
02-06 09:19:25.168  5852  5865 I RemoteDataDecoder: HandleOutput: pts:3633000 flags:0 size:8
02-06 09:19:25.169  5852  6711 I RemoteDataDecoder: Output
02-06 09:19:25.169  5852  5866 E GeckoRemoteCodecProxy: onOutput sample={ buffer=org.mozilla.gecko.media.Sample$ArrayBuffer@1d575a9, info={ offset=0, size=8, pts=3667000, flags=0 } }
02-06 09:19:25.169  5852  5866 I RemoteDataDecoder: HandleOutput: pts:3667000 flags:0 size:8
02-06 09:19:25.169  5852  6711 I RemoteDataDecoder: Output
02-06 09:19:25.174  5852  5865 E GeckoRemoteCodecProxy: onInputExhausted mEndOfInput=false
02-06 09:19:25.174  5852  6650 I RemoteDataDecoder: InputExhausted
02-06 09:19:25.175  5852  6646 I MFRDataDecoder: Start Decode Video dts:3900000 pts:3900000
02-06 09:19:25.175  5852  6646 I RemoteDataDecoder: Decode started: dts:3900000 pts:3900000
02-06 09:19:25.176  5852  6713 E GeckoRemoteCodecProxy: onOutput sample={ buffer=org.mozilla.gecko.media.Sample$ArrayBuffer@b72c72e, info={ offset=0, size=8, pts=3700000, flags=0 } }
02-06 09:19:25.176  5852  6713 I RemoteDataDecoder: HandleOutput: pts:3700000 flags:0 size:8
02-06 09:19:25.176  5852  6711 I RemoteDataDecoder: Output
02-06 09:19:25.180  5852  5865 E GeckoRemoteCodecProxy: onInputExhausted mEndOfInput=false
02-06 09:19:25.180  5852  6711 I RemoteDataDecoder: InputExhausted
02-06 09:19:25.181  5852  6713 E GeckoRemoteCodecProxy: onOutput sample={ buffer=org.mozilla.gecko.media.Sample$ArrayBuffer@42302cf, info={ offset=0, size=8, pts=3733000, flags=0 } }
02-06 09:19:25.181  5852  6713 I RemoteDataDecoder: HandleOutput: pts:3733000 flags:0 size:8
02-06 09:19:25.181  5852  6650 I RemoteDataDecoder: Output
02-06 09:19:25.181  5852  6647 I MFRDataDecoder: Start Decode Video dts:3933000 pts:3933000
02-06 09:19:25.181  5852  6647 I RemoteDataDecoder: Decode started: dts:3933000 pts:3933000
02-06 09:19:25.182  5852  5866 E GeckoRemoteCodecProxy: onOutput sample={ buffer=org.mozilla.gecko.media.Sample$ArrayBuffer@8dd745c, info={ offset=0, size=8, pts=3767000, flags=0 } }
02-06 09:19:25.182  5852  5866 I RemoteDataDecoder: HandleOutput: pts:3767000 flags:0 size:8
02-06 09:19:25.182  5852  6650 I RemoteDataDecoder: Output
02-06 09:19:25.187  5852  6713 E GeckoRemoteCodecProxy: onInputExhausted mEndOfInput=false
02-06 09:19:25.187  5852  6711 I RemoteDataDecoder: InputExhausted
02-06 09:19:25.188  5852  6647 I MFRDataDecoder: Start Decode Video dts:3967000 pts:3967000
02-06 09:19:25.188  5852  6647 I RemoteDataDecoder: Decode started: dts:3967000 pts:3967000
02-06 09:19:25.189  5852  5866 E GeckoRemoteCodecProxy: onOutput sample={ buffer=org.mozilla.gecko.media.Sample$ArrayBuffer@ae6c365, info={ offset=0, size=8, pts=3800000, flags=0 } }
02-06 09:19:25.189  5852  5866 I RemoteDataDecoder: HandleOutput: pts:3800000 flags:0 size:8
02-06 09:19:25.190  5852  6650 I RemoteDataDecoder: Output
02-06 09:19:25.194  5852  5865 E GeckoRemoteCodecProxy: onInputExhausted mEndOfInput=false
02-06 09:19:25.194  5852  6650 I RemoteDataDecoder: InputExhausted
02-06 09:19:25.195  5852  6649 I MFRDataDecoder: OnDemuxFailed EOS need draining
02-06 09:19:25.195  5852  6649 I MFRDataDecoder: MFR::DrainDecoder
02-06 09:19:25.195  5852  6649 I MFRDataDecoder: MFR::DrainDecoder start
02-06 09:19:25.195  5852  6649 I RemoteDataDecoder: Drain started
02-06 09:19:25.196  5852  6713 E GeckoRemoteCodecProxy: onOutput sample={ buffer=org.mozilla.gecko.media.Sample$ArrayBuffer@8e8283a, info={ offset=0, size=8, pts=3833000, flags=0 } }
02-06 09:19:25.196  5852  6713 I RemoteDataDecoder: HandleOutput: pts:3833000 flags:0 size:8
02-06 09:19:25.196  5852  6650 I RemoteDataDecoder: Output
02-06 09:19:25.202  5852  5865 E GeckoRemoteCodecProxy: onOutput sample={ buffer=org.mozilla.gecko.media.Sample$ArrayBuffer@df6fceb, info={ offset=0, size=8, pts=3867000, flags=0 } }
02-06 09:19:25.202  5852  5865 I RemoteDataDecoder: HandleOutput: pts:3867000 flags:0 size:8
02-06 09:19:25.202  5852  6711 I RemoteDataDecoder: Output
02-06 09:19:25.207  5852  6713 E GeckoRemoteCodecProxy: onOutput sample={ buffer=org.mozilla.gecko.media.Sample$ArrayBuffer@bfb7a48, info={ offset=0, size=8, pts=3900000, flags=0 } }
02-06 09:19:25.207  5852  6713 I RemoteDataDecoder: HandleOutput: pts:3900000 flags:0 size:8
02-06 09:19:25.207  5852  6650 I RemoteDataDecoder: Output
02-06 09:19:25.213  5852  5866 E GeckoRemoteCodecProxy: onOutput sample={ buffer=org.mozilla.gecko.media.Sample$ArrayBuffer@50530e1, info={ offset=0, size=8, pts=3933000, flags=0 } }
02-06 09:19:25.213  5852  5866 I RemoteDataDecoder: HandleOutput: pts:3933000 flags:0 size:8
02-06 09:19:25.213  5852  6711 I RemoteDataDecoder: Output
Attached file debug.log (obsolete) —
Attached patch debug.patchSplinter Review
Attachment #8833888 - Attachment is obsolete: true
Depends on: 1336947
The "no EOS sample after draining" issue happened because all output buffers were hold in mDecodedData and there was none left for MediaCodec to use. I made a patch based on your suggestion in bug 1319987 comment 113 (use duration queue size to resolve drain promise) and run test_EndedEvent.html 1000 times without failure. Will upload it for review later.
So far haven't met the other issue with the patch applied. Will keep monitoring.
I'll take the solution proposed in bug 1336947 instead, which will call Drain multiple times instead.

While it may work for now in this particular case, there's no guarantee that all drained frames can be returned due to the lack of free buffer.
That would depend on the phone I guess.
Cool. I'll cancel the review then. :)
Attachment #8834335 - Attachment is obsolete: true
Attachment #8834335 - Flags: review?(jyavenard)
Attachment #8834336 - Attachment is obsolete: true
Attachment #8834336 - Flags: review?(jyavenard)
Attachment #8834632 - Flags: review?(jolin)
Attachment #8834633 - Flags: review?(jolin)
Comment on attachment 8834633 [details]
Bug 1336358: P2. Drain Android's RemoteDataDecoder one frame at a time.

https://reviewboard.mozilla.org/r/110496/#review111852

::: dom/media/platforms/android/RemoteDataDecoder.cpp:533
(Diff revision 4)
>    return InvokeAsync(mTaskQueue, __func__, [self, this]() {
> +    RefPtr<DecodePromise> p = mDrainPromise.Ensure(__func__);
> +    if (mDrained) {
> +      // There's no operation to perform other than returning any already
> +      // decoded data.
> +      InputExhausted();

Now that `InputExhausted` doesn't request input at all, perhaps rename it to `ReturnDecodedData`?
Attachment #8834633 - Flags: review?(jolin) → review+
Comment on attachment 8834632 [details]
Bug 1336358: P1. Revert "Bug 1319987: P12. Disable RemoteDataDecoder.".

https://reviewboard.mozilla.org/r/110494/#review111854
Attachment #8834632 - Flags: review?(jolin) → review+
Pushed by jyavenard@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/1ffc124c5fc1
P1. Revert "Bug 1319987: P12. Disable RemoteDataDecoder.". r=jolin
https://hg.mozilla.org/integration/autoland/rev/c474e07f9ad8
P2. Drain Android's RemoteDataDecoder one frame at a time. r=jolin
This also fails the Android 4.3 debug mda dom/media/webaudio/test/test_mediaElementAudioSourceNodeVideo.html with: Test timed out.

https://treeherder.mozilla.org/logviewer.html#?job_id=75627866&repo=autoland
Comment on attachment 8836914 [details]
Bug 1336358: P3. Fix incorrect arguments in DurationMap.

https://reviewboard.mozilla.org/r/112230/#review113568

Cannot believe that it was not caught in my local tests! :$
Thanks a lot for saving my ***!
Attachment #8836914 - Flags: review?(jolin) → review+
Comment on attachment 8836914 [details]
Bug 1336358: P3. Fix incorrect arguments in DurationMap.

https://reviewboard.mozilla.org/r/112230/#review113568

The RemoteDataDecoder is disabled in central. Easy to miss, and I didnt see in the firet review either
Depends on: 1339449
Comment on attachment 8837163 [details]
Bug 1336358: P4. Disable some noisy tests on Android.

https://reviewboard.mozilla.org/r/112386/#review113758
Attachment #8837163 - Flags: review?(padenot) → review+
Pushed by jyavenard@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/e1505ae7e25f
P1. Revert "Bug 1319987: P12. Disable RemoteDataDecoder.". r=jolin
https://hg.mozilla.org/integration/autoland/rev/fb0a390994d7
P2. Drain Android's RemoteDataDecoder one frame at a time. r=jolin
https://hg.mozilla.org/integration/autoland/rev/5dcc211ab7fe
P3. Fix incorrect arguments in DurationMap. r=jolin
https://hg.mozilla.org/integration/autoland/rev/d59dd0dca619
P4. Disable some noisy tests on Android. r=padenot
The other commit in the push also made it to m-c, the bug marking tool got thrown off by the word "revert" so skipped over it.
https://hg.mozilla.org/mozilla-central/rev/e1505ae7e25f
Flags: needinfo?(jyavenard)
Assignee: nobody → jyavenard
You need to log in before you can comment on or make changes to this bug.