wsd/ClientSession.cpp  |   35 -----------------------------------
 wsd/ClientSession.hpp  |   13 -------------
 wsd/DocumentBroker.cpp |    9 +++------
 wsd/TestStubs.cpp      |    7 -------
 wsd/TileCache.cpp      |   28 +++++++++++++++-------------
 wsd/TileCache.hpp      |    6 ++++--
 6 files changed, 22 insertions(+), 76 deletions(-)

New commits:
commit 829e94b779afad5bc6192e54868ecbf17a61633f
Author:     Michael Meeks <michael.me...@collabora.com>
AuthorDate: Sat Mar 2 19:26:08 2019 +0100
Commit:     Michael Meeks <michael.me...@collabora.com>
CommitDate: Sat Mar 2 21:42:34 2019 +0100

    TileCache: remove redundant, expensive tracking in ClientSession.
    
    No need for all these call outs. removeOutdatedTileSubscriptions can't,
    
    Expect it is quicker now and more reliable to trace the tiles being
    rendered and count the waiters.
    
    Change-Id: I9724c7f38cf888b35c628857c0f11b51e74613ca

diff --git a/wsd/ClientSession.cpp b/wsd/ClientSession.cpp
index c0a02b806..c3d5b9a83 100644
--- a/wsd/ClientSession.cpp
+++ b/wsd/ClientSession.cpp
@@ -1315,39 +1315,4 @@ void ClientSession::traceTileBySend(const TileDesc& 
tile, bool deduplicated)
         addTileOnFly(tile);
 }
 
-void ClientSession::traceSubscribeToTile(const std::string& cacheName)
-{
-    _tilesBeingRendered.insert(cacheName);
-}
-
-void ClientSession::traceUnSubscribeToTile(const std::string& cacheName)
-{
-    _tilesBeingRendered.erase(cacheName);
-}
-
-void ClientSession::removeOutdatedTileSubscriptions()
-{
-    const std::shared_ptr<DocumentBroker> docBroker = getDocumentBroker();
-    if(!docBroker)
-        return;
-
-    auto iterator = _tilesBeingRendered.begin();
-    while(iterator != _tilesBeingRendered.end())
-    {
-        double elapsedTime = 
docBroker->tileCache().getTileBeingRenderedElapsedTimeMs(*iterator);
-        if(elapsedTime < 0.0 && elapsedTime > 200.0)
-        {
-            LOG_INF("Tracked TileBeingRendered was dropped because of time 
out.");
-            _tilesBeingRendered.erase(iterator);
-        }
-        else
-            ++iterator;
-    }
-}
-
-void ClientSession::clearTileSubscription()
-{
-    _tilesBeingRendered.clear();
-}
-
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/wsd/ClientSession.hpp b/wsd/ClientSession.hpp
index 827a0f857..8db5b3718 100644
--- a/wsd/ClientSession.hpp
+++ b/wsd/ClientSession.hpp
@@ -21,7 +21,6 @@
 #include <map>
 #include <list>
 #include <utility>
-#include <unordered_set>
 
 class DocumentBroker;
 
@@ -130,14 +129,6 @@ public:
     /// Call this method anytime when a new tile is sent to the client
     void traceTileBySend(const TileDesc& tile, bool deduplicated = false);
 
-    /// Trask tiles what we a subscription to
-    void traceSubscribeToTile(const std::string& tileCacheName);
-    void traceUnSubscribeToTile(const std::string& tileCacheName);
-    void removeOutdatedTileSubscriptions();
-    void clearTileSubscription();
-
-    size_t getTilesBeingRenderedCount() const {return 
_tilesBeingRendered.size();}
-
     /// Clear wireId map anytime when client visible area changes (visible 
area, zoom, part number)
     void resetWireIdMap();
 
@@ -227,10 +218,6 @@ private:
     /// TileID's of the sent tiles. Push by sending and pop by tileprocessed 
message from the client.
     std::list<std::pair<std::string, std::chrono::steady_clock::time_point>> 
_tilesOnFly;
 
-    /// Names of tiles requested from kit, which this session is subsrcibed to
-    /// Track only non-thumbnail tiles (getId() == -1)
-    std::unordered_set<std::string> _tilesBeingRendered;
-
     /// Requested tiles are stored in this list, before we can send them to 
the client
     std::deque<TileDesc> _requestedTiles;
 
diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp
index 8f058bd2c..888500de8 100644
--- a/wsd/DocumentBroker.cpp
+++ b/wsd/DocumentBroker.cpp
@@ -1462,9 +1462,6 @@ void DocumentBroker::sendRequestedTiles(const 
std::shared_ptr<ClientSession>& se
         tilesOnFlyUpperLimit = 200; // Have a big number here to get all tiles 
requested by file openning
     }
 
-
-    // Update client's tilesBeingRendered list
-    session->removeOutdatedTileSubscriptions();
     // Drop tiles which we are waiting for too long
     session->removeOutdatedTilesOnFly();
 
@@ -1475,7 +1472,8 @@ void DocumentBroker::sendRequestedTiles(const 
std::shared_ptr<ClientSession>& se
     {
         size_t delayedTiles = 0;
         std::vector<TileDesc> tilesNeedsRendering;
-        while(session->getTilesOnFlyCount() + 
session->getTilesBeingRenderedCount() < tilesOnFlyUpperLimit &&
+        size_t beingRendered = 
_tileCache->countTilesBeingRenderedForSession(session);
+        while(session->getTilesOnFlyCount() + beingRendered < 
tilesOnFlyUpperLimit &&
               !requestedTiles.empty() &&
               // If we delayed all tiles we don't send any tile (we will when 
next tileprocessed message arrives)
               delayedTiles < requestedTiles.size())
@@ -1516,6 +1514,7 @@ void DocumentBroker::sendRequestedTiles(const 
std::shared_ptr<ClientSession>& se
                     _debugRenderedTileCount++;
                 }
                 tileCache().subscribeToTileRendering(tile, session);
+                beingRendered++;
             }
             requestedTiles.pop_front();
         }
@@ -1542,8 +1541,6 @@ void DocumentBroker::cancelTileRequests(const 
std::shared_ptr<ClientSession>& se
 
     session->getRequestedTiles().clear();
 
-    session->clearTileSubscription();
-
     session->resetWireIdMap();
 
     const std::string canceltiles = tileCache().cancelTiles(session);
diff --git a/wsd/TestStubs.cpp b/wsd/TestStubs.cpp
index 405b7a6c4..68b6f8d95 100644
--- a/wsd/TestStubs.cpp
+++ b/wsd/TestStubs.cpp
@@ -19,15 +19,8 @@
 
 void DocumentBroker::assertCorrectThread() const {}
 
-
 void ClientSession::traceTileBySend(const TileDesc& /*tile*/, bool 
/*deduplicated = false*/) {}
 
-void ClientSession::traceSubscribeToTile(const std::string& /*tileCacheName*/) 
{};
-
-void ClientSession::traceUnSubscribeToTile(const std::string& 
/*tileCacheName*/) {};
-
-void ClientSession::clearTileSubscription() {};
-
 void ClientSession::enqueueSendMessage(const std::shared_ptr<Message>& 
/*data*/) {};
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/wsd/TileCache.cpp b/wsd/TileCache.cpp
index b8e138563..6ca40c9f9 100644
--- a/wsd/TileCache.cpp
+++ b/wsd/TileCache.cpp
@@ -98,6 +98,19 @@ private:
     std::string _cachedName;
 };
 
+size_t TileCache::countTilesBeingRenderedForSession(const 
std::shared_ptr<ClientSession>& session)
+{
+    size_t count = 0;
+    for (auto &it : _tilesBeingRendered)
+    {
+        for (auto &s : it.second->getSubscribers()) {
+            if (s.lock() == session)
+                count++;
+        }
+    }
+    return count;
+}
+
 std::shared_ptr<TileCache::TileBeingRendered> 
TileCache::findTileBeingRendered(const TileDesc& tileDesc)
 {
     const std::string cachedName = cacheFileName(tileDesc);
@@ -108,19 +121,12 @@ std::shared_ptr<TileCache::TileBeingRendered> 
TileCache::findTileBeingRendered(c
     return tile != _tilesBeingRendered.end() ? tile->second : nullptr;
 }
 
-void TileCache::forgetTileBeingRendered(const 
std::shared_ptr<TileCache::TileBeingRendered>& tileBeingRendered, const 
TileDesc& tile)
+void TileCache::forgetTileBeingRendered(const 
std::shared_ptr<TileCache::TileBeingRendered>& tileBeingRendered)
 {
     assertCorrectThread();
     assert(tileBeingRendered);
     assert(_tilesBeingRendered.find(tileBeingRendered->getCacheName()) != 
_tilesBeingRendered.end());
 
-    for(auto& subscriber : tileBeingRendered->getSubscribers())
-    {
-        std::shared_ptr<ClientSession> session = subscriber.lock();
-        if(session && tile.getId() == -1)
-            session->traceUnSubscribeToTile(tileBeingRendered->getCacheName());
-    }
-
     _tilesBeingRendered.erase(tileBeingRendered->getCacheName());
 }
 
@@ -244,7 +250,7 @@ void TileCache::saveTileAndNotify(const TileDesc& tile, 
const char *data, const
         {
             LOG_DBG("STATISTICS: tile " << tile.getVersion() << " internal 
roundtrip " <<
                     tileBeingRendered->getElapsedTimeMs() << " ms.");
-            forgetTileBeingRendered(tileBeingRendered, tile);
+            forgetTileBeingRendered(tileBeingRendered);
         }
     }
     else
@@ -439,8 +445,6 @@ void TileCache::subscribeToTileRendering(const TileDesc& 
tile, const std::shared
         LOG_DBG("Subscribing " << subscriber->getName() << " to tile " << name 
<< " which has " <<
                 tileBeingRendered->getSubscribers().size() << " subscribers 
already.");
         tileBeingRendered->getSubscribers().push_back(subscriber);
-        if(tile.getId() == -1)
-            
subscriber->traceSubscribeToTile(tileBeingRendered->getCacheName());
 
         const auto duration = (std::chrono::steady_clock::now() - 
tileBeingRendered->getStartTime());
         if 
(std::chrono::duration_cast<std::chrono::milliseconds>(duration).count() > 
COMMAND_TIMEOUT_MS)
@@ -460,8 +464,6 @@ void TileCache::subscribeToTileRendering(const TileDesc& 
tile, const std::shared
 
         tileBeingRendered = std::make_shared<TileBeingRendered>(cachedName, 
tile);
         tileBeingRendered->getSubscribers().push_back(subscriber);
-        if(tile.getId() == -1)
-            
subscriber->traceSubscribeToTile(tileBeingRendered->getCacheName());
         _tilesBeingRendered[cachedName] = tileBeingRendered;
     }
 }
diff --git a/wsd/TileCache.hpp b/wsd/TileCache.hpp
index fe5a7ca34..70dc04fa1 100644
--- a/wsd/TileCache.hpp
+++ b/wsd/TileCache.hpp
@@ -85,11 +85,13 @@ public:
     /// Parse invalidateTiles message to a part number and a rectangle of the 
invalidated area
     static std::pair<int, Util::Rectangle> parseInvalidateMsg(const 
std::string& tiles);
 
-    void forgetTileBeingRendered(const 
std::shared_ptr<TileCache::TileBeingRendered>& tileBeingRendered, const 
TileDesc& tile);
+    void forgetTileBeingRendered(const 
std::shared_ptr<TileCache::TileBeingRendered>& tileBeingRendered);
     double getTileBeingRenderedElapsedTimeMs(const std::string& tileCacheName) 
const;
 
+    size_t countTilesBeingRenderedForSession(const 
std::shared_ptr<ClientSession>& subscriber);
+
     bool hasTileBeingRendered(const TileDesc& tile);
-    int getTileBeingRenderedVersion(const TileDesc& tile);
+    int  getTileBeingRenderedVersion(const TileDesc& tile);
 
     // Debugging bits ...
     void dumpState(std::ostream& os);
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to