[Libreoffice-commits] online.git: loolwsd/MessageQueue.cpp loolwsd/TileCache.cpp

Ashod Nakashian ashod.nakashian at collabora.co.uk
Wed Sep 21 05:14:59 UTC 2016


 loolwsd/MessageQueue.cpp |   52 ++++++++++++++++++++++++++++-------------------
 loolwsd/TileCache.cpp    |    4 ++-
 2 files changed, 34 insertions(+), 22 deletions(-)

New commits:
commit 9e5df31cbb2b2aeeb5c4bdbf260307d0a027703e
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date:   Tue Sep 20 19:20:23 2016 -0400

    loolwsd: make sure to combine all contiguous tiles
    
    Change-Id: If65e2ff53f593015ba7df23b6943a711c36550de
    Reviewed-on: https://gerrit.libreoffice.org/29119
    Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
    Tested-by: Ashod Nakashian <ashnakash at gmail.com>

diff --git a/loolwsd/MessageQueue.cpp b/loolwsd/MessageQueue.cpp
index 16946e2..7e81608 100644
--- a/loolwsd/MessageQueue.cpp
+++ b/loolwsd/MessageQueue.cpp
@@ -214,35 +214,45 @@ MessageQueue::Payload TileQueue::get_impl()
     tiles.emplace_back(TileDesc::parse(msg));
 
     // Combine as many tiles as possible with the top one.
-    for (size_t i = 0; i < _queue.size(); )
+    bool added;
+    do
     {
-        auto& it = _queue[i];
-        msg = std::string(it.data(), it.size());
-        if (msg.compare(0, 5, "tile ") != 0 ||
-            msg.find("id=") != std::string::npos)
+        added = false;
+        for (size_t i = 0; i < _queue.size(); )
         {
-            // Don't combine non-tiles or tiles with id.
-            continue;
-        }
+            auto& it = _queue[i];
+            msg = std::string(it.data(), it.size());
+            if (msg.compare(0, 5, "tile ") != 0 ||
+                msg.find("id=") != std::string::npos)
+            {
+                // Don't combine non-tiles or tiles with id.
+                ++i;
+                continue;
+            }
 
-        auto tile2 = TileDesc::parse(msg);
-        bool found = false;
-        Log::trace() << "combining?: " << msg << Log::end;
+            auto tile2 = TileDesc::parse(msg);
+            Log::trace() << "combining?: " << msg << Log::end;
 
-        // Check if adjacent tiles.
-        for (auto& tile : tiles)
-        {
-            if (tile.isAdjacent(tile2))
+            // Check if adjacent tiles.
+            bool found = false;
+            for (auto& tile : tiles)
             {
-                tiles.emplace_back(tile2);
-                _queue.erase(_queue.begin() + i);
-                found = true;
-                break;
+                if (tile.isAdjacent(tile2))
+                {
+                    tiles.emplace_back(tile2);
+                    _queue.erase(_queue.begin() + i);
+                    found = true;
+                    added = true;
+                    break;
+                }
             }
-        }
 
-        i += !found;
+            i += !found;
+        }
     }
+    while (added);
+
+    Log::trace() << "Combined " << tiles.size() << " tiles, leaving " << _queue.size() << " in queue." << Log::end;
 
     if (tiles.size() == 1)
     {
diff --git a/loolwsd/TileCache.cpp b/loolwsd/TileCache.cpp
index a5f7c0f..a439a63 100644
--- a/loolwsd/TileCache.cpp
+++ b/loolwsd/TileCache.cpp
@@ -477,11 +477,13 @@ int TileCache::subscribeToTileRendering(const TileDesc& tile, const std::shared_
 
 std::string TileCache::cancelTiles(const std::shared_ptr<ClientSession> &subscriber)
 {
+    assert(subscriber && "cancelTiles expects valid subscriber");
+    Log::trace("Cancelling tiles for " + subscriber->getName());
+
     std::unique_lock<std::mutex> lock(_tilesBeingRenderedMutex);
 
     const auto sub = subscriber.get();
 
-    Log::trace("Cancelling tiles for " + subscriber->getName());
     std::ostringstream oss;
 
     for (auto it = _tilesBeingRendered.begin(); it != _tilesBeingRendered.end(); )


More information about the Libreoffice-commits mailing list