From 645c8c2902774f0342cefb74da9551762b64e1ac Mon Sep 17 00:00:00 2001 From: Philip Peitsch Date: Wed, 20 Nov 2013 19:00:02 +1100 Subject: [PATCH 1/5] Compile the benchmark program to the build output --- programs/CMakeLists.txt | 1 + programs/benchmarking/CMakeLists.txt | 40 ++++++ programs/benchmarking/index.html | 121 ++++++++++++++++++ .../js/{main.js => HTMLBenchmark.js} | 41 +++--- programs/benchmarking/{js => }/require.js | 0 programs/benchmarking/src-index.html | 8 +- 6 files changed, 192 insertions(+), 19 deletions(-) create mode 100644 programs/benchmarking/CMakeLists.txt create mode 100644 programs/benchmarking/index.html rename programs/benchmarking/js/{main.js => HTMLBenchmark.js} (70%) rename programs/benchmarking/{js => }/require.js (100%) diff --git a/programs/CMakeLists.txt b/programs/CMakeLists.txt index bd6f0348..030cbf71 100644 --- a/programs/CMakeLists.txt +++ b/programs/CMakeLists.txt @@ -12,6 +12,7 @@ add_subdirectory(firefoxextension) add_subdirectory(touchui) add_subdirectory(playbook) +add_subdirectory(benchmarking) add_subdirectory(editor) add_subdirectory(viewer) add_subdirectory(wordpressplugin) diff --git a/programs/benchmarking/CMakeLists.txt b/programs/benchmarking/CMakeLists.txt new file mode 100644 index 00000000..09c28566 --- /dev/null +++ b/programs/benchmarking/CMakeLists.txt @@ -0,0 +1,40 @@ +COPY_FILES(BENCHMARK_HTML ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} + 1page.odt + 10pages.odt + 100pages.odt + 1000pages.odt + index.html +) + +FILE(GLOB BENCHMARK_JS RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/js" "${CMAKE_CURRENT_SOURCE_DIR}/js/*.js") + +FOREACH(JSFILE ${BENCHMARK_JS}) + set(BENCHMARK_CLOSURE_ARGS ${BENCHMARK_CLOSURE_ARGS} --js ${JSFILE}) +ENDFOREACH(JSFILE) + +SET(BENCHMARK_JS_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/benchmark.js") + +add_custom_command( + OUTPUT benchmark.js-target + + # from webodf.js target (DEPENDS webodf.js) + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/webodf/webodf.js ${CMAKE_CURRENT_BINARY_DIR} + + # The transformed AMD modules take their names from the relative path supplied + # To ensure these are predictable, the initial compilation must be done from the JS source directory + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/js + COMMAND ${Java_JAVA_EXECUTABLE} + ARGS -jar ${CLOSURE_JAR} + ${BENCHMARK_CLOSURE_ARGS} + --transform_amd_modules + --process_common_js_modules + --common_js_entry_module=HTMLBenchmark.js + --formatting PRETTY_PRINT + --js_output_file "${BENCHMARK_JS_OUTPUT}-" + + COMMAND ${CMAKE_COMMAND} ARGS -E rename "${BENCHMARK_JS_OUTPUT}-" "${BENCHMARK_JS_OUTPUT}" + + DEPENDS ClosureCompiler webodf.js-target +) + +add_custom_target(html-benchmark DEPENDS benchmark.js-target ${BENCHMARK_HTML}) \ No newline at end of file diff --git a/programs/benchmarking/index.html b/programs/benchmarking/index.html new file mode 100644 index 00000000..29952cc5 --- /dev/null +++ b/programs/benchmarking/index.html @@ -0,0 +1,121 @@ + + + + WebODF performance and benchmarking tool + + + + + + + + +
+

Loading required files. This may take a while.

+
+
+

Benchmark results

+ + + + + + + + +
ActionStatusElapsed time (ms)
+
+
+
+

Interaction required:

+
+ +
+
+
+ + + + \ No newline at end of file diff --git a/programs/benchmarking/js/main.js b/programs/benchmarking/js/HTMLBenchmark.js similarity index 70% rename from programs/benchmarking/js/main.js rename to programs/benchmarking/js/HTMLBenchmark.js index dc83f115..a10ebef6 100644 --- a/programs/benchmarking/js/main.js +++ b/programs/benchmarking/js/HTMLBenchmark.js @@ -36,7 +36,7 @@ * @source: https://github.com/kogmbh/WebODF/ */ -require([ +define([ "Benchmark", "HTMLResultsRenderer", "LoadDocument", @@ -51,25 +51,30 @@ require([ LoadDocument, EnterEditMode, MoveCursorToEndDirect,InsertLetterA, Remove1Position, MoveCursor1StepLeft, SelectEntireDocument, RemoveCurrentSelection) { "use strict"; - var loadingScreen = document.getElementById('loadingScreen'), - fileUrl = window.location.hash.substr(1) || "100pages.odt", - benchmark = new Benchmark(); - new HTMLResultsRenderer(benchmark); + function HTMLBenchmark() { + var loadingScreen = document.getElementById('loadingScreen'), + fileUrl = window.location.hash.substr(1) || "100pages.odt", + benchmark = new Benchmark(); - loadingScreen.style.display = "none"; + new HTMLResultsRenderer(benchmark); - benchmark.actions.push(new LoadDocument(fileUrl)); - benchmark.actions.push(new EnterEditMode()); - // TODO currently times out - // benchmark.addAction(new MoveCursorToEndViaCtrlEnd()); - benchmark.actions.push(new MoveCursorToEndDirect()); - benchmark.actions.push(new InsertLetterA()); - benchmark.actions.push(new Remove1Position(true)); - benchmark.actions.push(new MoveCursor1StepLeft()); - benchmark.actions.push(new Remove1Position(false)); - benchmark.actions.push(new SelectEntireDocument()); - benchmark.actions.push(new RemoveCurrentSelection()); + loadingScreen.style.display = "none"; - benchmark.start(); + benchmark.actions.push(new LoadDocument(fileUrl)); + benchmark.actions.push(new EnterEditMode()); + // TODO currently times out + // benchmark.addAction(new MoveCursorToEndViaCtrlEnd()); + benchmark.actions.push(new MoveCursorToEndDirect()); + benchmark.actions.push(new InsertLetterA()); + benchmark.actions.push(new Remove1Position(true)); + benchmark.actions.push(new MoveCursor1StepLeft()); + benchmark.actions.push(new Remove1Position(false)); + benchmark.actions.push(new SelectEntireDocument()); + benchmark.actions.push(new RemoveCurrentSelection()); + + this.start = benchmark.start; + } + + return HTMLBenchmark; }); diff --git a/programs/benchmarking/js/require.js b/programs/benchmarking/require.js similarity index 100% rename from programs/benchmarking/js/require.js rename to programs/benchmarking/require.js diff --git a/programs/benchmarking/src-index.html b/programs/benchmarking/src-index.html index 84343c30..6a45afbe 100644 --- a/programs/benchmarking/src-index.html +++ b/programs/benchmarking/src-index.html @@ -86,9 +86,10 @@ ]; }; - + From ed657f24df3be8e53c9a24d9ecd15ee4487b1700 Mon Sep 17 00:00:00 2001 From: Philip Peitsch Date: Wed, 20 Nov 2013 22:58:20 +1100 Subject: [PATCH 2/5] Add the HTML benchmark to the WebODF redistrib zip --- CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index bf8b19ae..378a7535 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -420,6 +420,8 @@ add_custom_command( # editor COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_BINARY_DIR}/programs/editor ${WEBODFZIPDIR}/editor COMMAND ${CMAKE_COMMAND} -E remove_directory ${WEBODFZIPDIR}/editor/dojo-deps + # benchmark + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_BINARY_DIR}/programs/benchmark ${WEBODFZIPDIR}/benchmark # wordpressplugin COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/programs/wordpressplugin/readme.txt ${WEBODFZIPDIR}/wordpressplugin-readme.txt COMMAND ${CMAKE_COMMAND} -E copy ${WORDPRESSZIP} ${WEBODFZIPDIR} @@ -436,6 +438,7 @@ add_custom_command( webodf-debug.js-target webodf.js-target editor-compiled.js-target + html-benchmark viewer-minimized.js-target firefoxextension-target WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} From d6f6437c2794a8879657c69c1736fae0927ebf40 Mon Sep 17 00:00:00 2001 From: Philip Peitsch Date: Wed, 20 Nov 2013 23:06:01 +1100 Subject: [PATCH 3/5] Moved from programs/benchmarking to programs/benchmark --- programs/CMakeLists.txt | 2 +- programs/{benchmarking => benchmark}/1000pages.odt | Bin programs/{benchmarking => benchmark}/100pages.odt | Bin programs/{benchmarking => benchmark}/10pages.odt | Bin programs/{benchmarking => benchmark}/1page.odt | Bin programs/{benchmarking => benchmark}/CMakeLists.txt | 0 programs/{benchmarking => benchmark}/index.html | 0 .../{benchmarking => benchmark}/js/Benchmark.js | 0 .../js/BenchmarkAction.js | 0 .../{benchmarking => benchmark}/js/EnterEditMode.js | 0 .../{benchmarking => benchmark}/js/HTMLBenchmark.js | 0 .../js/HTMLResultsRenderer.js | 0 .../{benchmarking => benchmark}/js/InsertLetterA.js | 0 .../{benchmarking => benchmark}/js/LoadDocument.js | 0 .../{benchmarking => benchmark}/js/ManualStep.js | 0 .../js/MoveCursor1StepLeft.js | 0 .../js/MoveCursorToEndDirect.js | 0 .../js/MoveCursorToEndViaCtrlEnd.js | 0 .../js/Remove1Position.js | 0 .../js/RemoveCurrentSelection.js | 0 .../js/SelectEntireDocument.js | 0 programs/{benchmarking => benchmark}/require.js | 0 programs/{benchmarking => benchmark}/src-index.html | 0 programs/{benchmarking => benchmark}/webodf.js | 0 24 files changed, 1 insertion(+), 1 deletion(-) rename programs/{benchmarking => benchmark}/1000pages.odt (100%) rename programs/{benchmarking => benchmark}/100pages.odt (100%) rename programs/{benchmarking => benchmark}/10pages.odt (100%) rename programs/{benchmarking => benchmark}/1page.odt (100%) rename programs/{benchmarking => benchmark}/CMakeLists.txt (100%) rename programs/{benchmarking => benchmark}/index.html (100%) rename programs/{benchmarking => benchmark}/js/Benchmark.js (100%) rename programs/{benchmarking => benchmark}/js/BenchmarkAction.js (100%) rename programs/{benchmarking => benchmark}/js/EnterEditMode.js (100%) rename programs/{benchmarking => benchmark}/js/HTMLBenchmark.js (100%) rename programs/{benchmarking => benchmark}/js/HTMLResultsRenderer.js (100%) rename programs/{benchmarking => benchmark}/js/InsertLetterA.js (100%) rename programs/{benchmarking => benchmark}/js/LoadDocument.js (100%) rename programs/{benchmarking => benchmark}/js/ManualStep.js (100%) rename programs/{benchmarking => benchmark}/js/MoveCursor1StepLeft.js (100%) rename programs/{benchmarking => benchmark}/js/MoveCursorToEndDirect.js (100%) rename programs/{benchmarking => benchmark}/js/MoveCursorToEndViaCtrlEnd.js (100%) rename programs/{benchmarking => benchmark}/js/Remove1Position.js (100%) rename programs/{benchmarking => benchmark}/js/RemoveCurrentSelection.js (100%) rename programs/{benchmarking => benchmark}/js/SelectEntireDocument.js (100%) rename programs/{benchmarking => benchmark}/require.js (100%) rename programs/{benchmarking => benchmark}/src-index.html (100%) rename programs/{benchmarking => benchmark}/webodf.js (100%) diff --git a/programs/CMakeLists.txt b/programs/CMakeLists.txt index 030cbf71..ab9ef4c4 100644 --- a/programs/CMakeLists.txt +++ b/programs/CMakeLists.txt @@ -12,7 +12,7 @@ add_subdirectory(firefoxextension) add_subdirectory(touchui) add_subdirectory(playbook) -add_subdirectory(benchmarking) +add_subdirectory(benchmark) add_subdirectory(editor) add_subdirectory(viewer) add_subdirectory(wordpressplugin) diff --git a/programs/benchmarking/1000pages.odt b/programs/benchmark/1000pages.odt similarity index 100% rename from programs/benchmarking/1000pages.odt rename to programs/benchmark/1000pages.odt diff --git a/programs/benchmarking/100pages.odt b/programs/benchmark/100pages.odt similarity index 100% rename from programs/benchmarking/100pages.odt rename to programs/benchmark/100pages.odt diff --git a/programs/benchmarking/10pages.odt b/programs/benchmark/10pages.odt similarity index 100% rename from programs/benchmarking/10pages.odt rename to programs/benchmark/10pages.odt diff --git a/programs/benchmarking/1page.odt b/programs/benchmark/1page.odt similarity index 100% rename from programs/benchmarking/1page.odt rename to programs/benchmark/1page.odt diff --git a/programs/benchmarking/CMakeLists.txt b/programs/benchmark/CMakeLists.txt similarity index 100% rename from programs/benchmarking/CMakeLists.txt rename to programs/benchmark/CMakeLists.txt diff --git a/programs/benchmarking/index.html b/programs/benchmark/index.html similarity index 100% rename from programs/benchmarking/index.html rename to programs/benchmark/index.html diff --git a/programs/benchmarking/js/Benchmark.js b/programs/benchmark/js/Benchmark.js similarity index 100% rename from programs/benchmarking/js/Benchmark.js rename to programs/benchmark/js/Benchmark.js diff --git a/programs/benchmarking/js/BenchmarkAction.js b/programs/benchmark/js/BenchmarkAction.js similarity index 100% rename from programs/benchmarking/js/BenchmarkAction.js rename to programs/benchmark/js/BenchmarkAction.js diff --git a/programs/benchmarking/js/EnterEditMode.js b/programs/benchmark/js/EnterEditMode.js similarity index 100% rename from programs/benchmarking/js/EnterEditMode.js rename to programs/benchmark/js/EnterEditMode.js diff --git a/programs/benchmarking/js/HTMLBenchmark.js b/programs/benchmark/js/HTMLBenchmark.js similarity index 100% rename from programs/benchmarking/js/HTMLBenchmark.js rename to programs/benchmark/js/HTMLBenchmark.js diff --git a/programs/benchmarking/js/HTMLResultsRenderer.js b/programs/benchmark/js/HTMLResultsRenderer.js similarity index 100% rename from programs/benchmarking/js/HTMLResultsRenderer.js rename to programs/benchmark/js/HTMLResultsRenderer.js diff --git a/programs/benchmarking/js/InsertLetterA.js b/programs/benchmark/js/InsertLetterA.js similarity index 100% rename from programs/benchmarking/js/InsertLetterA.js rename to programs/benchmark/js/InsertLetterA.js diff --git a/programs/benchmarking/js/LoadDocument.js b/programs/benchmark/js/LoadDocument.js similarity index 100% rename from programs/benchmarking/js/LoadDocument.js rename to programs/benchmark/js/LoadDocument.js diff --git a/programs/benchmarking/js/ManualStep.js b/programs/benchmark/js/ManualStep.js similarity index 100% rename from programs/benchmarking/js/ManualStep.js rename to programs/benchmark/js/ManualStep.js diff --git a/programs/benchmarking/js/MoveCursor1StepLeft.js b/programs/benchmark/js/MoveCursor1StepLeft.js similarity index 100% rename from programs/benchmarking/js/MoveCursor1StepLeft.js rename to programs/benchmark/js/MoveCursor1StepLeft.js diff --git a/programs/benchmarking/js/MoveCursorToEndDirect.js b/programs/benchmark/js/MoveCursorToEndDirect.js similarity index 100% rename from programs/benchmarking/js/MoveCursorToEndDirect.js rename to programs/benchmark/js/MoveCursorToEndDirect.js diff --git a/programs/benchmarking/js/MoveCursorToEndViaCtrlEnd.js b/programs/benchmark/js/MoveCursorToEndViaCtrlEnd.js similarity index 100% rename from programs/benchmarking/js/MoveCursorToEndViaCtrlEnd.js rename to programs/benchmark/js/MoveCursorToEndViaCtrlEnd.js diff --git a/programs/benchmarking/js/Remove1Position.js b/programs/benchmark/js/Remove1Position.js similarity index 100% rename from programs/benchmarking/js/Remove1Position.js rename to programs/benchmark/js/Remove1Position.js diff --git a/programs/benchmarking/js/RemoveCurrentSelection.js b/programs/benchmark/js/RemoveCurrentSelection.js similarity index 100% rename from programs/benchmarking/js/RemoveCurrentSelection.js rename to programs/benchmark/js/RemoveCurrentSelection.js diff --git a/programs/benchmarking/js/SelectEntireDocument.js b/programs/benchmark/js/SelectEntireDocument.js similarity index 100% rename from programs/benchmarking/js/SelectEntireDocument.js rename to programs/benchmark/js/SelectEntireDocument.js diff --git a/programs/benchmarking/require.js b/programs/benchmark/require.js similarity index 100% rename from programs/benchmarking/require.js rename to programs/benchmark/require.js diff --git a/programs/benchmarking/src-index.html b/programs/benchmark/src-index.html similarity index 100% rename from programs/benchmarking/src-index.html rename to programs/benchmark/src-index.html diff --git a/programs/benchmarking/webodf.js b/programs/benchmark/webodf.js similarity index 100% rename from programs/benchmarking/webodf.js rename to programs/benchmark/webodf.js From 9b95f7762b67899c85deda22dc04444fb371ef6c Mon Sep 17 00:00:00 2001 From: Philip Peitsch Date: Wed, 20 Nov 2013 23:21:56 +1100 Subject: [PATCH 4/5] Use SIMPLE_OPTIMIZATIONS when building html-benchmark --- programs/benchmark/CMakeLists.txt | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/programs/benchmark/CMakeLists.txt b/programs/benchmark/CMakeLists.txt index 09c28566..cc8ff76e 100644 --- a/programs/benchmark/CMakeLists.txt +++ b/programs/benchmark/CMakeLists.txt @@ -6,33 +6,30 @@ COPY_FILES(BENCHMARK_HTML ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR index.html ) -FILE(GLOB BENCHMARK_JS RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/js" "${CMAKE_CURRENT_SOURCE_DIR}/js/*.js") +FILE(GLOB BENCHMARK_JS "${CMAKE_CURRENT_SOURCE_DIR}/js/*.js") FOREACH(JSFILE ${BENCHMARK_JS}) set(BENCHMARK_CLOSURE_ARGS ${BENCHMARK_CLOSURE_ARGS} --js ${JSFILE}) ENDFOREACH(JSFILE) -SET(BENCHMARK_JS_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/benchmark.js") - add_custom_command( OUTPUT benchmark.js-target # from webodf.js target (DEPENDS webodf.js) COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/webodf/webodf.js ${CMAKE_CURRENT_BINARY_DIR} - # The transformed AMD modules take their names from the relative path supplied - # To ensure these are predictable, the initial compilation must be done from the JS source directory - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/js COMMAND ${Java_JAVA_EXECUTABLE} ARGS -jar ${CLOSURE_JAR} ${BENCHMARK_CLOSURE_ARGS} --transform_amd_modules --process_common_js_modules - --common_js_entry_module=HTMLBenchmark.js + --common_js_entry_module HTMLBenchmark.js + --common_js_module_path_prefix ${CMAKE_CURRENT_SOURCE_DIR}/js + --compilation_level SIMPLE_OPTIMIZATIONS --formatting PRETTY_PRINT - --js_output_file "${BENCHMARK_JS_OUTPUT}-" + --js_output_file "benchmark.js-" - COMMAND ${CMAKE_COMMAND} ARGS -E rename "${BENCHMARK_JS_OUTPUT}-" "${BENCHMARK_JS_OUTPUT}" + COMMAND ${CMAKE_COMMAND} ARGS -E rename "benchmark.js-" "benchmark.js" DEPENDS ClosureCompiler webodf.js-target ) From bbf92720db79a58d8fb34a3c37850fd009588188 Mon Sep 17 00:00:00 2001 From: Philip Peitsch Date: Thu, 21 Nov 2013 01:27:12 +1100 Subject: [PATCH 5/5] Add missing constructor docs --- programs/benchmark/js/HTMLBenchmark.js | 3 +++ programs/benchmark/js/ManualStep.js | 3 +++ 2 files changed, 6 insertions(+) diff --git a/programs/benchmark/js/HTMLBenchmark.js b/programs/benchmark/js/HTMLBenchmark.js index a10ebef6..74e1833b 100644 --- a/programs/benchmark/js/HTMLBenchmark.js +++ b/programs/benchmark/js/HTMLBenchmark.js @@ -52,6 +52,9 @@ define([ SelectEntireDocument, RemoveCurrentSelection) { "use strict"; + /** + * @constructor + */ function HTMLBenchmark() { var loadingScreen = document.getElementById('loadingScreen'), fileUrl = window.location.hash.substr(1) || "100pages.odt", diff --git a/programs/benchmark/js/ManualStep.js b/programs/benchmark/js/ManualStep.js index 8069d902..c99f7ec4 100644 --- a/programs/benchmark/js/ManualStep.js +++ b/programs/benchmark/js/ManualStep.js @@ -39,6 +39,9 @@ define(function() { "use strict"; + /** + * @constructor + */ function ManualStep() { var wizardContainer = document.getElementById("wizardPrompt"), messageContainer = document.getElementById("wizardMessage"),