Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1123)

Unified Diff: Source/core/html/HTMLMediaElement.cpp

Issue 1227403004: Measure usage of HTMLMediaElement preload states (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Use fastGetAttribute Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/html/HTMLMediaElement.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/html/HTMLMediaElement.cpp
diff --git a/Source/core/html/HTMLMediaElement.cpp b/Source/core/html/HTMLMediaElement.cpp
index 4a6ddcfee0e11c4472bff586705351f637b7695a..0136464ef89e731646dcb0d6fced717c57badea3 100644
--- a/Source/core/html/HTMLMediaElement.cpp
+++ b/Source/core/html/HTMLMediaElement.cpp
@@ -334,7 +334,6 @@ HTMLMediaElement::HTMLMediaElement(const QualifiedName& tagName, Document& docum
, m_deferredLoadState(NotDeferred)
, m_deferredLoadTimer(this, &HTMLMediaElement::deferredLoadTimerFired)
, m_webLayer(nullptr)
- , m_preload(MediaPlayer::Auto)
, m_displayMode(Unknown)
, m_cachedTime(std::numeric_limits<double>::quiet_NaN())
, m_fragmentEndTime(std::numeric_limits<double>::quiet_NaN())
@@ -534,20 +533,8 @@ void HTMLMediaElement::parseAttribute(const QualifiedName& name, const AtomicStr
} else if (name == controlsAttr) {
configureMediaControls();
} else if (name == preloadAttr) {
- if (equalIgnoringCase(value, "none")) {
- m_preload = MediaPlayer::None;
- } else if (equalIgnoringCase(value, "metadata")) {
- m_preload = MediaPlayer::MetaData;
- } else {
- // The spec does not define an "invalid value default" but "auto" is suggested as the
- // "missing value default", so use it for everything except "none" and "metadata"
- m_preload = MediaPlayer::Auto;
- }
-
- // The attribute must be ignored if the autoplay attribute is present
if (m_player)
setPlayerPreload();
-
} else if (name == mediagroupAttr && RuntimeEnabledFeatures::mediaControllerEnabled()) {
setMediaGroup(value);
} else {
@@ -992,7 +979,7 @@ void HTMLMediaElement::loadResource(const KURL& url, ContentType& contentType, c
if (attemptLoad && canLoadURL(url, contentType, keySystem)) {
ASSERT(!webMediaPlayer());
- if (!m_havePreparedToPlay && !autoplay() && m_preload == MediaPlayer::None) {
+ if (!m_havePreparedToPlay && !autoplay() && preloadType() == MediaPlayer::None) {
WTF_LOG(Media, "HTMLMediaElement::loadResource(%p) : Delaying load because preload == 'none'", this);
deferLoad();
} else {
@@ -1038,7 +1025,7 @@ void HTMLMediaElement::setPlayerPreload()
{
m_player->setPreload(effectivePreloadType());
- if (loadIsDeferred() && m_preload != MediaPlayer::None)
+ if (loadIsDeferred() && preloadType() != MediaPlayer::None)
startDeferredLoad();
}
@@ -1615,7 +1602,7 @@ void HTMLMediaElement::seek(double time)
return;
// If the media engine has been told to postpone loading data, let it go ahead now.
- if (m_preload < MediaPlayer::Auto && m_readyState < HAVE_FUTURE_DATA)
+ if (preloadType() < MediaPlayer::Auto && m_readyState < HAVE_FUTURE_DATA)
prepareToPlay();
// Get the current time before setting m_seeking, m_lastSeekTime is returned once it is set.
@@ -1880,16 +1867,13 @@ bool HTMLMediaElement::autoplay() const
String HTMLMediaElement::preload() const
{
- switch (m_preload) {
+ switch (preloadType()) {
case MediaPlayer::None:
return "none";
- break;
case MediaPlayer::MetaData:
return "metadata";
- break;
case MediaPlayer::Auto:
return "auto";
- break;
}
ASSERT_NOT_REACHED();
@@ -1902,9 +1886,40 @@ void HTMLMediaElement::setPreload(const AtomicString& preload)
setAttribute(preloadAttr, preload);
}
+MediaPlayer::Preload HTMLMediaElement::preloadType() const
+{
+ // TODO(philipj): The spec requires case-sensitive string matching:
+ // https://www.w3.org/Bugs/Public/show_bug.cgi?id=28951
+ const AtomicString& preload = fastGetAttribute(preloadAttr);
+ if (equalIgnoringCase(preload, "none")) {
+ UseCounter::count(document(), UseCounter::HTMLMediaElementPreloadNone);
+ return MediaPlayer::None;
+ }
+ if (equalIgnoringCase(preload, "metadata")) {
+ UseCounter::count(document(), UseCounter::HTMLMediaElementPreloadMetadata);
+ return MediaPlayer::MetaData;
+ }
+ if (equalIgnoringCase(preload, "auto")) {
+ UseCounter::count(document(), UseCounter::HTMLMediaElementPreloadAuto);
+ return MediaPlayer::Auto;
+ }
+
+ // "The attribute's missing value default is user-agent defined, though the
+ // Metadata state is suggested as a compromise between reducing server load
+ // and providing an optimal user experience."
+
+ // The spec does not define an invalid value default:
+ // https://www.w3.org/Bugs/Public/show_bug.cgi?id=28950
+
+ // TODO(philipj): Try to make "metadata" the default preload state:
+ // https://crbug.com/310450
+ UseCounter::count(document(), UseCounter::HTMLMediaElementPreloadDefault);
+ return MediaPlayer::Auto;
+}
+
MediaPlayer::Preload HTMLMediaElement::effectivePreloadType() const
{
- return autoplay() ? MediaPlayer::Auto : m_preload;
+ return autoplay() ? MediaPlayer::Auto : preloadType();
}
void HTMLMediaElement::play()
« no previous file with comments | « Source/core/html/HTMLMediaElement.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698