Changeset 53514 in webkit
- Timestamp:
- Jan 19, 2010 6:25:21 PM (14 years ago)
- Location:
- trunk
- Files:
-
- 23 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/ChangeLog
r53479 r53514 1 2010-01-18 Maciej Stachowiak <mjs@apple.com> 2 3 Reviewed by Adam Barth. 4 5 Inline functions that are hot in DOM manipulation 6 https://bugs.webkit.org/show_bug.cgi?id=33820 7 8 (3% speedup on Dromaeo DOM Core tests) 9 10 * runtime/WeakGCMap.h: 11 (JSC::::get): inline 12 1 13 2010-01-19 Laszlo Gombos <laszlo.1.gombos@nokia.com> 2 14 -
trunk/JavaScriptCore/runtime/WeakGCMap.h
r53371 r53514 73 73 74 74 template<typename KeyType, typename MappedType> 75 MappedType WeakGCMap<KeyType, MappedType>::get(const KeyType& key) const75 inline MappedType WeakGCMap<KeyType, MappedType>::get(const KeyType& key) const 76 76 { 77 77 MappedType result = m_map.get(key); -
trunk/WebCore/ChangeLog
r53513 r53514 1 2010-01-18 Maciej Stachowiak <mjs@apple.com> 2 3 Reviewed by Adam Barth. 4 5 Inline functions that are hot in DOM manipulation 6 https://bugs.webkit.org/show_bug.cgi?id=33820 7 8 (3% speedup on Dromaeo DOM Core tests) 9 10 * bindings/js/JSDOMBinding.h: 11 (WebCore::currentWorld): Inlined. 12 (WebCore::jsString): Inlined String& overload and split off slow case. 13 * bindings/js/JSDOMBinding.cpp: 14 (WebCore::jsStringSlowCase): Slow case for the above. 15 * dom/Document.h: 16 (WebCore::Document::isHTMLDocument): Use a bit and an inline method 17 instead of a virtual method, since this is so hot and size of Document 18 is not a prime concern. 19 (WebCore::Document::create): Adapt for above. 20 (WebCore::Document::createXHTML): ditto 21 * dom/Document.cpp: 22 (WebCore::Document::Document): ditto 23 * html/HTMLDocument.cpp: 24 (WebCore::HTMLDocument::HTMLDocument): ditto 25 * html/HTMLDocument.h: ditto 26 * loader/PlaceholderDocument.h: 27 (WebCore::PlaceholderDocument::PlaceholderDocument): ditto 28 * svg/SVGDocument.cpp: 29 (WebCore::SVGDocument::SVGDocument): ditto 30 * dom/Element.h: 31 (WebCore::Element::attributes): Inlined. 32 (WebCore::Element::updateId): Inlined. 33 * dom/Element.cpp: (Remove inlined methods.) 34 * dom/NamedAttrMap.h: 35 (WebCore::NamedNodeMap::getAttributeItem): Inlined and split off slow case. 36 * dom/NamedAttrMap.cpp: 37 (WebCore::NamedNodeMap::getAttributeItemSlowCase): Slow case for the above. 38 * inspector/InspectorController.cpp: 39 * inspector/InspectorController.h: 40 (WebCore::InspectorController::didInsertDOMNode): Inlined so the fast case 41 early exit doesn't incur a function call. 42 (WebCore::InspectorController::didRemoveDOMNode): ditto 43 (WebCore::InspectorController::didModifyDOMAttr): ditto 44 * platform/ThreadGlobalData.h: 45 (WebCore::threadGlobalData): Inlined. 46 * platform/ThreadGlobalData.cpp: (Removed inline methods). 47 * platform/Timer.h: 48 (WebCore::TimerBase::isActive): Inlined. 49 * platform/Timer.cpp: (Removed inline methods). 50 * WebCore.xcodeproj/project.pbxproj: Install new heares. 51 * WebCore.base.exp: Add appropriate exports. 52 1 53 2010-01-19 Jon Honeycutt <jhoneycutt@apple.com> 2 54 -
trunk/WebCore/WebCore.base.exp
r53500 r53514 140 140 __ZN7WebCore10StringImpl11reverseFindEPS0_ib 141 141 __ZN7WebCore10StringImpl7replaceEtt 142 __ZN7WebCore10StringImpl7ustringEv 142 143 __ZN7WebCore10StringImpl8endsWithEPS0_b 143 144 __ZN7WebCore10StringImplD1Ev … … 379 380 __ZN7WebCore16ScriptController18windowScriptObjectEv 380 381 __ZN7WebCore16ScriptController20executeScriptInWorldEPNS_15DOMWrapperWorldERKNS_6StringEb 382 __ZN7WebCore16ThreadGlobalData10staticDataE 383 __ZN7WebCore16ThreadGlobalDataC1Ev 384 __ZN7WebCore16ThreadGlobalDataD1Ev 381 385 __ZN7WebCore16VisibleSelectionC1EPKNS_5RangeENS_9EAffinityE 382 386 __ZN7WebCore16VisibleSelectionC1ERKNS_15VisiblePositionES3_ … … 386 390 __ZN7WebCore16enclosingIntRectERK7_NSRect 387 391 __ZN7WebCore16isEndOfParagraphERKNS_15VisiblePositionE 392 __ZN7WebCore16jsStringSlowCaseEPN3JSC9ExecStateERNS0_9WeakGCMapIPNS_10StringImplEPNS0_8JSStringEEES5_ 388 393 __ZN7WebCore16threadGlobalDataEv 389 394 __ZN7WebCore17CredentialStorage3getERKNS_15ProtectionSpaceE … … 986 991 __ZNK7WebCore9PageCache10frameCountEv 987 992 __ZNK7WebCore9PageCache21autoreleasedPageCountEv 988 __ZNK7WebCore9TimerBase8isActiveEv989 993 __ZTVN7WebCore12ChromeClientE 990 994 __ZTVN7WebCore12PluginWidgetE -
trunk/WebCore/WebCore.xcodeproj/project.pbxproj
r53512 r53514 1275 1275 7A1E88F6101CC384000C4DF5 /* ScriptArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A1E88F4101CC384000C4DF5 /* ScriptArray.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1276 1276 7A24587B1021EAF4000A00AA /* InspectorDOMAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7A2458791021EAF4000A00AA /* InspectorDOMAgent.cpp */; }; 1277 7A24587C1021EAF4000A00AA /* InspectorDOMAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A24587A1021EAF4000A00AA /* InspectorDOMAgent.h */; };1277 7A24587C1021EAF4000A00AA /* InspectorDOMAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A24587A1021EAF4000A00AA /* InspectorDOMAgent.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1278 1278 7A674BDB0F9EBF4E006CF099 /* PageGroupLoadDeferrer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7A674BD90F9EBF4E006CF099 /* PageGroupLoadDeferrer.cpp */; }; 1279 1279 7A674BDC0F9EBF4E006CF099 /* PageGroupLoadDeferrer.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A674BDA0F9EBF4E006CF099 /* PageGroupLoadDeferrer.h */; }; -
trunk/WebCore/bindings/js/JSDOMBinding.cpp
r53371 r53514 220 220 HashSet<DOMWrapperWorld*>::iterator m_end; 221 221 }; 222 223 DOMWrapperWorld* currentWorld(JSC::ExecState* exec)224 {225 return static_cast<JSDOMGlobalObject*>(exec->lexicalGlobalObject())->world();226 }227 222 228 223 DOMWrapperWorld* normalWorld(JSC::JSGlobalData& globalData) … … 557 552 } 558 553 559 static inline JSStringCache& jsStringCache(ExecState* exec)560 {561 return currentWorld(exec)->m_stringCache;562 }563 564 554 static void stringWrapperDestroyed(JSString* str, void* context) 565 555 { … … 584 574 } 585 575 586 JSValue jsString(ExecState* exec, const String& s) 587 { 588 StringImpl* stringImpl = s.impl(); 589 if (!stringImpl || !stringImpl->length()) 590 return jsEmptyString(exec); 591 592 if (stringImpl->length() == 1 && stringImpl->characters()[0] <= 0xFF) 593 return jsString(exec, stringImpl->ustring()); 594 595 JSStringCache& stringCache = jsStringCache(exec); 596 if (JSString* wrapper = stringCache.get(stringImpl)) 597 return wrapper; 598 576 JSValue jsStringSlowCase(ExecState* exec, JSStringCache& stringCache, StringImpl* stringImpl) 577 { 599 578 // If there is a stale entry, we have to explicitly remove it to avoid 600 579 // problems down the line. -
trunk/WebCore/bindings/js/JSDOMBinding.h
r53371 r53514 347 347 348 348 JSC::JSValue jsString(JSC::ExecState*, const String&); // empty if the string is null 349 JSC::JSValue jsStringSlowCase(JSC::ExecState*, JSStringCache&, StringImpl*); 349 350 JSC::JSValue jsString(JSC::ExecState*, const KURL&); // empty if the URL is null 350 351 inline JSC::JSValue jsString(JSC::ExecState* exec, const AtomicString& s) … … 416 417 KURL completeURL(JSC::ExecState*, const String& relativeURL); 417 418 419 inline DOMWrapperWorld* currentWorld(JSC::ExecState* exec) 420 { 421 return static_cast<JSDOMGlobalObject*>(exec->lexicalGlobalObject())->world(); 422 } 423 424 inline JSC::JSValue jsString(JSC::ExecState* exec, const String& s) 425 { 426 StringImpl* stringImpl = s.impl(); 427 if (!stringImpl || !stringImpl->length()) 428 return jsEmptyString(exec); 429 430 if (stringImpl->length() == 1 && stringImpl->characters()[0] <= 0xFF) 431 return jsString(exec, stringImpl->ustring()); 432 433 JSStringCache& stringCache = currentWorld(exec)->m_stringCache; 434 if (JSC::JSString* wrapper = stringCache.get(stringImpl)) 435 return wrapper; 436 437 return jsStringSlowCase(exec, stringCache, stringImpl); 438 } 439 418 440 } // namespace WebCore 419 441 -
trunk/WebCore/dom/Document.cpp
r53429 r53514 323 323 static HashSet<Document*>* documentsThatNeedStyleRecalc = 0; 324 324 325 Document::Document(Frame* frame, bool isXHTML )325 Document::Document(Frame* frame, bool isXHTML, bool isHTML) 326 326 : ContainerNode(0) 327 327 , m_domtree_version(0) … … 358 358 , m_useSecureKeyboardEntryWhenActive(false) 359 359 , m_isXHTML(isXHTML) 360 , m_isHTML(isHTML) 360 361 , m_numNodeListCaches(0) 361 362 #if USE(JSC) -
trunk/WebCore/dom/Document.h
r53345 r53514 33 33 #include "CollectionType.h" 34 34 #include "Color.h" 35 #include "Document.h" 35 36 #include "DocumentMarker.h" 36 37 #include "ScriptExecutionContext.h" … … 191 192 static PassRefPtr<Document> create(Frame* frame) 192 193 { 193 return adoptRef(new Document(frame, false ));194 return adoptRef(new Document(frame, false, false)); 194 195 } 195 196 static PassRefPtr<Document> createXHTML(Frame* frame) 196 197 { 197 return adoptRef(new Document(frame, true ));198 return adoptRef(new Document(frame, true, false)); 198 199 } 199 200 virtual ~Document(); … … 366 367 367 368 // Other methods (not part of DOM) 368 virtual bool isHTMLDocument() const { return false; }369 bool isHTMLDocument() const { return m_isHTML; } 369 370 virtual bool isImageDocument() const { return false; } 370 371 #if ENABLE(SVG) … … 943 944 944 945 protected: 945 Document(Frame*, bool isXHTML );946 Document(Frame*, bool isXHTML, bool isHTML); 946 947 947 948 void setStyleSelector(CSSStyleSelector* styleSelector) { m_styleSelector = styleSelector; } … … 1185 1186 1186 1187 bool m_isXHTML; 1188 bool m_isHTML; 1187 1189 1188 1190 unsigned m_numNodeListCaches; -
trunk/WebCore/dom/Element.cpp
r53442 r53514 161 161 } 162 162 163 NamedNodeMap* Element::attributes(bool readonly) const164 {165 if (!m_isStyleAttributeValid)166 updateStyleAttribute();167 168 #if ENABLE(SVG)169 if (!m_areSVGAttributesValid)170 updateAnimatedSVGAttribute(String());171 #endif172 173 if (!readonly && !namedAttrMap)174 createAttributeMap();175 return namedAttrMap.get();176 }177 178 163 Node::NodeType Element::nodeType() const 179 164 { … … 1093 1078 } 1094 1079 1095 void Element::updateId(const AtomicString& oldId, const AtomicString& newId)1096 {1097 if (!inDocument())1098 return;1099 1100 if (oldId == newId)1101 return;1102 1103 Document* doc = document();1104 if (!oldId.isEmpty())1105 doc->removeElementById(oldId, this);1106 if (!newId.isEmpty())1107 doc->addElementById(newId, this);1108 }1109 1110 1080 #ifndef NDEBUG 1111 1081 void Element::formatForDebugger(char* buffer, unsigned length) const -
trunk/WebCore/dom/Element.h
r53442 r53514 27 27 28 28 #include "ContainerNode.h" 29 #include "Document.h" 29 30 #include "HTMLNames.h" 30 31 #include "MappedAttributeEntry.h" … … 350 351 } 351 352 353 inline NamedNodeMap* Element::attributes(bool readonly) const 354 { 355 if (!m_isStyleAttributeValid) 356 updateStyleAttribute(); 357 358 #if ENABLE(SVG) 359 if (!m_areSVGAttributesValid) 360 updateAnimatedSVGAttribute(String()); 361 #endif 362 363 if (!readonly && !namedAttrMap) 364 createAttributeMap(); 365 return namedAttrMap.get(); 366 } 367 368 inline void Element::updateId(const AtomicString& oldId, const AtomicString& newId) 369 { 370 if (!inDocument()) 371 return; 372 373 if (oldId == newId) 374 return; 375 376 Document* doc = document(); 377 if (!oldId.isEmpty()) 378 doc->removeElementById(oldId, this); 379 if (!newId.isEmpty()) 380 doc->addElementById(newId, this); 381 } 382 352 383 } //namespace 353 384 -
trunk/WebCore/dom/NamedAttrMap.cpp
r52312 r53514 173 173 } 174 174 175 // We use a boolean parameter instead of calling shouldIgnoreAttributeCase so that the caller 176 // can tune the behaviour (hasAttribute is case sensitive whereas getAttribute is not). 177 Attribute* NamedNodeMap::getAttributeItem(const String& name, bool shouldIgnoreAttributeCase) const 175 Attribute* NamedNodeMap::getAttributeItemSlowCase(const String& name, bool shouldIgnoreAttributeCase) const 178 176 { 179 177 unsigned len = length(); 180 bool doSlowCheck = shouldIgnoreAttributeCase; 181 182 // Optimize for the case where the attribute exists and its name exactly matches. 178 179 // Continue to checking case-insensitively and/or full namespaced names if necessary: 183 180 for (unsigned i = 0; i < len; ++i) { 184 181 const QualifiedName& attrName = m_attributes[i]->name(); 185 182 if (!attrName.hasPrefix()) { 186 if ( name == attrName.localName())183 if (shouldIgnoreAttributeCase && equalIgnoringCase(name, attrName.localName())) 187 184 return m_attributes[i].get(); 188 } else 189 doSlowCheck = true; 190 } 191 192 // Continue to checking case-insensitively and/or full namespaced names if necessary: 193 if (doSlowCheck) { 194 for (unsigned i = 0; i < len; ++i) { 195 const QualifiedName& attrName = m_attributes[i]->name(); 196 if (!attrName.hasPrefix()) { 197 if (shouldIgnoreAttributeCase && equalIgnoringCase(name, attrName.localName())) 198 return m_attributes[i].get(); 199 } else { 200 // FIXME: Would be faster to do this comparison without calling toString, which 201 // generates a temporary string by concatenation. But this branch is only reached 202 // if the attribute name has a prefix, which is rare in HTML. 203 if (equalPossiblyIgnoringCase(name, attrName.toString(), shouldIgnoreAttributeCase)) 204 return m_attributes[i].get(); 205 } 185 } else { 186 // FIXME: Would be faster to do this comparison without calling toString, which 187 // generates a temporary string by concatenation. But this branch is only reached 188 // if the attribute name has a prefix, which is rare in HTML. 189 if (equalPossiblyIgnoringCase(name, attrName.toString(), shouldIgnoreAttributeCase)) 190 return m_attributes[i].get(); 206 191 } 207 }208 return 0;209 }210 211 Attribute* NamedNodeMap::getAttributeItem(const QualifiedName& name) const212 {213 unsigned len = length();214 for (unsigned i = 0; i < len; ++i) {215 if (m_attributes[i]->name().matches(name))216 return m_attributes[i].get();217 192 } 218 193 return 0; -
trunk/WebCore/dom/NamedAttrMap.h
r48769 r53514 104 104 void detachFromElement(); 105 105 Attribute* getAttributeItem(const String& name, bool shouldIgnoreAttributeCase) const; 106 Attribute* getAttributeItemSlowCase(const String& name, bool shouldIgnoreAttributeCase) const; 106 107 107 108 Element* m_element; … … 110 111 }; 111 112 113 inline Attribute* NamedNodeMap::getAttributeItem(const QualifiedName& name) const 114 { 115 unsigned len = length(); 116 for (unsigned i = 0; i < len; ++i) { 117 if (m_attributes[i]->name().matches(name)) 118 return m_attributes[i].get(); 119 } 120 return 0; 121 } 122 123 // We use a boolean parameter instead of calling shouldIgnoreAttributeCase so that the caller 124 // can tune the behaviour (hasAttribute is case sensitive whereas getAttribute is not). 125 inline Attribute* NamedNodeMap::getAttributeItem(const String& name, bool shouldIgnoreAttributeCase) const 126 { 127 unsigned len = length(); 128 bool doSlowCheck = shouldIgnoreAttributeCase; 129 130 // Optimize for the case where the attribute exists and its name exactly matches. 131 for (unsigned i = 0; i < len; ++i) { 132 const QualifiedName& attrName = m_attributes[i]->name(); 133 if (!attrName.hasPrefix()) { 134 if (name == attrName.localName()) 135 return m_attributes[i].get(); 136 } else 137 doSlowCheck = true; 138 } 139 140 if (doSlowCheck) 141 return getAttributeItemSlowCase(name, shouldIgnoreAttributeCase); 142 return 0; 143 } 144 112 145 } //namespace 113 146 -
trunk/WebCore/html/HTMLDocument.cpp
r49798 r53514 81 81 82 82 HTMLDocument::HTMLDocument(Frame* frame) 83 : Document(frame, false )83 : Document(frame, false, true) 84 84 { 85 85 clearXMLVersion(); -
trunk/WebCore/html/HTMLDocument.h
r47313 r53514 88 88 virtual PassRefPtr<Element> createElement(const AtomicString& tagName, ExceptionCode&); 89 89 90 virtual bool isHTMLDocument() const { return true; }91 90 virtual bool isFrameSet() const; 92 91 virtual Tokenizer* createTokenizer(); -
trunk/WebCore/inspector/InspectorController.cpp
r53469 r53514 1875 1875 } 1876 1876 1877 void InspectorController::didInsertDOMNode(Node* node)1878 {1879 if (m_domAgent)1880 m_domAgent->didInsertDOMNode(node);1881 }1882 1883 void InspectorController::didRemoveDOMNode(Node* node)1884 {1885 if (m_domAgent)1886 m_domAgent->didRemoveDOMNode(node);1887 }1888 1889 void InspectorController::didModifyDOMAttr(Element* element)1890 {1891 if (m_domAgent)1892 m_domAgent->didModifyDOMAttr(element);1893 }1894 1895 1877 } // namespace WebCore 1896 1878 -
trunk/WebCore/inspector/InspectorController.h
r53469 r53514 32 32 #include "Console.h" 33 33 #include "Cookie.h" 34 #include "InspectorDOMAgent.h" 34 35 #include "PlatformString.h" 35 36 #include "ScriptArray.h" … … 67 68 class InspectorBackend; 68 69 class InspectorClient; 69 class InspectorDOMAgent;70 70 class InspectorFrontend; 71 71 class InspectorFrontendHost; … … 371 371 }; 372 372 373 inline void InspectorController::didInsertDOMNode(Node* node) 374 { 375 if (m_domAgent) 376 m_domAgent->didInsertDOMNode(node); 377 } 378 379 inline void InspectorController::didRemoveDOMNode(Node* node) 380 { 381 if (m_domAgent) 382 m_domAgent->didRemoveDOMNode(node); 383 } 384 385 inline void InspectorController::didModifyDOMAttr(Element* element) 386 { 387 if (m_domAgent) 388 m_domAgent->didModifyDOMAttr(element); 389 } 390 373 391 } // namespace WebCore 374 392 -
trunk/WebCore/loader/PlaceholderDocument.h
r47313 r53514 41 41 42 42 private: 43 PlaceholderDocument(Frame* frame) : Document(frame, false ) { }43 PlaceholderDocument(Frame* frame) : Document(frame, false, false) { } 44 44 }; 45 45 -
trunk/WebCore/platform/ThreadGlobalData.cpp
r50508 r53514 49 49 namespace WebCore { 50 50 51 ThreadGlobalData& threadGlobalData()52 {53 // FIXME: Workers are not necessarily the only feature that make per-thread global data necessary.54 // We need to check for e.g. database objects manipulating strings on secondary threads.55 51 #if ENABLE(WORKERS) 56 // ThreadGlobalData is used on main thread before it could possibly be used on secondary ones, so there is no need for synchronization here. 57 static ThreadSpecific<ThreadGlobalData>* threadGlobalData = new ThreadSpecific<ThreadGlobalData>; 58 return **threadGlobalData; 52 ThreadSpecific<ThreadGlobalData>* ThreadGlobalData::staticData; 59 53 #else 60 static ThreadGlobalData* staticData; 61 if (!staticData) { 62 staticData = static_cast<ThreadGlobalData*>(fastMalloc(sizeof(ThreadGlobalData))); 63 // ThreadGlobalData constructor indirectly uses staticData, so we need to set up the memory before invoking it. 64 new (staticData) ThreadGlobalData; 65 } 66 return *staticData; 54 ThreadGlobalData* ThreadGlobalData::staticData; 67 55 #endif 68 }69 56 70 57 ThreadGlobalData::ThreadGlobalData() … … 93 80 delete m_cachedConverterICU; 94 81 #endif 95 96 82 delete m_eventNames; 97 83 delete m_atomicStringTable; -
trunk/WebCore/platform/ThreadGlobalData.h
r45891 r53514 29 29 30 30 #include "StringHash.h" 31 #include <wtf/HashMap.h> 31 32 #include <wtf/HashSet.h> 32 33 #include <wtf/Noncopyable.h> 34 35 #if ENABLE(WORKERS) 36 #include <wtf/ThreadSpecific.h> 37 #include <wtf/Threading.h> 38 using WTF::ThreadSpecific; 39 #endif 33 40 34 41 namespace WebCore { … … 74 81 TECConverterWrapper* m_cachedConverterTEC; 75 82 #endif 83 84 #if ENABLE(WORKERS) 85 static ThreadSpecific<ThreadGlobalData>* staticData; 86 #else 87 static ThreadGlobalData* staticData; 88 #endif 89 friend ThreadGlobalData& threadGlobalData(); 76 90 }; 77 91 78 ThreadGlobalData& threadGlobalData(); 92 inline ThreadGlobalData& threadGlobalData() 93 { 94 // FIXME: Workers are not necessarily the only feature that make per-thread global data necessary. 95 // We need to check for e.g. database objects manipulating strings on secondary threads. 79 96 97 #if ENABLE(WORKERS) 98 // ThreadGlobalData is used on main thread before it could possibly be used on secondary ones, so there is no need for synchronization here. 99 if (!ThreadGlobalData::staticData) 100 ThreadGlobalData::staticData = new ThreadSpecific<ThreadGlobalData>; 101 return **ThreadGlobalData::staticData; 102 #else 103 if (!ThreadGlobalData::staticData) { 104 ThreadGlobalData::staticData = static_cast<ThreadGlobalData*>(fastMalloc(sizeof(ThreadGlobalData))); 105 // ThreadGlobalData constructor indirectly uses staticData, so we need to set up the memory before invoking it. 106 new (ThreadGlobalData::staticData) ThreadGlobalData; 107 } 108 return *ThreadGlobalData::staticData; 109 #endif 110 } 111 80 112 } // namespace WebCore 81 113 -
trunk/WebCore/platform/Timer.cpp
r48086 r53514 197 197 } 198 198 199 bool TimerBase::isActive() const200 {201 ASSERT(m_thread == currentThread());202 203 return m_nextFireTime;204 }205 206 199 double TimerBase::nextFireInterval() const 207 200 { -
trunk/WebCore/platform/Timer.h
r45891 r53514 102 102 }; 103 103 104 inline bool TimerBase::isActive() const 105 { 106 ASSERT(m_thread == currentThread()); 107 return m_nextFireTime; 108 } 109 104 110 } 105 111 -
trunk/WebCore/svg/SVGDocument.cpp
r44808 r53514 37 37 38 38 SVGDocument::SVGDocument(Frame* frame) 39 : Document(frame, false )39 : Document(frame, false, false) 40 40 { 41 41 }
Note: See TracChangeset
for help on using the changeset viewer.