[Libreoffice-commits] online.git: common/Png.hpp

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Thu Nov 1 00:33:21 UTC 2018


 common/Png.hpp |   20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

New commits:
commit 224bdad36563e856797472f4e15e2875324a4680
Author:     Tor Lillqvist <tml at collabora.com>
AuthorDate: Thu Nov 1 02:06:29 2018 +0200
Commit:     Tor Lillqvist <tml at collabora.com>
CommitDate: Thu Nov 1 02:32:56 2018 +0200

    Use faster PNG compression in mobile app
    
    Also, log the average time taken for PNG compression of tiles.
    
    Change-Id: I720f55dc44bd6729dce710e3b781a7239a8bf585

diff --git a/common/Png.hpp b/common/Png.hpp
index 921792acf..f7957c0b8 100644
--- a/common/Png.hpp
+++ b/common/Png.hpp
@@ -47,9 +47,12 @@
 
 #define PNG_SKIP_SETJMP_CHECK
 #include <png.h>
+#include <zlib.h>
 
 #include <cassert>
+#include <chrono>
 
+#include "Log.hpp"
 #include "SpookyV2.h"
 
 namespace Png
@@ -127,6 +130,10 @@ bool encodeSubBufferToPNG(unsigned char* pixmap, size_t startX, size_t startY,
         return false;
     }
 
+#ifdef MOBILEAPP
+    png_set_compression_level(png_ptr, Z_BEST_SPEED);
+#endif
+
     png_set_IHDR(png_ptr, info_ptr, width, height, 8, PNG_COLOR_TYPE_RGB_ALPHA, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
 
     png_set_write_fn(png_ptr, &output, user_write_fn, user_flush_fn);
@@ -139,6 +146,8 @@ bool encodeSubBufferToPNG(unsigned char* pixmap, size_t startX, size_t startY,
         png_set_write_user_transform_fn (png_ptr, unpremultiply_data);
     }
 
+    auto a = std::chrono::steady_clock::now();
+
     for (int y = 0; y < height; ++y)
     {
         size_t position = ((startY + y) * bufferWidth * 4) + (startX * 4);
@@ -147,6 +156,17 @@ bool encodeSubBufferToPNG(unsigned char* pixmap, size_t startX, size_t startY,
 
     png_write_end(png_ptr, info_ptr);
 
+    auto b = std::chrono::steady_clock::now();
+
+    std::chrono::milliseconds::rep duration = std::chrono::duration_cast<std::chrono::milliseconds>(b-a).count();
+
+    static std::chrono::milliseconds::rep totalDuration = 0;
+    static int nCalls = 0;
+
+    totalDuration += duration;
+    nCalls += 1;
+    LOG_TRC("Average PNG compression time after " << std::to_string(nCalls) << " calls: " << (totalDuration / static_cast<double>(nCalls)));
+
     png_destroy_write_struct(&png_ptr, &info_ptr);
 
     return true;


More information about the Libreoffice-commits mailing list