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

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

Issue 2556333002: Detect change on video/viewport intersection when rendered remotely (Closed)
Patch Set: Use single timer to check viewport intersection change. Update tests. Created 4 years 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
Index: third_party/WebKit/Source/core/html/HTMLMediaElement.cpp
diff --git a/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp b/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp
index dcf3d60f9d3a77daeb6ba5f0f05e3c4c7e30e025..fedd25ca724b1f414292f1d0938f170e452988bf 100644
--- a/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp
@@ -128,6 +128,7 @@ namespace {
constexpr float kMostlyFillViewportThreshold = 0.85f;
constexpr double kMostlyFillViewportBecomeStableSeconds = 5;
+constexpr double kCheckViewportIntersectionIntervalInSeconds = 1;
ojan 2016/12/14 00:39:08 Naming nit: Other variables leave out the "In", e.
xjz 2016/12/14 00:55:05 Done.
enum MediaControlsShow {
MediaControlsShowAttribute = 0,
@@ -370,6 +371,9 @@ HTMLMediaElement::HTMLMediaElement(const QualifiedName& tagName,
m_viewportFillDebouncerTimer(
this,
&HTMLMediaElement::viewportFillDebouncerTimerFired),
+ m_checkViewportIntersectionTimer(
+ this,
+ &HTMLMediaElement::checkViewportIntersectionTimerFired),
m_playedTimeRanges(),
m_asyncEventQueue(GenericEventQueue::create(this)),
m_playbackRate(1.0f),
@@ -2433,8 +2437,6 @@ void HTMLMediaElement::startPlaybackProgressTimer() {
}
void HTMLMediaElement::playbackProgressTimerFired(TimerBase*) {
- checkViewportIntersectionChanged();
-
if (!std::isnan(m_fragmentEndTime) && currentTime() >= m_fragmentEndTime &&
getDirectionOfPlayback() == Forward) {
m_fragmentEndTime = std::numeric_limits<double>::quiet_NaN();
@@ -3275,6 +3277,7 @@ void HTMLMediaElement::updatePlayState() {
void HTMLMediaElement::stopPeriodicTimers() {
m_progressEventTimer.stop();
m_playbackProgressTimer.stop();
+ m_checkViewportIntersectionTimer.stop();
}
void HTMLMediaElement::
@@ -4033,9 +4036,16 @@ DEFINE_TRACE(HTMLMediaElement::AudioSourceProviderImpl) {
visitor->trace(m_client);
}
-void HTMLMediaElement::checkViewportIntersectionChanged() {
- // TODO(xjz): Early return if we not in tab mirroring.
+void HTMLMediaElement::enableMonitorViewportIntersection(bool enable) {
+ if (enable && !m_checkViewportIntersectionTimer.isActive()) {
+ m_checkViewportIntersectionTimer.startRepeating(
+ kCheckViewportIntersectionIntervalInSeconds, BLINK_FROM_HERE);
+ } else if (!enable) {
+ m_checkViewportIntersectionTimer.stop();
+ }
+}
+void HTMLMediaElement::checkViewportIntersectionTimerFired(TimerBase*) {
IntersectionGeometry geometry(
document().frame()->localFrameRoot()->document(), this, Vector<Length>(),
IntersectionGeometry::ReportRootBounds::kShouldReportRootBounds);

Powered by Google App Engine
This is Rietveld 408576698