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

Side by Side Diff: third_party/WebKit/Source/core/html/track/vtt/VTTRegion.cpp

Issue 2684633005: Move VTTRegion Timers to TaskRunnerTimer (Closed)
Patch Set: Created 3 years, 10 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 18 matching lines...) Expand all
29 */ 29 */
30 30
31 #include "core/html/track/vtt/VTTRegion.h" 31 #include "core/html/track/vtt/VTTRegion.h"
32 32
33 #include "bindings/core/v8/ExceptionMessages.h" 33 #include "bindings/core/v8/ExceptionMessages.h"
34 #include "bindings/core/v8/ExceptionState.h" 34 #include "bindings/core/v8/ExceptionState.h"
35 #include "core/dom/ClientRect.h" 35 #include "core/dom/ClientRect.h"
36 #include "core/dom/DOMTokenList.h" 36 #include "core/dom/DOMTokenList.h"
37 #include "core/dom/ElementTraversal.h" 37 #include "core/dom/ElementTraversal.h"
38 #include "core/dom/ExceptionCode.h" 38 #include "core/dom/ExceptionCode.h"
39 #include "core/dom/TaskRunnerHelper.h"
39 #include "core/html/HTMLDivElement.h" 40 #include "core/html/HTMLDivElement.h"
40 #include "core/html/track/vtt/VTTParser.h" 41 #include "core/html/track/vtt/VTTParser.h"
41 #include "core/html/track/vtt/VTTScanner.h" 42 #include "core/html/track/vtt/VTTScanner.h"
42 #include "wtf/MathExtras.h" 43 #include "wtf/MathExtras.h"
43 #include "wtf/text/StringBuilder.h" 44 #include "wtf/text/StringBuilder.h"
44 45
45 #define VTT_LOG_LEVEL 3 46 #define VTT_LOG_LEVEL 3
46 47
47 namespace blink { 48 namespace blink {
48 49
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 } 85 }
85 86
86 VTTRegion::VTTRegion() 87 VTTRegion::VTTRegion()
87 : m_id(emptyString), 88 : m_id(emptyString),
88 m_width(defaultWidth), 89 m_width(defaultWidth),
89 m_heightInLines(defaultHeightInLines), 90 m_heightInLines(defaultHeightInLines),
90 m_regionAnchor(FloatPoint(defaultAnchorPointX, defaultAnchorPointY)), 91 m_regionAnchor(FloatPoint(defaultAnchorPointX, defaultAnchorPointY)),
91 m_viewportAnchor(FloatPoint(defaultAnchorPointX, defaultAnchorPointY)), 92 m_viewportAnchor(FloatPoint(defaultAnchorPointX, defaultAnchorPointY)),
92 m_scroll(defaultScroll), 93 m_scroll(defaultScroll),
93 m_track(nullptr), 94 m_track(nullptr),
94 m_currentTop(0), 95 m_currentTop(0) {}
95 m_scrollTimer(this, &VTTRegion::scrollTimerFired) {}
96 96
97 VTTRegion::~VTTRegion() {} 97 VTTRegion::~VTTRegion() {}
98 98
99 void VTTRegion::setTrack(TextTrack* track) { 99 void VTTRegion::setTrack(TextTrack* track) {
100 m_track = track; 100 m_track = track;
101 } 101 }
102 102
103 void VTTRegion::setId(const String& id) { 103 void VTTRegion::setId(const String& id) {
104 m_id = id; 104 m_id = id;
105 } 105 }
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 DEFINE_STATIC_LOCAL(const AtomicString, trackRegionShadowPseudoId, 312 DEFINE_STATIC_LOCAL(const AtomicString, trackRegionShadowPseudoId,
313 ("-webkit-media-text-track-region")); 313 ("-webkit-media-text-track-region"));
314 314
315 return trackRegionShadowPseudoId; 315 return trackRegionShadowPseudoId;
316 } 316 }
317 317
318 HTMLDivElement* VTTRegion::getDisplayTree(Document& document) { 318 HTMLDivElement* VTTRegion::getDisplayTree(Document& document) {
319 if (!m_regionDisplayTree) { 319 if (!m_regionDisplayTree) {
320 m_regionDisplayTree = HTMLDivElement::create(document); 320 m_regionDisplayTree = HTMLDivElement::create(document);
321 prepareRegionDisplayTree(); 321 prepareRegionDisplayTree();
322 prepareScrollTimer(document);
322 } 323 }
323 324
324 return m_regionDisplayTree; 325 return m_regionDisplayTree;
325 } 326 }
326 327
327 void VTTRegion::willRemoveVTTCueBox(VTTCueBox* box) { 328 void VTTRegion::willRemoveVTTCueBox(VTTCueBox* box) {
328 DVLOG(VTT_LOG_LEVEL) << "willRemoveVTTCueBox"; 329 DVLOG(VTT_LOG_LEVEL) << "willRemoveVTTCueBox";
329 DCHECK(m_cueContainer->contains(box)); 330 DCHECK(m_cueContainer->contains(box));
330 331
331 double boxHeight = box->getBoundingClientRect()->bottom() - 332 double boxHeight = box->getBoundingClientRect()->bottom() -
(...skipping 18 matching lines...) Expand all
350 } 351 }
351 352
352 void VTTRegion::displayLastVTTCueBox() { 353 void VTTRegion::displayLastVTTCueBox() {
353 DVLOG(VTT_LOG_LEVEL) << "displayLastVTTCueBox"; 354 DVLOG(VTT_LOG_LEVEL) << "displayLastVTTCueBox";
354 DCHECK(m_cueContainer); 355 DCHECK(m_cueContainer);
355 356
356 // FIXME: This should not be causing recalc styles in a loop to set the "top" 357 // FIXME: This should not be causing recalc styles in a loop to set the "top"
357 // css property to move elements. We should just scroll the text track cues on 358 // css property to move elements. We should just scroll the text track cues on
358 // the compositor with an animation. 359 // the compositor with an animation.
359 360
360 if (m_scrollTimer.isActive()) 361 if (!m_scrollTimer || m_scrollTimer->isActive())
361 return; 362 return;
362 363
363 // If it's a scrolling region, add the scrolling class. 364 // If it's a scrolling region, add the scrolling class.
364 if (isScrollingRegion()) 365 if (isScrollingRegion())
365 m_cueContainer->classList().add(textTrackCueContainerScrollingClass(), 366 m_cueContainer->classList().add(textTrackCueContainerScrollingClass(),
366 ASSERT_NO_EXCEPTION); 367 ASSERT_NO_EXCEPTION);
367 368
368 float regionBottom = m_regionDisplayTree->getBoundingClientRect()->bottom(); 369 float regionBottom = m_regionDisplayTree->getBoundingClientRect()->bottom();
369 370
370 // Find first cue that is not entirely displayed and scroll it upwards. 371 // Find first cue that is not entirely displayed and scroll it upwards.
371 for (Element* child = ElementTraversal::firstChild(*m_cueContainer); 372 for (Element* child = ElementTraversal::firstChild(*m_cueContainer);
372 child && !m_scrollTimer.isActive(); 373 child && !m_scrollTimer->isActive();
373 child = ElementTraversal::nextSibling(*child)) { 374 child = ElementTraversal::nextSibling(*child)) {
374 ClientRect* clientRect = child->getBoundingClientRect(); 375 ClientRect* clientRect = child->getBoundingClientRect();
375 float childTop = clientRect->top(); 376 float childTop = clientRect->top();
376 float childBottom = clientRect->bottom(); 377 float childBottom = clientRect->bottom();
377 378
378 if (regionBottom >= childBottom) 379 if (regionBottom >= childBottom)
379 continue; 380 continue;
380 381
381 float height = childBottom - childTop; 382 float height = childBottom - childTop;
382 383
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 m_cueContainer->setInlineStyleProperty(CSSPropertyTop, 0.0, 433 m_cueContainer->setInlineStyleProperty(CSSPropertyTop, 0.0,
433 CSSPrimitiveValue::UnitType::Pixels); 434 CSSPrimitiveValue::UnitType::Pixels);
434 435
435 m_cueContainer->setShadowPseudoId(textTrackCueContainerShadowPseudoId()); 436 m_cueContainer->setShadowPseudoId(textTrackCueContainerShadowPseudoId());
436 m_regionDisplayTree->appendChild(m_cueContainer); 437 m_regionDisplayTree->appendChild(m_cueContainer);
437 438
438 // 7.5 Every WebVTT region object is initialised with the following CSS 439 // 7.5 Every WebVTT region object is initialised with the following CSS
439 m_regionDisplayTree->setShadowPseudoId(textTrackRegionShadowPseudoId()); 440 m_regionDisplayTree->setShadowPseudoId(textTrackRegionShadowPseudoId());
440 } 441 }
441 442
443 void VTTRegion::prepareScrollTimer(Document& document) {
fs 2017/02/08 11:57:54 Maybe just fold this into startTimer(), and possib
444 DCHECK(!m_scrollTimer);
445 m_scrollTimer = WTF::makeUnique<TaskRunnerTimer<VTTRegion>>(
446 TaskRunnerHelper::get(TaskType::MediaElementEvent, &document), this,
haraken 2017/02/08 11:49:40 foolip@ should know better but I guess this is not
fs 2017/02/08 11:57:54 AFAIK, this timer is an implementation detail, so
foolip 2017/02/08 13:46:38 Yep, I think so too. If that means that the &docum
447 &VTTRegion::scrollTimerFired);
448 }
449
442 void VTTRegion::startTimer() { 450 void VTTRegion::startTimer() {
451 DCHECK(m_scrollTimer);
443 DVLOG(VTT_LOG_LEVEL) << "startTimer"; 452 DVLOG(VTT_LOG_LEVEL) << "startTimer";
444 453
445 if (m_scrollTimer.isActive()) 454 if (m_scrollTimer->isActive())
446 return; 455 return;
447 456
448 double duration = isScrollingRegion() ? scrollTime : 0; 457 double duration = isScrollingRegion() ? scrollTime : 0;
449 m_scrollTimer.startOneShot(duration, BLINK_FROM_HERE); 458 m_scrollTimer->startOneShot(duration, BLINK_FROM_HERE);
450 } 459 }
451 460
452 void VTTRegion::stopTimer() { 461 void VTTRegion::stopTimer() {
453 DVLOG(VTT_LOG_LEVEL) << "stopTimer"; 462 DVLOG(VTT_LOG_LEVEL) << "stopTimer";
454 m_scrollTimer.stop(); 463 m_scrollTimer->stop();
455 } 464 }
456 465
457 void VTTRegion::scrollTimerFired(TimerBase*) { 466 void VTTRegion::scrollTimerFired(TimerBase*) {
458 DVLOG(VTT_LOG_LEVEL) << "scrollTimerFired"; 467 DVLOG(VTT_LOG_LEVEL) << "scrollTimerFired";
459 468
460 stopTimer(); 469 stopTimer();
461 displayLastVTTCueBox(); 470 displayLastVTTCueBox();
462 } 471 }
463 472
464 DEFINE_TRACE(VTTRegion) { 473 DEFINE_TRACE(VTTRegion) {
465 visitor->trace(m_cueContainer); 474 visitor->trace(m_cueContainer);
466 visitor->trace(m_regionDisplayTree); 475 visitor->trace(m_regionDisplayTree);
467 visitor->trace(m_track); 476 visitor->trace(m_track);
468 } 477 }
469 478
470 } // namespace blink 479 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698