зеркало из https://github.com/mozilla/gecko-dev.git
Backed out changeset 41138b630cdc (bug 1293145) for nsCOMPtr crash \
CLOSED TREE
This commit is contained in:
Родитель
640043d1a4
Коммит
36c9d770e1
|
@ -48,10 +48,9 @@
|
||||||
|
|
||||||
#include "MediaError.h"
|
#include "MediaError.h"
|
||||||
#include "MediaDecoder.h"
|
#include "MediaDecoder.h"
|
||||||
#include "MediaPrefs.h"
|
#include "nsICategoryManager.h"
|
||||||
#include "MediaResource.h"
|
#include "MediaResource.h"
|
||||||
|
|
||||||
#include "nsICategoryManager.h"
|
|
||||||
#include "nsIContentPolicy.h"
|
#include "nsIContentPolicy.h"
|
||||||
#include "nsContentPolicyUtils.h"
|
#include "nsContentPolicyUtils.h"
|
||||||
#include "nsCycleCollectionParticipant.h"
|
#include "nsCycleCollectionParticipant.h"
|
||||||
|
@ -3033,42 +3032,6 @@ nsresult HTMLMediaElement::BindToTree(nsIDocument* aDocument, nsIContent* aParen
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */
|
|
||||||
void HTMLMediaElement::VideoDecodeSuspendTimerCallback(nsITimer* aTimer, void* aClosure)
|
|
||||||
{
|
|
||||||
MOZ_ASSERT(NS_IsMainThread());
|
|
||||||
auto element = static_cast<HTMLMediaElement*>(aClosure);
|
|
||||||
element->mVideoDecodeSuspendTime.Start();
|
|
||||||
element->mVideoDecodeSuspendTimer = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
void HTMLMediaElement::HiddenVideoStart()
|
|
||||||
{
|
|
||||||
MOZ_ASSERT(NS_IsMainThread());
|
|
||||||
mHiddenPlayTime.Start();
|
|
||||||
if (mVideoDecodeSuspendTimer) {
|
|
||||||
// Already started, just keep it running.
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
mVideoDecodeSuspendTimer = do_CreateInstance("@mozilla.org/timer;1");
|
|
||||||
mVideoDecodeSuspendTimer->InitWithNamedFuncCallback(
|
|
||||||
VideoDecodeSuspendTimerCallback, this,
|
|
||||||
MediaPrefs::MDSMSuspendBackgroundVideoDelay(), nsITimer::TYPE_ONE_SHOT,
|
|
||||||
"HTMLMediaElement::VideoDecodeSuspendTimerCallback");
|
|
||||||
}
|
|
||||||
|
|
||||||
void HTMLMediaElement::HiddenVideoStop()
|
|
||||||
{
|
|
||||||
MOZ_ASSERT(NS_IsMainThread());
|
|
||||||
mHiddenPlayTime.Pause();
|
|
||||||
mVideoDecodeSuspendTime.Pause();
|
|
||||||
if (!mVideoDecodeSuspendTimer) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
mVideoDecodeSuspendTimer->Cancel();
|
|
||||||
mVideoDecodeSuspendTimer = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef MOZ_EME
|
#ifdef MOZ_EME
|
||||||
void
|
void
|
||||||
HTMLMediaElement::ReportEMETelemetry()
|
HTMLMediaElement::ReportEMETelemetry()
|
||||||
|
@ -3155,7 +3118,6 @@ HTMLMediaElement::ReportTelemetry()
|
||||||
// We have a valid video.
|
// We have a valid video.
|
||||||
double playTime = mPlayTime.Total();
|
double playTime = mPlayTime.Total();
|
||||||
double hiddenPlayTime = mHiddenPlayTime.Total();
|
double hiddenPlayTime = mHiddenPlayTime.Total();
|
||||||
double videoDecodeSuspendTime = mVideoDecodeSuspendTime.Total();
|
|
||||||
|
|
||||||
Telemetry::Accumulate(Telemetry::VIDEO_PLAY_TIME_MS, SECONDS_TO_MS(playTime));
|
Telemetry::Accumulate(Telemetry::VIDEO_PLAY_TIME_MS, SECONDS_TO_MS(playTime));
|
||||||
LOG(LogLevel::Debug, ("%p VIDEO_PLAY_TIME_MS = %f", this, playTime));
|
LOG(LogLevel::Debug, ("%p VIDEO_PLAY_TIME_MS = %f", this, playTime));
|
||||||
|
@ -3164,7 +3126,8 @@ HTMLMediaElement::ReportTelemetry()
|
||||||
LOG(LogLevel::Debug, ("%p VIDEO_HIDDEN_PLAY_TIME_MS = %f", this, hiddenPlayTime));
|
LOG(LogLevel::Debug, ("%p VIDEO_HIDDEN_PLAY_TIME_MS = %f", this, hiddenPlayTime));
|
||||||
|
|
||||||
if (playTime > 0.0) {
|
if (playTime > 0.0) {
|
||||||
// We have actually played something -> Report some valid-video telemetry.
|
// We have actually played something -> Report hidden/total ratio.
|
||||||
|
uint32_t hiddenPercentage = uint32_t(hiddenPlayTime / playTime * 100.0 + 0.5);
|
||||||
|
|
||||||
// Keyed by audio+video or video alone, and by a resolution range.
|
// Keyed by audio+video or video alone, and by a resolution range.
|
||||||
nsCString key(mMediaInfo.HasAudio() ? "AV," : "V,");
|
nsCString key(mMediaInfo.HasAudio() ? "AV," : "V,");
|
||||||
|
@ -3186,7 +3149,6 @@ HTMLMediaElement::ReportTelemetry()
|
||||||
}
|
}
|
||||||
key.AppendASCII(resolution);
|
key.AppendASCII(resolution);
|
||||||
|
|
||||||
uint32_t hiddenPercentage = uint32_t(hiddenPlayTime / playTime * 100.0 + 0.5);
|
|
||||||
Telemetry::Accumulate(Telemetry::VIDEO_HIDDEN_PLAY_TIME_PERCENTAGE,
|
Telemetry::Accumulate(Telemetry::VIDEO_HIDDEN_PLAY_TIME_PERCENTAGE,
|
||||||
key,
|
key,
|
||||||
hiddenPercentage);
|
hiddenPercentage);
|
||||||
|
@ -3197,17 +3159,6 @@ HTMLMediaElement::ReportTelemetry()
|
||||||
LOG(LogLevel::Debug, ("%p VIDEO_HIDDEN_PLAY_TIME_PERCENTAGE = %u, keys: '%s' and 'All'",
|
LOG(LogLevel::Debug, ("%p VIDEO_HIDDEN_PLAY_TIME_PERCENTAGE = %u, keys: '%s' and 'All'",
|
||||||
this, hiddenPercentage, key.get()));
|
this, hiddenPercentage, key.get()));
|
||||||
|
|
||||||
uint32_t videoDecodeSuspendPercentage =
|
|
||||||
uint32_t(videoDecodeSuspendTime / playTime * 100.0 + 0.5);
|
|
||||||
Telemetry::Accumulate(Telemetry::VIDEO_INFERRED_DECODE_SUSPEND_PERCENTAGE,
|
|
||||||
key,
|
|
||||||
videoDecodeSuspendPercentage);
|
|
||||||
Telemetry::Accumulate(Telemetry::VIDEO_INFERRED_DECODE_SUSPEND_PERCENTAGE,
|
|
||||||
NS_LITERAL_CSTRING("All"),
|
|
||||||
videoDecodeSuspendPercentage);
|
|
||||||
LOG(LogLevel::Debug, ("%p VIDEO_INFERRED_DECODE_SUSPEND_PERCENTAGE = %u, keys: '%s' and 'All'",
|
|
||||||
this, videoDecodeSuspendPercentage, key.get()));
|
|
||||||
|
|
||||||
if (data.mInterKeyframeCount != 0) {
|
if (data.mInterKeyframeCount != 0) {
|
||||||
uint32_t average_ms =
|
uint32_t average_ms =
|
||||||
uint32_t(std::min<uint64_t>(double(data.mInterKeyframeSum_us)
|
uint32_t(std::min<uint64_t>(double(data.mInterKeyframeSum_us)
|
||||||
|
@ -4757,14 +4708,14 @@ nsresult HTMLMediaElement::DispatchAsyncEvent(const nsAString& aName)
|
||||||
if ((aName.EqualsLiteral("play") || aName.EqualsLiteral("playing"))) {
|
if ((aName.EqualsLiteral("play") || aName.EqualsLiteral("playing"))) {
|
||||||
mPlayTime.Start();
|
mPlayTime.Start();
|
||||||
if (IsHidden()) {
|
if (IsHidden()) {
|
||||||
HiddenVideoStart();
|
mHiddenPlayTime.Start();
|
||||||
}
|
}
|
||||||
} else if (aName.EqualsLiteral("waiting")) {
|
} else if (aName.EqualsLiteral("waiting")) {
|
||||||
mPlayTime.Pause();
|
mPlayTime.Pause();
|
||||||
HiddenVideoStop();
|
mHiddenPlayTime.Pause();
|
||||||
} else if (aName.EqualsLiteral("pause")) {
|
} else if (aName.EqualsLiteral("pause")) {
|
||||||
mPlayTime.Pause();
|
mPlayTime.Pause();
|
||||||
HiddenVideoStop();
|
mHiddenPlayTime.Pause();
|
||||||
}
|
}
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
@ -4962,10 +4913,10 @@ HTMLMediaElement::NotifyOwnerDocumentActivityChangedInternal()
|
||||||
bool visible = !IsHidden();
|
bool visible = !IsHidden();
|
||||||
if (visible) {
|
if (visible) {
|
||||||
// Visible -> Just pause hidden play time (no-op if already paused).
|
// Visible -> Just pause hidden play time (no-op if already paused).
|
||||||
HiddenVideoStop();
|
mHiddenPlayTime.Pause();
|
||||||
} else if (mPlayTime.IsStarted()) {
|
} else if (mPlayTime.IsStarted()) {
|
||||||
// Not visible, play time is running -> Start hidden play time if needed.
|
// Not visible, play time is running -> Start hidden play time if needed.
|
||||||
HiddenVideoStart();
|
mHiddenPlayTime.Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mDecoder && !IsBeingDestroyed()) {
|
if (mDecoder && !IsBeingDestroyed()) {
|
||||||
|
|
|
@ -1125,23 +1125,6 @@ protected:
|
||||||
return isPaused;
|
return isPaused;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Video has been playing while hidden and, if feature was enabled, would
|
|
||||||
* trigger suspending decoder.
|
|
||||||
* Used to track hidden-video-decode-suspend telemetry.
|
|
||||||
*/
|
|
||||||
static void VideoDecodeSuspendTimerCallback(nsITimer* aTimer, void* aClosure);
|
|
||||||
/**
|
|
||||||
* Video is now both: playing and hidden.
|
|
||||||
* Used to track hidden-video telemetry.
|
|
||||||
*/
|
|
||||||
void HiddenVideoStart();
|
|
||||||
/**
|
|
||||||
* Video is not playing anymore and/or has become visible.
|
|
||||||
* Used to track hidden-video telemetry.
|
|
||||||
*/
|
|
||||||
void HiddenVideoStop();
|
|
||||||
|
|
||||||
#ifdef MOZ_EME
|
#ifdef MOZ_EME
|
||||||
void ReportEMETelemetry();
|
void ReportEMETelemetry();
|
||||||
#endif
|
#endif
|
||||||
|
@ -1392,12 +1375,9 @@ protected:
|
||||||
// Range of time played.
|
// Range of time played.
|
||||||
RefPtr<TimeRanges> mPlayed;
|
RefPtr<TimeRanges> mPlayed;
|
||||||
|
|
||||||
// Timer used for updating progress events.
|
// Timer used for updating progress events
|
||||||
nsCOMPtr<nsITimer> mProgressTimer;
|
nsCOMPtr<nsITimer> mProgressTimer;
|
||||||
|
|
||||||
// Timer used to simulate video-suspend.
|
|
||||||
nsCOMPtr<nsITimer> mVideoDecodeSuspendTimer;
|
|
||||||
|
|
||||||
#ifdef MOZ_EME
|
#ifdef MOZ_EME
|
||||||
// Encrypted Media Extension media keys.
|
// Encrypted Media Extension media keys.
|
||||||
RefPtr<MediaKeys> mMediaKeys;
|
RefPtr<MediaKeys> mMediaKeys;
|
||||||
|
@ -1656,9 +1636,6 @@ private:
|
||||||
// Total time a video has spent playing while hidden.
|
// Total time a video has spent playing while hidden.
|
||||||
TimeDurationAccumulator mHiddenPlayTime;
|
TimeDurationAccumulator mHiddenPlayTime;
|
||||||
|
|
||||||
// Total time a video has (or would have) spent in video-decode-suspend mode.
|
|
||||||
TimeDurationAccumulator mVideoDecodeSuspendTime;
|
|
||||||
|
|
||||||
// Indicates if user has interacted with the element.
|
// Indicates if user has interacted with the element.
|
||||||
// Used to block autoplay when disabled.
|
// Used to block autoplay when disabled.
|
||||||
bool mHasUserInteraction;
|
bool mHasUserInteraction;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче