[Libreoffice-commits] online.git: loolwsd/test loolwsd/TileCache.cpp loolwsd/Unit.cpp loolwsd/Unit.hpp
Ashod Nakashian
ashod.nakashian at collabora.co.uk
Sun May 1 17:16:54 UTC 2016
loolwsd/TileCache.cpp | 2 +
loolwsd/Unit.cpp | 15 ++++++++++++
loolwsd/Unit.hpp | 16 +++++++++++++
loolwsd/test/Makefile.am | 5 ++--
loolwsd/test/UnitTileCache.cpp | 49 +++++++++++++++++++++++++++++++++++++++++
5 files changed, 85 insertions(+), 2 deletions(-)
New commits:
commit d16f44d7a223841a2db9929a8245fd97851502bb
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date: Sun May 1 10:24:31 2016 -0400
loolwsd: TileCache unittest, hooks, and events
Change-Id: Id9e0539d2f920f15b0d0cb8e5924e480ed6d1e87
Reviewed-on: https://gerrit.libreoffice.org/24570
Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
Tested-by: Ashod Nakashian <ashnakash at gmail.com>
diff --git a/loolwsd/TileCache.cpp b/loolwsd/TileCache.cpp
index c02eb7e..39bc587 100644
--- a/loolwsd/TileCache.cpp
+++ b/loolwsd/TileCache.cpp
@@ -34,6 +34,7 @@
#include "TileCache.hpp"
#include "Util.hpp"
#include "MasterProcessSession.hpp"
+#include "Unit.hpp"
using Poco::DirectoryIterator;
using Poco::File;
@@ -107,6 +108,7 @@ std::unique_ptr<std::fstream> TileCache::lookupTile(int part, int width, int hei
const std::string fileName = _cacheDir + "/" + cacheFileName(part, width, height, tilePosX, tilePosY, tileWidth, tileHeight);
std::unique_ptr<std::fstream> result(new std::fstream(fileName, std::ios::in));
+ UnitWSD::get().lookupTile(part, width, height, tilePosX, tilePosY, tileWidth, tileHeight, result);
if (result && result->is_open())
{
Log::trace("Found cache tile: " + fileName);
diff --git a/loolwsd/Unit.cpp b/loolwsd/Unit.cpp
index 1c4f5fa..b8661a4 100644
--- a/loolwsd/Unit.cpp
+++ b/loolwsd/Unit.cpp
@@ -10,6 +10,8 @@
#include <dlfcn.h>
#include <ftw.h>
#include <cassert>
+#include <fstream>
+
#include "Util.hpp"
#include "Unit.hpp"
@@ -126,6 +128,19 @@ UnitWSD::~UnitWSD()
{
}
+void UnitWSD::lookupTile(int part, int width, int height, int tilePosX, int tilePosY,
+ int tileWidth, int tileHeight, std::unique_ptr<std::fstream>& cacheFile)
+{
+ if (cacheFile && cacheFile->is_open())
+ {
+ onTileCacheHit(part, width, height, tilePosX, tilePosY, tileWidth, tileHeight);
+ }
+ else
+ {
+ onTileCacheMiss(part, width, height, tilePosX, tilePosY, tileWidth, tileHeight);
+ }
+}
+
UnitKit::UnitKit()
{
}
diff --git a/loolwsd/Unit.hpp b/loolwsd/Unit.hpp
index 05d5696..6dc3045 100644
--- a/loolwsd/Unit.hpp
+++ b/loolwsd/Unit.hpp
@@ -133,12 +133,28 @@ public:
Poco::Net::HTTPServerResponse& /* response */)
{ return false; }
+ // ---------------- TileCache hooks ----------------
+ /// Called before the lookupTile call returns. Should always be called to fire events.
+ virtual void lookupTile(int part, int width, int height, int tilePosX, int tilePosY,
+ int tileWidth, int tileHeight, std::unique_ptr<std::fstream>& cacheFile);
+
// ---------------- WSD events ----------------
virtual void onChildConnected(const int /* pid */, const std::string& /* sessionId */) {}
/// When admin notify message is sent
virtual void onAdminNotifyMessage(const std::string& /* message */) {}
/// When admin message is sent in response to a query
virtual void onAdminQueryMessage(const std::string& /* message */) {}
+
+ // ---------------- TileCache events ----------------
+ virtual void onTileCacheHit(int /*part*/, int /*width*/, int /*height*/,
+ int /*tilePosX*/, int /*tilePosY*/,
+ int /*tileWidth*/, int /*tileHeight*/) {}
+ virtual void onTileCacheMiss(int /*part*/, int /*width*/, int /*height*/,
+ int /*tilePosX*/, int /*tilePosY*/,
+ int /*tileWidth*/, int /*tileHeight*/) {}
+ virtual void onTileCacheSubscribe(int /*part*/, int /*width*/, int /*height*/,
+ int /*tilePosX*/, int /*tilePosY*/,
+ int /*tileWidth*/, int /*tileHeight*/) {}
};
/// Derive your Kit unit test / hooks from me.
diff --git a/loolwsd/test/Makefile.am b/loolwsd/test/Makefile.am
index 7b64b9d..5ec0722 100644
--- a/loolwsd/test/Makefile.am
+++ b/loolwsd/test/Makefile.am
@@ -7,7 +7,7 @@ AM_CXXFLAGS = $(CPPUNIT_CFLAGS)
noinst_LTLIBRARIES = \
unit-timeout.la unit-prefork.la \
unit-storage.la unit-fonts.la \
- unit-admin.la
+ unit-admin.la unit-tilecache.la
MAGIC_TO_FORCE_SHLIB_CREATION = -rpath /dummy
AM_LDFLAGS = -pthread -module $(MAGIC_TO_FORCE_SHLIB_CREATION)
@@ -24,6 +24,7 @@ unit_fonts_la_SOURCES = UnitFonts.cpp
unit_timeout_la_SOURCES = UnitTimeout.cpp
unit_prefork_la_SOURCES = UnitPrefork.cpp
unit_storage_la_SOURCES = UnitStorage.cpp
+unit_tilecache_la_SOURCES = UnitTileCache.cpp
if HAVE_LO_PATH
SYSTEM_STAMP = @SYSTEMPLATE_PATH@/system_stamp
@@ -34,7 +35,7 @@ endif
if HAVE_LO_PATH
check-local:
./run_unit.sh --log-file test.log --trs-file test.trs
-TESTS = unit-admin.la unit-timeout.la unit-fonts.la unit-storage.la unit-prefork.la
+TESTS = unit-tilecache.la unit-admin.la unit-timeout.la unit-fonts.la unit-storage.la unit-prefork.la
else
TESTS = ${top_builddir}/test/test
endif
diff --git a/loolwsd/test/UnitTileCache.cpp b/loolwsd/test/UnitTileCache.cpp
new file mode 100644
index 0000000..6ebf377
--- /dev/null
+++ b/loolwsd/test/UnitTileCache.cpp
@@ -0,0 +1,49 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * 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/.
+ */
+
+#include <dlfcn.h>
+#include <ftw.h>
+#include <cassert>
+#include <iostream>
+#include <fstream>
+
+#include "Util.hpp"
+#include "Unit.hpp"
+#include "UnitHTTP.hpp"
+
+class UnitTileCache: public UnitWSD
+{
+public:
+ virtual void lookupTile(int part, int width, int height, int tilePosX, int tilePosY,
+ int tileWidth, int tileHeight, std::unique_ptr<std::fstream>& cacheFile)
+ {
+ // Call base to fire events.
+ UnitWSD::lookupTile(part, width, height, tilePosX, tilePosY, tileWidth, tileHeight, cacheFile);
+
+ // Fail the lookup to force subscription and rendering.
+ cacheFile.reset();
+ }
+
+ virtual void invokeTest()
+ {
+ // FIXME: push through to the right place to exercise this.
+ exitTest(TestResult::TEST_OK);
+ UnitHTTPServerResponse response;
+ UnitHTTPServerRequest request(response, std::string(CHILD_URI));
+ UnitWSD::testHandleRequest(TestRequest::TEST_REQ_PRISONER,
+ request, response);
+ }
+};
+
+UnitBase *unit_create_wsd(void)
+{
+ return new UnitTileCache();
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
More information about the Libreoffice-commits
mailing list