Changeset 76454 in webkit


Ignore:
Timestamp:
Jan 22, 2011 12:11:22 PM (13 years ago)
Author:
ggaren@apple.com
Message:

2011-01-22 Geoffrey Garen <ggaren@apple.com>

Reviewed by Geoffrey Garen.

Rubber-stamped by Maciej Stachowiak.

A few of Maciej's review suggestions for my last patch.
https://bugs.webkit.org/show_bug.cgi?id=52946

SunSpider reports no change.

  • runtime/ConservativeSet.cpp: Added. (JSC::isPointerAligned): (JSC::ConservativeSet::add):
  • runtime/ConservativeSet.h: Added. (JSC::ConservativeSet::ConservativeSet): (JSC::ConservativeSet::mark): Split ConservativeSet out into its own file, and moved the conservative check into ConservativeSet::add, making ConservativeSet's responsibility clearer.
  • runtime/Heap.cpp: (JSC::Heap::markRoots):
  • runtime/MachineStackMarker.cpp: (JSC::MachineStackMarker::markCurrentThreadConservativelyInternal): (JSC::MachineStackMarker::markOtherThreadConservatively):
  • runtime/MachineStackMarker.h:
  • runtime/MarkStack.h: Updated for changes above.
Location:
trunk/Source/JavaScriptCore
Files:
2 added
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/Android.mk

    r76185 r76454  
    128128        runtime/Lookup.cpp \
    129129        runtime/MachineStackMarker.cpp \
     130        runtime/ConservativeSet.cpp \
    130131        runtime/MarkStack.cpp \
    131132        runtime/MarkStackPosix.cpp \
  • trunk/Source/JavaScriptCore/CMakeLists.txt

    r76185 r76454  
    138138    runtime/Lookup.cpp
    139139    runtime/MachineStackMarker.cpp
     140    runtime/ConservativeSet.cpp
    140141    runtime/MarkStack.cpp
    141142    runtime/MathObject.cpp
  • trunk/Source/JavaScriptCore/ChangeLog

    r76441 r76454  
     12011-01-22  Geoffrey Garen  <ggaren@apple.com>
     2
     3        Reviewed by Geoffrey Garen.
     4
     5        Rubber-stamped by Maciej Stachowiak.
     6
     7        A few of Maciej's review suggestions for my last patch.
     8        https://bugs.webkit.org/show_bug.cgi?id=52946       
     9
     10        SunSpider reports no change.
     11
     12        * Android.mk:
     13        * CMakeLists.txt:
     14        * GNUmakefile.am:
     15        * JavaScriptCore.gypi:
     16        * JavaScriptCore.pro:
     17        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
     18        * JavaScriptCore.xcodeproj/project.pbxproj: Updated build systems.
     19
     20        * runtime/ConservativeSet.cpp: Added.
     21        (JSC::isPointerAligned):
     22        (JSC::ConservativeSet::add):
     23        * runtime/ConservativeSet.h: Added.
     24        (JSC::ConservativeSet::ConservativeSet):
     25        (JSC::ConservativeSet::mark): Split ConservativeSet out into its own
     26        file, and moved the conservative check into ConservativeSet::add, making
     27        ConservativeSet's responsibility clearer.
     28
     29        * runtime/Heap.cpp:
     30        (JSC::Heap::markRoots):
     31        * runtime/MachineStackMarker.cpp:
     32        (JSC::MachineStackMarker::markCurrentThreadConservativelyInternal):
     33        (JSC::MachineStackMarker::markOtherThreadConservatively):
     34        * runtime/MachineStackMarker.h:
     35        * runtime/MarkStack.h: Updated for changes above.
     36
    1372011-01-22  Patrick Gansterer  <paroga@webkit.org>
    238
  • trunk/Source/JavaScriptCore/GNUmakefile.am

    r76185 r76454  
    344344        Source/JavaScriptCore/runtime/MachineStackMarker.cpp \
    345345        Source/JavaScriptCore/runtime/MachineStackMarker.h \
     346        Source/JavaScriptCore/runtime/ConservativeSet.cpp \
     347        Source/JavaScriptCore/runtime/ConservativeSet.h \
    346348        Source/JavaScriptCore/runtime/MarkStack.cpp \
    347349        Source/JavaScriptCore/runtime/MarkStack.h \
  • trunk/Source/JavaScriptCore/JavaScriptCore.gypi

    r76185 r76454  
    281281            'runtime/MachineStackMarker.cpp',
    282282            'runtime/MachineStackMarker.h',
     283            'runtime/ConservativeSet.cpp',
     284            'runtime/ConservativeSet.h',
    283285            'runtime/MarkStack.cpp',
    284286            'runtime/MarkStack.h',
  • trunk/Source/JavaScriptCore/JavaScriptCore.pro

    r76185 r76454  
    180180    runtime/MarkStackSymbian.cpp \
    181181    runtime/MarkStackWin.cpp \
     182    runtime/ConservativeSet.cpp \
    182183    runtime/MarkStack.cpp \
    183184    runtime/MathObject.cpp \
  • trunk/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj

    r76185 r76454  
    10031003                        </File>
    10041004                        <File
     1005                                RelativePath="..\..\runtime\ConservativeSet.cpp"
     1006                                >
     1007                        </File>
     1008                        <File
     1009                                RelativePath="..\..\runtime\ConservativeSet.h"
     1010                                >
     1011                        </File>
     1012                        <File
    10051013                                RelativePath="..\..\runtime\MarkStack.cpp"
    10061014                                >
  • trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj

    r76185 r76454  
    123123                14469DEE107EC7E700650446 /* UString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F692A8850255597D01FF60F7 /* UString.cpp */; };
    124124                146AAB380B66A94400E55F16 /* JSStringRefCF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 146AAB370B66A94400E55F16 /* JSStringRefCF.cpp */; };
     125                146B16D812EB5B59001BEC1B /* ConservativeSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 146B14DB12EB5B12001BEC1B /* ConservativeSet.cpp */; };
    125126                146FE51211A710430087AE66 /* JITCall32_64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 146FE51111A710430087AE66 /* JITCall32_64.cpp */; };
    126127                147B83AC0E6DB8C9004775A4 /* BatchedTransitionOptimizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 147B83AA0E6DB8C9004775A4 /* BatchedTransitionOptimizer.h */; };
     
    709710                146AAB2A0B66A84900E55F16 /* JSStringRefCF.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSStringRefCF.h; sourceTree = "<group>"; };
    710711                146AAB370B66A94400E55F16 /* JSStringRefCF.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSStringRefCF.cpp; sourceTree = "<group>"; };
     712                146B14DB12EB5B12001BEC1B /* ConservativeSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConservativeSet.cpp; sourceTree = "<group>"; };
    711713                146FE51111A710430087AE66 /* JITCall32_64.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JITCall32_64.cpp; sourceTree = "<group>"; };
    712714                14760863099C633800437128 /* JSImmediate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSImmediate.cpp; sourceTree = "<group>"; };
     
    726728                149559ED0DDCDDF700648087 /* DebuggerCallFrame.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DebuggerCallFrame.cpp; sourceTree = "<group>"; };
    727729                149B24FF0D8AF6D1009CB8C7 /* Register.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Register.h; sourceTree = "<group>"; };
     730                149DAAF212EB559D0083B12B /* ConservativeSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConservativeSet.h; sourceTree = "<group>"; };
    728731                14A1563010966365006FA260 /* DateInstanceCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DateInstanceCache.h; sourceTree = "<group>"; };
    729732                14A23D6C0F4E19CE0023CDAD /* JITStubs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JITStubs.cpp; sourceTree = "<group>"; };
     
    17091712                                969A09220ED1E09C00F1F681 /* Completion.cpp */,
    17101713                                F5BB2BC5030F772101FCFE1D /* Completion.h */,
     1714                                146B14DB12EB5B12001BEC1B /* ConservativeSet.cpp */,
     1715                                149DAAF212EB559D0083B12B /* ConservativeSet.h */,
    17111716                                BCA62DFF0E2826310004F30D /* ConstructData.cpp */,
    17121717                                BC8F3CCF0DAF17BA00577A80 /* ConstructData.h */,
     
    27122717                                147F39C1107EC37600427A48 /* CommonIdentifiers.cpp in Sources */,
    27132718                                147F39C2107EC37600427A48 /* Completion.cpp in Sources */,
     2719                                146B16D812EB5B59001BEC1B /* ConservativeSet.cpp in Sources */,
    27142720                                1428082E107EC0570013E7B2 /* ConstructData.cpp in Sources */,
    27152721                                86565742115BE3DA00291F40 /* CString.cpp in Sources */,
     
    28592865                                14469DEC107EC7E700650446 /* StringObject.cpp in Sources */,
    28602866                                14469DED107EC7E700650446 /* StringPrototype.cpp in Sources */,
     2867                                9335F24D12E6765B002B5553 /* StringRecursionChecker.cpp in Sources */,
    28612868                                8626BECF11928E3900782FAB /* StringStatics.cpp in Sources */,
    28622869                                BCDE3B430E6C832D001453A7 /* Structure.cpp in Sources */,
     
    28792886                                86704B8912DBA33700A9FE7B /* YarrPattern.cpp in Sources */,
    28802887                                86704B4212DB8A8100A9FE7B /* YarrSyntaxChecker.cpp in Sources */,
    2881                                 9335F24D12E6765B002B5553 /* StringRecursionChecker.cpp in Sources */,
    28822888                        );
    28832889                        runOnlyForDeploymentPostprocessing = 0;
  • trunk/Source/JavaScriptCore/runtime/Heap.cpp

    r76425 r76454  
    2323
    2424#include "CollectorHeapIterator.h"
     25#include "ConservativeSet.h"
    2526#include "GCActivityCallback.h"
    2627#include "GCHandle.h"
     
    257258    // conservative gathering uses the mark bits from our last mark pass to
    258259    // determine whether a reference is valid.
    259     ConservativeSet conservativeSet;
     260    ConservativeSet conservativeSet(this);
    260261    m_machineStackMarker.markMachineStackConservatively(conservativeSet);
    261     m_machineStackMarker.markConservatively(conservativeSet, registerFile().start(), registerFile().end());
     262    conservativeSet.add(registerFile().start(), registerFile().end());
    262263
    263264    // Reset mark bits.
  • trunk/Source/JavaScriptCore/runtime/MachineStackMarker.cpp

    r76441 r76454  
    2222#include "MachineStackMarker.h"
    2323
     24#include "ConservativeSet.h"
    2425#include "Heap.h"
    2526#include "JSArray.h"
     
    212213    void* end = m_heap->globalData()->stack().origin();
    213214    swapIfBackwards(begin, end);
    214     markConservatively(conservativeSet, begin, end);
     215    conservativeSet.add(begin, end);
    215216}
    216217
     
    374375
    375376    // mark the thread's registers
    376     markConservatively(conservativeSet, static_cast<void*>(&regs), static_cast<void*>(reinterpret_cast<char*>(&regs) + regSize));
     377    conservativeSet.add(static_cast<void*>(&regs), static_cast<void*>(reinterpret_cast<char*>(&regs) + regSize));
    377378
    378379    void* stackPointer = otherThreadStackPointer(regs);
    379380    void* stackBase = thread->stackBase;
    380381    swapIfBackwards(stackPointer, stackBase);
    381     markConservatively(conservativeSet, stackPointer, stackBase);
     382    conservativeSet.add(stackPointer, stackBase);
    382383
    383384    resumeThread(thread->platformThread);
     
    415416}
    416417
    417 inline bool isPointerAligned(void* p)
    418 {
    419     return !((intptr_t)(p) & (sizeof(char*) - 1));
    420 }
    421 
    422 void MachineStackMarker::markConservatively(ConservativeSet& conservativeSet, void* start, void* end)
    423 {
    424     ASSERT(start <= end);
    425     ASSERT((static_cast<char*>(end) - static_cast<char*>(start)) < 0x1000000);
    426     ASSERT(isPointerAligned(start));
    427     ASSERT(isPointerAligned(end));
    428 
    429     for (char** it = static_cast<char**>(start); it != static_cast<char**>(end); ++it) {
    430         if (!m_heap->contains(*it))
    431             continue;
    432         conservativeSet.add(reinterpret_cast<JSCell*>(*it));
    433     }
    434 }
    435 
    436418} // namespace JSC
  • trunk/Source/JavaScriptCore/runtime/MachineStackMarker.h

    r76425 r76454  
    4242
    4343        void markMachineStackConservatively(ConservativeSet&);
    44         void markConservatively(ConservativeSet&, void* start, void* end);
    4544
    4645#if ENABLE(JSC_MULTIPLE_THREADS)
  • trunk/Source/JavaScriptCore/runtime/MarkStack.h

    r76425 r76454  
    189189    };
    190190   
    191     class ConservativeSet {
    192     public:
    193         void add(JSCell* cell) { m_vector.append(cell); }
    194         void mark(MarkStack& markStack)
    195         {
    196             for (size_t i = 0; i < m_vector.size(); ++i)
    197                 markStack.append(m_vector[i]);
    198         }
    199 
    200     private:
    201         Vector<JSCell*, 64> m_vector;
    202     };
    203191}
    204192
Note: See TracChangeset for help on using the changeset viewer.