[Libreoffice-commits] online.git: loolwsd/DocumentBroker.cpp loolwsd/test loolwsd/TileCache.cpp loolwsd/TileCache.hpp

2016-09-25 Thread Ashod Nakashian
 loolwsd/DocumentBroker.cpp  |   20 +---
 loolwsd/TileCache.cpp   |   15 ++-
 loolwsd/TileCache.hpp   |2 +-
 loolwsd/test/TileCacheTests.cpp |2 +-
 4 files changed, 17 insertions(+), 22 deletions(-)

New commits:
commit f6a9de1b2d9646ace933cad17b5a9661da06997e
Author: Ashod Nakashian 
Date:   Sun Sep 25 11:33:37 2016 -0400

Revert "loolwsd: TileCache is told to save or not before...

This reverts commit 01718c5c68bad8d324dfcc1b93d3c49055c90873.

Change-Id: I6fa49f8d1f5c6ba7bdcd8cfa0866e0e15380607d
Reviewed-on: https://gerrit.libreoffice.org/29281
Reviewed-by: Ashod Nakashian 
Tested-by: Ashod Nakashian 

diff --git a/loolwsd/DocumentBroker.cpp b/loolwsd/DocumentBroker.cpp
index c241594..989e056 100644
--- a/loolwsd/DocumentBroker.cpp
+++ b/loolwsd/DocumentBroker.cpp
@@ -587,15 +587,14 @@ void DocumentBroker::handleTileResponse(const 
std::vector& payload)
 try
 {
 auto tile = TileDesc::parse(firstLine);
-
-
+const auto buffer = payload.data();
 const auto length = payload.size();
+
 if (firstLine.size() < static_cast(length) - 1)
 {
-const auto buffer = payload.data();
-tileCache().notifySubscribers(
+tileCache().saveTileAndNotify(
 tile, buffer + firstLine.size() + 1,
-length - firstLine.size() - 1, true);
+length - firstLine.size() - 1);
 }
 else
 {
@@ -620,22 +619,21 @@ void DocumentBroker::handleTileCombinedResponse(const 
std::vector& payload
 try
 {
 auto tileCombined = TileCombined::parse(firstLine);
-
-
+const auto buffer = payload.data();
 const auto length = payload.size();
+auto offset = firstLine.size() + 1;
+
 if (firstLine.size() < static_cast(length) - 1)
 {
-const auto buffer = payload.data();
-auto offset = firstLine.size() + 1;
 for (const auto& tile : tileCombined.getTiles())
 {
-tileCache().notifySubscribers(tile, buffer + offset, 
tile.getImgSize(), true);
+tileCache().saveTileAndNotify(tile, buffer + offset, 
tile.getImgSize());
 offset += tile.getImgSize();
 }
 }
 else
 {
-Log::debug() << "Render request declined for " << firstLine << 
Log::end;
+Log::error() << "Render request failed for " << firstLine << 
Log::end;
 std::unique_lock 
tileBeingRenderedLock(tileCache().getTilesBeingRenderedLock());
 for (const auto& tile : tileCombined.getTiles())
 {
diff --git a/loolwsd/TileCache.cpp b/loolwsd/TileCache.cpp
index 6924e30..ce74945 100644
--- a/loolwsd/TileCache.cpp
+++ b/loolwsd/TileCache.cpp
@@ -142,7 +142,7 @@ std::unique_ptr TileCache::lookupTile(const 
TileDesc& tile)
 return nullptr;
 }
 
-void TileCache::notifySubscribers(const TileDesc& tile, const char *data, 
const size_t size, const bool save)
+void TileCache::saveTileAndNotify(const TileDesc& tile, const char *data, 
const size_t size)
 {
 std::unique_lock lock(_tilesBeingRenderedMutex);
 
@@ -151,14 +151,11 @@ void TileCache::notifySubscribers(const TileDesc& tile, 
const char *data, const
 // Save to disk.
 const auto cachedName = (tileBeingRendered ? 
tileBeingRendered->getCacheName()
: cacheFileName(tile));
-if (save)
-{
-const auto fileName = _cacheDir + "/" + cachedName;
-Log::trace() << "Saving cache tile: " << fileName << Log::end;
-std::fstream outStream(fileName, std::ios::out);
-outStream.write(data, size);
-outStream.close();
-}
+const auto fileName = _cacheDir + "/" + cachedName;
+Log::trace() << "Saving cache tile: " << fileName << Log::end;
+std::fstream outStream(fileName, std::ios::out);
+outStream.write(data, size);
+outStream.close();
 
 // Notify subscribers, if any.
 if (tileBeingRendered)
diff --git a/loolwsd/TileCache.hpp b/loolwsd/TileCache.hpp
index 206603b..fc0210b 100644
--- a/loolwsd/TileCache.hpp
+++ b/loolwsd/TileCache.hpp
@@ -47,7 +47,7 @@ public:
 
 std::unique_ptr lookupTile(const TileDesc& tile);
 
-void notifySubscribers(const TileDesc& tile, const char *data, const 
size_t size, const bool save);
+void saveTileAndNotify(const TileDesc& tile, const char *data, const 
size_t size);
 
 std::string getTextFile(const std::string& fileName);
 
diff --git a/loolwsd/test/TileCacheTests.cpp b/loolwsd/test/TileCacheTests.cpp
index 9081675..f2d7f3d 100644
--- a/loolwsd/test/TileCacheTests.cpp
+++ b/loolwsd/test/TileCacheTests.cpp
@@ -167,7 +167,7 @@ void TileCacheTests::testSimple()
 // Cache Tile
 const auto size = 1024;
 const auto data = genRandomData(size);
-

[Libreoffice-commits] online.git: loolwsd/DocumentBroker.cpp loolwsd/test loolwsd/TileCache.cpp loolwsd/TileCache.hpp

2016-09-22 Thread Ashod Nakashian
 loolwsd/DocumentBroker.cpp  |   20 +++-
 loolwsd/TileCache.cpp   |   15 +--
 loolwsd/TileCache.hpp   |2 +-
 loolwsd/test/TileCacheTests.cpp |2 +-
 4 files changed, 22 insertions(+), 17 deletions(-)

New commits:
commit 01718c5c68bad8d324dfcc1b93d3c49055c90873
Author: Ashod Nakashian 
Date:   Thu Sep 22 17:47:12 2016 -0400

loolwsd: TileCache is told to save or not before notifying subscribers

Change-Id: Ibe24bbe9b4bf6fbaae7c9fcea5f919f7091d299e
Reviewed-on: https://gerrit.libreoffice.org/29207
Reviewed-by: Ashod Nakashian 
Tested-by: Ashod Nakashian 

diff --git a/loolwsd/DocumentBroker.cpp b/loolwsd/DocumentBroker.cpp
index 989e056..c241594 100644
--- a/loolwsd/DocumentBroker.cpp
+++ b/loolwsd/DocumentBroker.cpp
@@ -587,14 +587,15 @@ void DocumentBroker::handleTileResponse(const 
std::vector& payload)
 try
 {
 auto tile = TileDesc::parse(firstLine);
-const auto buffer = payload.data();
-const auto length = payload.size();
 
+
+const auto length = payload.size();
 if (firstLine.size() < static_cast(length) - 1)
 {
-tileCache().saveTileAndNotify(
+const auto buffer = payload.data();
+tileCache().notifySubscribers(
 tile, buffer + firstLine.size() + 1,
-length - firstLine.size() - 1);
+length - firstLine.size() - 1, true);
 }
 else
 {
@@ -619,21 +620,22 @@ void DocumentBroker::handleTileCombinedResponse(const 
std::vector& payload
 try
 {
 auto tileCombined = TileCombined::parse(firstLine);
-const auto buffer = payload.data();
-const auto length = payload.size();
-auto offset = firstLine.size() + 1;
 
+
+const auto length = payload.size();
 if (firstLine.size() < static_cast(length) - 1)
 {
+const auto buffer = payload.data();
+auto offset = firstLine.size() + 1;
 for (const auto& tile : tileCombined.getTiles())
 {
-tileCache().saveTileAndNotify(tile, buffer + offset, 
tile.getImgSize());
+tileCache().notifySubscribers(tile, buffer + offset, 
tile.getImgSize(), true);
 offset += tile.getImgSize();
 }
 }
 else
 {
-Log::error() << "Render request failed for " << firstLine << 
Log::end;
+Log::debug() << "Render request declined for " << firstLine << 
Log::end;
 std::unique_lock 
tileBeingRenderedLock(tileCache().getTilesBeingRenderedLock());
 for (const auto& tile : tileCombined.getTiles())
 {
diff --git a/loolwsd/TileCache.cpp b/loolwsd/TileCache.cpp
index d13400e..acaf18b 100644
--- a/loolwsd/TileCache.cpp
+++ b/loolwsd/TileCache.cpp
@@ -143,7 +143,7 @@ std::unique_ptr TileCache::lookupTile(const 
TileDesc& tile)
 return nullptr;
 }
 
-void TileCache::saveTileAndNotify(const TileDesc& tile, const char *data, 
const size_t size)
+void TileCache::notifySubscribers(const TileDesc& tile, const char *data, 
const size_t size, const bool save)
 {
 std::unique_lock lock(_tilesBeingRenderedMutex);
 
@@ -152,11 +152,14 @@ void TileCache::saveTileAndNotify(const TileDesc& tile, 
const char *data, const
 // Save to disk.
 const auto cachedName = (tileBeingRendered ? 
tileBeingRendered->getCacheName()
: cacheFileName(tile));
-const auto fileName = _cacheDir + "/" + cachedName;
-Log::trace() << "Saving cache tile: " << fileName << Log::end;
-std::fstream outStream(fileName, std::ios::out);
-outStream.write(data, size);
-outStream.close();
+if (save)
+{
+const auto fileName = _cacheDir + "/" + cachedName;
+Log::trace() << "Saving cache tile: " << fileName << Log::end;
+std::fstream outStream(fileName, std::ios::out);
+outStream.write(data, size);
+outStream.close();
+}
 
 // Notify subscribers, if any.
 if (tileBeingRendered)
diff --git a/loolwsd/TileCache.hpp b/loolwsd/TileCache.hpp
index fc0210b..206603b 100644
--- a/loolwsd/TileCache.hpp
+++ b/loolwsd/TileCache.hpp
@@ -47,7 +47,7 @@ public:
 
 std::unique_ptr lookupTile(const TileDesc& tile);
 
-void saveTileAndNotify(const TileDesc& tile, const char *data, const 
size_t size);
+void notifySubscribers(const TileDesc& tile, const char *data, const 
size_t size, const bool save);
 
 std::string getTextFile(const std::string& fileName);
 
diff --git a/loolwsd/test/TileCacheTests.cpp b/loolwsd/test/TileCacheTests.cpp
index f2d7f3d..9081675 100644
--- a/loolwsd/test/TileCacheTests.cpp
+++ b/loolwsd/test/TileCacheTests.cpp
@@ -167,7 +167,7 @@ void TileCacheTests::testSimple()
 // Cache Tile
 const auto size = 1024;
 const auto data = 

[Libreoffice-commits] online.git: loolwsd/DocumentBroker.cpp loolwsd/test loolwsd/TileCache.cpp loolwsd/TileCache.hpp

2016-09-19 Thread Ashod Nakashian
 loolwsd/DocumentBroker.cpp  |8 ++--
 loolwsd/TileCache.cpp   |   14 +-
 loolwsd/TileCache.hpp   |2 +-
 loolwsd/test/TileCacheTests.cpp |2 +-
 4 files changed, 9 insertions(+), 17 deletions(-)

New commits:
commit ec4b4898859f2849ba7888b04dc688f804cb6975
Author: Ashod Nakashian 
Date:   Mon Sep 19 20:21:18 2016 -0400

loolwsd: remove unused priority flag from saveTileAndNotify

Change-Id: I49309bb80a6b9e9e8265da8f8db966b98e362f0a
Reviewed-on: https://gerrit.libreoffice.org/29068
Reviewed-by: Ashod Nakashian 
Tested-by: Ashod Nakashian 

diff --git a/loolwsd/DocumentBroker.cpp b/loolwsd/DocumentBroker.cpp
index 78cc9e7..5ef3f60 100644
--- a/loolwsd/DocumentBroker.cpp
+++ b/loolwsd/DocumentBroker.cpp
@@ -609,13 +609,9 @@ void DocumentBroker::handleTileResponse(const 
std::vector& payload)
 
 if (firstLine.size() < static_cast(length) - 1)
 {
-// If the tile right under the cursor, give it priority.
-const bool priority = tile.intersectsWithRect(
-_cursorPosX, _cursorPosY,
-_cursorWidth, _cursorHeight);
 tileCache().saveTileAndNotify(
 tile, buffer + firstLine.size() + 1,
-length - firstLine.size() - 1, priority);
+length - firstLine.size() - 1);
 }
 else
 {
@@ -648,7 +644,7 @@ void DocumentBroker::handleTileCombinedResponse(const 
std::vector& payload
 {
 for (const auto& tile : tileCombined.getTiles())
 {
-tileCache().saveTileAndNotify(tile, buffer + offset, 
tile.getImgSize(), false);
+tileCache().saveTileAndNotify(tile, buffer + offset, 
tile.getImgSize());
 offset += tile.getImgSize();
 }
 }
diff --git a/loolwsd/TileCache.cpp b/loolwsd/TileCache.cpp
index 9e3bca7..c7dfd6e 100644
--- a/loolwsd/TileCache.cpp
+++ b/loolwsd/TileCache.cpp
@@ -140,19 +140,11 @@ std::unique_ptr TileCache::lookupTile(const 
TileDesc& tile)
 return nullptr;
 }
 
-void TileCache::saveTileAndNotify(const TileDesc& tile, const char *data, 
const size_t size, const bool /* priority */)
+void TileCache::saveTileAndNotify(const TileDesc& tile, const char *data, 
const size_t size)
 {
 std::unique_lock lock(_tilesBeingRenderedMutex);
 
 std::shared_ptr tileBeingRendered = 
findTileBeingRendered(tile);
-#if 0
-if (!priority && tileBeingRendered && tileBeingRendered->getVersion() != 
tile.getVersion())
-{
-Log::trace() << "Skipping unexpected tile ver: " << tile.getVersion()
- << ", waiting for ver " << 
tileBeingRendered->getVersion() << Log::end;
-return;
-}
-#endif
 
 // Save to disk.
 const auto cachedName = (tileBeingRendered ? 
tileBeingRendered->getCacheName()
@@ -197,6 +189,10 @@ void TileCache::saveTileAndNotify(const TileDesc& tile, 
const char *data, const
 }
 }
 }
+else
+{
+Log::debug("No subscribers for: " + cachedName);
+}
 
 // Remove subscriptions.
 if (tileBeingRendered->getVersion() == tile.getVersion())
diff --git a/loolwsd/TileCache.hpp b/loolwsd/TileCache.hpp
index bbe5aa0..08b14e0 100644
--- a/loolwsd/TileCache.hpp
+++ b/loolwsd/TileCache.hpp
@@ -44,7 +44,7 @@ public:
 
 std::unique_ptr lookupTile(const TileDesc& tile);
 
-void saveTileAndNotify(const TileDesc& tile, const char *data, const 
size_t size, const bool priority);
+void saveTileAndNotify(const TileDesc& tile, const char *data, const 
size_t size);
 
 std::string getTextFile(const std::string& fileName);
 
diff --git a/loolwsd/test/TileCacheTests.cpp b/loolwsd/test/TileCacheTests.cpp
index a4d3527..b9f8900 100644
--- a/loolwsd/test/TileCacheTests.cpp
+++ b/loolwsd/test/TileCacheTests.cpp
@@ -159,7 +159,7 @@ void TileCacheTests::testSimple()
 // Cache Tile
 const auto size = 1024;
 const auto data = genRandomData(size);
-tc.saveTileAndNotify(tile, data.data(), size, true);
+tc.saveTileAndNotify(tile, data.data(), size);
 
 // Find Tile
 file = tc.lookupTile(tile);
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] online.git: loolwsd/DocumentBroker.cpp loolwsd/test loolwsd/TileCache.cpp loolwsd/TileCache.hpp

2016-05-22 Thread Ashod Nakashian
 loolwsd/DocumentBroker.cpp  |6 --
 loolwsd/TileCache.cpp   |   95 +---
 loolwsd/TileCache.hpp   |4 -
 loolwsd/test/TileCacheTests.cpp |2 
 4 files changed, 54 insertions(+), 53 deletions(-)

New commits:
commit 6e54fd05f91547d7abda8336fcda248688be71ff
Author: Ashod Nakashian 
Date:   Sun May 22 15:20:24 2016 -0400

loolwsd: merge saveTile and notifyAndRemoveSubscribers

Change-Id: I8282604c02a9fd1a7a1e2a5df29e2f84fca151a6
Reviewed-on: https://gerrit.libreoffice.org/25344
Reviewed-by: Ashod Nakashian 
Tested-by: Ashod Nakashian 

diff --git a/loolwsd/DocumentBroker.cpp b/loolwsd/DocumentBroker.cpp
index c555298..10600da 100644
--- a/loolwsd/DocumentBroker.cpp
+++ b/loolwsd/DocumentBroker.cpp
@@ -538,8 +538,7 @@ void DocumentBroker::handleTileResponse(const 
std::vector& payload)
 
 if(firstLine.size() < static_cast(length) - 1)
 {
-tileCache().saveTile(tile, buffer + firstLine.size() + 1, length - 
firstLine.size() - 1);
-tileCache().notifyAndRemoveSubscribers(tile);
+tileCache().saveTileAndNotify(tile, buffer + firstLine.size() + 1, 
length - firstLine.size() - 1);
 }
 else
 {
@@ -572,8 +571,7 @@ void DocumentBroker::handleTileCombinedResponse(const 
std::vector& payload
 {
 for (const auto& tile : tileCombined.getTiles())
 {
-tileCache().saveTile(tile, buffer + offset, tile.getImgSize());
-tileCache().notifyAndRemoveSubscribers(tile);
+tileCache().saveTileAndNotify(tile, buffer + offset, 
tile.getImgSize());
 offset += tile.getImgSize();
 }
 }
diff --git a/loolwsd/TileCache.cpp b/loolwsd/TileCache.cpp
index 48721d2..c006bc1 100644
--- a/loolwsd/TileCache.cpp
+++ b/loolwsd/TileCache.cpp
@@ -75,12 +75,14 @@ TileCache::~TileCache()
 struct TileCache::TileBeingRendered
 {
 std::vector _subscribers;
-TileBeingRendered(const int version)
+TileBeingRendered(const std::string& cachedName, const int version)
  : _startTime(std::chrono::steady_clock::now()),
+   _cachedName(cachedName),
_ver(version)
 {
 }
 
+const std::string& getCacheName() const { return _cachedName; }
 int getVersion() const { return _ver; }
 
 std::chrono::steady_clock::time_point getStartTime() const { return 
_startTime; }
@@ -91,6 +93,7 @@ struct TileCache::TileBeingRendered
 
 private:
 std::chrono::steady_clock::time_point _startTime;
+std::string _cachedName;
 int _ver;
 };
 
@@ -132,15 +135,52 @@ std::unique_ptr TileCache::lookupTile(const 
TileDesc& tile)
 return nullptr;
 }
 
-void TileCache::saveTile(const TileDesc& tile, const char *data, size_t size)
+void TileCache::saveTileAndNotify(const TileDesc& tile, const char *data, 
size_t size)
 {
-const std::string fileName = _cacheDir + "/" + cacheFileName(tile);
+std::unique_lock lock(_tilesBeingRenderedMutex);
 
-Log::trace() << "Saving cache tile: " << fileName << Log::end;
+std::shared_ptr tileBeingRendered = 
findTileBeingRendered(tile);
+if (tileBeingRendered && tileBeingRendered->getVersion() != 
tile.getVersion())
+{
+Log::trace() << "Skipping unexpected tile ver: " << tile.getVersion()
+ << ", waiting for ver " << 
tileBeingRendered->getVersion() << Log::end;
+return;
+}
 
+// Save to disk.
+const auto cachedName = (tileBeingRendered ? 
tileBeingRendered->getCacheName()
+   : cacheFileName(tile));
+const auto fileName = _cacheDir + "/" + cachedName;
+Log::trace() << "Saving cache tile: " << fileName << Log::end;
 std::fstream outStream(fileName, std::ios::out);
 outStream.write(data, size);
 outStream.close();
+
+// Notify subscribers, if any.
+if (tileBeingRendered)
+{
+if (!tileBeingRendered->_subscribers.empty())
+{
+const std::string message = tile.serialize("tile");
+Log::debug("Sending tile message to subscribers: " + message);
+
+for (const auto& i: tileBeingRendered->_subscribers)
+{
+auto subscriber = i.lock();
+if (subscriber)
+{
+//FIXME: This is inefficient; should just send directly to 
each client (although that is risky as well!
+// Re-emit the tile command in the other thread(s) to 
re-check and hit
+// the cache. Construct the message from scratch to 
contain only the
+// mandatory parts of the message.
+subscriber->sendToInputQueue(message);
+}
+}
+}
+
+// Remove subscriptions.
+_tilesBeingRendered.erase(cachedName);
+}