OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "core/html/AutoplayUmaHelper.h" | 5 #include "core/html/media/AutoplayUmaHelper.h" |
6 | 6 |
7 #include "core/dom/Document.h" | 7 #include "core/dom/Document.h" |
8 #include "core/dom/ElementVisibilityObserver.h" | 8 #include "core/dom/ElementVisibilityObserver.h" |
9 #include "core/events/Event.h" | 9 #include "core/events/Event.h" |
10 #include "core/frame/Settings.h" | 10 #include "core/frame/Settings.h" |
11 #include "core/html/HTMLMediaElement.h" | 11 #include "core/html/HTMLMediaElement.h" |
12 #include "platform/Histogram.h" | 12 #include "platform/Histogram.h" |
13 #include "public/platform/Platform.h" | 13 #include "public/platform/Platform.h" |
14 #include "wtf/CurrentTime.h" | 14 #include "wtf/CurrentTime.h" |
15 | 15 |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
225 return; | 225 return; |
226 | 226 |
227 maybeStopRecordingMutedVideoPlayMethodBecomeVisible(true); | 227 maybeStopRecordingMutedVideoPlayMethodBecomeVisible(true); |
228 } | 228 } |
229 | 229 |
230 void AutoplayUmaHelper::onVisibilityChangedForMutedVideoOffscreenDuration( | 230 void AutoplayUmaHelper::onVisibilityChangedForMutedVideoOffscreenDuration( |
231 bool isVisible) { | 231 bool isVisible) { |
232 if (isVisible == m_isVisible) | 232 if (isVisible == m_isVisible) |
233 return; | 233 return; |
234 | 234 |
235 if (isVisible) | 235 if (isVisible) { |
236 m_mutedVideoAutoplayOffscreenDurationMS += | 236 m_mutedVideoAutoplayOffscreenDurationMS += |
237 static_cast<int64_t>(monotonicallyIncreasingTimeMS()) - | 237 static_cast<int64_t>(monotonicallyIncreasingTimeMS()) - |
238 m_mutedVideoAutoplayOffscreenStartTimeMS; | 238 m_mutedVideoAutoplayOffscreenStartTimeMS; |
239 else | 239 } else { |
240 m_mutedVideoAutoplayOffscreenStartTimeMS = | 240 m_mutedVideoAutoplayOffscreenStartTimeMS = |
241 static_cast<int64_t>(monotonicallyIncreasingTimeMS()); | 241 static_cast<int64_t>(monotonicallyIncreasingTimeMS()); |
| 242 } |
242 | 243 |
243 m_isVisible = isVisible; | 244 m_isVisible = isVisible; |
244 } | 245 } |
245 | 246 |
246 void AutoplayUmaHelper::handleEvent(ExecutionContext* executionContext, | 247 void AutoplayUmaHelper::handleEvent(ExecutionContext* executionContext, |
247 Event* event) { | 248 Event* event) { |
248 if (event->type() == EventTypeNames::playing) | 249 if (event->type() == EventTypeNames::playing) |
249 handlePlayingEvent(); | 250 handlePlayingEvent(); |
250 else if (event->type() == EventTypeNames::pause) | 251 else if (event->type() == EventTypeNames::pause) |
251 handlePauseEvent(); | 252 handlePauseEvent(); |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
319 wrapWeakPersistent(this))); | 320 wrapWeakPersistent(this))); |
320 m_mutedVideoOffscreenDurationVisibilityObserver->start(); | 321 m_mutedVideoOffscreenDurationVisibilityObserver->start(); |
321 m_element->addEventListener(EventTypeNames::pause, this, false); | 322 m_element->addEventListener(EventTypeNames::pause, this, false); |
322 setContext(&m_element->document()); | 323 setContext(&m_element->document()); |
323 } | 324 } |
324 | 325 |
325 void AutoplayUmaHelper::maybeStopRecordingMutedVideoOffscreenDuration() { | 326 void AutoplayUmaHelper::maybeStopRecordingMutedVideoOffscreenDuration() { |
326 if (!m_mutedVideoOffscreenDurationVisibilityObserver) | 327 if (!m_mutedVideoOffscreenDurationVisibilityObserver) |
327 return; | 328 return; |
328 | 329 |
329 if (!m_isVisible) | 330 if (!m_isVisible) { |
330 m_mutedVideoAutoplayOffscreenDurationMS += | 331 m_mutedVideoAutoplayOffscreenDurationMS += |
331 static_cast<int64_t>(monotonicallyIncreasingTimeMS()) - | 332 static_cast<int64_t>(monotonicallyIncreasingTimeMS()) - |
332 m_mutedVideoAutoplayOffscreenStartTimeMS; | 333 m_mutedVideoAutoplayOffscreenStartTimeMS; |
| 334 } |
333 | 335 |
334 // Since histograms uses int32_t, the duration needs to be limited to | 336 // Since histograms uses int32_t, the duration needs to be limited to |
335 // std::numeric_limits<int32_t>::max(). | 337 // std::numeric_limits<int32_t>::max(). |
336 int32_t boundedTime = static_cast<int32_t>( | 338 int32_t boundedTime = static_cast<int32_t>( |
337 std::min<int64_t>(m_mutedVideoAutoplayOffscreenDurationMS, | 339 std::min<int64_t>(m_mutedVideoAutoplayOffscreenDurationMS, |
338 std::numeric_limits<int32_t>::max())); | 340 std::numeric_limits<int32_t>::max())); |
339 | 341 |
340 DCHECK(m_sources.count(AutoplaySource::Method)); | 342 DCHECK(m_sources.count(AutoplaySource::Method)); |
341 | 343 |
342 DEFINE_STATIC_LOCAL( | 344 DEFINE_STATIC_LOCAL( |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
386 | 388 |
387 DEFINE_TRACE(AutoplayUmaHelper) { | 389 DEFINE_TRACE(AutoplayUmaHelper) { |
388 EventListener::trace(visitor); | 390 EventListener::trace(visitor); |
389 ContextLifecycleObserver::trace(visitor); | 391 ContextLifecycleObserver::trace(visitor); |
390 visitor->trace(m_element); | 392 visitor->trace(m_element); |
391 visitor->trace(m_mutedVideoPlayMethodVisibilityObserver); | 393 visitor->trace(m_mutedVideoPlayMethodVisibilityObserver); |
392 visitor->trace(m_mutedVideoOffscreenDurationVisibilityObserver); | 394 visitor->trace(m_mutedVideoOffscreenDurationVisibilityObserver); |
393 } | 395 } |
394 | 396 |
395 } // namespace blink | 397 } // namespace blink |
OLD | NEW |