Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Unified Diff: base/pickle.h

Issue 34413002: Pickle::Write* micro-optimizations (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | base/pickle.cc » ('j') | base/pickle.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/pickle.h
diff --git a/base/pickle.h b/base/pickle.h
index cb9bab98965f141b5ea9bffe264ed5cc76ba77e2..072c949b986a611211522120ec782d99f81e3125 100644
--- a/base/pickle.h
+++ b/base/pickle.h
@@ -216,7 +216,8 @@ class BASE_EXPORT Pickle {
return WriteInt(value ? 1 : 0);
}
bool WriteInt(int value) {
- return WriteBytes(&value, sizeof(value));
+ WriteBytesStatic<sizeof(value)>(&value);
+ return true;
}
// WARNING: DO NOT USE THIS METHOD IF PICKLES ARE PERSISTED IN ANY WAY.
// It will write whatever a "long" is on this architecture. On 32-bit
@@ -224,22 +225,28 @@ class BASE_EXPORT Pickle {
// pickles are still around after upgrading to 64-bit, or if they are copied
// between dissimilar systems, YOUR PICKLES WILL HAVE GONE BAD.
bool WriteLongUsingDangerousNonPortableLessPersistableForm(long value) {
- return WriteBytes(&value, sizeof(value));
+ WriteBytesStatic<sizeof(value)>(&value);
+ return true;
}
bool WriteUInt16(uint16 value) {
- return WriteBytes(&value, sizeof(value));
+ WriteBytesStatic<sizeof(value)>(&value);
+ return true;
}
bool WriteUInt32(uint32 value) {
- return WriteBytes(&value, sizeof(value));
+ WriteBytesStatic<sizeof(value)>(&value);
+ return true;
}
bool WriteInt64(int64 value) {
- return WriteBytes(&value, sizeof(value));
+ WriteBytesStatic<sizeof(value)>(&value);
+ return true;
}
bool WriteUInt64(uint64 value) {
- return WriteBytes(&value, sizeof(value));
+ WriteBytesStatic<sizeof(value)>(&value);
+ return true;
}
bool WriteFloat(float value) {
- return WriteBytes(&value, sizeof(value));
+ WriteBytesStatic<sizeof(value)>(&value);
+ return true;
}
bool WriteString(const std::string& value);
bool WriteWString(const std::wstring& value);
@@ -273,6 +280,8 @@ class BASE_EXPORT Pickle {
// not been changed.
void TrimWriteData(int length);
+ void Reserve(size_t size);
+
// Payload follows after allocation of Header (header size is customizable).
struct Header {
uint32 payload_size; // Specifies the size of the payload.
@@ -354,10 +363,33 @@ class BASE_EXPORT Pickle {
// Allocation size of payload (or -1 if allocation is const).
size_t capacity_;
size_t variable_buffer_offset_; // IF non-zero, then offset to a buffer.
+ size_t offset_;
+
+ template<size_t length> void WriteBytesStatic(const void* data);
FRIEND_TEST_ALL_PREFIXES(PickleTest, Resize);
FRIEND_TEST_ALL_PREFIXES(PickleTest, FindNext);
FRIEND_TEST_ALL_PREFIXES(PickleTest, FindNextWithIncompleteHeader);
};
+#if 0
+template <size_t length> void Pickle::WriteBytesStatic(const void* data) {
+ //DCHECK_NE(kCapacityReadOnly, capacity_) << "oops: pickle is readonly";
+#ifdef ARCH_CPU_64_BITS
+ DCHECK_LE(length, kuint32max);
danakj 2013/10/22 17:22:05 how come? and why ifdefed only on 64bit?
piman 2013/10/24 06:17:14 This comes from the original BeginWriteData. I ass
+#endif
+ size_t data_len = AlignInt(length, sizeof(uint32));
+ size_t new_size = offset_ + data_len;
+ if (new_size > capacity_) {
+ Resize(std::max(capacity_ * 2, new_size));
+ }
+
+ char* write = mutable_payload() + offset_;
+ memcpy(write, data, length);
+ memset(write + length, 0, data_len - length);
+ offset_ = new_size;
+ header_->payload_size = new_size;
+}
+#endif
+
#endif // BASE_PICKLE_H__
« no previous file with comments | « no previous file | base/pickle.cc » ('j') | base/pickle.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698