Changeset 116822 in webkit


Ignore:
Timestamp:
May 11, 2012 4:50:02 PM (12 years ago)
Author:
msaboff@apple.com
Message:

Rolling out r116659.

Causes ASSERT failures on bots.

Rubber stamped by Geoff Garen.

  • heap/Heap.cpp:

(JSC::Heap::markRoots):

  • heap/MarkStack.cpp:

(JSC::MarkStackThreadSharedData::markingThreadMain):
(JSC::MarkStackThreadSharedData::markingThreadStartFunc):
(JSC::MarkStackThreadSharedData::MarkStackThreadSharedData):
(JSC::MarkStackThreadSharedData::reset):
(JSC::MarkStack::reset):
(JSC):
(JSC::SlotVisitor::copyAndAppend):

  • heap/MarkStack.h:

(MarkStackThreadSharedData):
(MarkStack):

  • runtime/JSString.h:

(JSString):
(JSC::JSString::finishCreation):
(JSC::JSString::is8Bit):
(JSC::JSRopeString::finishCreation):

Location:
trunk/Source/JavaScriptCore
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r116818 r116822  
     12012-05-11  Michael Saboff  <msaboff@apple.com>
     2
     3        Rolling out r116659.
     4
     5        Causes ASSERT failures on bots.
     6
     7        Rubber stamped by Geoff Garen.
     8
     9        * heap/Heap.cpp:
     10        (JSC::Heap::markRoots):
     11        * heap/MarkStack.cpp:
     12        (JSC::MarkStackThreadSharedData::markingThreadMain):
     13        (JSC::MarkStackThreadSharedData::markingThreadStartFunc):
     14        (JSC::MarkStackThreadSharedData::MarkStackThreadSharedData):
     15        (JSC::MarkStackThreadSharedData::reset):
     16        (JSC::MarkStack::reset):
     17        (JSC):
     18        (JSC::SlotVisitor::copyAndAppend):
     19        * heap/MarkStack.h:
     20        (MarkStackThreadSharedData):
     21        (MarkStack):
     22        * runtime/JSString.h:
     23        (JSString):
     24        (JSC::JSString::finishCreation):
     25        (JSC::JSString::is8Bit):
     26        (JSC::JSRopeString::finishCreation):
     27
    1282012-05-11  Oliver Hunt  <oliver@apple.com>
    229
  • trunk/Source/JavaScriptCore/heap/Heap.cpp

    r116659 r116822  
    657657    visitor.reset();
    658658    m_sharedData.reset();
    659 #if ENABLE(PARALLEL_GC)
    660     m_sharedData.resetChildren();
    661 #endif
    662659    m_storageSpace.doneCopying();
    663660
  • trunk/Source/JavaScriptCore/heap/MarkStack.cpp

    r116785 r116822  
    3737#include "ScopeChain.h"
    3838#include "Structure.h"
    39 #include "UString.h"
    4039#include "WriteBarrier.h"
    4140#include <wtf/MainThread.h>
     
    220219
    221220#if ENABLE(PARALLEL_GC)
    222 void MarkStackThreadSharedData::resetChildren()
    223 {
    224     for (unsigned i = 0; i < m_slaveMarkStacks.size(); ++i)
    225        m_slaveMarkStacks[i]->reset();
    226 }
    227 
    228 void MarkStackThreadSharedData::markingThreadMain(SlotVisitor* slotVisitor)
     221void MarkStackThreadSharedData::markingThreadMain()
    229222{
    230223    WTF::registerGCThread();
    231224    {
    232         ParallelModeEnabler enabler(*slotVisitor);
    233         slotVisitor->drainFromShared(SlotVisitor::SlaveDrain);
    234     }
    235     delete slotVisitor;
    236 }
    237 
    238 void MarkStackThreadSharedData::markingThreadStartFunc(void* myVisitor)
    239 {
    240     SlotVisitor* slotVisitor = static_cast<SlotVisitor*>(myVisitor);
    241     slotVisitor->sharedData().markingThreadMain(slotVisitor);
     225        SlotVisitor slotVisitor(*this);
     226        ParallelModeEnabler enabler(slotVisitor);
     227        slotVisitor.drainFromShared(SlotVisitor::SlaveDrain);
     228    }
     229}
     230
     231void MarkStackThreadSharedData::markingThreadStartFunc(void* shared)
     232{
     233    static_cast<MarkStackThreadSharedData*>(shared)->markingThreadMain();
    242234}
    243235#endif
     
    252244#if ENABLE(PARALLEL_GC)
    253245    for (unsigned i = 1; i < Options::numberOfGCMarkers; ++i) {
    254         SlotVisitor* slotVisitor = new SlotVisitor(*this);
    255         m_slaveMarkStacks.append(slotVisitor);
    256         m_markingThreads.append(createThread(markingThreadStartFunc, slotVisitor, "JavaScriptCore::Marking"));
     246        m_markingThreads.append(createThread(markingThreadStartFunc, this, "JavaScriptCore::Marking"));
    257247        ASSERT(m_markingThreads.last());
    258248    }
     
    286276    ASSERT(m_opaqueRoots.isEmpty());
    287277#endif
     278   
    288279    m_weakReferenceHarvesters.removeAll();
    289280}
     
    298289    m_opaqueRoots.clear();
    299290#endif
    300     m_uniqueStrings.clear();
    301291}
    302292
     
    499489}
    500490
    501 inline void MarkStack::internalAppend(JSValue* slot)
    502 {
    503     ASSERT(slot);
    504     JSValue value = *slot;
    505     ASSERT(value);
    506     if (!value.isCell())
    507         return;
    508 
    509     if (value.isString()) {
    510         JSString* string = jsCast<JSString*>(value.asCell());
    511         if (!string->isHashConstSingleton() && string->length() > 1 && !string->isRope()) {
    512             UniqueStringMap::AddResult addResult = m_uniqueStrings.add(string->string().impl(), value);
    513             if (addResult.isNewEntry)
    514                 string->setHashConstSingleton();
    515             else {
    516                 JSValue existingJSValue = addResult.iterator->second;
    517                 if (value != existingJSValue)
    518                     jsCast<JSString*>(existingJSValue.asCell())->clearHashConstSingleton();
    519                 *slot = existingJSValue;
    520                 return;
    521             }
    522         }
    523     }
    524 
    525     internalAppend(value.asCell());
    526 }
    527 
    528 
    529491void SlotVisitor::copyAndAppend(void** ptr, size_t bytes, JSValue* values, unsigned length)
    530492{
     
    540502            if (!value)
    541503                continue;
    542             internalAppend(&newValues[i]);
     504            internalAppend(value);
    543505        }
    544506
  • trunk/Source/JavaScriptCore/heap/MarkStack.h

    r116659 r116822  
    3535#include "VTableSpectrum.h"
    3636#include "WeakReferenceHarvester.h"
    37 #include <wtf/Forward.h>
    3837#include <wtf/HashMap.h>
    3938#include <wtf/HashSet.h>
     
    4241#include <wtf/OSAllocator.h>
    4342#include <wtf/PageBlock.h>
    44 #include <wtf/text/StringHash.h>
    4543
    4644namespace JSC {
     
    174172       
    175173        void reset();
    176 
    177 #if ENABLE(PARALLEL_GC)
    178         void resetChildren();
    179 #endif
    180 
     174   
    181175    private:
    182176        friend class MarkStack;
     
    184178
    185179#if ENABLE(PARALLEL_GC)
    186         void markingThreadMain(SlotVisitor*);
     180        void markingThreadMain();
    187181        static void markingThreadStartFunc(void* heap);
    188182#endif
     
    194188       
    195189        Vector<ThreadIdentifier> m_markingThreads;
    196         Vector<MarkStack*> m_slaveMarkStacks;
    197190       
    198191        Mutex m_markingLock;
     
    229222        bool containsOpaqueRoot(void*);
    230223        int opaqueRootCount();
    231 
    232         MarkStackThreadSharedData& sharedData() { return m_shared; }
     224       
    233225        bool isEmpty() { return m_stack.isEmpty(); }
    234226
     
    236228
    237229        size_t visitCount() const { return m_visitCount; }
    238        
     230
    239231#if ENABLE(SIMPLE_HEAP_PROFILING)
    240232        VTableSpectrum m_visitedTypeCounts;
     
    260252        void internalAppend(JSCell*);
    261253        void internalAppend(JSValue);
    262         void internalAppend(JSValue*);
    263254       
    264255        JS_EXPORT_PRIVATE void mergeOpaqueRoots();
     
    280271        MarkStackArray m_stack;
    281272        HashSet<void*> m_opaqueRoots; // Handle-owning data structures not visible to the garbage collector.
    282         typedef HashMap<StringImpl*, JSValue> UniqueStringMap;
    283         UniqueStringMap m_uniqueStrings;
    284273       
    285274#if !ASSERT_DISABLED
  • trunk/Source/JavaScriptCore/runtime/JSString.h

    r116659 r116822  
    6868        friend class SpecializedThunkJIT;
    6969        friend class JSRopeString;
    70         friend class MarkStack;
    7170        friend struct ThunkHelpers;
    7271
     
    9392            m_length = length;
    9493            m_is8Bit = m_value.impl()->is8Bit();
    95             m_isHashConstSingleton = false;
    9694        }
    9795
     
    102100            m_length = length;
    103101            m_is8Bit = m_value.impl()->is8Bit();
    104             m_isHashConstSingleton = false;
    105102            Heap::heap(this)->reportExtraMemoryCost(cost);
    106103        }
     
    112109            m_length = 0;
    113110            m_is8Bit = true;
    114             m_isHashConstSingleton = false;
    115111        }
    116112       
     
    166162        bool isRope() const { return m_value.isNull(); }
    167163        bool is8Bit() const { return m_is8Bit; }
    168         bool isHashConstSingleton() const { return m_isHashConstSingleton; }
    169         void clearHashConstSingleton() { m_isHashConstSingleton = false; }
    170         void setHashConstSingleton() { m_isHashConstSingleton = true; }
    171164
    172165        // A string is represented either by a UString or a rope of fibers.
    173166        bool m_is8Bit : 1;
    174         bool m_isHashConstSingleton : 1;
    175167        unsigned m_length;
    176168        mutable UString m_value;
     
    242234            m_length = s1->length() + s2->length();
    243235            m_is8Bit = (s1->is8Bit() && s2->is8Bit());
    244             m_isHashConstSingleton = false;
    245236            m_fibers[0].set(globalData, this, s1);
    246237            m_fibers[1].set(globalData, this, s2);
     
    252243            m_length = s1->length() + s2->length() + s3->length();
    253244            m_is8Bit = (s1->is8Bit() && s2->is8Bit() &&  s3->is8Bit());
    254             m_isHashConstSingleton = false;
    255245            m_fibers[0].set(globalData, this, s1);
    256246            m_fibers[1].set(globalData, this, s2);
Note: See TracChangeset for help on using the changeset viewer.