Author: cctrieloff
Date: Thu May 29 13:06:03 2008
New Revision: 661455
URL: http://svn.apache.org/viewvc?rev=661455&view=rev
Log:
Performnace fix, improves 6-8% on high core count machines.
Modified:
incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FrameSet.cpp
incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FrameSet.h
incubator/qpid/trunk/qpid/cpp/src/tests/MessageBuilderTest.cpp
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FrameSet.cpp
URL:
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FrameSet.cpp?rev=661455&r1=661454&r2=661455&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FrameSet.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FrameSet.cpp Thu May 29
13:06:03 2008
@@ -28,11 +28,12 @@
using namespace qpid::framing;
using namespace boost;
-FrameSet::FrameSet(const SequenceNumber& _id) : id(_id) {parts.reserve(4);}
+FrameSet::FrameSet(const SequenceNumber& _id) :
id(_id),contentSize(0),recalculateSize(true) {parts.reserve(4);}
void FrameSet::append(const AMQFrame& part)
{
parts.push_back(part);
+ recalculateSize = true;
}
bool FrameSet::isComplete() const
@@ -63,9 +64,14 @@
uint64_t FrameSet::getContentSize() const
{
- SumBodySize sum;
- map_if(sum, TypeFilter<CONTENT_BODY>());
- return sum.getSize();
+ if (recalculateSize)
+ {
+ SumBodySize sum;
+ map_if(sum, TypeFilter<CONTENT_BODY>());
+ contentSize = sum.getSize();
+ recalculateSize = false;
+ }
+ return contentSize;
}
void FrameSet::getContent(std::string& out) const {
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FrameSet.h
URL:
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FrameSet.h?rev=661455&r1=661454&r2=661455&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FrameSet.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FrameSet.h Thu May 29
13:06:03 2008
@@ -38,6 +38,8 @@
typedef std::vector<AMQFrame> Frames;
const SequenceNumber id;
Frames parts;
+ mutable uint64_t contentSize;
+ mutable bool recalculateSize;
public:
typedef boost::shared_ptr<FrameSet> shared_ptr;
Modified: incubator/qpid/trunk/qpid/cpp/src/tests/MessageBuilderTest.cpp
URL:
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/tests/MessageBuilderTest.cpp?rev=661455&r1=661454&r2=661455&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/tests/MessageBuilderTest.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/tests/MessageBuilderTest.cpp Thu May 29
13:06:03 2008
@@ -216,7 +216,7 @@
CPPUNIT_ASSERT(store.expectationsMet());
//were the content frames dropped?
- CPPUNIT_ASSERT_EQUAL((uint64_t) 0,
builder.getMessage()->contentSize());
+ CPPUNIT_ASSERT(!builder.getMessage()->isContentLoaded());
}
};