]> git.cworth.org Git - apitrace/commitdiff
Add a usedCacheSize() method.
authorJosé Fonseca <jfonseca@vmware.com>
Thu, 1 Sep 2011 12:47:14 +0000 (13:47 +0100)
committerJosé Fonseca <jfonseca@vmware.com>
Thu, 1 Sep 2011 12:52:11 +0000 (13:52 +0100)
Simplifies things a little, and makes the code slightly more robust,
as I trying to figure out why sometimes I get traces with trailing
garbagge.

trace_snappyfile.cpp
trace_snappyfile.hpp

index 7678401b80fc818eb40b0ba8feeee3c95cddacb3..7e7072543426851c125257d2c9d0b5e0367e3e86 100644 (file)
@@ -190,14 +190,19 @@ void SnappyFile::rawFlush()
 void SnappyFile::flushCache()
 {
     if (m_mode == File::Write) {
-        size_t compressedLength;
+        size_t inputLength = usedCacheSize();
+
+        if (inputLength) {
+            size_t compressedLength;
 
-        ::snappy::RawCompress(m_cache, SNAPPY_CHUNK_SIZE - freeCacheSize(),
-                              m_compressedCache, &compressedLength);
+            ::snappy::RawCompress(m_cache, inputLength,
+                                  m_compressedCache, &compressedLength);
 
-        writeCompressedLength(compressedLength);
-        m_stream.write(m_compressedCache, compressedLength);
-        m_cachePtr = m_cache;
+            writeCompressedLength(compressedLength);
+            m_stream.write(m_compressedCache, compressedLength);
+            m_cachePtr = m_cache;
+        }
+        assert(m_cachePtr == m_cache);
     } else if (m_mode == File::Read) {
         //assert(m_cachePtr == m_cache + m_cacheSize);
         size_t compressedLength;
index 393fe0255ebe7eb2447ff6721449db6511ef2b7a..61b7ab1b29435aeeb51c833a05958c82f3bcee32 100644 (file)
@@ -27,6 +27,8 @@
 #ifndef TRACE_SNAPPYFILE_HPP
 #define TRACE_SNAPPYFILE_HPP
 
+#include <assert.h>
+
 #include "trace_file.hpp"
 
 #include <string>
@@ -59,12 +61,19 @@ protected:
     virtual void rawFlush();
 
 private:
+    inline size_t usedCacheSize() const
+    {
+        assert(m_cachePtr >= m_cache);
+        return m_cachePtr - m_cache;
+    }
     inline size_t freeCacheSize() const
     {
-        if (m_cacheSize > 0)
-            return m_cacheSize - (m_cachePtr - m_cache);
-        else
+        assert(m_cacheSize >= usedCacheSize());
+        if (m_cacheSize > 0) {
+            return m_cacheSize - usedCacheSize();
+        } else {
             return 0;
+        }
     }
     inline bool endOfData() const
     {