summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Meeks <michael.meeks@collabora.com>2014-10-01 22:14:49 +0100
committerMichael Meeks <michael.meeks@collabora.com>2014-10-02 00:23:06 +0100
commit87fad21582fceb200e3630e9ec10a873f7d7a3ed (patch)
tree65d82d1304c940c554be68894fc1dbf695a9e29c
parent213be0be8e41480e0036c0e30a8be93369aa743a (diff)
LOK: Add a tiled rendering testbench.
Change-Id: I631c0506f427d974c3dd4c75484aa25603100895
-rw-r--r--Repository.mk1
-rwxr-xr-xandroid/mobile-config.py99
-rw-r--r--libreofficekit/Executable_tilebench.mk32
-rw-r--r--libreofficekit/Module_libreofficekit.mk4
-rw-r--r--libreofficekit/qa/tilebench/tilebench.cxx90
5 files changed, 226 insertions, 0 deletions
diff --git a/Repository.mk b/Repository.mk
index 7b86d588c68c..29dbf6e8aa0b 100644
--- a/Repository.mk
+++ b/Repository.mk
@@ -86,6 +86,7 @@ $(eval $(call gb_Helper_register_executables_for_install,OOO,ooo, \
))
$(eval $(call gb_Helper_register_executables,OOO, \
+ $(if $(filter LINUX,$(OS)), tilebench) \
$(call gb_Helper_optional,CRASHREP,crashrep) \
gnome-open-url.bin \
$(if $(filter-out ANDROID IOS MACOSX WNT,$(OS)),oosplash) \
diff --git a/android/mobile-config.py b/android/mobile-config.py
new file mode 100755
index 000000000000..6f292975d34b
--- /dev/null
+++ b/android/mobile-config.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# 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/.
+
+# this tool rips out configuration pieces that are not useful for
+# a mobile viewer / editing application without a full UI.
+#
+# ideally the postprocess/ makefile would cope with this but its
+# already over-complicated by rampant conditionals.
+
+import sys
+import xml.etree.ElementTree as ET
+
+
+main_xcd_discard = [
+ 'org.openoffice.Office/TableWizard', # huge
+
+ 'org.openoffice.Office/WebWizard',
+ 'org.openoffice.Office.DataAccess/Drivers', # no database
+ 'org.openoffice.Office/Addons', # no addons
+
+ # no conventional UI; reverse sorted by size
+ 'org.openoffice.Office.UI/GenericCommands',
+ 'org.openoffice.Office/Accelerators',
+ 'org.openoffice.Office/UI',
+
+ 'org.openoffice.Office.UI/DrawImpressCommands',
+ 'org.openoffice.Office.UI/Sidebar',
+ 'org.openoffice.Office.UI/ChartCommands',
+ 'org.openoffice.Office.UI/DbuCommands',
+ 'org.openoffice.Office.UI/Controller',
+ 'org.openoffice.Office/UI',
+ 'org.openoffice.Office.UI/StartModuleCommands',
+ 'org.openoffice.Office.UI/BasicIDEWindowState',
+ 'org.openoffice.Office.UI/GenericCategories',
+ 'org.openoffice.Office.UI/ChartWindowState',
+ 'org.openoffice.Office.UI/Factories',
+ 'org.openoffice.Office.UI/BaseWindowState',
+ 'org.openoffice.Office.UI/BasicIDECommands',
+ 'org.openoffice.Office.UI/Sidebar',
+ 'org.openoffice.Office.UI/BibliographyCommands',
+ 'org.openoffice.Office.UI/DbQueryWindowState',
+ 'org.openoffice.Office.UI/WindowState',
+ 'org.openoffice.Office.UI/Controller',
+ 'org.openoffice.Office.UI/DbRelationWindowState',
+ 'org.openoffice.Office.UI/DbTableWindowState',
+ 'org.openoffice.Office.UI/DbTableDataWindowState',
+ 'org.openoffice.Office.UI/DbBrowserWindowState',
+ 'org.openoffice.Office.UI/WindowContentFactories',
+ 'org.openoffice.Office.UI/Factories',
+ 'org.openoffice.Office.UI/StartModuleWindowState',
+ 'org.openoffice.Office.UI/GlobalSettings',
+ 'org.openoffice.Office.UI/Commands',
+ 'org.openoffice.Office.UI/BibliographyCommands',
+ 'org.openoffice.Office.UI/StartModuleCommands',
+ 'org.openoffice.Office.UI/DrawImpressCommands',
+ 'org.openoffice.Office.UI/BasicIDECommands',
+ 'org.openoffice.Office.UI/GenericCommands',
+ 'org.openoffice.Office.UI/ChartCommands',
+ 'org.openoffice.Office.UI/DbuCommands',
+ 'org.openoffice.Office.UI/BibliographyWindowState',
+ 'org.openoffice.Office.UI/StartModuleWindowState',
+ 'org.openoffice.Office.UI/DbTableDataWindowState',
+ 'org.openoffice.Office.UI/DbRelationWindowState',
+ 'org.openoffice.Office.UI/DbBrowserWindowState',
+ 'org.openoffice.Office.UI/BasicIDEWindowState',
+ 'org.openoffice.Office.UI/DbTableWindowState',
+ 'org.openoffice.Office.UI/DbQueryWindowState',
+ 'org.openoffice.Office.UI/ChartWindowState',
+ 'org.openoffice.Office.UI/BaseWindowState',
+ 'org.openoffice.Office.UI/GenericCategories',
+ 'org.openoffice.Office.UI/Category',
+ ]
+
+
+if __name__ == '__main__':
+ tree = ET.parse(sys.argv[1])
+ root = tree.getroot()
+
+ print "Foo\n"
+ saved = 0
+ total = 0
+ for child in root:
+ section = child.attrib['{http://openoffice.org/2001/registry}name']
+ package = child.attrib['{http://openoffice.org/2001/registry}package']
+ size = len(ET.tostring(child));
+ total = total + size
+ key = '%s/%s' % (package, section)
+ if key in main_xcd_discard:
+ root.remove(child)
+ print 'removed %s - saving %d' % (key, size)
+ saved = saved + size
+
+ print "saved %d of %d bytes: %2.f%%" % (saved, total, saved*100.0/total)
+ tree.write(sys.argv[2], 'UTF-8', True)
+
diff --git a/libreofficekit/Executable_tilebench.mk b/libreofficekit/Executable_tilebench.mk
new file mode 100644
index 000000000000..11e73dead0bd
--- /dev/null
+++ b/libreofficekit/Executable_tilebench.mk
@@ -0,0 +1,32 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# 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/.
+#
+
+$(eval $(call gb_Executable_Executable,tilebench))
+
+$(eval $(call gb_Executable_set_include,tilebench,\
+ $$(INCLUDE) \
+ -I$(SRCDIR)/desktop/inc \
+))
+
+$(eval $(call gb_Executable_use_libraries,tilebench,\
+ libreofficekitgtk \
+ sal \
+))
+
+$(eval $(call gb_Executable_add_libs,tilebench,\
+ -lm \
+ -ldl \
+ -lpthread \
+))
+
+$(eval $(call gb_Executable_add_exception_objects,tilebench,\
+ libreofficekit/qa/tilebench/tilebench \
+))
+
+# vim: set noet sw=4 ts=4:
diff --git a/libreofficekit/Module_libreofficekit.mk b/libreofficekit/Module_libreofficekit.mk
index a5b9cb06348c..716ff48512fa 100644
--- a/libreofficekit/Module_libreofficekit.mk
+++ b/libreofficekit/Module_libreofficekit.mk
@@ -22,6 +22,10 @@ $(eval $(call gb_Module_add_targets,libreofficekit,\
))
endif # ($(ENABLE_GTK),)
+$(eval $(call gb_Module_add_targets,libreofficekit,\
+ Executable_tilebench \
+))
+
endif # ($(OS),LINUX)
# vim: set ts=4 sw=4 et:
diff --git a/libreofficekit/qa/tilebench/tilebench.cxx b/libreofficekit/qa/tilebench/tilebench.cxx
new file mode 100644
index 000000000000..80d5c1654db7
--- /dev/null
+++ b/libreofficekit/qa/tilebench/tilebench.cxx
@@ -0,0 +1,90 @@
+/* -*- 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/.
+ */
+
+#include <assert.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <vector>
+#include <osl/time.h>
+#include <LibreOfficeKit/LibreOfficeKitInit.h>
+#include <LibreOfficeKit/LibreOfficeKit.hxx>
+
+using namespace lok;
+
+static int help()
+{
+ fprintf( stderr, "Usage: tilebench <absolute-path-to-libreoffice-install> [path to document]\n" );
+ fprintf( stderr, "renders a selection of small tiles from the document, checksums them and times the process\n" );
+ return 1;
+}
+
+static double getTimeNow()
+{
+ TimeValue aValue;
+ osl_getSystemTime(&aValue);
+ return (double)aValue.Seconds +
+ (double)aValue.Nanosec / (1000*1000*1000);
+}
+
+int main( int argc, char* argv[] )
+{
+ struct TimeRecord {
+ const char *mpName;
+ double mfTime;
+
+ TimeRecord() : mpName(NULL), mfTime(getTimeNow()) { }
+ explicit TimeRecord(const char *pName) :
+ mpName(pName ), mfTime(getTimeNow()) { }
+ explicit TimeRecord(const TimeRecord *pSrc) :
+ mpName(pSrc->mpName), mfTime(pSrc->mfTime) { }
+ };
+ std::vector< TimeRecord > aTimes;
+ if( argc < 2 ||
+ ( argc > 1 && ( !strcmp( argv[1], "--help" ) || !strcmp( argv[1], "-h" ) ) ) )
+ return help();
+
+ if ( argv[1][0] != '/' )
+ {
+ fprintf(stderr, "Absolute path required to libreoffice install\n");
+ return 1;
+ }
+
+ aTimes.push_back(TimeRecord("initialization"));
+ Office *pOffice = lok_cpp_init(argv[1]);
+ aTimes.push_back(TimeRecord());
+
+ if (argv[2] != NULL)
+ {
+ aTimes.push_back(TimeRecord("load document"));
+ Document *pDocument(pOffice->documentLoad(argv[2]));
+ aTimes.push_back(TimeRecord());
+
+ aTimes.push_back(TimeRecord("destroy document"));
+ delete pDocument;
+ aTimes.push_back(TimeRecord());
+ }
+
+ delete pOffice;
+
+ double nTotal = 0.0;
+ fprintf (stderr, "profile run:\n");
+ for (size_t i = 0; i < aTimes.size() - 1; i++)
+ {
+ double nDelta = aTimes[i+1].mfTime - aTimes[i].mfTime;
+ fprintf (stderr, " %s - %2.4f(ms)\n", aTimes[i].mpName, nDelta * 1000.0);
+ if (aTimes[i+1].mpName == NULL)
+ i++; // skip it.
+ nTotal += nDelta;
+ }
+ fprintf (stderr, "Total: %2.4f(s)\n", nTotal);
+ return 0;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */