test/TileCacheTests.cpp | 2 +- wsd/ClientSession.cpp | 2 +- wsd/DocumentBroker.cpp | 4 ++-- wsd/DocumentBroker.hpp | 2 +- wsd/TileCache.cpp | 23 +++++++++++++---------- wsd/TileCache.hpp | 8 ++++---- 6 files changed, 22 insertions(+), 19 deletions(-)
New commits: commit ed4d93df1bfddfd73719af74cfafbbeefef90e02 Author: Mert Tumer <mert.tu...@collabora.com> AuthorDate: Wed Oct 16 16:50:09 2019 +0300 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Sat Oct 19 20:14:31 2019 +0200 Include normalizedViewId to TileCache Change-Id: Ibabc38a796cd99fb9d0efbf0ef14bf3d82c87b47 Reviewed-on: https://gerrit.libreoffice.org/81048 Reviewed-by: Andras Timar <andras.ti...@collabora.com> Tested-by: Andras Timar <andras.ti...@collabora.com> diff --git a/test/TileCacheTests.cpp b/test/TileCacheTests.cpp index b6dda807f..fd453d995 100644 --- a/test/TileCacheTests.cpp +++ b/test/TileCacheTests.cpp @@ -211,7 +211,7 @@ void TileCacheTests::testSimple() CPPUNIT_ASSERT_MESSAGE("cached tile corrupted", data == tileData); // Invalidate Tiles - tc.invalidateTiles("invalidatetiles: EMPTY"); + tc.invalidateTiles("invalidatetiles: EMPTY", nviewid); // No Cache file = tc.lookupTile(tile); diff --git a/wsd/ClientSession.cpp b/wsd/ClientSession.cpp index 86a79754e..112eb511e 100644 --- a/wsd/ClientSession.cpp +++ b/wsd/ClientSession.cpp @@ -1299,7 +1299,7 @@ void ClientSession::dumpState(std::ostream& os) void ClientSession::handleTileInvalidation(const std::string& message, const std::shared_ptr<DocumentBroker>& docBroker) { - docBroker->invalidateTiles(message); + docBroker->invalidateTiles(message, getHash()); // Skip requesting new tiles if we don't have client visible area data yet. if(!_clientVisibleArea.hasSurface() || diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp index 3119a14c1..fd4120611 100644 --- a/wsd/DocumentBroker.cpp +++ b/wsd/DocumentBroker.cpp @@ -1363,10 +1363,10 @@ bool DocumentBroker::handleInput(const std::vector<char>& payload) return true; } -void DocumentBroker::invalidateTiles(const std::string& tiles) +void DocumentBroker::invalidateTiles(const std::string& tiles, int normalizedViewId) { // Remove from cache. - _tileCache->invalidateTiles(tiles); + _tileCache->invalidateTiles(tiles, normalizedViewId); } void DocumentBroker::handleTileRequest(TileDesc& tile, diff --git a/wsd/DocumentBroker.hpp b/wsd/DocumentBroker.hpp index 24a5e1ac9..858e80658 100644 --- a/wsd/DocumentBroker.hpp +++ b/wsd/DocumentBroker.hpp @@ -305,7 +305,7 @@ public: _cursorHeight = h; } - void invalidateTiles(const std::string& tiles); + void invalidateTiles(const std::string& tiles, int normalizedViewId); void handleTileRequest(TileDesc& tile, const std::shared_ptr<ClientSession>& session); void handleDialogRequest(const std::string& dialogCmd); diff --git a/wsd/TileCache.cpp b/wsd/TileCache.cpp index b46d16044..e38fdad57 100644 --- a/wsd/TileCache.cpp +++ b/wsd/TileCache.cpp @@ -353,7 +353,7 @@ std::unique_ptr<std::fstream> TileCache::lookupCachedFile(const std::string& nam return nullptr; } -void TileCache::invalidateTiles(int part, int x, int y, int width, int height) +void TileCache::invalidateTiles(int part, int x, int y, int width, int height, int nViewId) { LOG_TRC("Removing invalidated tiles: part: " << part << ", x: " << x << ", y: " << y << @@ -369,7 +369,7 @@ void TileCache::invalidateTiles(int part, int x, int y, int width, int height) for (auto tileIterator = DirectoryIterator(dir); tileIterator != DirectoryIterator(); ++tileIterator) { const std::string fileName = tileIterator.path().getFileName(); - if (intersectsTile(fileName, part, x, y, width, height)) + if (intersectsTile(fileName, part, x, y, width, height, nViewId)) { LOG_DBG("Removing tile: " << tileIterator.path().toString()); FileUtil::removeFile(tileIterator.path()); @@ -378,11 +378,11 @@ void TileCache::invalidateTiles(int part, int x, int y, int width, int height) } } -void TileCache::invalidateTiles(const std::string& tiles) +void TileCache::invalidateTiles(const std::string& tiles, int normalizedViewId) { std::pair<int, Util::Rectangle> result = TileCache::parseInvalidateMsg(tiles); Util::Rectangle& invalidateRect = result.second; - invalidateTiles(result.first, invalidateRect.getLeft(), invalidateRect.getTop(), invalidateRect.getWidth(), invalidateRect.getHeight()); + invalidateTiles(result.first, invalidateRect.getLeft(), invalidateRect.getTop(), invalidateRect.getWidth(), invalidateRect.getHeight(), normalizedViewId); } std::pair<int, Util::Rectangle> TileCache::parseInvalidateMsg(const std::string& tiles) @@ -433,25 +433,28 @@ void TileCache::removeFile(const std::string& fileName) std::string TileCache::cacheFileName(const TileDesc& tile) { std::ostringstream oss; - oss << tile.getPart() << '_' << tile.getWidth() << 'x' << tile.getHeight() << '.' + oss << tile.getNormalizedViewId() << '_' << tile.getPart() << '_' << tile.getWidth() << 'x' << tile.getHeight() << '.' << tile.getTilePosX() << ',' << tile.getTilePosY() << '.' << tile.getTileWidth() << 'x' << tile.getTileHeight() << ".png"; return oss.str(); } -bool TileCache::parseCacheFileName(const std::string& fileName, int& part, int& width, int& height, int& tilePosX, int& tilePosY, int& tileWidth, int& tileHeight) +bool TileCache::parseCacheFileName(const std::string& fileName, int& part, int& width, int& height, int& tilePosX, int& tilePosY, int& tileWidth, int& tileHeight, int& nViewId) { - return std::sscanf(fileName.c_str(), "%d_%dx%d.%d,%d.%dx%d.png", &part, &width, &height, &tilePosX, &tilePosY, &tileWidth, &tileHeight) == 7; + return std::sscanf(fileName.c_str(), "%d_%d_%dx%d.%d,%d.%dx%d.png", &nViewId, &part, &width, &height, &tilePosX, &tilePosY, &tileWidth, &tileHeight) == 8; } -bool TileCache::intersectsTile(const std::string& fileName, int part, int x, int y, int width, int height) +bool TileCache::intersectsTile(const std::string& fileName, int part, int x, int y, int width, int height, int normalizedViewId) { - int tilePart, tilePixelWidth, tilePixelHeight, tilePosX, tilePosY, tileWidth, tileHeight; - if (parseCacheFileName(fileName, tilePart, tilePixelWidth, tilePixelHeight, tilePosX, tilePosY, tileWidth, tileHeight)) + int tilePart, tilePixelWidth, tilePixelHeight, tilePosX, tilePosY, tileWidth, tileHeight, nViewId; + if (parseCacheFileName(fileName, tilePart, tilePixelWidth, tilePixelHeight, tilePosX, tilePosY, tileWidth, tileHeight, nViewId)) { if (part != -1 && tilePart != part) return false; + if (nViewId != normalizedViewId) + return false; + const int left = std::max(x, tilePosX); const int right = std::min(x + width, tilePosX + tileWidth); const int top = std::max(y, tilePosY); diff --git a/wsd/TileCache.hpp b/wsd/TileCache.hpp index db922691d..5614412cf 100644 --- a/wsd/TileCache.hpp +++ b/wsd/TileCache.hpp @@ -76,7 +76,7 @@ public: std::unique_ptr<std::fstream> lookupCachedFile(const std::string& name, const std::string& dir); // The tiles parameter is an invalidatetiles: message as sent by the child process - void invalidateTiles(const std::string& tiles); + void invalidateTiles(const std::string& tiles, int normalizedViewId); /// 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); @@ -96,16 +96,16 @@ public: private: - void invalidateTiles(int part, int x, int y, int width, int height); + void invalidateTiles(int part, int x, int y, int width, int height, int normalizedViewId); // Removes the given file from the cache void removeFile(const std::string& fileName); static std::string cacheFileName(const TileDesc& tile); - static bool parseCacheFileName(const std::string& fileName, int& part, int& width, int& height, int& tilePosX, int& tilePosY, int& tileWidth, int& tileHeight); + static bool parseCacheFileName(const std::string& fileName, int& part, int& width, int& height, int& tilePosX, int& tilePosY, int& tileWidth, int& tileHeight, int& nViewid); /// Extract location from fileName, and check if it intersects with [x, y, width, height]. - static bool intersectsTile(const std::string& fileName, int part, int x, int y, int width, int height); + static bool intersectsTile(const std::string& fileName, int part, int x, int y, int width, int height, int nViewId); /// Load the timestamp from modtime.txt. Poco::Timestamp getLastModified(); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits