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

Side by Side Diff: Source/core/svg/SVGPathSegList.h

Issue 678163002: Oilpan: move SVG property hierarchy to the heap. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebased upto r185213 Created 6 years, 1 month 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/SVGPathSegLinetoVerticalRel.h ('k') | Source/core/svg/SVGPathSegList.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) 2014 Google Inc. All rights reserved. 2 * Copyright (C) 2014 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 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 class SVGPathElement; 42 class SVGPathElement;
43 class SVGPathSegListTearOff; 43 class SVGPathSegListTearOff;
44 44
45 class SVGPathSegList : public SVGListPropertyHelper<SVGPathSegList, SVGPathSeg> { 45 class SVGPathSegList : public SVGListPropertyHelper<SVGPathSegList, SVGPathSeg> {
46 public: 46 public:
47 typedef void PrimitiveType; 47 typedef void PrimitiveType;
48 typedef SVGPathSeg ItemPropertyType; 48 typedef SVGPathSeg ItemPropertyType;
49 typedef SVGPathSegListTearOff TearOffType; 49 typedef SVGPathSegListTearOff TearOffType;
50 typedef SVGListPropertyHelper<SVGPathSegList, SVGPathSeg> Base; 50 typedef SVGListPropertyHelper<SVGPathSegList, SVGPathSeg> Base;
51 51
52 static PassRefPtr<SVGPathSegList> create(SVGPathElement* contextElement) 52 static PassRefPtrWillBeRawPtr<SVGPathSegList> create(SVGPathElement* context Element)
53 { 53 {
54 return adoptRef(new SVGPathSegList(contextElement)); 54 return adoptRefWillBeNoop(new SVGPathSegList(contextElement));
55 } 55 }
56 static PassRefPtr<SVGPathSegList> create() { ASSERT_NOT_REACHED(); return nu llptr; } 56 static PassRefPtrWillBeRawPtr<SVGPathSegList> create()
57 {
58 ASSERT_NOT_REACHED();
59 return nullptr;
60 }
57 61
58 virtual ~SVGPathSegList(); 62 virtual ~SVGPathSegList();
59 63
60 const SVGPathByteStream* byteStream() const; 64 const SVGPathByteStream* byteStream() const;
61 void clearByteStream() { m_byteStream.clear(); } 65 void clearByteStream() { m_byteStream.clear(); }
62 66
63 // SVGListPropertyHelper methods with |m_byteStream| sync: 67 // SVGListPropertyHelper methods with |m_byteStream| sync:
64 68
65 ItemPropertyType* at(size_t index) 69 ItemPropertyType* at(size_t index)
66 { 70 {
(...skipping 14 matching lines...) Expand all
81 85
82 return !m_byteStream || m_byteStream->isEmpty(); 86 return !m_byteStream || m_byteStream->isEmpty();
83 } 87 }
84 88
85 void clear() 89 void clear()
86 { 90 {
87 clearByteStream(); 91 clearByteStream();
88 Base::clear(); 92 Base::clear();
89 } 93 }
90 94
91 void append(PassRefPtr<ItemPropertyType> passNewItem) 95 void append(PassRefPtrWillBeRawPtr<ItemPropertyType> passNewItem)
92 { 96 {
93 updateListFromByteStream(); 97 updateListFromByteStream();
94 clearByteStream(); 98 clearByteStream();
95 Base::append(passNewItem); 99 Base::append(passNewItem);
96 } 100 }
97 101
98 PassRefPtr<ItemPropertyType> initialize(PassRefPtr<ItemPropertyType> passIte m) 102 PassRefPtrWillBeRawPtr<ItemPropertyType> initialize(PassRefPtrWillBeRawPtr<I temPropertyType> passItem)
99 { 103 {
100 clearByteStream(); 104 clearByteStream();
101 return Base::initialize(passItem); 105 return Base::initialize(passItem);
102 } 106 }
103 107
104 PassRefPtr<ItemPropertyType> getItem(size_t index, ExceptionState& exception State) 108 PassRefPtrWillBeRawPtr<ItemPropertyType> getItem(size_t index, ExceptionStat e& exceptionState)
105 { 109 {
106 updateListFromByteStream(); 110 updateListFromByteStream();
107 return Base::getItem(index, exceptionState); 111 return Base::getItem(index, exceptionState);
108 } 112 }
109 113
110 PassRefPtr<ItemPropertyType> insertItemBefore(PassRefPtr<ItemPropertyType> p assItem, size_t index) 114 PassRefPtrWillBeRawPtr<ItemPropertyType> insertItemBefore(PassRefPtrWillBeRa wPtr<ItemPropertyType> passItem, size_t index)
111 { 115 {
112 updateListFromByteStream(); 116 updateListFromByteStream();
113 clearByteStream(); 117 clearByteStream();
114 return Base::insertItemBefore(passItem, index); 118 return Base::insertItemBefore(passItem, index);
115 } 119 }
116 120
117 PassRefPtr<ItemPropertyType> replaceItem(PassRefPtr<ItemPropertyType> passIt em, size_t index, ExceptionState& exceptionState) 121 PassRefPtrWillBeRawPtr<ItemPropertyType> replaceItem(PassRefPtrWillBeRawPtr< ItemPropertyType> passItem, size_t index, ExceptionState& exceptionState)
118 { 122 {
119 updateListFromByteStream(); 123 updateListFromByteStream();
120 clearByteStream(); 124 clearByteStream();
121 return Base::replaceItem(passItem, index, exceptionState); 125 return Base::replaceItem(passItem, index, exceptionState);
122 } 126 }
123 127
124 PassRefPtr<ItemPropertyType> removeItem(size_t index, ExceptionState& except ionState) 128 PassRefPtrWillBeRawPtr<ItemPropertyType> removeItem(size_t index, ExceptionS tate& exceptionState)
125 { 129 {
126 updateListFromByteStream(); 130 updateListFromByteStream();
127 clearByteStream(); 131 clearByteStream();
128 return Base::removeItem(index, exceptionState); 132 return Base::removeItem(index, exceptionState);
129 } 133 }
130 134
131 PassRefPtr<ItemPropertyType> appendItem(PassRefPtr<ItemPropertyType> passIte m); 135 PassRefPtrWillBeRawPtr<ItemPropertyType> appendItem(PassRefPtrWillBeRawPtr<I temPropertyType> passItem);
132 136
133 // SVGPropertyBase: 137 // SVGPropertyBase:
134 virtual PassRefPtr<SVGPropertyBase> cloneForAnimation(const String&) const o verride; 138 virtual PassRefPtrWillBeRawPtr<SVGPropertyBase> cloneForAnimation(const Stri ng&) const override;
135 virtual PassRefPtr<SVGPathSegList> clone() override; 139 virtual PassRefPtrWillBeRawPtr<SVGPathSegList> clone() override;
136 virtual String valueAsString() const override; 140 virtual String valueAsString() const override;
137 void setValueAsString(const String&, ExceptionState&); 141 void setValueAsString(const String&, ExceptionState&);
138 142
139 virtual void add(PassRefPtrWillBeRawPtr<SVGPropertyBase>, SVGElement*) overr ide; 143 virtual void add(PassRefPtrWillBeRawPtr<SVGPropertyBase>, SVGElement*) overr ide;
140 virtual void calculateAnimatedValue(SVGAnimationElement*, float percentage, unsigned repeatCount, PassRefPtr<SVGPropertyBase> fromValue, PassRefPtr<SVGPrope rtyBase> toValue, PassRefPtr<SVGPropertyBase> toAtEndOfDurationValue, SVGElement *) override; 144 virtual void calculateAnimatedValue(SVGAnimationElement*, float percentage, unsigned repeatCount, PassRefPtrWillBeRawPtr<SVGPropertyBase> fromValue, PassRef PtrWillBeRawPtr<SVGPropertyBase> toValue, PassRefPtrWillBeRawPtr<SVGPropertyBase > toAtEndOfDurationValue, SVGElement*) override;
141 virtual float calculateDistance(PassRefPtr<SVGPropertyBase> to, SVGElement*) override; 145 virtual float calculateDistance(PassRefPtrWillBeRawPtr<SVGPropertyBase> to, SVGElement*) override;
142 146
143 static AnimatedPropertyType classType() { return AnimatedPath; } 147 static AnimatedPropertyType classType() { return AnimatedPath; }
144 148
149 virtual void trace(Visitor*) override;
150
145 private: 151 private:
146 SVGPathSegList(SVGPathElement*); 152 explicit SVGPathSegList(SVGPathElement*);
147 SVGPathSegList(SVGPathElement*, PassOwnPtr<SVGPathByteStream>); 153 SVGPathSegList(SVGPathElement*, PassOwnPtr<SVGPathByteStream>);
148 154
149 friend class SVGPathSegListBuilder; 155 friend class SVGPathSegListBuilder;
150 // This is only to be called from SVGPathSegListBuilder. 156 // This is only to be called from SVGPathSegListBuilder.
151 void appendWithoutByteStreamSync(PassRefPtr<ItemPropertyType> passNewItem) 157 void appendWithoutByteStreamSync(PassRefPtrWillBeRawPtr<ItemPropertyType> pa ssNewItem)
152 { 158 {
153 Base::append(passNewItem); 159 Base::append(passNewItem);
154 } 160 }
155 161
156 void updateListFromByteStream(); 162 void updateListFromByteStream();
157 void invalidateList(); 163 void invalidateList();
158 164
159 // FIXME: This pointer should be removed after SVGPathSeg has a tear-off. 165 // FIXME: This pointer should be removed after SVGPathSeg has a tear-off.
160 // FIXME: oilpan: This is raw-ptr to avoid reference cycles. 166 //
161 // SVGPathSegList is either owned by SVGAnimatedPath or 167 // SVGPathSegList is either owned by SVGAnimatedPath or SVGPathSegListTearOf f.
162 // SVGPathSegListTearOff. Both keep |contextElement| alive, 168 // Both keep |contextElement| alive, so this ptr is always valid.
163 // so this ptr is always valid. 169 RawPtrWillBeMember<SVGPathElement> m_contextElement;
164 SVGPathElement* m_contextElement;
165 170
166 mutable OwnPtr<SVGPathByteStream> m_byteStream; 171 mutable OwnPtr<SVGPathByteStream> m_byteStream;
167 bool m_listSyncedToByteStream; 172 bool m_listSyncedToByteStream;
168 }; 173 };
169 174
170 inline PassRefPtr<SVGPathSegList> toSVGPathSegList(PassRefPtr<SVGPropertyBase> p assBase) 175 inline PassRefPtrWillBeRawPtr<SVGPathSegList> toSVGPathSegList(PassRefPtrWillBeR awPtr<SVGPropertyBase> passBase)
171 { 176 {
172 RefPtr<SVGPropertyBase> base = passBase; 177 RefPtrWillBeRawPtr<SVGPropertyBase> base = passBase;
173 ASSERT(base->type() == SVGPathSegList::classType()); 178 ASSERT(base->type() == SVGPathSegList::classType());
174 return static_pointer_cast<SVGPathSegList>(base.release()); 179 return static_pointer_cast<SVGPathSegList>(base.release());
175 } 180 }
176 181
177 } // namespace blink 182 } // namespace blink
178 183
179 #endif 184 #endif
OLDNEW
« no previous file with comments | « Source/core/svg/SVGPathSegLinetoVerticalRel.h ('k') | Source/core/svg/SVGPathSegList.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698