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

Side by Side Diff: Source/core/svg/SVGElement.cpp

Issue 267303004: Oilpan: cleanup based on review comments after removal of TreeShared. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fix typo and merge Created 6 years, 7 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/SVGElement.h ('k') | Source/core/svg/SVGElementInstance.h » ('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) 2004, 2005, 2006, 2007, 2008 Nikolas Zimmermann <zimmermann@kde .org> 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Nikolas Zimmermann <zimmermann@kde .org>
3 * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis@kde.org> 3 * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis@kde.org>
4 * Copyright (C) 2008 Apple Inc. All rights reserved. 4 * Copyright (C) 2008 Apple Inc. All rights reserved.
5 * Copyright (C) 2008 Alp Toker <alp@atoker.com> 5 * Copyright (C) 2008 Alp Toker <alp@atoker.com>
6 * Copyright (C) 2009 Cameron McCormack <cam@mcc.id.au> 6 * Copyright (C) 2009 Cameron McCormack <cam@mcc.id.au>
7 * 7 *
8 * This library is free software; you can redistribute it and/or 8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public 9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
(...skipping 514 matching lines...) Expand 10 before | Expand all | Expand 10 after
525 // This function is provided for use by SVGAnimatedProperty to avoid 525 // This function is provided for use by SVGAnimatedProperty to avoid
526 // global inclusion of core/dom/Document.h in SVG code. 526 // global inclusion of core/dom/Document.h in SVG code.
527 return document().accessSVGExtensions(); 527 return document().accessSVGExtensions();
528 } 528 }
529 529
530 void SVGElement::mapInstanceToElement(SVGElement* instance) 530 void SVGElement::mapInstanceToElement(SVGElement* instance)
531 { 531 {
532 ASSERT(instance); 532 ASSERT(instance);
533 ASSERT(instance->inUseShadowTree()); 533 ASSERT(instance->inUseShadowTree());
534 534
535 HashSet<SVGElement*>& instances = ensureSVGRareData()->elementInstances(); 535 WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement> >& instances = ensureSV GRareData()->elementInstances();
536 ASSERT(!instances.contains(instance)); 536 ASSERT(!instances.contains(instance));
537 537
538 instances.add(instance); 538 instances.add(instance);
539 } 539 }
540 540
541 void SVGElement::removeInstanceMapping(SVGElement* instance) 541 void SVGElement::removeInstanceMapping(SVGElement* instance)
542 { 542 {
543 ASSERT(instance); 543 ASSERT(instance);
544 ASSERT(instance->inUseShadowTree()); 544 ASSERT(instance->inUseShadowTree());
545 ASSERT(hasSVGRareData()); 545 ASSERT(hasSVGRareData());
546 546
547 HashSet<SVGElement*>& instances = svgRareData()->elementInstances(); 547 WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement> >& instances = svgRareD ata()->elementInstances();
548 ASSERT(instances.contains(instance)); 548 ASSERT(instances.contains(instance));
549 549
550 instances.remove(instance); 550 instances.remove(instance);
551 } 551 }
552 552
553 const HashSet<SVGElement*>& SVGElement::instancesForElement() const 553 static WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement> >& emptyInstances()
554 { 554 {
555 if (!hasSVGRareData()) { 555 #if ENABLE(OILPAN)
556 DEFINE_STATIC_LOCAL(HashSet<SVGElement*>, emptyInstances, ()); 556 DEFINE_STATIC_LOCAL(Persistent<HeapHashSet<WeakMember<SVGElement> > >, empty Instances, (new HeapHashSet<WeakMember<SVGElement> >));
557 return emptyInstances; 557 return *emptyInstances;
558 } 558 #else
559 DEFINE_STATIC_LOCAL(HashSet<RawPtr<SVGElement> >, emptyInstances, ());
560 return emptyInstances;
561 #endif
562 }
563
564 const WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement> >& SVGElement::instan cesForElement() const
565 {
566 if (!hasSVGRareData())
567 return emptyInstances();
559 return svgRareData()->elementInstances(); 568 return svgRareData()->elementInstances();
560 } 569 }
561 570
562 bool SVGElement::getBoundingBox(FloatRect& rect) 571 bool SVGElement::getBoundingBox(FloatRect& rect)
563 { 572 {
564 if (!isSVGGraphicsElement()) 573 if (!isSVGGraphicsElement())
565 return false; 574 return false;
566 575
567 rect = toSVGGraphicsElement(this)->getBBox(); 576 rect = toSVGGraphicsElement(this)->getBBox();
568 return true; 577 return true;
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
776 785
777 bool SVGElement::haveLoadedRequiredResources() 786 bool SVGElement::haveLoadedRequiredResources()
778 { 787 {
779 for (SVGElement* child = Traversal<SVGElement>::firstChild(*this); child; ch ild = Traversal<SVGElement>::nextSibling(*child)) { 788 for (SVGElement* child = Traversal<SVGElement>::firstChild(*this); child; ch ild = Traversal<SVGElement>::nextSibling(*child)) {
780 if (!child->haveLoadedRequiredResources()) 789 if (!child->haveLoadedRequiredResources())
781 return false; 790 return false;
782 } 791 }
783 return true; 792 return true;
784 } 793 }
785 794
786 static inline void collectInstancesForSVGElement(SVGElement* element, HashSet<SV GElement*>& instances) 795 static inline void collectInstancesForSVGElement(SVGElement* element, WillBeHeap HashSet<RawPtrWillBeWeakMember<SVGElement> >& instances)
787 { 796 {
788 ASSERT(element); 797 ASSERT(element);
789 if (element->containingShadowRoot()) 798 if (element->containingShadowRoot())
790 return; 799 return;
791 800
792 ASSERT(!element->instanceUpdatesBlocked()); 801 ASSERT(!element->instanceUpdatesBlocked());
793 802
794 instances = element->instancesForElement(); 803 instances = element->instancesForElement();
795 } 804 }
796 805
797 bool SVGElement::addEventListener(const AtomicString& eventType, PassRefPtr<Even tListener> prpListener, bool useCapture) 806 bool SVGElement::addEventListener(const AtomicString& eventType, PassRefPtr<Even tListener> prpListener, bool useCapture)
798 { 807 {
799 RefPtr<EventListener> listener = prpListener; 808 RefPtr<EventListener> listener = prpListener;
800 809
801 // Add event listener to regular DOM element 810 // Add event listener to regular DOM element
802 if (!Node::addEventListener(eventType, listener, useCapture)) 811 if (!Node::addEventListener(eventType, listener, useCapture))
803 return false; 812 return false;
804 813
805 // Add event listener to all shadow tree DOM element instances 814 // Add event listener to all shadow tree DOM element instances
806 HashSet<SVGElement*> instances; 815 WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement> > instances;
807 collectInstancesForSVGElement(this, instances); 816 collectInstancesForSVGElement(this, instances);
808 const HashSet<SVGElement*>::const_iterator end = instances.end(); 817 const WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement> >::const_iterator end = instances.end();
809 for (HashSet<SVGElement*>::const_iterator it = instances.begin(); it != end; ++it) { 818 for (WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement> >::const_iterator it = instances.begin(); it != end; ++it) {
810 bool result = (*it)->Node::addEventListener(eventType, listener, useCapt ure); 819 bool result = (*it)->Node::addEventListener(eventType, listener, useCapt ure);
811 ASSERT_UNUSED(result, result); 820 ASSERT_UNUSED(result, result);
812 } 821 }
813 822
814 return true; 823 return true;
815 } 824 }
816 825
817 bool SVGElement::removeEventListener(const AtomicString& eventType, EventListene r* listener, bool useCapture) 826 bool SVGElement::removeEventListener(const AtomicString& eventType, EventListene r* listener, bool useCapture)
818 { 827 {
819 HashSet<SVGElement*> instances; 828 WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement> > instances;
820 collectInstancesForSVGElement(this, instances); 829 collectInstancesForSVGElement(this, instances);
821 if (instances.isEmpty()) 830 if (instances.isEmpty())
822 return Node::removeEventListener(eventType, listener, useCapture); 831 return Node::removeEventListener(eventType, listener, useCapture);
823 832
824 // EventTarget::removeEventListener creates a PassRefPtr around the given Ev entListener 833 // EventTarget::removeEventListener creates a PassRefPtr around the given Ev entListener
825 // object when creating a temporary RegisteredEventListener object used to l ook up the 834 // object when creating a temporary RegisteredEventListener object used to l ook up the
826 // event listener in a cache. If we want to be able to call removeEventListe ner() multiple 835 // event listener in a cache. If we want to be able to call removeEventListe ner() multiple
827 // times on different nodes, we have to delay its immediate destruction, whi ch would happen 836 // times on different nodes, we have to delay its immediate destruction, whi ch would happen
828 // after the first call below. 837 // after the first call below.
829 RefPtr<EventListener> protector(listener); 838 RefPtr<EventListener> protector(listener);
830 839
831 // Remove event listener from regular DOM element 840 // Remove event listener from regular DOM element
832 if (!Node::removeEventListener(eventType, listener, useCapture)) 841 if (!Node::removeEventListener(eventType, listener, useCapture))
833 return false; 842 return false;
834 843
835 // Remove event listener from all shadow tree DOM element instances 844 // Remove event listener from all shadow tree DOM element instances
836 const HashSet<SVGElement*>::const_iterator end = instances.end(); 845 const WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement> >::const_iterator end = instances.end();
837 for (HashSet<SVGElement*>::const_iterator it = instances.begin(); it != end; ++it) { 846 for (WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement> >::const_iterator it = instances.begin(); it != end; ++it) {
838 SVGElement* shadowTreeElement = *it; 847 SVGElement* shadowTreeElement = *it;
839 ASSERT(shadowTreeElement); 848 ASSERT(shadowTreeElement);
840 849
841 if (shadowTreeElement->Node::removeEventListener(eventType, listener, us eCapture)) 850 if (shadowTreeElement->Node::removeEventListener(eventType, listener, us eCapture))
842 continue; 851 continue;
843 852
844 // This case can only be hit for event listeners created from markup 853 // This case can only be hit for event listeners created from markup
845 ASSERT(listener->wasCreatedFromMarkup()); 854 ASSERT(listener->wasCreatedFromMarkup());
846 855
847 // If the event listener 'listener' has been created from markup and has been fired before 856 // If the event listener 'listener' has been created from markup and has been fired before
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
1032 } 1041 }
1033 1042
1034 void SVGElement::invalidateInstances() 1043 void SVGElement::invalidateInstances()
1035 { 1044 {
1036 if (!inDocument()) 1045 if (!inDocument())
1037 return; 1046 return;
1038 1047
1039 if (instanceUpdatesBlocked()) 1048 if (instanceUpdatesBlocked())
1040 return; 1049 return;
1041 1050
1042 const HashSet<SVGElement*>& set = instancesForElement(); 1051 const WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement> >& set = instance sForElement();
1043 if (set.isEmpty()) 1052 if (set.isEmpty())
1044 return; 1053 return;
1045 1054
1046 // Mark all use elements referencing 'element' for rebuilding 1055 // Mark all use elements referencing 'element' for rebuilding
1047 const HashSet<SVGElement*>::const_iterator end = set.end(); 1056 const WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement> >::const_iterator end = set.end();
1048 for (HashSet<SVGElement*>::const_iterator it = set.begin(); it != end; ++it) { 1057 for (WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement> >::const_iterator it = set.begin(); it != end; ++it) {
1049 (*it)->setCorrespondingElement(0); 1058 (*it)->setCorrespondingElement(0);
1050 1059
1051 if (SVGUseElement* element = (*it)->correspondingUseElement()) { 1060 if (SVGUseElement* element = (*it)->correspondingUseElement()) {
1052 ASSERT(element->inDocument()); 1061 ASSERT(element->inDocument());
1053 element->invalidateShadowTree(); 1062 element->invalidateShadowTree();
1054 } 1063 }
1055 } 1064 }
1056 1065
1057 document().updateRenderTreeIfNeeded(); 1066 document().updateRenderTreeIfNeeded();
1058 } 1067 }
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
1170 animatableAttributes.add(SVGNames::zAttr); 1179 animatableAttributes.add(SVGNames::zAttr);
1171 } 1180 }
1172 1181
1173 if (name == classAttr) 1182 if (name == classAttr)
1174 return true; 1183 return true;
1175 1184
1176 return animatableAttributes.contains(name); 1185 return animatableAttributes.contains(name);
1177 } 1186 }
1178 #endif 1187 #endif
1179 } 1188 }
OLDNEW
« no previous file with comments | « Source/core/svg/SVGElement.h ('k') | Source/core/svg/SVGElementInstance.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698