Title: [151977] branches/safari-537-branch/Source/WTF
- Revision
- 151977
- Author
- [email protected]
- Date
- 2013-06-25 18:22:03 -0700 (Tue, 25 Jun 2013)
Log Message
Merged r151755. <rdar://problem/14209227>
Modified Paths
Diff
Modified: branches/safari-537-branch/Source/WTF/ChangeLog (151976 => 151977)
--- branches/safari-537-branch/Source/WTF/ChangeLog 2013-06-26 01:09:26 UTC (rev 151976)
+++ branches/safari-537-branch/Source/WTF/ChangeLog 2013-06-26 01:22:03 UTC (rev 151977)
@@ -1,3 +1,34 @@
+2013-06-25 Lucas Forschler <[email protected]>
+
+ Merge r151755
+
+ 2013-06-19 Geoffrey Garen <[email protected]>
+
+ Remove the SegmentedVector inline segment to shrink CodeBlock by 6X
+ https://bugs.webkit.org/show_bug.cgi?id=117808
+
+ Reviewed by Geoffrey Garen.
+
+ SegmentedVector allocation isn't super hot, but we do tend to have many
+ live SegmentedVectors at runtime, particularly in CodeBlocks, so the
+ right tradeoff is to allocate segments out-of-line as needed.
+
+ This reduces startup memory usage @ google.com by about 6MB.
+
+ No regression on SunSpider.
+
+ * wtf/SegmentedVector.h:
+ (WTF::SegmentedVector::SegmentedVector):
+ (WTF::SegmentedVector::at):
+ (WTF::SegmentedVector::append):
+ (WTF::SegmentedVector::removeLast):
+ (WTF::SegmentedVector::clear):
+ (WTF::SegmentedVector::deleteAllSegments): No more inline segment.
+
+ (WTF::SegmentedVector::ensureSegmentsFor): This code used to assume
+ that there was always a 0 segment, so the math would underflow if there
+ were no 0 segment. I udpated the math to account for having no segments.
+
2013-06-21 Lucas Forschler <[email protected]>
Merge r151787
Modified: branches/safari-537-branch/Source/WTF/wtf/SegmentedVector.h (151976 => 151977)
--- branches/safari-537-branch/Source/WTF/wtf/SegmentedVector.h 2013-06-26 01:09:26 UTC (rev 151976)
+++ branches/safari-537-branch/Source/WTF/wtf/SegmentedVector.h 2013-06-26 01:22:03 UTC (rev 151977)
@@ -113,7 +113,6 @@
SegmentedVector()
: m_size(0)
{
- m_segments.append(&m_inlineSegment);
}
~SegmentedVector()
@@ -126,8 +125,6 @@
T& at(size_t index)
{
- if (index < SegmentSize)
- return m_inlineSegment[index];
return segmentFor(index)->at(subscriptFor(index));
}
@@ -155,11 +152,6 @@
{
++m_size;
- if (m_size <= SegmentSize) {
- m_inlineSegment.uncheckedAppend(value);
- return;
- }
-
if (!segmentExistsFor(m_size - 1))
m_segments.append(new Segment);
segmentFor(m_size - 1)->uncheckedAppend(value);
@@ -173,10 +165,7 @@
void removeLast()
{
- if (m_size <= SegmentSize)
- m_inlineSegment.removeLast();
- else
- segmentFor(m_size - 1)->removeLast();
+ segmentFor(m_size - 1)->removeLast();
--m_size;
}
@@ -190,8 +179,7 @@
void clear()
{
deleteAllSegments();
- m_segments.resize(1);
- m_inlineSegment.clear();
+ m_segments.clear();
m_size = 0;
}
@@ -215,9 +203,7 @@
void deleteAllSegments()
{
- // Skip the first segment, because it's our inline segment, which was
- // not created by new.
- for (size_t i = 1; i < m_segments.size(); i++)
+ for (size_t i = 0; i < m_segments.size(); i++)
delete m_segments[i];
}
@@ -238,18 +224,12 @@
void ensureSegmentsFor(size_t size)
{
- size_t segmentCount = m_size / SegmentSize;
- if (m_size % SegmentSize)
- ++segmentCount;
- segmentCount = std::max<size_t>(segmentCount, 1); // We always have at least our inline segment.
+ size_t segmentCount = (m_size + SegmentSize - 1) / SegmentSize;
+ size_t neededSegmentCount = (size + SegmentSize - 1) / SegmentSize;
- size_t neededSegmentCount = size / SegmentSize;
- if (size % SegmentSize)
- ++neededSegmentCount;
-
// Fill up to N - 1 segments.
size_t end = neededSegmentCount - 1;
- for (size_t i = segmentCount - 1; i < end; ++i)
+ for (size_t i = segmentCount ? segmentCount - 1 : 0; i < end; ++i)
ensureSegment(i, SegmentSize);
// Grow segment N to accomodate the remainder.
@@ -265,8 +245,7 @@
}
size_t m_size;
- Segment m_inlineSegment;
- Vector<Segment*, InlineCapacity> m_segments;
+ Vector<Segment*> m_segments;
};
} // namespace WTF
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes