Diff
Modified: trunk/Source/WebKit2/ChangeLog (176397 => 176398)
--- trunk/Source/WebKit2/ChangeLog 2014-11-20 16:33:41 UTC (rev 176397)
+++ trunk/Source/WebKit2/ChangeLog 2014-11-20 17:32:04 UTC (rev 176398)
@@ -1,3 +1,33 @@
+2014-11-20 Antti Koivisto <[email protected]>
+
+ Remove alignment code from cache coders
+ https://bugs.webkit.org/show_bug.cgi?id=138927
+
+ Reviewed by Anders Carlsson.
+
+ Alignment code doesn't do anything useful, wastes space and produces wrong results
+ if the encoder and decoder buffers don't have the same 8-byte alignment.
+
+ * NetworkProcess/cache/NetworkCacheDecoder.cpp:
+ (WebKit::NetworkCacheDecoder::NetworkCacheDecoder):
+ (WebKit::NetworkCacheDecoder::bufferIsLargeEnoughToContain):
+ (WebKit::NetworkCacheDecoder::decodeFixedLengthData):
+ (WebKit::NetworkCacheDecoder::decodeNumber):
+ (WebKit::roundUpToAlignment): Deleted.
+ (WebKit::alignedBufferIsLargeEnoughToContain): Deleted.
+ (WebKit::NetworkCacheDecoder::alignBufferPosition): Deleted.
+ * NetworkProcess/cache/NetworkCacheDecoder.h:
+ (WebKit::NetworkCacheDecoder::currentOffset):
+ (WebKit::NetworkCacheDecoder::isInvalid):
+ (WebKit::NetworkCacheDecoder::markInvalid):
+ (WebKit::NetworkCacheDecoder::bufferIsLargeEnoughToContain):
+ * NetworkProcess/cache/NetworkCacheEncoder.cpp:
+ (WebKit::NetworkCacheEncoder::grow):
+ (WebKit::NetworkCacheEncoder::encodeFixedLengthData):
+ (WebKit::NetworkCacheEncoder::encodeNumber):
+ (WebKit::roundUpToAlignment): Deleted.
+ * NetworkProcess/cache/NetworkCacheEncoder.h:
+
2014-11-20 Csaba Osztrogonác <[email protected]>
[GTK] URTBF after r176363.
Modified: trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheDecoder.cpp (176397 => 176398)
--- trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheDecoder.cpp 2014-11-20 16:33:41 UTC (rev 176397)
+++ trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheDecoder.cpp 2014-11-20 17:32:04 UTC (rev 176398)
@@ -34,7 +34,7 @@
NetworkCacheDecoder::NetworkCacheDecoder(const uint8_t* buffer, size_t bufferSize)
: m_buffer(buffer)
- , m_bufferPos(buffer)
+ , m_bufferPosition(buffer)
, m_bufferEnd(buffer + bufferSize)
, m_checksum(0)
{
@@ -44,46 +44,19 @@
{
}
-static inline uint8_t* roundUpToAlignment(const uint8_t* ptr, unsigned alignment)
+bool NetworkCacheDecoder::bufferIsLargeEnoughToContain(size_t size) const
{
- // Assert that the alignment is a power of 2.
- ASSERT(alignment && !(alignment & (alignment - 1)));
-
- uintptr_t alignmentMask = alignment - 1;
- return reinterpret_cast<uint8_t*>((reinterpret_cast<uintptr_t>(ptr) + alignmentMask) & ~alignmentMask);
+ return m_bufferPosition + size <= m_bufferEnd;
}
-static inline bool alignedBufferIsLargeEnoughToContain(const uint8_t* alignedPosition, const uint8_t* bufferEnd, size_t size)
+bool NetworkCacheDecoder::decodeFixedLengthData(uint8_t* data, size_t size)
{
- return bufferEnd >= alignedPosition && static_cast<size_t>(bufferEnd - alignedPosition) >= size;
-}
-
-bool NetworkCacheDecoder::alignBufferPosition(unsigned alignment, size_t size)
-{
- uint8_t* alignedPosition = roundUpToAlignment(m_bufferPos, alignment);
- if (!alignedBufferIsLargeEnoughToContain(alignedPosition, m_bufferEnd, size)) {
- // We've walked off the end of this buffer.
- markInvalid();
+ if (!bufferIsLargeEnoughToContain(size))
return false;
- }
-
- m_bufferPos = alignedPosition;
- return true;
-}
-bool NetworkCacheDecoder::bufferIsLargeEnoughToContain(unsigned alignment, size_t size) const
-{
- return alignedBufferIsLargeEnoughToContain(roundUpToAlignment(m_bufferPos, alignment), m_bufferEnd, size);
-}
+ memcpy(data, m_bufferPosition, size);
+ m_bufferPosition += size;
-bool NetworkCacheDecoder::decodeFixedLengthData(uint8_t* data, size_t size, unsigned alignment)
-{
- if (!alignBufferPosition(alignment, size))
- return false;
-
- memcpy(data, m_bufferPos, size);
- m_bufferPos += size;
-
NetworkCacheEncoder::updateChecksumForData(m_checksum, data, size);
return true;
}
@@ -91,11 +64,11 @@
template<typename Type>
bool NetworkCacheDecoder::decodeNumber(Type& value)
{
- if (!alignBufferPosition(sizeof(value), sizeof(value)))
+ if (!bufferIsLargeEnoughToContain(sizeof(value)))
return false;
- memcpy(&value, m_bufferPos, sizeof(value));
- m_bufferPos += sizeof(Type);
+ memcpy(&value, m_bufferPosition, sizeof(value));
+ m_bufferPosition += sizeof(Type);
NetworkCacheEncoder::updateChecksumForNumber(m_checksum, value);
return true;
Modified: trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheDecoder.h (176397 => 176398)
--- trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheDecoder.h 2014-11-20 16:33:41 UTC (rev 176397)
+++ trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheDecoder.h 2014-11-20 17:32:04 UTC (rev 176398)
@@ -39,14 +39,14 @@
virtual ~NetworkCacheDecoder();
size_t length() const { return m_bufferEnd - m_buffer; }
- size_t currentOffset() const { return m_bufferPos - m_buffer; }
+ size_t currentOffset() const { return m_bufferPosition - m_buffer; }
- bool isInvalid() const { return m_bufferPos > m_bufferEnd; }
- void markInvalid() { m_bufferPos = m_bufferEnd + 1; }
+ bool isInvalid() const { return m_bufferPosition > m_bufferEnd; }
+ void markInvalid() { m_bufferPosition = m_bufferEnd + 1; }
bool verifyChecksum();
- bool decodeFixedLengthData(uint8_t*, size_t, unsigned alignment);
+ bool decodeFixedLengthData(uint8_t*, size_t);
bool decode(bool&);
bool decode(uint8_t&);
@@ -83,16 +83,15 @@
if (numElements > std::numeric_limits<size_t>::max() / sizeof(T))
return false;
- return bufferIsLargeEnoughToContain(alignof(T), numElements * sizeof(T));
+ return bufferIsLargeEnoughToContain(numElements * sizeof(T));
}
private:
- bool alignBufferPosition(unsigned alignment, size_t);
- bool bufferIsLargeEnoughToContain(unsigned alignment, size_t) const;
+ bool bufferIsLargeEnoughToContain(size_t) const;
template<typename Type> bool decodeNumber(Type&);
const uint8_t* m_buffer;
- const uint8_t* m_bufferPos;
+ const uint8_t* m_bufferPosition;
const uint8_t* m_bufferEnd;
unsigned m_checksum;
Modified: trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheEncoder.cpp (176397 => 176398)
--- trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheEncoder.cpp 2014-11-20 16:33:41 UTC (rev 176397)
+++ trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheEncoder.cpp 2014-11-20 17:32:04 UTC (rev 176398)
@@ -39,20 +39,13 @@
{
}
-static inline size_t roundUpToAlignment(size_t value, unsigned alignment)
+uint8_t* NetworkCacheEncoder::grow(size_t size)
{
- return ((value + alignment - 1) / alignment) * alignment;
+ uint8_t* position = m_buffer.data() + m_buffer.size();
+ m_buffer.grow(m_buffer.size() + size);
+ return position;
}
-uint8_t* NetworkCacheEncoder::grow(unsigned alignment, size_t size)
-{
- size_t alignedSize = roundUpToAlignment(m_buffer.size(), alignment);
-
- m_buffer.grow(alignedSize + size);
-
- return m_buffer.data() + alignedSize;
-}
-
void NetworkCacheEncoder::updateChecksumForData(unsigned& checksum, const uint8_t* data, size_t size)
{
// FIXME: hashMemory should not require alignment.
@@ -61,23 +54,20 @@
checksum = WTF::pairIntHash(checksum, hash);
}
-void NetworkCacheEncoder::encodeFixedLengthData(const uint8_t* data, size_t size, unsigned alignment)
+void NetworkCacheEncoder::encodeFixedLengthData(const uint8_t* data, size_t size)
{
- ASSERT(!(reinterpret_cast<uintptr_t>(data) % alignment));
-
updateChecksumForData(m_checksum, data, size);
- uint8_t* buffer = grow(alignment, size);
+ uint8_t* buffer = grow(size);
memcpy(buffer, data, size);
}
template<typename Type>
void NetworkCacheEncoder::encodeNumber(Type value)
{
- uint8_t* buffer = grow(sizeof(Type), sizeof(Type));
-
NetworkCacheEncoder::updateChecksumForNumber(m_checksum, value);
+ uint8_t* buffer = grow(sizeof(Type));
memcpy(buffer, &value, sizeof(Type));
}
Modified: trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheEncoder.h (176397 => 176398)
--- trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheEncoder.h 2014-11-20 16:33:41 UTC (rev 176397)
+++ trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheEncoder.h 2014-11-20 17:32:04 UTC (rev 176398)
@@ -45,7 +45,7 @@
virtual ~NetworkCacheEncoder();
void encodeChecksum();
- void encodeFixedLengthData(const uint8_t*, size_t, unsigned alignment);
+ void encodeFixedLengthData(const uint8_t*, size_t);
template<typename T> void encodeEnum(T t)
{
@@ -84,7 +84,7 @@
template<typename Type> void encodeNumber(Type);
- uint8_t* grow(unsigned alignment, size_t);
+ uint8_t* grow(size_t);
template <typename Type> struct Salt;