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

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

Issue 305783004: Prepare SVGSMILElement for oilpan (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: strong refs Created 6 years, 6 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/SVGSMILElement.h ('k') | no next file » | 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 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 SVGSMILElement::~SVGSMILElement() 198 SVGSMILElement::~SVGSMILElement()
199 { 199 {
200 #if !ENABLE(OILPAN) 200 #if !ENABLE(OILPAN)
201 clearResourceAndEventBaseReferences(); 201 clearResourceAndEventBaseReferences();
202 #endif 202 #endif
203 smilEndEventSender().cancelEvent(this); 203 smilEndEventSender().cancelEvent(this);
204 smilBeginEventSender().cancelEvent(this); 204 smilBeginEventSender().cancelEvent(this);
205 smilRepeatEventSender().cancelEvent(this); 205 smilRepeatEventSender().cancelEvent(this);
206 smilRepeatNEventSender().cancelEvent(this); 206 smilRepeatNEventSender().cancelEvent(this);
207 #if !ENABLE(OILPAN) 207 #if !ENABLE(OILPAN)
208 // FIXME: Oilpan: Clear |m_syncBaseDependents| using weak processing.
209 clearConditions(); 208 clearConditions();
210 209
211 if (m_timeContainer && m_targetElement && hasValidAttributeName()) 210 if (m_timeContainer && m_targetElement && hasValidAttributeName())
212 m_timeContainer->unschedule(this, m_targetElement, m_attributeName); 211 m_timeContainer->unschedule(this, m_targetElement, m_attributeName);
213 #endif 212 #endif
214 } 213 }
215 214
216 void SVGSMILElement::clearResourceAndEventBaseReferences() 215 void SVGSMILElement::clearResourceAndEventBaseReferences()
217 { 216 {
218 document().accessSVGExtensions().removeAllTargetReferencesForElement(this); 217 document().accessSVGExtensions().removeAllTargetReferencesForElement(this);
(...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after
595 594
596 void SVGSMILElement::connectSyncBaseConditions() 595 void SVGSMILElement::connectSyncBaseConditions()
597 { 596 {
598 if (m_syncBaseConditionsConnected) 597 if (m_syncBaseConditionsConnected)
599 disconnectSyncBaseConditions(); 598 disconnectSyncBaseConditions();
600 m_syncBaseConditionsConnected = true; 599 m_syncBaseConditionsConnected = true;
601 for (unsigned n = 0; n < m_conditions.size(); ++n) { 600 for (unsigned n = 0; n < m_conditions.size(); ++n) {
602 Condition* condition = m_conditions[n].get(); 601 Condition* condition = m_conditions[n].get();
603 if (condition->type() == Condition::Syncbase) { 602 if (condition->type() == Condition::Syncbase) {
604 ASSERT(!condition->baseID().isEmpty()); 603 ASSERT(!condition->baseID().isEmpty());
605 condition->setSyncBase(treeScope().getElementById(AtomicString(condi tion->baseID()))); 604 Element* element = treeScope().getElementById(AtomicString(condition ->baseID()));
606 if (!condition->syncBase() || !isSVGSMILElement(*condition->syncBase ())) { 605 if (!element || !isSVGSMILElement(*element)) {
607 condition->setSyncBase(0); 606 condition->setSyncBase(0);
608 continue; 607 continue;
609 } 608 }
610 toSVGSMILElement(condition->syncBase())->addSyncBaseDependent(this); 609 SVGSMILElement* svgSMILElement = toSVGSMILElement(element);
610 condition->setSyncBase(svgSMILElement);
611 svgSMILElement->addSyncBaseDependent(this);
611 } 612 }
612 } 613 }
613 } 614 }
614 615
615 void SVGSMILElement::disconnectSyncBaseConditions() 616 void SVGSMILElement::disconnectSyncBaseConditions()
616 { 617 {
617 if (!m_syncBaseConditionsConnected) 618 if (!m_syncBaseConditionsConnected)
618 return; 619 return;
619 m_syncBaseConditionsConnected = false; 620 m_syncBaseConditionsConnected = false;
620 for (unsigned n = 0; n < m_conditions.size(); ++n) { 621 for (unsigned n = 0; n < m_conditions.size(); ++n) {
621 Condition* condition = m_conditions[n].get(); 622 Condition* condition = m_conditions[n].get();
622 if (condition->type() == Condition::Syncbase) { 623 if (condition->type() == Condition::Syncbase) {
623 if (condition->syncBase()) 624 if (condition->syncBase())
624 toSVGSMILElement(condition->syncBase())->removeSyncBaseDependent (this); 625 condition->syncBase()->removeSyncBaseDependent(this);
625 condition->setSyncBase(0); 626 condition->setSyncBase(0);
626 } 627 }
627 } 628 }
628 } 629 }
629 630
630 void SVGSMILElement::connectEventBaseConditions() 631 void SVGSMILElement::connectEventBaseConditions()
631 { 632 {
632 disconnectEventBaseConditions(); 633 disconnectEventBaseConditions();
633 for (unsigned n = 0; n < m_conditions.size(); ++n) { 634 for (unsigned n = 0; n < m_conditions.size(); ++n) {
634 Condition* condition = m_conditions[n].get(); 635 Condition* condition = m_conditions[n].get();
(...skipping 604 matching lines...) Expand 10 before | Expand all | Expand 10 after
1239 smilEndEventSender().dispatchEventSoon(this); 1240 smilEndEventSender().dispatchEventSoon(this);
1240 } 1241 }
1241 1242
1242 m_nextProgressTime = calculateNextProgressTime(elapsed); 1243 m_nextProgressTime = calculateNextProgressTime(elapsed);
1243 return animationIsContributing; 1244 return animationIsContributing;
1244 } 1245 }
1245 1246
1246 void SVGSMILElement::notifyDependentsIntervalChanged() 1247 void SVGSMILElement::notifyDependentsIntervalChanged()
1247 { 1248 {
1248 ASSERT(m_intervalBegin.isFinite()); 1249 ASSERT(m_intervalBegin.isFinite());
1249 DEFINE_STATIC_LOCAL(HashSet<SVGSMILElement*>, loopBreaker, ()); 1250 DEFINE_STATIC_LOCAL(OwnPtrWillBePersistent<WillBeHeapHashSet<RawPtrWillBeMem ber<SVGSMILElement> > >, loopBreaker, (adoptPtrWillBeNoop(new WillBeHeapHashSet< RawPtrWillBeMember<SVGSMILElement> >())));
haraken 2014/05/29 08:11:52 Discussed offline. I wonder if this Persistent<Mem
1250 if (!loopBreaker.add(this).isNewEntry) 1251 if (!loopBreaker->add(this).isNewEntry)
1251 return; 1252 return;
1252 1253
1253 TimeDependentSet::iterator end = m_syncBaseDependents.end(); 1254 TimeDependentSet::iterator end = m_syncBaseDependents.end();
1254 for (TimeDependentSet::iterator it = m_syncBaseDependents.begin(); it != end ; ++it) { 1255 for (TimeDependentSet::iterator it = m_syncBaseDependents.begin(); it != end ; ++it) {
1255 SVGSMILElement* dependent = *it; 1256 SVGSMILElement* dependent = *it;
1256 dependent->createInstanceTimesFromSyncbase(this); 1257 dependent->createInstanceTimesFromSyncbase(this);
1257 } 1258 }
1258 1259
1259 loopBreaker.remove(this); 1260 loopBreaker->remove(this);
1260 } 1261 }
1261 1262
1262 void SVGSMILElement::createInstanceTimesFromSyncbase(SVGSMILElement* syncBase) 1263 void SVGSMILElement::createInstanceTimesFromSyncbase(SVGSMILElement* syncBase)
1263 { 1264 {
1264 // FIXME: To be really correct, this should handle updating exising interval by changing 1265 // FIXME: To be really correct, this should handle updating exising interval by changing
1265 // the associated times instead of creating new ones. 1266 // the associated times instead of creating new ones.
1266 for (unsigned n = 0; n < m_conditions.size(); ++n) { 1267 for (unsigned n = 0; n < m_conditions.size(); ++n) {
1267 Condition* condition = m_conditions[n].get(); 1268 Condition* condition = m_conditions[n].get();
1268 if (condition->type() == Condition::Syncbase && condition->syncBase() == syncBase) { 1269 if (condition->type() == Condition::Syncbase && condition->syncBase() == syncBase) {
1269 ASSERT(condition->name() == "begin" || condition->name() == "end"); 1270 ASSERT(condition->name() == "begin" || condition->name() == "end");
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
1351 void SVGSMILElement::trace(Visitor* visitor) 1352 void SVGSMILElement::trace(Visitor* visitor)
1352 { 1353 {
1353 visitor->trace(m_targetElement); 1354 visitor->trace(m_targetElement);
1354 visitor->trace(m_timeContainer); 1355 visitor->trace(m_timeContainer);
1355 visitor->trace(m_conditions); 1356 visitor->trace(m_conditions);
1356 visitor->trace(m_syncBaseDependents); 1357 visitor->trace(m_syncBaseDependents);
1357 SVGElement::trace(visitor); 1358 SVGElement::trace(visitor);
1358 } 1359 }
1359 1360
1360 } 1361 }
OLDNEW
« no previous file with comments | « Source/core/svg/animation/SVGSMILElement.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698