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());
     }
 };
 


Reply via email to