kit/Kit.cpp | 12 +++++++++--- wsd/DocumentBroker.cpp | 2 +- wsd/TileCache.cpp | 24 +++++++++++++----------- 3 files changed, 23 insertions(+), 15 deletions(-)
New commits: commit cfbb8d56272c9834dc2c416221b00d139b5406ad Author: Michael Meeks <[email protected]> AuthorDate: Fri Aug 7 18:37:53 2020 +0100 Commit: Jan Holesovsky <[email protected]> CommitDate: Tue Aug 11 19:03:46 2020 +0200 Notify WSD of tiles which we didn't need to render. When we get a wid match, this helps WSD to cleanup its tile subscriber list effectively. Change-Id: I6517039fb3d8c9ad8f53aef549b8adbb79961ce1 Reviewed-on: https://gerrit.libreoffice.org/c/online/+/100348 Tested-by: Jenkins Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Michael Meeks <[email protected]> Reviewed-on: https://gerrit.libreoffice.org/c/online/+/100507 Reviewed-by: Jan Holesovsky <[email protected]> diff --git a/kit/Kit.cpp b/kit/Kit.cpp index 09b003efc..1eb0ab03f 100644 --- a/kit/Kit.cpp +++ b/kit/Kit.cpp @@ -1094,6 +1094,9 @@ public: // The tile content is identical to what the client already has, so skip it LOG_TRC("Match for tile #" << tileIndex << " at (" << positionX << ',' << positionY << ") oldhash==hash (" << hash << "), wireId: " << wireId << " skipping"); + // Push a zero byte image to inform WSD we didn't need that. + // This allows WSD side TileCache to free up waiting subscribers. + pushRendered(renderedTiles, tiles[tileIndex], wireId, 0); tileIndex++; continue; } @@ -1165,13 +1168,16 @@ public: tileIndex++; } + // empty ones come first + size_t zeroCheckStart = renderedTiles.size(); + _pngPool.run(); - for (auto &i : renderedTiles) + for (size_t i = zeroCheckStart; i < renderedTiles.size(); ++i) { - if (i.getImgSize() == 0) + if (renderedTiles[i].getImgSize() == 0) { - LOG_ERR("Encoded 0-sized tile!"); + LOG_TRC("Encoded 0-sized tile in slot !" << i); assert(!"0-sized tile enocded!"); } } diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp index 03f23c08a..05bd288f8 100644 --- a/wsd/DocumentBroker.cpp +++ b/wsd/DocumentBroker.cpp @@ -1992,7 +1992,7 @@ void DocumentBroker::handleTileCombinedResponse(const std::vector<char>& payload try { const size_t length = payload.size(); - if (firstLine.size() < static_cast<std::string::size_type>(length) - 1) + if (firstLine.size() <= static_cast<std::string::size_type>(length) - 1) { const TileCombined tileCombined = TileCombined::parse(firstLine); const char* buffer = payload.data(); diff --git a/wsd/TileCache.cpp b/wsd/TileCache.cpp index e1cdefe8d..982cd985b 100644 --- a/wsd/TileCache.cpp +++ b/wsd/TileCache.cpp @@ -175,19 +175,24 @@ void TileCache::saveTileAndNotify(const TileDesc& tile, const char *data, const { assertCorrectThread(); - // Save to disk. + if (size > 0) + { + // Save to in-memory cache. - // Ignore if we can't save the tile, things will work anyway, but slower. - // An error indication is supposed to be sent to all users in that case. - saveDataToCache(tile, data, size); - LOG_TRC("Saved cache tile: " << cacheFileName(tile) << " of size " << size << " bytes"); + // Ignore if we can't save the tile, things will work anyway, but slower. + // An error indication is supposed to be sent to all users in that case. + saveDataToCache(tile, data, size); + LOG_TRC("Saved cache tile: " << cacheFileName(tile) << " of size " << size << " bytes"); + } + else + LOG_TRC("Zero sized cache tile: " << cacheFileName(tile)); // Notify subscribers, if any. std::shared_ptr<TileBeingRendered> tileBeingRendered = findTileBeingRendered(tile); if (tileBeingRendered) { const size_t subscriberCount = tileBeingRendered->getSubscribers().size(); - if (subscriberCount > 0) + if (size > 0 && subscriberCount > 0) { std::string response = tile.serialize("tile:"); LOG_DBG("Sending tile message to " << subscriberCount << " subscribers: " << response); @@ -229,10 +234,9 @@ void TileCache::saveTileAndNotify(const TileDesc& tile, const char *data, const } } } - else - { + else if (subscriberCount == 0) LOG_DBG("No subscribers for: " << cacheFileName(tile)); - } + // else zero sized // Remove subscriptions. if (tileBeingRendered->getVersion() <= tile.getVersion()) @@ -243,9 +247,7 @@ void TileCache::saveTileAndNotify(const TileDesc& tile, const char *data, const } } else - { LOG_DBG("No subscribers for: " << cacheFileName(tile)); - } } bool TileCache::getTextStream(StreamType type, const std::string& fileName, std::string& content) _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
