Title: [197480] trunk/Source/WebCore
- Revision
- 197480
- Author
- [email protected]
- Date
- 2016-03-02 17:19:51 -0800 (Wed, 02 Mar 2016)
Log Message
PageThrottler should apply hysteresis to media activity
https://bugs.webkit.org/show_bug.cgi?id=154940
Reviewed by Ryosuke Niwa.
Currently PageThrottler keeps a track of audible plugin activity and HTML media element
activity separately. Audible plugin activity also gets an extra 5s hysteresis applied,
so that after audio playback has completed there is a chance to queue up more audio
before timer throttling kicks in. HTML audio does not get this grace. Funnel both
together into a single activity flag, such that the hysteresis is applied to both.
* page/PageThrottler.cpp:
(WebCore::PageThrottler::PageThrottler):
(WebCore::m_mediaActivityHysteresis):
- PageActivityState::AudiblePlugin -> PageActivityState::MediaActivity.
(WebCore::m_mediaActivityCounter):
- when m_mediaActivityCounter value changes call mediaActivityCounterChanged().
(WebCore::PageThrottler::mediaActivityCounterChanged):
- Drive PageActivityState::MediaActivity indirectly via m_mediaActivityHysteresis,
such that a 5s hysteresis is applied.
* page/PageThrottler.h:
- Removed AudiblePlugin (merged in with MediaActivity).
(WebCore::PageThrottler::pluginDidEvaluateWhileAudioIsPlaying):
- m_audiblePluginHysteresis.impulse -> m_mediaActivityHysteresis.impulse.
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (197479 => 197480)
--- trunk/Source/WebCore/ChangeLog 2016-03-03 00:34:59 UTC (rev 197479)
+++ trunk/Source/WebCore/ChangeLog 2016-03-03 01:19:51 UTC (rev 197480)
@@ -1,3 +1,30 @@
+2016-03-02 Gavin Barraclough <[email protected]>
+
+ PageThrottler should apply hysteresis to media activity
+ https://bugs.webkit.org/show_bug.cgi?id=154940
+
+ Reviewed by Ryosuke Niwa.
+
+ Currently PageThrottler keeps a track of audible plugin activity and HTML media element
+ activity separately. Audible plugin activity also gets an extra 5s hysteresis applied,
+ so that after audio playback has completed there is a chance to queue up more audio
+ before timer throttling kicks in. HTML audio does not get this grace. Funnel both
+ together into a single activity flag, such that the hysteresis is applied to both.
+
+ * page/PageThrottler.cpp:
+ (WebCore::PageThrottler::PageThrottler):
+ (WebCore::m_mediaActivityHysteresis):
+ - PageActivityState::AudiblePlugin -> PageActivityState::MediaActivity.
+ (WebCore::m_mediaActivityCounter):
+ - when m_mediaActivityCounter value changes call mediaActivityCounterChanged().
+ (WebCore::PageThrottler::mediaActivityCounterChanged):
+ - Drive PageActivityState::MediaActivity indirectly via m_mediaActivityHysteresis,
+ such that a 5s hysteresis is applied.
+ * page/PageThrottler.h:
+ - Removed AudiblePlugin (merged in with MediaActivity).
+ (WebCore::PageThrottler::pluginDidEvaluateWhileAudioIsPlaying):
+ - m_audiblePluginHysteresis.impulse -> m_mediaActivityHysteresis.impulse.
+
2016-03-01 Ada Chan <[email protected]>
Update the media element's presentation mode properly after going in and out of full screen via the Full Screen API
Modified: trunk/Source/WebCore/page/PageThrottler.cpp (197479 => 197480)
--- trunk/Source/WebCore/page/PageThrottler.cpp 2016-03-03 00:34:59 UTC (rev 197479)
+++ trunk/Source/WebCore/page/PageThrottler.cpp 2016-03-03 01:19:51 UTC (rev 197480)
@@ -33,8 +33,8 @@
PageThrottler::PageThrottler(Page& page)
: m_page(page)
, m_userInputHysteresis([this](HysteresisState state) { setActivityFlag(PageActivityState::UserInputActivity, state == HysteresisState::Started); })
- , m_audiblePluginHysteresis([this](HysteresisState state) { setActivityFlag(PageActivityState::AudiblePlugin, state == HysteresisState::Started); })
- , m_mediaActivityCounter([this](RefCounterEvent) { setActivityFlag(PageActivityState::MediaActivity, m_mediaActivityCounter.value()); })
+ , m_mediaActivityHysteresis([this](HysteresisState state) { setActivityFlag(PageActivityState::MediaActivity, state == HysteresisState::Started); })
+ , m_mediaActivityCounter([this](RefCounterEvent) { mediaActivityCounterChanged(); })
, m_pageLoadActivityCounter([this](RefCounterEvent) { setActivityFlag(PageActivityState::PageLoadActivity, m_pageLoadActivityCounter.value()); })
{
}
@@ -49,6 +49,14 @@
return m_pageLoadActivityCounter.count();
}
+void PageThrottler::mediaActivityCounterChanged()
+{
+ if (m_mediaActivityCounter.value())
+ m_mediaActivityHysteresis.start();
+ else
+ m_mediaActivityHysteresis.stop();
+}
+
void PageThrottler::setActivityFlag(PageActivityState::Flags flag, bool value)
{
PageActivityState::Flags activityState = m_activityState;
Modified: trunk/Source/WebCore/page/PageThrottler.h (197479 => 197480)
--- trunk/Source/WebCore/page/PageThrottler.h 2016-03-03 00:34:59 UTC (rev 197479)
+++ trunk/Source/WebCore/page/PageThrottler.h 2016-03-03 01:19:51 UTC (rev 197480)
@@ -43,15 +43,14 @@
struct PageActivityState {
enum {
UserInputActivity = 1 << 0,
- AudiblePlugin = 1 << 1,
- MediaActivity = 1 << 2,
- PageLoadActivity = 1 << 3,
+ MediaActivity = 1 << 1,
+ PageLoadActivity = 1 << 2,
};
typedef unsigned Flags;
static const Flags NoFlags = 0;
- static const Flags AllFlags = UserInputActivity | AudiblePlugin | MediaActivity | PageLoadActivity;
+ static const Flags AllFlags = UserInputActivity | MediaActivity | PageLoadActivity;
};
class PageThrottler {
@@ -61,17 +60,18 @@
void didReceiveUserInput() { m_userInputHysteresis.impulse(); }
PageActivityState::Flags activityState() { return m_activityState; }
- void pluginDidEvaluateWhileAudioIsPlaying() { m_audiblePluginHysteresis.impulse(); }
+ void pluginDidEvaluateWhileAudioIsPlaying() { m_mediaActivityHysteresis.impulse(); }
PageActivityAssertionToken mediaActivityToken();
PageActivityAssertionToken pageLoadActivityToken();
private:
+ void mediaActivityCounterChanged();
void setActivityFlag(PageActivityState::Flags, bool);
Page& m_page;
PageActivityState::Flags m_activityState { PageActivityState::NoFlags };
HysteresisActivity m_userInputHysteresis;
- HysteresisActivity m_audiblePluginHysteresis;
+ HysteresisActivity m_mediaActivityHysteresis;
PageActivityCounter m_mediaActivityCounter;
PageActivityCounter m_pageLoadActivityCounter;
};
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes