Commit Graph

1369 Commits

Author SHA1 Message Date
alwu
2cc69ea212 Bug 1686696 - part2 : rework how does decoder handle owner's events when the logical position changes. r=bryce
Decoder needs to handle owner's events differently based on different situations, this patch makes the process clearer.

Differential Revision: https://phabricator.services.mozilla.com/D102674
2021-02-11 20:19:24 +00:00
alwu
8de222ed59 Bug 1686696 - part1 : store pending event runner instead of saving event name. r=bryce,mccr8
In this patch, we move all event runners to a separate file and implement an event blocker.

In order to allow us to do a special check for `timeupdate` event, we have to know that event is periodic or mandatory.

We have to save extra information for `timeupdate, however, current design for storing pending events is not flexible enough to achieve that.

Therefore, instead of storing the event name, we store the event runners which can all have different implementation and know when they should dispatch their own event.

Differential Revision: https://phabricator.services.mozilla.com/D102673
2021-02-11 20:19:23 +00:00
Bogdan Tara
f3776aebd8 Backed out 6 changesets (bug 1686696) for 1587248.html crashtest failures CLOSED TREE
Backed out changeset 690c6a094f8a (bug 1686696)
Backed out changeset 7f9d487945c3 (bug 1686696)
Backed out changeset 40358a758624 (bug 1686696)
Backed out changeset 36c696166033 (bug 1686696)
Backed out changeset ab149e8fc0d5 (bug 1686696)
Backed out changeset 8fce79f9bd65 (bug 1686696)
2021-02-11 06:29:47 +02:00
alwu
ed129ef725 Bug 1686696 - part5 : remove nsSyncSection. r=bryce
`nsSyncSection` is not related with media event, so that's not proper ot put it in `MediaElementEventRunners.h`.

In addition, that can simply be implemented by `NS_NewRunnableFunction` so we don't need `nsSyncSection` anymore.

Differential Revision: https://phabricator.services.mozilla.com/D104115
2021-02-11 03:45:30 +00:00
alwu
ac4e041d07 Bug 1686696 - part3 : enforce to only dispatch periodic timeupdate once within 250ms. r=bryce
Inplemented an event runner for `timeupdate` only, which would ensure that for periodic `timeupdate` it should be only dispatched once within 250ms.

Differential Revision: https://phabricator.services.mozilla.com/D102675
2021-02-11 03:45:30 +00:00
alwu
568391f075 Bug 1686696 - part2 : rework how does decoder handle owner's events when the logical position changes. r=bryce
Decoder needs to handle owner's events differently based on different situations, this patch makes the process clearer.

Differential Revision: https://phabricator.services.mozilla.com/D102674
2021-02-11 03:45:29 +00:00
alwu
a5b9c95ef7 Bug 1686696 - part1 : store pending event runner instead of saving event name. r=bryce,mccr8
In this patch, we move all event runners to a separate file and implement an event blocker.

In order to allow us to do a special check for `timeupdate` event, we have to know that event is periodic or mandatory.

We have to save extra information for `timeupdate, however, current design for storing pending events is not flexible enough to achieve that.

Therefore, instead of storing the event name, we store the event runners which can all have different implementation and know when they should dispatch their own event.

Differential Revision: https://phabricator.services.mozilla.com/D102673
2021-02-11 03:45:28 +00:00
alwu
828669890a Bug 1690416 - remove HTMLMediaElement::ReportCanPlayTelemetry(). r=bryce,Gijs,webidl,mccr8
The actual telemetry probes has been removed by this, so this function is no longer reporting any result and we can remove it.

[1] https://phabricator.services.mozilla.com/D37313

Differential Revision: https://phabricator.services.mozilla.com/D103846
2021-02-09 18:27:33 +00:00
Andreas Pehrson
43b06b20b1 Bug 1690976 - Don't reveal error details for CORS-cross-origin decoding errors. r=sstreich,bryce
Differential Revision: https://phabricator.services.mozilla.com/D104169
2021-02-08 11:43:36 +00:00
Bogdan Tara
96488cebeb Backed out 2 changesets (bug 1690976) for ES lint failure in test_decode_error_crossorigin.html CLOSED TREE
Backed out changeset ed0ab9078607 (bug 1690976)
Backed out changeset c6c868eaf915 (bug 1690976)
2021-02-08 13:34:59 +02:00
Andreas Pehrson
8edc2e0391 Bug 1690976 - Don't reveal error details for CORS-cross-origin decoding errors. r=sstreich,bryce
Differential Revision: https://phabricator.services.mozilla.com/D104169
2021-02-08 10:01:07 +00:00
Bogdan Tara
5302446b80 Backed out 2 changesets (bug 1690976) for test_decode_error_crossorigin.html failures CLOSED TREE
DONTBUILD
Backed out changeset d119750e8469 (bug 1690976)
Backed out changeset ff2dd7ee09b6 (bug 1690976)
2021-02-08 11:56:23 +02:00
Andreas Pehrson
e06fab5bfb Bug 1690976 - Don't reveal error details for CORS-cross-origin decoding errors. r=sstreich,bryce
Differential Revision: https://phabricator.services.mozilla.com/D104169
2021-02-05 18:07:16 +00:00
alwu
63730357e7 Bug 1687899 - part2 : wrap details of determining if we should dispatch 'timeupdate' event into a helper function. r=bryce
Differential Revision: https://phabricator.services.mozilla.com/D102248
2021-01-22 18:11:29 +00:00
alwu
21d2b34cd3 Bug 1687899 - part1 : use enum class to replace boolean for a better understanding why we need to dispatch 'timeupdate'. r=bryce
Differential Revision: https://phabricator.services.mozilla.com/D102247
2021-01-22 18:07:14 +00:00
alwu
113f4b293d Bug 1685399 - part13 : add test. r=padenot
As we can only snapshot a telemetry histogram in the chrome process, we have to make them measurable in the chrome process and write a chrome mochitest.

Differential Revision: https://phabricator.services.mozilla.com/D101266
2021-01-19 19:49:23 +00:00
alwu
a2a7139cc6 Bug 1685399 - part10 : add chrome-only attributes to allow us check accumulated time during testing. r=padenot,emilio
Differential Revision: https://phabricator.services.mozilla.com/D101264
2021-01-15 19:58:13 +00:00
alwu
c8b54c29bb Bug 1685399 - part7 : implement a helper class to accumulate and report the telemetry probe. r=padenot,bryce
In this patch, we move the responsibility of accumulating time and report the telemetry to `TelemetryProbesReporter`.

There are some differences between new telemetry report and the old one.
1. more accuracy on knowing if element is visible
2. more accuracy on determining when it should start accumulating visible & invisible play time
3. being able to report the correct result when element encounts an error or changes to a new resource
4. report result whenever MediaDecoder stops working

Here is the explanation [1] describing why our previous method was not able to achieve those advantages.

[1] https://bugzilla.mozilla.org/show_bug.cgi?id=1685399#c13

Differential Revision: https://phabricator.services.mozilla.com/D101112
2021-01-19 17:34:47 +00:00
alwu
9d3429c2f1 Bug 1685399 - part4 : check media info directly to know if video is valid. r=padenot
I will move these telemetry related codes out from media element, so I want to avoid using media element's own attribute to determine if we need to report the probe or not, which will help that following works don't need to reply on media element's own attribute.

Differential Revision: https://phabricator.services.mozilla.com/D101109
2021-01-14 19:54:42 +00:00
alwu
23c6726a98 Bug 1685399 - part3 : use actual invisible state to determine if we should suspend decoding. r=padenot
There is no need for decoder to use both "document visibility" and "element's layout visibility" to determine if we should suspend decoding.

That can simply be done by checking `HTMLMediaElement::IsActuallyInvisible()`.

Differential Revision: https://phabricator.services.mozilla.com/D101108
2021-01-14 19:54:42 +00:00
alwu
2cbc778a00 Bug 1685399 - part2 : reorgnize functions being used for determining if element is visible. r=padenot,webidl,mccr8
There are several functions related with an element's visibie state, which are confusing. So this patch is going to make them clearer and remove unnecessary function.

- `IsVisible()` : add description to mention that the visibility state is only for layout level, which doesn't represent the actual visible state.
- rename `IsHidden()` to `IsActualInvisible()` : make it represent the actual visible state of an element.
- remove `IsActive()` : current two callers of `IsActive()` only care about if the page is inactive or not, it doesn't care about if page hidden or not. So we can call the owner doc's method directly.

Differential Revision: https://phabricator.services.mozilla.com/D101107
2021-01-19 19:48:43 +00:00
alwu
9611f79b40 Bug 1685399 - part1 : remove mCurrentLoadPlayTime. r=padenot
`mCurrentLoadPlayTime` was added in [1], which is no longer in use, so we should remove it.

[1] https://phabricator.services.mozilla.com/D18628

Differential Revision: https://phabricator.services.mozilla.com/D101106
2021-01-14 19:54:41 +00:00
Andreas Pehrson
eccd8c0312 Bug 1601385 - Don't continue UpdateOutputTrackSources if the tracks-captured state changed. r=jib
Changing the tracks-captured state will trigger another run of
UpdateOutputTrackSources, so continuing the current one is futile. The next run
will properly re-evaluate all input state to this function.

Differential Revision: https://phabricator.services.mozilla.com/D100004
2021-01-12 09:35:20 +00:00
Andreas Pehrson
fdc125c730 Bug 1601422 - Update output track sources synchronously when aborted by content. r=jib
Differential Revision: https://phabricator.services.mozilla.com/D99936
2021-01-12 02:05:36 +00:00
Andreas Pehrson
500f7507e3 Bug 1601799 - Use a SharedDummyTrack for graph access in DecodedStream. r=karlt
When enabling our MediaTrack implementation (which we don't plan to by default,
NB) and disabling all audio tracks and unselecting all video tracks while having
an active captureStream leads to having no output tracks in DecodedStream.

In this case, DecodedStream doesn't know which graph to use for creating the
intermediary tracks it feeds data to. We don't want to resort to the default
graph either, since two graphs on different clocks could then race each other.

With this patch we plumb down a SharedDummyTrack from the media element where
the captureStream was triggered, through MediaDecoder, to DecodedStream. The
SharedDummyTrack guarantees to keep the graph alive, and holds the graph used
for the output tracks.

Differential Revision: https://phabricator.services.mozilla.com/D99822
2021-01-05 07:43:34 +00:00
Emilio Cobos Álvarez
136e604164 Bug 1635914 - Move active flag handling explicitly to BrowsingContext. r=nika
And have it mirror in the parent process more automatically.

The docShellIsActive setter in the browser-custom-element side needs to
be there rather than in the usual DidSet() calls because the
AsyncTabSwitcher code relies on getting an exact amount of notifications
as response to that specific setter. Not pretty, but...

BrowserChild no longer sets IsActive() on the docshell itself for OOP
iframes. This fixes bug 1679521. PresShell activeness is used to
throttle rAF as well, which handles OOP iframes nicely as well.

Differential Revision: https://phabricator.services.mozilla.com/D96072
2020-12-11 15:43:19 +00:00
Simon Giesecke
fbb9c742c8 Bug 1679272 - Include ScopeExit.h exactly where used. r=andi
Differential Revision: https://phabricator.services.mozilla.com/D98888
2020-12-07 14:25:59 +00:00
Simon Giesecke
46908cfb51 Bug 1660470 - Add missing include directives/forward declarations. r=nika
Differential Revision: https://phabricator.services.mozilla.com/D87865
2020-11-23 16:21:38 +00:00
alwu
604da6c95d Bug 1674829 - part1 : dispatch 'MozNoControlsBlockedVideo' to video control. r=Gijs
When autoplay media gets blocked, dispatch `MozNoControlsBlockedVideo` event to video control in order to show `click-to-play` icon.

Differential Revision: https://phabricator.services.mozilla.com/D97505
2020-11-19 17:31:13 +00:00
alwu
16fd9485a6 Bug 1673509 - part3 : stop controlled media when it unbind from DOM tree. r=chunmin
When we remove the media from DOM tree, we should not only pause it but also stop controlling it.

