[SCM] WebKit Debian packaging branch, webkit-1.3, updated. upstream/1.3.7-4207-g178b198
ggaren at apple.com
ggaren at apple.com
Mon Feb 21 00:38:47 UTC 2011
The following commit has been merged in the webkit-1.3 branch:
commit 4e08b9b51cdce59c6dc7254dc93894f58ee48080
Author: ggaren at apple.com <ggaren at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Wed Feb 2 19:21:17 2011 +0000
2011-02-01 Geoffrey Garen <ggaren at apple.com>
Reviewed by Sam Weinig.
A little more Heap refactoring
https://bugs.webkit.org/show_bug.cgi?id=53577
SunSpider reports no change.
Split out MarkedBlock into its own file / class.
Did the following renames:
isCellMarked => isMarked
checkMarkCell => testAndSetMarked
markCell => setMarked
cellOffset => cellNumber
collectorBlock => blockFor
* Android.mk:
* CMakeLists.txt:
* GNUmakefile.am:
* JavaScriptCore.gypi:
* JavaScriptCore.pro:
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
* JavaScriptCore.xcodeproj/project.pbxproj:
* runtime/Heap.cpp:
(JSC::WeakGCHandlePool::update):
* runtime/Heap.h:
(JSC::Heap::isMarked):
(JSC::Heap::testAndSetMarked):
(JSC::Heap::setMarked):
* runtime/JSArray.h:
(JSC::MarkStack::markChildren):
(JSC::MarkStack::drain):
* runtime/JSCell.h:
(JSC::JSCell::MarkStack::internalAppend):
* runtime/MarkedBlock.cpp: Added.
* runtime/MarkedBlock.h: Added.
(JSC::MarkedBlock::blockFor):
(JSC::MarkedBlock::cellNumber):
(JSC::MarkedBlock::isMarked):
(JSC::MarkedBlock::testAndSetMarked):
(JSC::MarkedBlock::setMarked):
(JSC::MarkedBlock::isCellAligned):
(JSC::MarkedBlock::isPossibleCell):
* runtime/MarkedSpace.h:
(JSC::MarkedSpace::isMarked):
(JSC::MarkedSpace::testAndSetMarked):
(JSC::MarkedSpace::setMarked):
* runtime/SmallStrings.cpp:
(JSC::isMarked):
* runtime/WeakGCMap.h:
(JSC::WeakGCMap::isValid):
(JSC::::get):
(JSC::::take):
(JSC::::set):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@77391 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/JavaScriptCore/Android.mk b/Source/JavaScriptCore/Android.mk
index 8c0b4c2..42d2041 100644
--- a/Source/JavaScriptCore/Android.mk
+++ b/Source/JavaScriptCore/Android.mk
@@ -80,6 +80,7 @@ LOCAL_SRC_FILES := \
runtime/BooleanObject.cpp \
runtime/BooleanPrototype.cpp \
runtime/CallData.cpp \
+ runtime/MarkedBlock.cpp \
runtime/MarkedSpace.cpp \
runtime/Heap.cpp \
runtime/CommonIdentifiers.cpp \
diff --git a/Source/JavaScriptCore/CMakeLists.txt b/Source/JavaScriptCore/CMakeLists.txt
index 255787c..e685ecf 100644
--- a/Source/JavaScriptCore/CMakeLists.txt
+++ b/Source/JavaScriptCore/CMakeLists.txt
@@ -88,6 +88,7 @@ SET(JavaScriptCore_SOURCES
runtime/BooleanObject.cpp
runtime/BooleanPrototype.cpp
runtime/CallData.cpp
+ runtime/MarkedBlock.cpp
runtime/MarkedSpace.cpp
runtime/Heap.cpp
runtime/CommonIdentifiers.cpp
diff --git a/Source/JavaScriptCore/ChangeLog b/Source/JavaScriptCore/ChangeLog
index fa32e93..56763bf 100644
--- a/Source/JavaScriptCore/ChangeLog
+++ b/Source/JavaScriptCore/ChangeLog
@@ -1,3 +1,60 @@
+2011-02-01 Geoffrey Garen <ggaren at apple.com>
+
+ Reviewed by Sam Weinig.
+
+ A little more Heap refactoring
+ https://bugs.webkit.org/show_bug.cgi?id=53577
+
+ SunSpider reports no change.
+
+ Split out MarkedBlock into its own file / class.
+
+ Did the following renames:
+ isCellMarked => isMarked
+ checkMarkCell => testAndSetMarked
+ markCell => setMarked
+ cellOffset => cellNumber
+ collectorBlock => blockFor
+
+ * Android.mk:
+ * CMakeLists.txt:
+ * GNUmakefile.am:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.pro:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * runtime/Heap.cpp:
+ (JSC::WeakGCHandlePool::update):
+ * runtime/Heap.h:
+ (JSC::Heap::isMarked):
+ (JSC::Heap::testAndSetMarked):
+ (JSC::Heap::setMarked):
+ * runtime/JSArray.h:
+ (JSC::MarkStack::markChildren):
+ (JSC::MarkStack::drain):
+ * runtime/JSCell.h:
+ (JSC::JSCell::MarkStack::internalAppend):
+ * runtime/MarkedBlock.cpp: Added.
+ * runtime/MarkedBlock.h: Added.
+ (JSC::MarkedBlock::blockFor):
+ (JSC::MarkedBlock::cellNumber):
+ (JSC::MarkedBlock::isMarked):
+ (JSC::MarkedBlock::testAndSetMarked):
+ (JSC::MarkedBlock::setMarked):
+ (JSC::MarkedBlock::isCellAligned):
+ (JSC::MarkedBlock::isPossibleCell):
+ * runtime/MarkedSpace.h:
+ (JSC::MarkedSpace::isMarked):
+ (JSC::MarkedSpace::testAndSetMarked):
+ (JSC::MarkedSpace::setMarked):
+ * runtime/SmallStrings.cpp:
+ (JSC::isMarked):
+ * runtime/WeakGCMap.h:
+ (JSC::WeakGCMap::isValid):
+ (JSC::::get):
+ (JSC::::take):
+ (JSC::::set):
+
2011-02-02 Sam Weinig <sam at webkit.org>
Fix windows clean build.
diff --git a/Source/JavaScriptCore/GNUmakefile.am b/Source/JavaScriptCore/GNUmakefile.am
index 7c902c2..aadcd09 100644
--- a/Source/JavaScriptCore/GNUmakefile.am
+++ b/Source/JavaScriptCore/GNUmakefile.am
@@ -242,6 +242,8 @@ javascriptcore_sources += \
Source/JavaScriptCore/runtime/CallData.cpp \
Source/JavaScriptCore/runtime/CallData.h \
Source/JavaScriptCore/runtime/ClassInfo.h \
+ Source/JavaScriptCore/runtime/MarkedBlock.cpp \
+ Source/JavaScriptCore/runtime/MarkedBlock.h \
Source/JavaScriptCore/runtime/MarkedSpace.cpp \
Source/JavaScriptCore/runtime/MarkedSpace.h \
Source/JavaScriptCore/runtime/Heap.cpp \
diff --git a/Source/JavaScriptCore/JavaScriptCore.gypi b/Source/JavaScriptCore/JavaScriptCore.gypi
index ced693a..85a413c 100644
--- a/Source/JavaScriptCore/JavaScriptCore.gypi
+++ b/Source/JavaScriptCore/JavaScriptCore.gypi
@@ -185,6 +185,8 @@
'runtime/CallData.cpp',
'runtime/CallData.h',
'runtime/ClassInfo.h',
+ 'runtime/MarkedBlock.cpp',
+ 'runtime/MarkedBlock.h',
'runtime/MarkedSpace.cpp',
'runtime/MarkedSpace.h',
'runtime/Heap.cpp',
diff --git a/Source/JavaScriptCore/JavaScriptCore.pro b/Source/JavaScriptCore/JavaScriptCore.pro
index 5e8b593..9122647 100644
--- a/Source/JavaScriptCore/JavaScriptCore.pro
+++ b/Source/JavaScriptCore/JavaScriptCore.pro
@@ -128,6 +128,7 @@ SOURCES += \
runtime/BooleanObject.cpp \
runtime/BooleanPrototype.cpp \
runtime/CallData.cpp \
+ runtime/MarkedBlock.cpp \
runtime/MarkedSpace.cpp \
runtime/Heap.cpp \
runtime/CommonIdentifiers.cpp \
diff --git a/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj b/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj
index d5ee8df..514d7c8 100644
--- a/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj
+++ b/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj
@@ -594,6 +594,14 @@
>
</File>
<File
+ RelativePath="..\..\runtime\MarkedBlock.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\MarkedBlock.h"
+ >
+ </File>
+ <File
RelativePath="..\..\runtime\MarkedSpace.cpp"
>
</File>
diff --git a/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj b/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
index 3afe29a..304c7af 100644
--- a/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
+++ b/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
@@ -176,6 +176,8 @@
14BD5A320A3E91F600BAF59C /* JSValueRef.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 14BD5A2B0A3E91F600BAF59C /* JSValueRef.cpp */; };
14BFCE6910CDB1FC00364CCE /* WeakGCMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 14BFCE6810CDB1FC00364CCE /* WeakGCMap.h */; settings = {ATTRIBUTES = (Private, ); }; };
14C5242B0F5355E900BA3D04 /* JITStubs.h in Headers */ = {isa = PBXBuildFile; fileRef = 14A6581A0F4E36F4000150FD /* JITStubs.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 14C824AB12F7C77E008F35E0 /* MarkedBlock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 14C824AA12F7C77E008F35E0 /* MarkedBlock.cpp */; };
+ 14C824AD12F7C785008F35E0 /* MarkedBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = 14C824AC12F7C785008F35E0 /* MarkedBlock.h */; };
14E9D17B107EC469004DDA21 /* JSGlobalObjectFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC756FC60E2031B200DE7D12 /* JSGlobalObjectFunctions.cpp */; };
14F3488F0E95EF8A003648BC /* CollectorHeapIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = 14F3488E0E95EF8A003648BC /* CollectorHeapIterator.h */; settings = {ATTRIBUTES = (); }; };
14F8BA3E107EC886009892DC /* FastMalloc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 65E217B908E7EECC0023E5F6 /* FastMalloc.cpp */; };
@@ -754,6 +756,8 @@
14BD5A2B0A3E91F600BAF59C /* JSValueRef.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSValueRef.cpp; sourceTree = "<group>"; };
14BD5A2D0A3E91F600BAF59C /* testapi.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = testapi.c; path = API/tests/testapi.c; sourceTree = "<group>"; };
14BFCE6810CDB1FC00364CCE /* WeakGCMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WeakGCMap.h; sourceTree = "<group>"; };
+ 14C824AA12F7C77E008F35E0 /* MarkedBlock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MarkedBlock.cpp; sourceTree = "<group>"; };
+ 14C824AC12F7C785008F35E0 /* MarkedBlock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MarkedBlock.h; sourceTree = "<group>"; };
14D792640DAA03FB001A9F05 /* RegisterFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegisterFile.h; sourceTree = "<group>"; };
14D857740A4696C80032146C /* testapi.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; name = testapi.js; path = API/tests/testapi.js; sourceTree = "<group>"; };
14DA818E0D99FD2000B0A4FB /* JSActivation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSActivation.h; sourceTree = "<group>"; };
@@ -1824,6 +1828,8 @@
F692A8690255597D01FF60F7 /* Lookup.h */,
14B7233F12D7D0DA003BD5ED /* MachineStackMarker.cpp */,
14B7234012D7D0DA003BD5ED /* MachineStackMarker.h */,
+ 14C824AA12F7C77E008F35E0 /* MarkedBlock.cpp */,
+ 14C824AC12F7C785008F35E0 /* MarkedBlock.h */,
140CDC7612DBEA330013CFC5 /* MarkedSpace.cpp */,
140CDC7712DBEA330013CFC5 /* MarkedSpace.h */,
A74B3498102A5F8E0032AB98 /* MarkStack.cpp */,
@@ -2439,6 +2445,7 @@
A7DCB97312E5193F00911940 /* WriteBarrier.h in Headers */,
E49DC16C12EF294E00184A1F /* SourceProviderCache.h in Headers */,
E49DC16D12EF295300184A1F /* SourceProviderCacheItem.h in Headers */,
+ 14C824AD12F7C785008F35E0 /* MarkedBlock.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -2907,6 +2914,7 @@
86704B8912DBA33700A9FE7B /* YarrPattern.cpp in Sources */,
86704B4212DB8A8100A9FE7B /* YarrSyntaxChecker.cpp in Sources */,
E49DC16B12EF293E00184A1F /* SourceProviderCache.cpp in Sources */,
+ 14C824AB12F7C77E008F35E0 /* MarkedBlock.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff --git a/Source/JavaScriptCore/runtime/Heap.cpp b/Source/JavaScriptCore/runtime/Heap.cpp
index f032eca..89cc6f8 100644
--- a/Source/JavaScriptCore/runtime/Heap.cpp
+++ b/Source/JavaScriptCore/runtime/Heap.cpp
@@ -135,7 +135,7 @@ void WeakGCHandlePool::update()
for (unsigned i = 1; i < WeakGCHandlePool::numPoolEntries; ++i) {
if (m_entries[i].isValidPtr()) {
JSCell* cell = m_entries[i].get();
- if (!cell || !Heap::isCellMarked(cell))
+ if (!cell || !Heap::isMarked(cell))
m_entries[i].invalidate();
}
}
diff --git a/Source/JavaScriptCore/runtime/Heap.h b/Source/JavaScriptCore/runtime/Heap.h
index 93e84cf..a896819 100644
--- a/Source/JavaScriptCore/runtime/Heap.h
+++ b/Source/JavaScriptCore/runtime/Heap.h
@@ -55,9 +55,9 @@ namespace JSC {
static Heap* heap(JSValue); // 0 for immediate values
static Heap* heap(JSCell*);
- static bool isCellMarked(const JSCell*);
- static bool checkMarkCell(const JSCell*);
- static void markCell(JSCell*);
+ static bool isMarked(const JSCell*);
+ static bool testAndSetMarked(const JSCell*);
+ static void setMarked(JSCell*);
Heap(JSGlobalData*);
~Heap();
@@ -142,19 +142,19 @@ namespace JSC {
size_t m_extraCost;
};
- inline bool Heap::isCellMarked(const JSCell* cell)
+ inline bool Heap::isMarked(const JSCell* cell)
{
- return MarkedSpace::isCellMarked(cell);
+ return MarkedSpace::isMarked(cell);
}
- inline bool Heap::checkMarkCell(const JSCell* cell)
+ inline bool Heap::testAndSetMarked(const JSCell* cell)
{
- return MarkedSpace::checkMarkCell(cell);
+ return MarkedSpace::testAndSetMarked(cell);
}
- inline void Heap::markCell(JSCell* cell)
+ inline void Heap::setMarked(JSCell* cell)
{
- MarkedSpace::markCell(cell);
+ MarkedSpace::setMarked(cell);
}
inline bool Heap::contains(void* p)
diff --git a/Source/JavaScriptCore/runtime/JSArray.h b/Source/JavaScriptCore/runtime/JSArray.h
index aa5edf0..b5caa47 100644
--- a/Source/JavaScriptCore/runtime/JSArray.h
+++ b/Source/JavaScriptCore/runtime/JSArray.h
@@ -200,7 +200,7 @@ namespace JSC {
inline void MarkStack::markChildren(JSCell* cell)
{
- ASSERT(Heap::isCellMarked(cell));
+ ASSERT(Heap::isMarked(cell));
if (!cell->structure()->typeInfo().overridesMarkChildren()) {
#ifdef NDEBUG
asObject(cell)->markChildrenDirect(*this);
@@ -240,7 +240,7 @@ namespace JSC {
current.m_values++;
JSCell* cell;
- if (!value || !value.isCell() || Heap::checkMarkCell(cell = value.asCell())) {
+ if (!value || !value.isCell() || Heap::testAndSetMarked(cell = value.asCell())) {
if (current.m_values == end) {
m_markSets.removeLast();
continue;
diff --git a/Source/JavaScriptCore/runtime/JSCell.h b/Source/JavaScriptCore/runtime/JSCell.h
index f23b48a..e02bdaf 100644
--- a/Source/JavaScriptCore/runtime/JSCell.h
+++ b/Source/JavaScriptCore/runtime/JSCell.h
@@ -351,7 +351,7 @@ namespace JSC {
{
ASSERT(!m_isCheckingForDefaultMarkViolation);
ASSERT(cell);
- if (Heap::checkMarkCell(cell))
+ if (Heap::testAndSetMarked(cell))
return;
if (cell->structure()->typeInfo().type() >= CompoundType)
m_values.append(cell);
diff --git a/Source/JavaScriptCore/runtime/MarkedBlock.cpp b/Source/JavaScriptCore/runtime/MarkedBlock.cpp
new file mode 100644
index 0000000..59d9369
--- /dev/null
+++ b/Source/JavaScriptCore/runtime/MarkedBlock.cpp
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "MarkedBlock.h"
+
+namespace JSC {
+
+} // namespace JSC
diff --git a/Source/JavaScriptCore/runtime/MarkedBlock.h b/Source/JavaScriptCore/runtime/MarkedBlock.h
new file mode 100644
index 0000000..00311df
--- /dev/null
+++ b/Source/JavaScriptCore/runtime/MarkedBlock.h
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 1999-2000 Harri Porten (porten at kde.org)
+ * Copyright (C) 2001 Peter Kelly (pmk at post.com)
+ * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+#ifndef MarkedBlock_h
+#define MarkedBlock_h
+
+#include <wtf/Bitmap.h>
+#include <wtf/FixedArray.h>
+
+namespace JSC {
+
+ class Heap;
+ class JSCell;
+
+#if OS(WINCE) || OS(SYMBIAN) || PLATFORM(BREWMP)
+ const size_t BLOCK_SIZE = 64 * 1024; // 64k
+#else
+ const size_t BLOCK_SIZE = 256 * 1024; // 256k
+#endif
+
+ const size_t BLOCK_OFFSET_MASK = BLOCK_SIZE - 1;
+ const size_t BLOCK_MASK = ~BLOCK_OFFSET_MASK;
+ const size_t MINIMUM_CELL_SIZE = 64;
+ const size_t CELL_ARRAY_LENGTH = (MINIMUM_CELL_SIZE / sizeof(double)) + (MINIMUM_CELL_SIZE % sizeof(double) != 0 ? sizeof(double) : 0);
+ const size_t CELL_SIZE = CELL_ARRAY_LENGTH * sizeof(double);
+ const size_t SMALL_CELL_SIZE = CELL_SIZE / 2;
+ const size_t CELL_MASK = CELL_SIZE - 1;
+ const size_t CELL_ALIGN_MASK = ~CELL_MASK;
+ const size_t CELLS_PER_BLOCK = (BLOCK_SIZE - sizeof(Heap*)) * 8 * CELL_SIZE / (8 * CELL_SIZE + 1) / CELL_SIZE; // one bitmap byte can represent 8 cells.
+
+ struct CollectorCell {
+ FixedArray<double, CELL_ARRAY_LENGTH> memory;
+ };
+
+ // Cell size needs to be a power of two for CELL_MASK to be valid.
+ COMPILE_ASSERT(!(sizeof(CollectorCell) % 2), Collector_cell_size_is_power_of_two);
+
+ class MarkedBlock {
+ public:
+ static bool isCellAligned(void*);
+ static bool isPossibleCell(void*);
+ static MarkedBlock* blockFor(void*);
+
+ size_t cellNumber(const JSCell*);
+ bool isMarked(const JSCell*);
+ bool testAndSetMarked(const JSCell*);
+ void setMarked(JSCell* cell);
+
+ FixedArray<CollectorCell, CELLS_PER_BLOCK> cells;
+ WTF::Bitmap<CELLS_PER_BLOCK> marked;
+ Heap* heap;
+ };
+
+ struct HeapConstants {
+ static const size_t cellSize = CELL_SIZE;
+ static const size_t cellsPerBlock = CELLS_PER_BLOCK;
+ typedef CollectorCell Cell;
+ typedef MarkedBlock Block;
+ };
+
+ inline MarkedBlock* MarkedBlock::blockFor(void* p)
+ {
+ return reinterpret_cast<MarkedBlock*>(reinterpret_cast<uintptr_t>(p) & BLOCK_MASK);
+ }
+
+ inline size_t MarkedBlock::cellNumber(const JSCell* cell)
+ {
+ return (reinterpret_cast<uintptr_t>(cell) & BLOCK_OFFSET_MASK) / CELL_SIZE;
+ }
+
+ inline bool MarkedBlock::isMarked(const JSCell* cell)
+ {
+ return marked.get(cellNumber(cell));
+ }
+
+ inline bool MarkedBlock::testAndSetMarked(const JSCell* cell)
+ {
+ return marked.testAndSet(cellNumber(cell));
+ }
+
+ inline void MarkedBlock::setMarked(JSCell* cell)
+ {
+ marked.set(cellNumber(cell));
+ }
+
+ inline bool MarkedBlock::isCellAligned(void* p)
+ {
+ return !((intptr_t)(p) & CELL_MASK);
+ }
+
+ inline bool MarkedBlock::isPossibleCell(void* p)
+ {
+ return isCellAligned(p) && p;
+ }
+
+} // namespace JSC
+
+#endif // MarkedSpace_h
diff --git a/Source/JavaScriptCore/runtime/MarkedSpace.h b/Source/JavaScriptCore/runtime/MarkedSpace.h
index 5f1633b..84e3b09 100644
--- a/Source/JavaScriptCore/runtime/MarkedSpace.h
+++ b/Source/JavaScriptCore/runtime/MarkedSpace.h
@@ -65,9 +65,9 @@ namespace JSC {
public:
static Heap* heap(JSCell*);
- static bool isCellMarked(const JSCell*);
- static bool checkMarkCell(const JSCell*);
- static void markCell(JSCell*);
+ static bool isMarked(const JSCell*);
+ static bool testAndSetMarked(const JSCell*);
+ static void setMarked(JSCell*);
MarkedSpace(JSGlobalData*);
void destroy();
@@ -156,17 +156,17 @@ namespace JSC {
return cellBlock(cell)->heap;
}
- inline bool MarkedSpace::isCellMarked(const JSCell* cell)
+ inline bool MarkedSpace::isMarked(const JSCell* cell)
{
return cellBlock(cell)->marked.get(cellOffset(cell));
}
- inline bool MarkedSpace::checkMarkCell(const JSCell* cell)
+ inline bool MarkedSpace::testAndSetMarked(const JSCell* cell)
{
return cellBlock(cell)->marked.testAndSet(cellOffset(cell));
}
- inline void MarkedSpace::markCell(JSCell* cell)
+ inline void MarkedSpace::setMarked(JSCell* cell)
{
cellBlock(cell)->marked.set(cellOffset(cell));
}
diff --git a/Source/JavaScriptCore/runtime/SmallStrings.cpp b/Source/JavaScriptCore/runtime/SmallStrings.cpp
index c63a20d..9b193f5 100644
--- a/Source/JavaScriptCore/runtime/SmallStrings.cpp
+++ b/Source/JavaScriptCore/runtime/SmallStrings.cpp
@@ -37,7 +37,7 @@ static const unsigned numCharactersToStore = 0x100;
static inline bool isMarked(JSCell* string)
{
- return string && Heap::isCellMarked(string);
+ return string && Heap::isMarked(string);
}
class SmallStringsStorage {
diff --git a/Source/JavaScriptCore/runtime/WeakGCMap.h b/Source/JavaScriptCore/runtime/WeakGCMap.h
index 68788d0..7bf4503 100644
--- a/Source/JavaScriptCore/runtime/WeakGCMap.h
+++ b/Source/JavaScriptCore/runtime/WeakGCMap.h
@@ -78,8 +78,8 @@ public:
const_iterator uncheckedBegin() const { return m_map.begin(); }
const_iterator uncheckedEnd() const { return m_map.end(); }
- bool isValid(iterator it) const { return Heap::isCellMarked(it->second.get()); }
- bool isValid(const_iterator it) const { return Heap::isCellMarked(it->second.get()); }
+ bool isValid(iterator it) const { return Heap::isMarked(it->second.get()); }
+ bool isValid(const_iterator it) const { return Heap::isMarked(it->second.get()); }
private:
HashMap<KeyType, DeprecatedPtr<MappedType> > m_map;
@@ -91,7 +91,7 @@ inline MappedType* WeakGCMap<KeyType, MappedType>::get(const KeyType& key) const
MappedType* result = m_map.get(key).get();
if (result == HashTraits<MappedType*>::emptyValue())
return result;
- if (!Heap::isCellMarked(result))
+ if (!Heap::isMarked(result))
return HashTraits<MappedType*>::emptyValue();
return result;
}
@@ -102,7 +102,7 @@ MappedType* WeakGCMap<KeyType, MappedType>::take(const KeyType& key)
MappedType* result = m_map.take(key).get();
if (result == HashTraits<MappedType*>::emptyValue())
return result;
- if (!Heap::isCellMarked(result))
+ if (!Heap::isMarked(result))
return HashTraits<MappedType*>::emptyValue();
return result;
}
@@ -110,10 +110,10 @@ MappedType* WeakGCMap<KeyType, MappedType>::take(const KeyType& key)
template<typename KeyType, typename MappedType>
pair<typename WeakGCMap<KeyType, MappedType>::iterator, bool> WeakGCMap<KeyType, MappedType>::set(const KeyType& key, MappedType* value)
{
- Heap::markCell(value); // If value is newly allocated, it's not marked, so mark it now.
+ Heap::setMarked(value); // If value is newly allocated, it's not marked, so mark it now.
pair<iterator, bool> result = m_map.add(key, value);
if (!result.second) { // pre-existing entry
- result.second = !Heap::isCellMarked(result.first->second.get());
+ result.second = !Heap::isMarked(result.first->second.get());
result.first->second = value;
}
return result;
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list