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

Side by Side Diff: Source/core/svg/animation/SMILTimeContainer.cpp

Issue 397733004: Allow assertions to be enabled in Blink Release builds. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebased. Created 6 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/svg/animation/SMILTimeContainer.h ('k') | Source/core/xml/XPathNodeSet.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2008 Apple Inc. All rights reserved. 2 * Copyright (C) 2008 Apple 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 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 SMILTimeContainer::SMILTimeContainer(SVGSVGElement& owner) 52 SMILTimeContainer::SMILTimeContainer(SVGSVGElement& owner)
53 : m_beginTime(0) 53 : m_beginTime(0)
54 , m_pauseTime(0) 54 , m_pauseTime(0)
55 , m_resumeTime(0) 55 , m_resumeTime(0)
56 , m_accumulatedActiveTime(0) 56 , m_accumulatedActiveTime(0)
57 , m_presetStartTime(0) 57 , m_presetStartTime(0)
58 , m_frameSchedulingState(Idle) 58 , m_frameSchedulingState(Idle)
59 , m_documentOrderIndexesDirty(false) 59 , m_documentOrderIndexesDirty(false)
60 , m_wakeupTimer(this, &SMILTimeContainer::wakeupTimerFired) 60 , m_wakeupTimer(this, &SMILTimeContainer::wakeupTimerFired)
61 , m_ownerSVGElement(owner) 61 , m_ownerSVGElement(owner)
62 #ifndef NDEBUG 62 #if ENABLE(ASSERT)
63 , m_preventScheduledAnimationsChanges(false) 63 , m_preventScheduledAnimationsChanges(false)
64 #endif 64 #endif
65 { 65 {
66 } 66 }
67 67
68 SMILTimeContainer::~SMILTimeContainer() 68 SMILTimeContainer::~SMILTimeContainer()
69 { 69 {
70 cancelAnimationFrame(); 70 cancelAnimationFrame();
71 ASSERT(!m_wakeupTimer.isActive()); 71 ASSERT(!m_wakeupTimer.isActive());
72 #ifndef NDEBUG 72 #if ENABLE(ASSERT)
73 ASSERT(!m_preventScheduledAnimationsChanges); 73 ASSERT(!m_preventScheduledAnimationsChanges);
74 #endif 74 #endif
75 } 75 }
76 76
77 void SMILTimeContainer::schedule(SVGSMILElement* animation, SVGElement* target, const QualifiedName& attributeName) 77 void SMILTimeContainer::schedule(SVGSMILElement* animation, SVGElement* target, const QualifiedName& attributeName)
78 { 78 {
79 ASSERT(animation->timeContainer() == this); 79 ASSERT(animation->timeContainer() == this);
80 ASSERT(target); 80 ASSERT(target);
81 ASSERT(animation->hasValidAttributeName()); 81 ASSERT(animation->hasValidAttributeName());
82 82
83 #ifndef NDEBUG 83 #if ENABLE(ASSERT)
84 ASSERT(!m_preventScheduledAnimationsChanges); 84 ASSERT(!m_preventScheduledAnimationsChanges);
85 #endif 85 #endif
86 86
87 ElementAttributePair key(target, attributeName); 87 ElementAttributePair key(target, attributeName);
88 OwnPtrWillBeMember<AnimationsLinkedHashSet>& scheduled = m_scheduledAnimatio ns.add(key, nullptr).storedValue->value; 88 OwnPtrWillBeMember<AnimationsLinkedHashSet>& scheduled = m_scheduledAnimatio ns.add(key, nullptr).storedValue->value;
89 if (!scheduled) 89 if (!scheduled)
90 scheduled = adoptPtrWillBeNoop(new AnimationsLinkedHashSet); 90 scheduled = adoptPtrWillBeNoop(new AnimationsLinkedHashSet);
91 ASSERT(!scheduled->contains(animation)); 91 ASSERT(!scheduled->contains(animation));
92 scheduled->add(animation); 92 scheduled->add(animation);
93 93
94 SMILTime nextFireTime = animation->nextProgressTime(); 94 SMILTime nextFireTime = animation->nextProgressTime();
95 if (nextFireTime.isFinite()) 95 if (nextFireTime.isFinite())
96 notifyIntervalsChanged(); 96 notifyIntervalsChanged();
97 } 97 }
98 98
99 void SMILTimeContainer::unschedule(SVGSMILElement* animation, SVGElement* target , const QualifiedName& attributeName) 99 void SMILTimeContainer::unschedule(SVGSMILElement* animation, SVGElement* target , const QualifiedName& attributeName)
100 { 100 {
101 ASSERT(animation->timeContainer() == this); 101 ASSERT(animation->timeContainer() == this);
102 102
103 #ifndef NDEBUG 103 #if ENABLE(ASSERT)
104 ASSERT(!m_preventScheduledAnimationsChanges); 104 ASSERT(!m_preventScheduledAnimationsChanges);
105 #endif 105 #endif
106 106
107 ElementAttributePair key(target, attributeName); 107 ElementAttributePair key(target, attributeName);
108 GroupedAnimationsMap::iterator it = m_scheduledAnimations.find(key); 108 GroupedAnimationsMap::iterator it = m_scheduledAnimations.find(key);
109 ASSERT(it != m_scheduledAnimations.end()); 109 ASSERT(it != m_scheduledAnimations.end());
110 AnimationsLinkedHashSet* scheduled = it->value.get(); 110 AnimationsLinkedHashSet* scheduled = it->value.get();
111 ASSERT(scheduled); 111 ASSERT(scheduled);
112 AnimationsLinkedHashSet::iterator itAnimation = scheduled->find(animation); 112 AnimationsLinkedHashSet::iterator itAnimation = scheduled->find(animation);
113 ASSERT(itAnimation != scheduled->end()); 113 ASSERT(itAnimation != scheduled->end());
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 double now = currentTime(); 226 double now = currentTime();
227 m_beginTime = now - time.value(); 227 m_beginTime = now - time.value();
228 m_resumeTime = 0; 228 m_resumeTime = 0;
229 if (m_pauseTime) { 229 if (m_pauseTime) {
230 m_pauseTime = now; 230 m_pauseTime = now;
231 m_accumulatedActiveTime = time.value(); 231 m_accumulatedActiveTime = time.value();
232 } else { 232 } else {
233 m_accumulatedActiveTime = 0; 233 m_accumulatedActiveTime = 0;
234 } 234 }
235 235
236 #ifndef NDEBUG 236 #if ENABLE(ASSERT)
237 m_preventScheduledAnimationsChanges = true; 237 m_preventScheduledAnimationsChanges = true;
238 #endif 238 #endif
239 GroupedAnimationsMap::iterator end = m_scheduledAnimations.end(); 239 GroupedAnimationsMap::iterator end = m_scheduledAnimations.end();
240 for (GroupedAnimationsMap::iterator it = m_scheduledAnimations.begin(); it ! = end; ++it) { 240 for (GroupedAnimationsMap::iterator it = m_scheduledAnimations.begin(); it ! = end; ++it) {
241 if (!it->key.first) 241 if (!it->key.first)
242 continue; 242 continue;
243 243
244 AnimationsLinkedHashSet* scheduled = it->value.get(); 244 AnimationsLinkedHashSet* scheduled = it->value.get();
245 for (AnimationsLinkedHashSet::const_iterator itAnimation = scheduled->be gin(), itAnimationEnd = scheduled->end(); itAnimation != itAnimationEnd; ++itAni mation) 245 for (AnimationsLinkedHashSet::const_iterator itAnimation = scheduled->be gin(), itAnimationEnd = scheduled->end(); itAnimation != itAnimationEnd; ++itAni mation)
246 (*itAnimation)->reset(); 246 (*itAnimation)->reset();
247 } 247 }
248 #ifndef NDEBUG 248 #if ENABLE(ASSERT)
249 m_preventScheduledAnimationsChanges = false; 249 m_preventScheduledAnimationsChanges = false;
250 #endif 250 #endif
251 251
252 updateAnimationsAndScheduleFrameIfNeeded(time, true); 252 updateAnimationsAndScheduleFrameIfNeeded(time, true);
253 } 253 }
254 254
255 bool SMILTimeContainer::isTimelineRunning() const 255 bool SMILTimeContainer::isTimelineRunning() const
256 { 256 {
257 return m_beginTime && !isPaused(); 257 return m_beginTime && !isPaused();
258 } 258 }
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 if (!earliestFireTime.isFinite()) 365 if (!earliestFireTime.isFinite())
366 return; 366 return;
367 367
368 scheduleAnimationFrame(earliestFireTime); 368 scheduleAnimationFrame(earliestFireTime);
369 } 369 }
370 370
371 SMILTime SMILTimeContainer::updateAnimations(SMILTime elapsed, bool seekToTime) 371 SMILTime SMILTimeContainer::updateAnimations(SMILTime elapsed, bool seekToTime)
372 { 372 {
373 SMILTime earliestFireTime = SMILTime::unresolved(); 373 SMILTime earliestFireTime = SMILTime::unresolved();
374 374
375 #ifndef NDEBUG 375 #if ENABLE(ASSERT)
376 // This boolean will catch any attempts to schedule/unschedule scheduledAnim ations during this critical section. 376 // This boolean will catch any attempts to schedule/unschedule scheduledAnim ations during this critical section.
377 // Similarly, any elements removed will unschedule themselves, so this will catch modification of animationsToApply. 377 // Similarly, any elements removed will unschedule themselves, so this will catch modification of animationsToApply.
378 m_preventScheduledAnimationsChanges = true; 378 m_preventScheduledAnimationsChanges = true;
379 #endif 379 #endif
380 380
381 if (m_documentOrderIndexesDirty) 381 if (m_documentOrderIndexesDirty)
382 updateDocumentOrderIndexes(); 382 updateDocumentOrderIndexes();
383 383
384 WillBeHeapHashSet<ElementAttributePair> invalidKeys; 384 WillBeHeapHashSet<ElementAttributePair> invalidKeys;
385 typedef WillBeHeapVector<RefPtrWillBeMember<SVGSMILElement> > AnimationsVect or; 385 typedef WillBeHeapVector<RefPtrWillBeMember<SVGSMILElement> > AnimationsVect or;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
426 426
427 if (resultElement) 427 if (resultElement)
428 animationsToApply.append(resultElement); 428 animationsToApply.append(resultElement);
429 } 429 }
430 m_scheduledAnimations.removeAll(invalidKeys); 430 m_scheduledAnimations.removeAll(invalidKeys);
431 431
432 std::sort(animationsToApply.begin(), animationsToApply.end(), PriorityCompar e(elapsed)); 432 std::sort(animationsToApply.begin(), animationsToApply.end(), PriorityCompar e(elapsed));
433 433
434 unsigned animationsToApplySize = animationsToApply.size(); 434 unsigned animationsToApplySize = animationsToApply.size();
435 if (!animationsToApplySize) { 435 if (!animationsToApplySize) {
436 #ifndef NDEBUG 436 #if ENABLE(ASSERT)
437 m_preventScheduledAnimationsChanges = false; 437 m_preventScheduledAnimationsChanges = false;
438 #endif 438 #endif
439 return earliestFireTime; 439 return earliestFireTime;
440 } 440 }
441 441
442 // Apply results to target elements. 442 // Apply results to target elements.
443 for (unsigned i = 0; i < animationsToApplySize; ++i) 443 for (unsigned i = 0; i < animationsToApplySize; ++i)
444 animationsToApply[i]->applyResultsToTarget(); 444 animationsToApply[i]->applyResultsToTarget();
445 445
446 #ifndef NDEBUG 446 #if ENABLE(ASSERT)
447 m_preventScheduledAnimationsChanges = false; 447 m_preventScheduledAnimationsChanges = false;
448 #endif 448 #endif
449 449
450 for (unsigned i = 0; i < animationsToApplySize; ++i) { 450 for (unsigned i = 0; i < animationsToApplySize; ++i) {
451 if (animationsToApply[i]->inDocument() && animationsToApply[i]->isSVGDis cardElement()) { 451 if (animationsToApply[i]->inDocument() && animationsToApply[i]->isSVGDis cardElement()) {
452 RefPtrWillBeRawPtr<SVGSMILElement> animDiscard = animationsToApply[i ]; 452 RefPtrWillBeRawPtr<SVGSMILElement> animDiscard = animationsToApply[i ];
453 RefPtrWillBeRawPtr<SVGElement> targetElement = animDiscard->targetEl ement(); 453 RefPtrWillBeRawPtr<SVGElement> targetElement = animDiscard->targetEl ement();
454 if (targetElement && targetElement->inDocument()) { 454 if (targetElement && targetElement->inDocument()) {
455 targetElement->remove(IGNORE_EXCEPTION); 455 targetElement->remove(IGNORE_EXCEPTION);
456 ASSERT(!targetElement->inDocument()); 456 ASSERT(!targetElement->inDocument());
457 } 457 }
458 458
459 if (animDiscard->inDocument()) { 459 if (animDiscard->inDocument()) {
460 animDiscard->remove(IGNORE_EXCEPTION); 460 animDiscard->remove(IGNORE_EXCEPTION);
461 ASSERT(!animDiscard->inDocument()); 461 ASSERT(!animDiscard->inDocument());
462 } 462 }
463 } 463 }
464 } 464 }
465 return earliestFireTime; 465 return earliestFireTime;
466 } 466 }
467 467
468 void SMILTimeContainer::trace(Visitor* visitor) 468 void SMILTimeContainer::trace(Visitor* visitor)
469 { 469 {
470 visitor->trace(m_scheduledAnimations); 470 visitor->trace(m_scheduledAnimations);
471 } 471 }
472 472
473 } 473 }
OLDNEW
« no previous file with comments | « Source/core/svg/animation/SMILTimeContainer.h ('k') | Source/core/xml/XPathNodeSet.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698