[Libreoffice-commits] online.git: loolwsd/TileCache.cpp loolwsd/TileCache.hpp
loolwsd/TileCache.cpp | 10 +++--- loolwsd/TileCache.hpp |2 +- 2 files changed, 4 insertions(+), 8 deletions(-) New commits: commit a04f75d515c619be9ba9f4300409ff53da1ab22e Author: Ashod Nakashian Date: Wed Sep 21 18:48:14 2016 -0400 loolwsd: no need to return anything when subscribing to TileCache Change-Id: I7b8280bf150a74db243c17cea11afc40899c4c0d Reviewed-on: https://gerrit.libreoffice.org/29165 Reviewed-by: Ashod Nakashian Tested-by: Ashod Nakashian diff --git a/loolwsd/TileCache.cpp b/loolwsd/TileCache.cpp index 88ece86..d13400e 100644 --- a/loolwsd/TileCache.cpp +++ b/loolwsd/TileCache.cpp @@ -414,7 +414,7 @@ void TileCache::saveLastModified(const Timestamp& timestamp) } // FIXME: to be further simplified when we centralize tile messages. -int TileCache::subscribeToTileRendering(const TileDesc& tile, const std::shared_ptr &subscriber) +void TileCache::subscribeToTileRendering(const TileDesc& tile, const std::shared_ptr &subscriber) { assert(subscriber->getKind() == LOOLSession::Kind::ToClient); @@ -433,7 +433,7 @@ int TileCache::subscribeToTileRendering(const TileDesc& tile, const std::shared_ if (s.lock().get() == subscriber.get()) { Log::debug("Redundant request to subscribe on tile " + name); -return 0; +tileBeingRendered->setVersion(tile.getVersion()); } } @@ -446,10 +446,8 @@ int TileCache::subscribeToTileRendering(const TileDesc& tile, const std::shared_ if (std::chrono::duration_cast(duration).count() > COMMAND_TIMEOUT_MS) { // Tile painting has stalled. Reissue. -return tileBeingRendered->getVersion(); +tileBeingRendered->setVersion(tile.getVersion()); } - -return 0; } else { @@ -463,8 +461,6 @@ int TileCache::subscribeToTileRendering(const TileDesc& tile, const std::shared_ tileBeingRendered = std::make_shared(cachedName, tile); tileBeingRendered->_subscribers.push_back(subscriber); _tilesBeingRendered[cachedName] = tileBeingRendered; - -return tileBeingRendered->getVersion(); } } diff --git a/loolwsd/TileCache.hpp b/loolwsd/TileCache.hpp index 322387d..fc0210b 100644 --- a/loolwsd/TileCache.hpp +++ b/loolwsd/TileCache.hpp @@ -40,7 +40,7 @@ public: /// Subscribes if no subscription exists and returns the version number. /// Otherwise returns 0 to signify a subscription exists. -int subscribeToTileRendering(const TileDesc& tile, const std::shared_ptr &subscriber); +void subscribeToTileRendering(const TileDesc& tile, const std::shared_ptr &subscriber); /// Cancels all tile requests by the given subscriber. std::string cancelTiles(const std::shared_ptr &subscriber); ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] online.git: loolwsd/TileCache.cpp loolwsd/TileCache.hpp
loolwsd/TileCache.cpp |4 ++-- loolwsd/TileCache.hpp |6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) New commits: commit b72c777f859dfb9b09e1fe7c6958713d28dd2380 Author: Ashod Nakashian Date: Wed Sep 21 18:29:08 2016 -0400 loolwsd: const members where possible Change-Id: I318a76ad9e0c0ca334eb9239b61e674ce9a6a596 Reviewed-on: https://gerrit.libreoffice.org/29162 Reviewed-by: Ashod Nakashian Tested-by: Ashod Nakashian diff --git a/loolwsd/TileCache.cpp b/loolwsd/TileCache.cpp index 88ccaf5..4b2ac2d 100644 --- a/loolwsd/TileCache.cpp +++ b/loolwsd/TileCache.cpp @@ -364,12 +364,12 @@ std::string TileCache::cacheFileName(const TileDesc& tile) 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) const { return (std::sscanf(fileName.c_str(), "%d_%dx%d.%d,%d.%dx%d.png", &part, &width, &height, &tilePosX, &tilePosY, &tileWidth, &tileHeight) == 7); } -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) const { int tilePart, tilePixelWidth, tilePixelHeight, tilePosX, tilePosY, tileWidth, tileHeight; if (parseCacheFileName(fileName, tilePart, tilePixelWidth, tilePixelHeight, tilePosX, tilePosY, tileWidth, tileHeight)) diff --git a/loolwsd/TileCache.hpp b/loolwsd/TileCache.hpp index 6d206fc..322387d 100644 --- a/loolwsd/TileCache.hpp +++ b/loolwsd/TileCache.hpp @@ -80,10 +80,10 @@ private: void removeFile(const std::string& fileName); std::string cacheFileName(const TileDesc& tile); -bool parseCacheFileName(const std::string& fileName, int& part, int& width, int& height, int& tilePosX, int& tilePosY, int& tileWidth, int& tileHeight); +bool parseCacheFileName(const std::string& fileName, int& part, int& width, int& height, int& tilePosX, int& tilePosY, int& tileWidth, int& tileHeight) const; /// Extract location from fileName, and check if it intersects with [x, y, width, height]. -bool intersectsTile(const std::string& fileName, int part, int x, int y, int width, int height); +bool intersectsTile(const std::string& fileName, int part, int x, int y, int width, int height) const; /// Load the timestamp from modtime.txt. Poco::Timestamp getLastModified(); @@ -94,7 +94,7 @@ private: std::mutex _cacheMutex; -std::mutex _tilesBeingRenderedMutex; +mutable std::mutex _tilesBeingRenderedMutex; std::map> _tilesBeingRendered; }; ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] online.git: loolwsd/TileCache.cpp loolwsd/TileCache.hpp loolwsd/TileDesc.hpp
loolwsd/TileCache.cpp | 50 --- loolwsd/TileCache.hpp | 62 +--- loolwsd/TileDesc.hpp | 128 ++ 3 files changed, 131 insertions(+), 109 deletions(-) New commits: commit b2fa9d6f2ec8c16c52e657841564292f45f90fdb Author: Ashod Nakashian Date: Sat May 21 09:41:23 2016 -0400 loolwsd: moved TileDesc into own file Change-Id: I54162f7ebaaca51f9c52a30af1e278db212562fa Reviewed-on: https://gerrit.libreoffice.org/25261 Reviewed-by: Ashod Nakashian Tested-by: Ashod Nakashian diff --git a/loolwsd/TileCache.cpp b/loolwsd/TileCache.cpp index 836cb5f..bac923d 100644 --- a/loolwsd/TileCache.cpp +++ b/loolwsd/TileCache.cpp @@ -44,56 +44,6 @@ using Poco::Timestamp; using namespace LOOLProtocol; -std::string TileDesc::serialize(const std::string& prefix) const -{ -std::ostringstream oss; -oss << prefix -<< " part=" << _part -<< " width=" << _width -<< " height=" << _height -<< " tileposx=" << _tilePosX -<< " tileposy=" << _tilePosY -<< " tilewidth=" << _tileWidth -<< " tileheight=" << _tileHeight; -if (_id >= 0) -{ -oss << " id=" << _id; -} - -return oss.str(); -} - -TileDesc TileDesc::parse(const Poco::StringTokenizer& tokens) -{ -// We don't expect undocument fields and -// assume all values to be int. -std::map pairs; - -// id is optional. -pairs["id"] = -1; - -for (size_t i = 0; i < tokens.count(); ++i) -{ -std::string name; -int value = -1; -if (parseNameIntegerPair(tokens[i], name, value)) -{ -pairs[name] = value; -} -} - -return TileDesc(pairs["part"], pairs["width"], pairs["height"], -pairs["tileposx"], pairs["tileposy"], -pairs["tilewidth"], pairs["tileheight"], -pairs["id"]); -} - -TileDesc TileDesc::parse(const std::string& message) -{ -StringTokenizer tokens(message, " ", StringTokenizer::TOK_IGNORE_EMPTY | StringTokenizer::TOK_TRIM); -return parse(tokens); -} - TileCache::TileCache(const std::string& docURL, const Timestamp& modifiedTime, const std::string& cacheDir) : diff --git a/loolwsd/TileCache.hpp b/loolwsd/TileCache.hpp index 617ca67..4f72ef8 100644 --- a/loolwsd/TileCache.hpp +++ b/loolwsd/TileCache.hpp @@ -13,72 +13,16 @@ #include #include #include -#include +#include #include -#include #include -#include -#include "Exceptions.hpp" - -/** Handles the cache for tiles of one document. -*/ +#include "TileDesc.hpp" class ClientSession; -/// Tile Descriptor -/// Represents a tile's coordinates and dimensions. -class TileDesc -{ -public: -TileDesc(int part, int width, int height, int tilePosX, int tilePosY, int tileWidth, int tileHeight, int id = -1) : -_part(part), -_width(width), -_height(height), -_tilePosX(tilePosX), -_tilePosY(tilePosY), -_tileWidth(tileWidth), -_tileHeight(tileHeight), -_id(id) -{ -if (_part < 0 || -_width <= 0 || -_height <= 0 || -_tilePosX < 0 || -_tilePosY < 0 || -_tileWidth <= 0 || -_tileHeight <= 0) -{ -throw BadArgumentException("Invalid tile descriptor."); -} -} - -int getPart() const { return _part; } -int getWidth() const { return _width; } -int getHeight() const { return _height; } -int getTilePosX() const { return _tilePosX; } -int getTilePosY() const { return _tilePosY; } -int getTileWidth() const { return _tileWidth; } -int getTileHeight() const { return _tileHeight; } - -std::string serialize(const std::string& prefix = "") const; - -/// Deserialize a TileDesc from a string format. -static TileDesc parse(const std::string& message); -static TileDesc parse(const Poco::StringTokenizer& tokens); - -private: -int _part; -int _width; -int _height; -int _tilePosX; -int _tilePosY; -int _tileWidth; -int _tileHeight; -int _id; -}; - +/// Handles the caching of tiles of one document. class TileCache { struct TileBeingRendered; diff --git a/loolwsd/TileDesc.hpp b/loolwsd/TileDesc.hpp new file mode 100644 index 000..c8ee2d8 --- /dev/null +++ b/loolwsd/TileDesc.hpp @@ -0,0 +1,128 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef INCLUDED_TILEDESC_HPP +#define INCLUDED_TILEDESC_HPP + +#include +#include +#include + +#include + +#include "Exceptions.hpp" +#include "LOOLProtocol
[Libreoffice-commits] online.git: loolwsd/TileCache.cpp loolwsd/TileCache.hpp
loolwsd/TileCache.cpp |4 ++-- loolwsd/TileCache.hpp |4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) New commits: commit 0833a99b37907e5c82251abc0d52b6120ed70d3a Author: Miklos Vajna Date: Fri Apr 22 08:38:59 2016 +0200 TileCache: avoid copying these for each invocation Change-Id: Icaf84699d7f54f2f977162a040aed1f4090f680d diff --git a/loolwsd/TileCache.cpp b/loolwsd/TileCache.cpp index 996d5f3..f05ffa6 100644 --- a/loolwsd/TileCache.cpp +++ b/loolwsd/TileCache.cpp @@ -44,7 +44,7 @@ using Poco::URI; using namespace LOOLProtocol; -void TileBeingRendered::subscribe(std::weak_ptr session) +void TileBeingRendered::subscribe(const std::weak_ptr& session) { _subscribers.push_back(session); } @@ -382,7 +382,7 @@ void TileCache::invalidateTiles(const std::string& tiles) } } -void TileCache::removeFile(const std::string fileName) +void TileCache::removeFile(const std::string& fileName) { Log::warn("Removing tile: " + fileName); Util::removeFile(_persCacheDir + "/" + fileName); diff --git a/loolwsd/TileCache.hpp b/loolwsd/TileCache.hpp index 80c52be..cc4f746 100644 --- a/loolwsd/TileCache.hpp +++ b/loolwsd/TileCache.hpp @@ -35,7 +35,7 @@ class TileBeingRendered std::vector> _subscribers; public: -void subscribe(std::weak_ptr session); +void subscribe(const std::weak_ptr& session); std::vector> getSubscribers(); }; @@ -84,7 +84,7 @@ public: void invalidateTiles(int part, int x, int y, int width, int height); // Removes the given file from both editing and persistent cache -void removeFile(const std::string fileName); +void removeFile(const std::string& fileName); private: /// Path of the (sub-)cache dir, the parameter specifies which (sub-)cache to use. ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] online.git: loolwsd/TileCache.cpp loolwsd/TileCache.hpp
loolwsd/TileCache.cpp | 13 - loolwsd/TileCache.hpp |3 --- 2 files changed, 4 insertions(+), 12 deletions(-) New commits: commit 92ef78b6084ac8abc80eaa291a4a6fc9495b37f8 Author: Ashod Nakashian Date: Sat Mar 26 08:14:42 2016 -0400 loolwsd: optimized TileCache::toplevelCacheDirName away Change-Id: Iaac48b77e186e8069017093dffc1c432cfca8572 Reviewed-on: https://gerrit.libreoffice.org/23535 Reviewed-by: Ashod Nakashian Tested-by: Ashod Nakashian diff --git a/loolwsd/TileCache.cpp b/loolwsd/TileCache.cpp index 201d7c9..c51f83a 100644 --- a/loolwsd/TileCache.cpp +++ b/loolwsd/TileCache.cpp @@ -308,11 +308,6 @@ void TileCache::removeFile(const std::string fileName) Util::removeFile(editingTextFile); } -std::string TileCache::toplevelCacheDirName() -{ -return _rootCacheDir; -} - std::string TileCache::cacheDirName(const bool useEditingCache) { return (useEditingCache ? _editCacheDir : _persCacheDir); @@ -354,7 +349,7 @@ bool TileCache::intersectsTile(const std::string& fileName, int part, int x, int Timestamp TileCache::getLastModified() { -std::fstream modTimeFile(toplevelCacheDirName() + "/modtime.txt", std::ios::in); +std::fstream modTimeFile(_rootCacheDir + "/modtime.txt", std::ios::in); if (!modTimeFile.is_open()) return 0; @@ -368,7 +363,7 @@ Timestamp TileCache::getLastModified() void TileCache::saveLastModified(const Poco::Timestamp& timestamp) { -std::fstream modTimeFile(toplevelCacheDirName() + "/modtime.txt", std::ios::out); +std::fstream modTimeFile(_rootCacheDir + "/modtime.txt", std::ios::out); modTimeFile << timestamp.raw() << std::endl; modTimeFile.close(); } @@ -417,7 +412,7 @@ void TileCache::setup(const std::string& timestamp) if (cleanEverything) { // document changed externally, clean up everything -const auto path = toplevelCacheDirName(); +const auto path = _rootCacheDir; Util::removeFile(path, true); Log::info("Completely cleared cache: " + path); } @@ -429,7 +424,7 @@ void TileCache::setup(const std::string& timestamp) Log::info("Cleared the editing cache: " + path); } -File cacheDir(toplevelCacheDirName()); +File cacheDir(_rootCacheDir); cacheDir.createDirectories(); saveLastModified(lastModified); diff --git a/loolwsd/TileCache.hpp b/loolwsd/TileCache.hpp index 8b08681..aad3e8d 100644 --- a/loolwsd/TileCache.hpp +++ b/loolwsd/TileCache.hpp @@ -67,9 +67,6 @@ public: void removeFile(const std::string fileName); private: -/// Toplevel cache dirname. -std::string toplevelCacheDirName(); - /// Path of the (sub-)cache dir, the parameter specifies which (sub-)cache to use. std::string cacheDirName(bool useEditingCache); ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] online.git: loolwsd/TileCache.cpp loolwsd/TileCache.hpp
loolwsd/TileCache.cpp |4 loolwsd/TileCache.hpp |5 + 2 files changed, 9 insertions(+) New commits: commit 3e0a3d9ed6bd612e56ab38d8189f63ed2fe35af7 Author: Mihai Varga Date: Wed Aug 12 15:31:02 2015 +0300 loolwsd: use a mutex when moving/removing tiles form the cache diff --git a/loolwsd/TileCache.cpp b/loolwsd/TileCache.cpp index 95bb2f5..01714a4 100644 --- a/loolwsd/TileCache.cpp +++ b/loolwsd/TileCache.cpp @@ -151,9 +151,11 @@ void TileCache::documentSaved() for (const auto& it : _toBeRemoved) File(persistentDirName + "/" + it).remove(); +_cacheMutex.lock(); // then move the new tiles from the Editing cache to Persistent for (auto tileIterator = DirectoryIterator(cacheDirName(true)); tileIterator != DirectoryIterator(); ++tileIterator) tileIterator->moveTo(persistentDirName); +_cacheMutex.unlock(); // update status _toBeRemoved.clear(); @@ -195,6 +197,7 @@ void TileCache::invalidateTiles(int part, int x, int y, int width, int height) File editingDir(editingDirName); if (editingDir.exists() && editingDir.isDirectory()) { +_cacheMutex.lock(); for (auto tileIterator = DirectoryIterator(editingDir); tileIterator != DirectoryIterator(); ++tileIterator) { std::string fileName = tileIterator.path().getFileName(); @@ -203,6 +206,7 @@ void TileCache::invalidateTiles(int part, int x, int y, int width, int height) File(tileIterator.path()).remove(); } } +_cacheMutex.unlock(); } // in the Persistent cache, add to _toBeRemoved for removal on save diff --git a/loolwsd/TileCache.hpp b/loolwsd/TileCache.hpp index ca3a51f..1e01078 100644 --- a/loolwsd/TileCache.hpp +++ b/loolwsd/TileCache.hpp @@ -17,6 +17,9 @@ #include #include +#include + +using Poco::FastMutex; /** Handles the cache for tiles of one document. @@ -86,6 +89,8 @@ private: /// Set of tiles that we want to remove from the Persistent cache on the next save. std::set _toBeRemoved; + +Poco::FastMutex _cacheMutex; }; #endif ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] online.git: loolwsd/TileCache.cpp loolwsd/TileCache.hpp
loolwsd/TileCache.cpp | 39 +++ loolwsd/TileCache.hpp |2 ++ 2 files changed, 29 insertions(+), 12 deletions(-) New commits: commit 4303f1ee38d87cff8b1561674d729d1839c4fad9 Author: Tor Lillqvist Date: Fri May 29 12:23:57 2015 +0300 Improve tile cache handling for file: documents Handle also documents specified with a file: URI. Move creating the modtime.txt file to the constructor of the TileCache object for the document. diff --git a/loolwsd/TileCache.cpp b/loolwsd/TileCache.cpp index 42b7f61..6622841 100644 --- a/loolwsd/TileCache.cpp +++ b/loolwsd/TileCache.cpp @@ -19,11 +19,13 @@ #include #include +#include #include #include #include #include #include +#include #include "TileCache.hpp" @@ -32,20 +34,26 @@ using Poco::DirectoryIterator; using Poco::File; using Poco::SHA1Engine; using Poco::StringTokenizer; +using Poco::SyntaxException; using Poco::Timestamp; +using Poco::URI; TileCache::TileCache(const std::string& docURL) : _docURL(docURL) { File dir(cacheDirName()); -// TODO: Actually handle URLs (file: and http:), not file names. -if (dir.exists() && dir.isDirectory() && File(_docURL).exists() && File(_docURL).isFile()) +try { -if (getLastModified() != File(_docURL).getLastModified()) +URI uri(_docURL); +if (uri.getScheme() == "" || +uri.getScheme() == "file") { -dir.remove(true); - } +setupForFile(dir, uri.getPath()); +} +} +catch (SyntaxException& e) +{ } } @@ -74,13 +82,6 @@ void TileCache::saveTile(int part, int width, int height, int tilePosX, int tile std::fstream outStream(fileName, std::ios::out); outStream.write(data, size); outStream.close(); - -// TODO: Actually handle URLs (file: and http:), not file names. -if (!File(_docURL).exists() || !File(_docURL).isFile()) -return; -std::fstream modTimeFile(dirName + "/modtime.txt", std::ios::out); -modTimeFile << File(_docURL).getLastModified().raw() << std::endl; -modTimeFile.close(); } std::string TileCache::getStatus() @@ -220,5 +221,19 @@ Timestamp TileCache::getLastModified() return result; } +void TileCache::setupForFile(File& cacheDir, const std::string& path) +{ +if (File(path).exists() && File(path).isFile()) +{ +if (cacheDir.exists() && getLastModified() != File(path).getLastModified()) +{ +cacheDir.remove(true); +} +cacheDir.createDirectories(); +std::fstream modTimeFile(cacheDir.path() + "/modtime.txt", std::ios::out); +modTimeFile << File(path).getLastModified().raw() << std::endl; +modTimeFile.close(); +} +} /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/loolwsd/TileCache.hpp b/loolwsd/TileCache.hpp index 21704a2..7c856b4 100644 --- a/loolwsd/TileCache.hpp +++ b/loolwsd/TileCache.hpp @@ -14,6 +14,7 @@ #include #include +#include #include class TileCache @@ -38,6 +39,7 @@ private: std::string cacheFileName(int part, int width, int height, int tilePosX, int tilePosY, int tileWidth, int tileHeight); bool parseCacheFileName(std::string& fileName, int& part, int& width, int& height, int& tilePosX, int& tilePosY, int& tileWidth, int& tileHeight); Poco::Timestamp getLastModified(); +void setupForFile(Poco::File& cacheDir, const std::string& path); const std::string& _docURL; }; ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits