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

Side by Side Diff: third_party/WebKit/Source/core/svg/animation/SVGSMILElement.cpp

Issue 2390773004: reflow comments in core/svg/ (Closed)
Patch Set: comments (heh!) Created 4 years, 2 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) 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 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 if (!svgTarget) { 210 if (!svgTarget) {
211 // Do not register as pending if we are already pending this resource. 211 // Do not register as pending if we are already pending this resource.
212 if (document().accessSVGExtensions().isElementPendingResource(this, id)) 212 if (document().accessSVGExtensions().isElementPendingResource(this, id))
213 return; 213 return;
214 214
215 if (!id.isEmpty()) { 215 if (!id.isEmpty()) {
216 document().accessSVGExtensions().addPendingResource(id, this); 216 document().accessSVGExtensions().addPendingResource(id, this);
217 ASSERT(hasPendingResources()); 217 ASSERT(hasPendingResources());
218 } 218 }
219 } else { 219 } else {
220 // Register us with the target in the dependencies map. Any change of hrefEl ement 220 // Register us with the target in the dependencies map. Any change of
221 // that leads to relayout/repainting now informs us, so we can react to it. 221 // hrefElement that leads to relayout/repainting now informs us, so we can
222 // react to it.
222 addReferenceTo(svgTarget); 223 addReferenceTo(svgTarget);
223 } 224 }
224 connectEventBaseConditions(); 225 connectEventBaseConditions();
225 } 226 }
226 227
227 static inline QualifiedName constructQualifiedName( 228 static inline QualifiedName constructQualifiedName(
228 const SVGElement* svgElement, 229 const SVGElement* svgElement,
229 const AtomicString& attributeName) { 230 const AtomicString& attributeName) {
230 ASSERT(svgElement); 231 ASSERT(svgElement);
231 if (attributeName.isEmpty()) 232 if (attributeName.isEmpty())
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
288 setAttributeName(constructQualifiedName( 289 setAttributeName(constructQualifiedName(
289 this, fastGetAttribute(SVGNames::attributeNameAttr))); 290 this, fastGetAttribute(SVGNames::attributeNameAttr)));
290 SVGSVGElement* owner = ownerSVGElement(); 291 SVGSVGElement* owner = ownerSVGElement();
291 if (!owner) 292 if (!owner)
292 return InsertionDone; 293 return InsertionDone;
293 294
294 m_timeContainer = owner->timeContainer(); 295 m_timeContainer = owner->timeContainer();
295 ASSERT(m_timeContainer); 296 ASSERT(m_timeContainer);
296 m_timeContainer->setDocumentOrderIndexesDirty(); 297 m_timeContainer->setDocumentOrderIndexesDirty();
297 298
298 // "If no attribute is present, the default begin value (an offset-value of 0) must be evaluated." 299 // "If no attribute is present, the default begin value (an offset-value of 0)
300 // must be evaluated."
299 if (!fastHasAttribute(SVGNames::beginAttr)) 301 if (!fastHasAttribute(SVGNames::beginAttr))
300 m_beginTimes.append(SMILTimeWithOrigin()); 302 m_beginTimes.append(SMILTimeWithOrigin());
301 303
302 if (m_isWaitingForFirstInterval) 304 if (m_isWaitingForFirstInterval)
303 resolveFirstInterval(); 305 resolveFirstInterval();
304 306
305 if (m_timeContainer) 307 if (m_timeContainer)
306 m_timeContainer->notifyIntervalsChanged(); 308 m_timeContainer->notifyIntervalsChanged();
307 309
308 buildPendingResource(); 310 buildPendingResource();
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
524 m_cachedRepeatCount = invalidCachedTime; 526 m_cachedRepeatCount = invalidCachedTime;
525 } else if (attrName == SVGNames::minAttr) { 527 } else if (attrName == SVGNames::minAttr) {
526 m_cachedMin = invalidCachedTime; 528 m_cachedMin = invalidCachedTime;
527 } else if (attrName == SVGNames::maxAttr) { 529 } else if (attrName == SVGNames::maxAttr) {
528 m_cachedMax = invalidCachedTime; 530 m_cachedMax = invalidCachedTime;
529 } else if (attrName == SVGNames::attributeNameAttr) { 531 } else if (attrName == SVGNames::attributeNameAttr) {
530 setAttributeName(constructQualifiedName( 532 setAttributeName(constructQualifiedName(
531 this, fastGetAttribute(SVGNames::attributeNameAttr))); 533 this, fastGetAttribute(SVGNames::attributeNameAttr)));
532 } else if (attrName.matches(SVGNames::hrefAttr) || 534 } else if (attrName.matches(SVGNames::hrefAttr) ||
533 attrName.matches(XLinkNames::hrefAttr)) { 535 attrName.matches(XLinkNames::hrefAttr)) {
534 // TODO(fs): Could be smarter here when 'href' is specified and 'xlink:href' is changed. 536 // TODO(fs): Could be smarter here when 'href' is specified and 'xlink:href'
537 // is changed.
535 SVGElement::InvalidationGuard invalidationGuard(this); 538 SVGElement::InvalidationGuard invalidationGuard(this);
536 buildPendingResource(); 539 buildPendingResource();
537 if (m_targetElement) 540 if (m_targetElement)
538 clearAnimatedType(); 541 clearAnimatedType();
539 } else if (attrName == SVGNames::beginAttr || attrName == SVGNames::endAttr) { 542 } else if (attrName == SVGNames::beginAttr || attrName == SVGNames::endAttr) {
540 if (isConnected()) { 543 if (isConnected()) {
541 connectEventBaseConditions(); 544 connectEventBaseConditions();
542 if (attrName == SVGNames::beginAttr) 545 if (attrName == SVGNames::beginAttr)
543 beginListChanged(elapsed()); 546 beginListChanged(elapsed());
544 else if (attrName == SVGNames::endAttr) 547 else if (attrName == SVGNames::endAttr)
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
654 657
655 void SVGSMILElement::setTargetElement(SVGElement* target) { 658 void SVGSMILElement::setTargetElement(SVGElement* target) {
656 unscheduleIfScheduled(); 659 unscheduleIfScheduled();
657 660
658 if (m_targetElement) { 661 if (m_targetElement) {
659 // Clear values that may depend on the previous target. 662 // Clear values that may depend on the previous target.
660 clearAnimatedType(); 663 clearAnimatedType();
661 disconnectSyncBaseConditions(); 664 disconnectSyncBaseConditions();
662 } 665 }
663 666
664 // If the animation state is not Inactive, always reset to a clear state befor e leaving the old target element. 667 // If the animation state is not Inactive, always reset to a clear state
668 // before leaving the old target element.
665 if (m_activeState != Inactive) 669 if (m_activeState != Inactive)
666 endedActiveInterval(); 670 endedActiveInterval();
667 671
668 m_targetElement = target; 672 m_targetElement = target;
669 schedule(); 673 schedule();
670 } 674 }
671 675
672 SMILTime SVGSMILElement::elapsed() const { 676 SMILTime SVGSMILElement::elapsed() const {
673 return m_timeContainer ? m_timeContainer->elapsed() : 0; 677 return m_timeContainer ? m_timeContainer->elapsed() : 0;
674 } 678 }
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
788 792
789 const SMILTimeWithOrigin dummyTimeWithOrigin( 793 const SMILTimeWithOrigin dummyTimeWithOrigin(
790 minimumTime, SMILTimeWithOrigin::ParserOrigin); 794 minimumTime, SMILTimeWithOrigin::ParserOrigin);
791 const SMILTimeWithOrigin* result = std::lower_bound( 795 const SMILTimeWithOrigin* result = std::lower_bound(
792 list.begin(), list.end(), dummyTimeWithOrigin, compareTimes); 796 list.begin(), list.end(), dummyTimeWithOrigin, compareTimes);
793 int indexOfResult = result - list.begin(); 797 int indexOfResult = result - list.begin();
794 if (indexOfResult == sizeOfList) 798 if (indexOfResult == sizeOfList)
795 return SMILTime::unresolved(); 799 return SMILTime::unresolved();
796 const SMILTime& currentTime = list[indexOfResult].time(); 800 const SMILTime& currentTime = list[indexOfResult].time();
797 801
798 // The special value "indefinite" does not yield an instance time in the begin list. 802 // The special value "indefinite" does not yield an instance time in the begin
803 // list.
799 if (currentTime.isIndefinite() && beginOrEnd == Begin) 804 if (currentTime.isIndefinite() && beginOrEnd == Begin)
800 return SMILTime::unresolved(); 805 return SMILTime::unresolved();
801 806
802 if (currentTime > minimumTime) 807 if (currentTime > minimumTime)
803 return currentTime; 808 return currentTime;
804 809
805 ASSERT(currentTime == minimumTime); 810 ASSERT(currentTime == minimumTime);
806 if (equalsMinimumOK) 811 if (equalsMinimumOK)
807 return currentTime; 812 return currentTime;
808 813
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
1003 if (resolveNextInterval() && elapsed >= m_interval.begin) 1008 if (resolveNextInterval() && elapsed >= m_interval.begin)
1004 return DidRestartInterval; 1009 return DidRestartInterval;
1005 } 1010 }
1006 return DidNotRestartInterval; 1011 return DidNotRestartInterval;
1007 } 1012 }
1008 1013
1009 void SVGSMILElement::seekToIntervalCorrespondingToTime(SMILTime elapsed) { 1014 void SVGSMILElement::seekToIntervalCorrespondingToTime(SMILTime elapsed) {
1010 ASSERT(!m_isWaitingForFirstInterval); 1015 ASSERT(!m_isWaitingForFirstInterval);
1011 ASSERT(elapsed >= m_interval.begin); 1016 ASSERT(elapsed >= m_interval.begin);
1012 1017
1013 // Manually seek from interval to interval, just as if the animation would run regulary. 1018 // Manually seek from interval to interval, just as if the animation would run
1019 // regulary.
1014 while (true) { 1020 while (true) {
1015 // Figure out the next value in the begin time list after the current interv al begin. 1021 // Figure out the next value in the begin time list after the current
1022 // interval begin.
1016 SMILTime nextBegin = findInstanceTime(Begin, m_interval.begin, false); 1023 SMILTime nextBegin = findInstanceTime(Begin, m_interval.begin, false);
1017 1024
1018 // If the 'nextBegin' time is unresolved (eg. just one defined interval), we 're done seeking. 1025 // If the 'nextBegin' time is unresolved (eg. just one defined interval),
1026 // we're done seeking.
1019 if (nextBegin.isUnresolved()) 1027 if (nextBegin.isUnresolved())
1020 return; 1028 return;
1021 1029
1022 // If the 'nextBegin' time is larger than or equal to the current interval e nd time, we're done seeking. 1030 // If the 'nextBegin' time is larger than or equal to the current interval
1023 // If the 'elapsed' time is smaller than the next begin interval time, we're done seeking. 1031 // end time, we're done seeking. If the 'elapsed' time is smaller than the
1032 // next begin interval time, we're done seeking.
1024 if (nextBegin < m_interval.end && elapsed >= nextBegin) { 1033 if (nextBegin < m_interval.end && elapsed >= nextBegin) {
1025 // End current interval, and start a new interval from the 'nextBegin' tim e. 1034 // End current interval, and start a new interval from the 'nextBegin'
1035 // time.
1026 m_interval.end = nextBegin; 1036 m_interval.end = nextBegin;
1027 if (!resolveNextInterval()) 1037 if (!resolveNextInterval())
1028 break; 1038 break;
1029 continue; 1039 continue;
1030 } 1040 }
1031 1041
1032 // If the desired 'elapsed' time is past the current interval, advance to th e next. 1042 // If the desired 'elapsed' time is past the current interval, advance to
1043 // the next.
1033 if (elapsed >= m_interval.end) { 1044 if (elapsed >= m_interval.end) {
1034 if (!resolveNextInterval()) 1045 if (!resolveNextInterval())
1035 break; 1046 break;
1036 continue; 1047 continue;
1037 } 1048 }
1038 1049
1039 return; 1050 return;
1040 } 1051 }
1041 } 1052 }
1042 1053
(...skipping 28 matching lines...) Expand all
1071 return 1.0f; 1082 return 1.0f;
1072 return clampTo<float>(percent); 1083 return clampTo<float>(percent);
1073 } 1084 }
1074 repeat = static_cast<unsigned>(activeTime.value() / simpleDuration.value()); 1085 repeat = static_cast<unsigned>(activeTime.value() / simpleDuration.value());
1075 SMILTime simpleTime = fmod(activeTime.value(), simpleDuration.value()); 1086 SMILTime simpleTime = fmod(activeTime.value(), simpleDuration.value());
1076 return clampTo<float>(simpleTime.value() / simpleDuration.value()); 1087 return clampTo<float>(simpleTime.value() / simpleDuration.value());
1077 } 1088 }
1078 1089
1079 SMILTime SVGSMILElement::calculateNextProgressTime(SMILTime elapsed) const { 1090 SMILTime SVGSMILElement::calculateNextProgressTime(SMILTime elapsed) const {
1080 if (m_activeState == Active) { 1091 if (m_activeState == Active) {
1081 // If duration is indefinite the value does not actually change over time. S ame is true for <set>. 1092 // If duration is indefinite the value does not actually change over time.
1093 // Same is true for <set>.
1082 SMILTime simpleDuration = this->simpleDuration(); 1094 SMILTime simpleDuration = this->simpleDuration();
1083 if (simpleDuration.isIndefinite() || isSVGSetElement(*this)) { 1095 if (simpleDuration.isIndefinite() || isSVGSetElement(*this)) {
1084 SMILTime repeatingDurationEnd = m_interval.begin + repeatingDuration(); 1096 SMILTime repeatingDurationEnd = m_interval.begin + repeatingDuration();
1085 // We are supposed to do freeze semantics when repeating ends, even if the element is still active. 1097 // We are supposed to do freeze semantics when repeating ends, even if the
1098 // element is still active.
1086 // Take care that we get a timer callback at that point. 1099 // Take care that we get a timer callback at that point.
1087 if (elapsed < repeatingDurationEnd && 1100 if (elapsed < repeatingDurationEnd &&
1088 repeatingDurationEnd < m_interval.end && 1101 repeatingDurationEnd < m_interval.end &&
1089 repeatingDurationEnd.isFinite()) 1102 repeatingDurationEnd.isFinite())
1090 return repeatingDurationEnd; 1103 return repeatingDurationEnd;
1091 return m_interval.end; 1104 return m_interval.end;
1092 } 1105 }
1093 return elapsed + 0.025; 1106 return elapsed + 0.025;
1094 } 1107 }
1095 return m_interval.begin >= elapsed ? m_interval.begin 1108 return m_interval.begin >= elapsed ? m_interval.begin
1096 : SMILTime::unresolved(); 1109 : SMILTime::unresolved();
1097 } 1110 }
1098 1111
1099 SVGSMILElement::ActiveState SVGSMILElement::determineActiveState( 1112 SVGSMILElement::ActiveState SVGSMILElement::determineActiveState(
1100 SMILTime elapsed) const { 1113 SMILTime elapsed) const {
1101 if (elapsed >= m_interval.begin && elapsed < m_interval.end) 1114 if (elapsed >= m_interval.begin && elapsed < m_interval.end)
1102 return Active; 1115 return Active;
1103 1116
1104 return fill() == FillFreeze ? Frozen : Inactive; 1117 return fill() == FillFreeze ? Frozen : Inactive;
1105 } 1118 }
1106 1119
1107 bool SVGSMILElement::isContributing(SMILTime elapsed) const { 1120 bool SVGSMILElement::isContributing(SMILTime elapsed) const {
1108 // Animation does not contribute during the active time if it is past its repe ating duration and has fill=remove. 1121 // Animation does not contribute during the active time if it is past its
1122 // repeating duration and has fill=remove.
1109 return (m_activeState == Active && 1123 return (m_activeState == Active &&
1110 (fill() == FillFreeze || 1124 (fill() == FillFreeze ||
1111 elapsed <= m_interval.begin + repeatingDuration())) || 1125 elapsed <= m_interval.begin + repeatingDuration())) ||
1112 m_activeState == Frozen; 1126 m_activeState == Frozen;
1113 } 1127 }
1114 1128
1115 bool SVGSMILElement::progress(SMILTime elapsed, bool seekToTime) { 1129 bool SVGSMILElement::progress(SMILTime elapsed, bool seekToTime) {
1116 ASSERT(m_timeContainer); 1130 ASSERT(m_timeContainer);
1117 ASSERT(m_isWaitingForFirstInterval || m_interval.begin.isFinite()); 1131 ASSERT(m_isWaitingForFirstInterval || m_interval.begin.isFinite());
1118 1132
(...skipping 13 matching lines...) Expand all
1132 return m_activeState == Frozen; 1146 return m_activeState == Frozen;
1133 } 1147 }
1134 1148
1135 m_previousIntervalBegin = m_interval.begin; 1149 m_previousIntervalBegin = m_interval.begin;
1136 1150
1137 if (m_isWaitingForFirstInterval) { 1151 if (m_isWaitingForFirstInterval) {
1138 m_isWaitingForFirstInterval = false; 1152 m_isWaitingForFirstInterval = false;
1139 resolveFirstInterval(); 1153 resolveFirstInterval();
1140 } 1154 }
1141 1155
1142 // This call may obtain a new interval -- never call calculateAnimationPercent AndRepeat() before! 1156 // This call may obtain a new interval -- never call
1157 // calculateAnimationPercentAndRepeat() before!
1143 if (seekToTime) { 1158 if (seekToTime) {
1144 seekToIntervalCorrespondingToTime(elapsed); 1159 seekToIntervalCorrespondingToTime(elapsed);
1145 if (elapsed < m_interval.begin) { 1160 if (elapsed < m_interval.begin) {
1146 // elapsed is not within an interval. 1161 // elapsed is not within an interval.
1147 m_nextProgressTime = m_interval.begin; 1162 m_nextProgressTime = m_interval.begin;
1148 return false; 1163 return false;
1149 } 1164 }
1150 } 1165 }
1151 1166
1152 unsigned repeat = 0; 1167 unsigned repeat = 0;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1192 if (m_activeState == Inactive || m_activeState == Frozen) 1207 if (m_activeState == Inactive || m_activeState == Frozen)
1193 scheduleEvent(EventTypeNames::endEvent); 1208 scheduleEvent(EventTypeNames::endEvent);
1194 } 1209 }
1195 1210
1196 m_nextProgressTime = calculateNextProgressTime(elapsed); 1211 m_nextProgressTime = calculateNextProgressTime(elapsed);
1197 return animationIsContributing; 1212 return animationIsContributing;
1198 } 1213 }
1199 1214
1200 void SVGSMILElement::notifyDependentsIntervalChanged() { 1215 void SVGSMILElement::notifyDependentsIntervalChanged() {
1201 ASSERT(m_interval.begin.isFinite()); 1216 ASSERT(m_interval.begin.isFinite());
1202 // |loopBreaker| is used to avoid infinite recursions which may be caused from : 1217 // |loopBreaker| is used to avoid infinite recursions which may be caused by:
1203 // |notifyDependentsIntervalChanged| -> |createInstanceTimesFromSyncbase| -> | add{Begin,End}Time| -> |{begin,end}TimeChanged| -> |notifyDependentsIntervalChan ged| 1218 // |notifyDependentsIntervalChanged| -> |createInstanceTimesFromSyncbase| ->
1219 // |add{Begin,End}Time| -> |{begin,end}TimeChanged| ->
1220 // |notifyDependentsIntervalChanged|
1204 // 1221 //
1205 // As the set here records SVGSMILElements on the stack, it is acceptable to 1222 // As the set here records SVGSMILElements on the stack, it is acceptable to
1206 // use a HashSet of untraced heap references -- any conservative GC which 1223 // use a HashSet of untraced heap references -- any conservative GC which
1207 // strikes before unwinding will find these elements on the stack. 1224 // strikes before unwinding will find these elements on the stack.
1208 DEFINE_STATIC_LOCAL(HashSet<UntracedMember<SVGSMILElement>>, loopBreaker, ()); 1225 DEFINE_STATIC_LOCAL(HashSet<UntracedMember<SVGSMILElement>>, loopBreaker, ());
1209 if (!loopBreaker.add(this).isNewEntry) 1226 if (!loopBreaker.add(this).isNewEntry)
1210 return; 1227 return;
1211 1228
1212 for (SVGSMILElement* element : m_syncBaseDependents) 1229 for (SVGSMILElement* element : m_syncBaseDependents)
1213 element->createInstanceTimesFromSyncbase(this); 1230 element->createInstanceTimesFromSyncbase(this);
1214 1231
1215 loopBreaker.remove(this); 1232 loopBreaker.remove(this);
1216 } 1233 }
1217 1234
1218 void SVGSMILElement::createInstanceTimesFromSyncbase(SVGSMILElement* syncBase) { 1235 void SVGSMILElement::createInstanceTimesFromSyncbase(SVGSMILElement* syncBase) {
1219 // FIXME: To be really correct, this should handle updating exising interval b y changing 1236 // FIXME: To be really correct, this should handle updating exising interval
1220 // the associated times instead of creating new ones. 1237 // by changing the associated times instead of creating new ones.
1221 for (unsigned n = 0; n < m_conditions.size(); ++n) { 1238 for (unsigned n = 0; n < m_conditions.size(); ++n) {
1222 Condition* condition = m_conditions[n].get(); 1239 Condition* condition = m_conditions[n].get();
1223 if (condition->getType() == Condition::Syncbase && 1240 if (condition->getType() == Condition::Syncbase &&
1224 condition->syncBase() == syncBase) { 1241 condition->syncBase() == syncBase) {
1225 ASSERT(condition->name() == "begin" || condition->name() == "end"); 1242 ASSERT(condition->name() == "begin" || condition->name() == "end");
1226 // No nested time containers in SVG, no need for crazy time space conversi ons. Phew! 1243 // No nested time containers in SVG, no need for crazy time space
1244 // conversions. Phew!
1227 SMILTime time = 0; 1245 SMILTime time = 0;
1228 if (condition->name() == "begin") 1246 if (condition->name() == "begin")
1229 time = syncBase->m_interval.begin + condition->offset(); 1247 time = syncBase->m_interval.begin + condition->offset();
1230 else 1248 else
1231 time = syncBase->m_interval.end + condition->offset(); 1249 time = syncBase->m_interval.end + condition->offset();
1232 if (!time.isFinite()) 1250 if (!time.isFinite())
1233 continue; 1251 continue;
1234 SMILTime elapsed = this->elapsed(); 1252 SMILTime elapsed = this->elapsed();
1235 if (elapsed.isUnresolved()) 1253 if (elapsed.isUnresolved())
1236 continue; 1254 continue;
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
1335 DEFINE_TRACE(SVGSMILElement) { 1353 DEFINE_TRACE(SVGSMILElement) {
1336 visitor->trace(m_targetElement); 1354 visitor->trace(m_targetElement);
1337 visitor->trace(m_timeContainer); 1355 visitor->trace(m_timeContainer);
1338 visitor->trace(m_conditions); 1356 visitor->trace(m_conditions);
1339 visitor->trace(m_syncBaseDependents); 1357 visitor->trace(m_syncBaseDependents);
1340 SVGElement::trace(visitor); 1358 SVGElement::trace(visitor);
1341 SVGTests::trace(visitor); 1359 SVGTests::trace(visitor);
1342 } 1360 }
1343 1361
1344 } // namespace blink 1362 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698