Differential Revision: https://phabricator.services.mozilla.com/D95359
2020-11-19 00:33:26 +00:00
Sylvestre Ledru
2785fba8c1 Bug 1519636 - Reformat with clang-format-11 to the Google coding style r=andi,sg,geckoview-reviewers,snorp
It is bringing some minor changes

# ignore-this-changeset

Differential Revision: https://phabricator.services.mozilla.com/D90795
2020-11-18 09:05:59 +00:00
Sylvestre Ledru
68b806d604 Bug 1674637 - Use nested namespaces in dom/ r=sg,andi
Also add some missing namespace qualifications

Done with:
./mach static-analysis check --checks="-*,modernize-concat-nested-namespaces" --fix dom/
./mach clang-format -p $(hg status dom/|grep ^M|awk '{print $2}')

Differential Revision: https://phabricator.services.mozilla.com/D95456
2020-11-04 17:04:01 +00:00
Butkovits Atila
a6e7dcc53f Backed out changeset c0adbf7522dc (bug 1674637) for bustage on GMPParent.cpp. CLOSED TREE 2020-11-04 10:54:36 +02:00
Sylvestre Ledru
8f709b39e8 Bug 1674637 - Use nested namespaces in dom/ r=sg,andi
Also add some missing namespace qualifications

Done with:
./mach static-analysis check --checks="-*,modernize-concat-nested-namespaces" --fix dom/
./mach clang-format -p $(hg status dom/|grep ^M|awk '{print $2}')

Differential Revision: https://phabricator.services.mozilla.com/D95456
2020-11-04 08:29:00 +00:00
Emilio Cobos Álvarez
8529bb07b8 Bug 1673707 - Simplify handling of the suspendMediaWhenInactive flag. r=nika
Make it a synced field on the top browsing context. This handling the
propagation right and is much simpler.

This should fix cases where we don't look at the top level docshell to
figure out if we should suspend media.

Differential Revision: https://phabricator.services.mozilla.com/D94878
2020-10-27 19:55:47 +00:00
Andreas Pehrson
8cd877298d Bug 1582294 - Implement MediaStreamTrackSource::HasAlpha for MediaDecoder sources. r=bryce
Differential Revision: https://phabricator.services.mozilla.com/D92899
2020-10-19 15:35:29 +00:00
Andreas Pehrson
62c6a3cb6b Bug 1582294 - Set up HTMLMediaElement to convey video track alpha channel when playing a MediaStream. r=bryce
Differential Revision: https://phabricator.services.mozilla.com/D92898
2020-10-19 15:35:13 +00:00
Chun-Min Chang
df9224ea0a Bug 1646719 - P1: Add more debugging logs r=gerald
Add some logs that can help us to check how many cache-streams are
suspended and the working status in `MediaCache::Update`

Differential Revision: https://phabricator.services.mozilla.com/D92124
2020-10-04 07:19:18 +00:00
Matt Woodrow
ced4f557c0 Bug 1660928 - Record video play time telemetry if we had a non-empty video track at any point. r=jya
YouTube frequently uses the same <video> element for sequential videos and ads. We want to record telemetry if any of these were non-empty, not only consider the last one played when the tab is closed.

Differential Revision: https://phabricator.services.mozilla.com/D88098
2020-10-06 01:47:14 +00:00
alwu
7fc37f86fb Bug 1652108 - part3 : remove relevant codes for 'autoplay_would_be_allowed_count' and 'autoplay_would_not_be_allowed_count'. r=bryce
We don't need `autoplay_would_be_allowed_count` and `autoplay_would_not_be_allowed_count`, so we can remove all related codes.

Differential Revision: https://phabricator.services.mozilla.com/D83227
2020-09-23 22:35:26 +00:00
alwu
dec4bc83f9 Bug 1652108 - part2 : modify page_had_media_count to in_page_count r=nika,bryce
We would like to remove `page_had_media_count` and use a new probe `in_page_count` to record the total number of top level content documents using media.

Therefore, we would rename WindowContext's `DocTreeHadAudibleMedia` to `DocTreeHadMedia` in order to support the new usage.

In the future, if we want to know something like "the percentage of media element is being used for MSE/EME?", then this scalar can be the base and used to calculate the answser.

Differential Revision: https://phabricator.services.mozilla.com/D83225
2020-09-24 21:41:10 +00:00
alwu
9d635bcf62 Bug 1662164 - remove expired telemetry ping 'MEDIA_PLAYED_TIME_AFTER_AUTOPLAY_BLOCKED' and its related code. r=bryce
Differential Revision: https://phabricator.services.mozilla.com/D91222
2020-09-24 16:18:35 +00:00
Simon Giesecke
ab6f0a7137 Bug 1650145 - Replace all value uses of Empty[C]String by 0-length _ns literals. r=froydnj,geckoview-reviewers,agi
Differential Revision: https://phabricator.services.mozilla.com/D82325
2020-09-23 15:17:15 +00:00
Bryce Seager van Dyk
6ce5f0f862 Bug 1615444 - Remove media telem histograms that expired in 74 and related code. r=alwu
Removes
- MEDIACACHESTREAM_LENGTH_KB
- MEDIA_PLAY_PROMISE_RESOLUTION
- AUDIO_TRACK_SILENCE_PROPORTION

and all the code I could find that was specific to reporting these values via
telemetry.

Differential Revision: https://phabricator.services.mozilla.com/D88868
2020-09-17 14:43:26 +00:00
Bryce Seager van Dyk
baea16f9ef Bug 1662212 - Add telemetry to track play time of encrypted HTMLMediaElements. r=drno
Add 3 probes
- Play time for encrypted elements.
- Play time for Clearkey elements.
- Play time for Widevine elements.

Differential Revision: https://phabricator.services.mozilla.com/D88895
2020-09-10 22:04:39 +00:00
Bryce Seager van Dyk
68d28a5022 Bug 1662210 - Remove dead MediaKeys code from MediaElement's SuspendOrResumeElement. r=jolin
Differential Revision: https://phabricator.services.mozilla.com/D88887
2020-08-31 18:19:18 +00:00
Andreas Pehrson
4ccf67565d Bug 1661668 - Capture this in HTMLMediaElement::SetSinkId captures, for readability. r=padenot
Depends on D88820

Differential Revision: https://phabricator.services.mozilla.com/D88821
2020-08-31 15:34:09 +00:00
Andreas Pehrson
24a5ad65a6 Bug 1661668 - Rename CrossGraphManager to CrossGraphPort. r=padenot
"Manager" is vague, and it seems to mostly keep some members around rather than
managing them. Port is analogue to MediaInputPort in that it acts as a link
between two tracks. Neither type of port does very much heavy lifting -- they
are similarly dumb.

Differential Revision: https://phabricator.services.mozilla.com/D88812
2020-08-31 16:08:21 +00:00
Andreas Pehrson
597728ed3c Bug 1592539 - Use a MediaStreamRenderer to render video tracks into a secondary container. r=jib,mconley
This re-uses MediaStreamRenderer to render video into a secondary container, to
get identical logic for the clone target as for the clone source. The
MediaStreamRenderer can handle audio, currentTime and more as well, but those
are not used here.

Differential Revision: https://phabricator.services.mozilla.com/D87139
2020-08-26 14:25:40 +00:00
Andreas Pehrson
9d4cb490f2 Bug 1592539 - Make MediaStreamRenderer always apply its FirstFrameVideoOutput. r=jib,karlt
The first-frame output used to only be applied when not rendering the
MediaStream, and the regular video output was applied when rendering.

The difference with this patch is when rendering -- both the first-frame and the
regular outputs are applied at the same time. The former allows one frame to go
through to the VideoFrameContainer, then the regular output takes over and lets
any frames through. Nothing in how frames are rendered should be noticable by
users.

This allows for simpler logic for resolving the visual clone target promise in a
future patch, as we won't have to track the first frame in different outputs
depending on the rendering state.

Differential Revision: https://phabricator.services.mozilla.com/D87138
2020-08-26 14:25:27 +00:00