This commit is contained in:
Alfred Melch 2019-07-16 17:42:56 +02:00
parent 57390f4ed5
commit f0c1f453c9
7 changed files with 24 additions and 807 deletions

View File

@ -1,6 +1,6 @@
% Performance benchmark
In this chapter i will explain the approach to improve the performance of a simplification algorithm in a web browser via WebAssembly. The go-to library for this kind of operation is simplifyJS. It is the javascript implementation of the Douglas-Peucker algorithm with optional radial distance preprocessing. The library will be rebuilt in the C programming language and compiled to Webassembly with emscripten. A webpage is built to produce benchmarking insights to compare the two approaches performance wise.
In this chapter i will explain the approach to improve the performance of a simplification algorithm in a web browser via WebAssembly. The go-to library for this kind of operation is simplifyJS. It is the javascript implementation of the Douglas-Peucker algorithm with optional radial distance preprocessing. The library will be rebuilt in the C programming language and compiled to Webassembly with emscripten. A web page is built to produce benchmarking insights to compare the two approaches performance wise.
\subsection{State of the art: simplifyJS}
% simplifyJS + turf
@ -19,7 +19,7 @@ Interestingly the library expects coordinates to be a list of object with x and
label=lst:turf-transformation
]{../lib/turf-simplify/index.js}
Since it is not clear which case is faster, and given how simple the required changes are, two versions of Simplify.js will be tested: the original version, which expects the coordinates to be in array-of-objects form and the altered version, which operates on nested arrays. Listing \ref{lst:diff-simplify.js} shows an extract of the changes performed on the library. Instead of using properties, the coordinate values are accessed by index. Except for the removal of the lisencing header the alterations are restricted to these kind of changes. The full list of changes can be viewed in \path{lib/simplify-js-alternative/simplify.diff}.
Since it is not clear which case is faster, and given how simple the required changes are, two versions of Simplify.js will be tested: the original version, which expects the coordinates to be in array-of-objects form and the altered version, which operates on nested arrays. Listing \ref{lst:diff-simplify.js} shows an extract of the changes performed on the library. Instead of using properties, the coordinate values are accessed by index. Except for the removal of the licensing header the alterations are restricted to these kind of changes. The full list of changes can be viewed in \path{lib/simplify-js-alternative/simplify.diff}.
\lstinputlisting[
@ -34,7 +34,7 @@ Since it is not clear which case is faster, and given how simple the required ch
In scope of this thesis a library will be created that implements the same procedure as simplify.JS in C code. It will be made available on the web platform through WebAssembly. In the style of the model library it will be called simplify.WASM. The compiler to use will be emscripten as it is the standard for porting C code to wasm.
As mentioned the first step is to port simplify.JS to the C programming language. The file \path{/lib/simplify-wasm/simplify.c} shows the attempt. It is kept as close to the Javascript library as possible. This may result in C-untypical coding style but prevents skewed results from unexpected optimizations to the procedure itself. The entrypoint is not the \texttt{main}-function but a function called simplify. This is specified to the compiler as can be seen in \path{/lib/simplify-wasm/Makefile}. Furthermore the functions malloc and free from the standard library are made available for the host environment. Compling the code through emscripten produces a wasm file and the glue code in javascript format. These files are called simplify.wasm and simplify.js respectively. An example usage can be seen in \path{/lib/simplify-wasm/example.html}. Even through the memory access is abstracted in this example the process is still unhandy and far from a drop-in replacement of simplify.JS. Thus in \path{/lib/simplify-wasm/index.js} the a further abstraction to the emscripten emitted code was realised. The exported function \verb simplifyWasm handles module instantiation, memory access and the correct call to the exported wasm code. Finding the correct path to the wasm binary is not always clear however when the code is imported from another location. The proposed solution is to leave the resolving of the code-path to an asset bundler that processes the file in a preprocessing step.
As mentioned the first step is to port simplify.JS to the C programming language. The file \path{lib/simplify-wasm/simplify.c} shows the attempt. It is kept as close to the Javascript library as possible. This may result in C-untypical coding style but prevents skewed results from unexpected optimizations to the procedure itself. The entrypoint is not the \texttt{main}-function but a function called simplify. This is specified to the compiler as can be seen in \path{lib/simplify-wasm/Makefile}. Furthermore the functions malloc and free from the standard library are made available for the host environment. Compling the code through emscripten produces a wasm file and the glue code in javascript format. These files are called simplify.wasm and simplify.js respectively. An example usage can be seen in \path{lib/simplify-wasm/example.html}. Even through the memory access is abstracted in this example the process is still unhandy and far from a drop-in replacement of simplify.JS. Thus in \path{lib/simplify-wasm/index.js} the a further abstraction to the emscripten emitted code was realised. The exported function \verb simplifyWasm handles module instantiation, memory access and the correct call to the exported wasm code. Finding the correct path to the wasm binary is not always clear however when the code is imported from another location. The proposed solution is to leave the resolving of the code-path to an asset bundler that processes the file in a preprocessing step.
\lstinputlisting[
float=htpb,
@ -71,9 +71,28 @@ caption=The storeCoords function,
label=lst:wasm-util-store-coords
]{../lib/wasm-util/coordinates.js}
\todo[inline]{C code: int* simplify}
\todo{Check for coords length < 2}
\todo[inline]{loadResult}
Now we dive int C-land. Listing \ref{lst:simplify-wasm-entrypoint} shows the entry point for the C code. This is the function that gets called from Javascript. As expected arrays are represented as pointers with corresponding length. The first block of code (line 2 - 6) is only meant for declaring needed variables. Lines 8 to 12 mark the radial distance preprocessing. The result of this simplification is stored in n auxiliary array named \texttt{resultRdDistance}. In this case points will have to point to the new array and the length is adjusted. Finally the Douglas-Peucker procedure is invoked after reserving enough memory. The auxiliary array can be freed afterwards. The problem now is to return the result pointer and the array length back to the calling code. \todo{Fact check. evtl unsigned}The fact that pointers in emscripten are represented by an integer will be exploited to return a fixed size array of two containing the values. A hacky solution but it works. We can now look back at how the javascript code reads the result.
\lstinputlisting[
float=tbph,
language=c,
firstline=104, lastline=124,
caption=Entrypoint in the C-file,
label=lst:simplify-wasm-entrypoint
]{../lib/simplify-wasm/simplify.c}
Listing \ref{lst:wasm-util-load-result} shows the code to read the values back from module memory. The result pointer and its length are acquired by dereferencing the \texttt{resultInfo}-array. The buffer to use is the heap for unsigned 32-bit integers. This information can then be used to align the Float64Array-view on the 64-bit heap. Constructing the appropriate coordinate representation by reversing the flattening can be looked up in the same file. It is realised in the \texttt{unflattenCoords} function. At last it is important to actually free the memory reserved for both the result and the result-information. The exported method \texttt{free} is the way to go here.
\lstinputlisting[
float=tbph,
language=javascript,
firstline=29, lastline=43,
caption=Loading coordinates back from module memory,
label=lst:wasm-util-load-result
]{../lib/wasm-util/coordinates.js}

View File

@ -1,92 +0,0 @@
\relax
\@writefile{toc}{\contentsline {section}{\numberline {1}Introduction}{1}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {1.1}Binary instruction sets on the web platform}{1}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {1.2}Performance as important factor for web applications}{1}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {1.3}Topology simplification for rendering performance}{2}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {1.4}Structure of this thesis}{2}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {2}Principles}{3}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}Polygon basics}{3}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.1.1}Topological aspects}{3}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {2.2}LineString simplification}{3}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.2.1}Positional errors}{3}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.2.2}Length errors}{3}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.2.3}Area Errors}{3}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {3}Algorithms}{4}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {3.1}n-th point algorithm}{4}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {3.2}Random-point routine}{4}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {3.3}Radial distance algorithm}{4}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {3.4}Perpendicular distance algorithm}{4}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {3.5}Reumann-Witkam simplification}{4}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {3.6}Opheim simplification}{4}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {3.7}Lang simplification}{4}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {3.8}Douglas-Peucker simplification}{4}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.8.1}with reduction parameter}{4}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {3.9}Jenks simplification}{4}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {3.10}Visvalingam-Whyatt simplification}{4}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {3.11}Zhao-Saalfeld simplification}{4}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {3.12}Summary}{4}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {4}WebAssembly}{5}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {4.1}Introduction to Webassembly}{5}\protected@file@percent }
\@writefile{tdo}{\contentsline {todo}{Present WebAssembly}{5}\protected@file@percent }
\pgfsyspdfmark {pgfid1}{19562753}{45539641}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.1}Existing compilers}{5}\protected@file@percent }
\@writefile{tdo}{\contentsline {todo}{Languages from which to compile}{5}\protected@file@percent }
\pgfsyspdfmark {pgfid2}{19562753}{41259959}
\@writefile{tdo}{\contentsline {todo}{emscripten}{5}\protected@file@percent }
\pgfsyspdfmark {pgfid3}{19562753}{39932933}
\@writefile{tdo}{\contentsline {todo}{assemblyscript}{5}\protected@file@percent }
\pgfsyspdfmark {pgfid4}{19562753}{38605907}
\@writefile{tdo}{\contentsline {todo}{rust}{5}\protected@file@percent }
\pgfsyspdfmark {pgfid5}{19562753}{37318957}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.2}Technical hurdles}{5}\protected@file@percent }
\@writefile{tdo}{\contentsline {todo}{Managing memory}{5}\protected@file@percent }
\pgfsyspdfmark {pgfid6}{19562753}{33304225}
\@writefile{tdo}{\contentsline {todo}{passing arrays}{5}\protected@file@percent }
\pgfsyspdfmark {pgfid7}{19562753}{31981568}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.3}Benefits of WebAssembly}{5}\protected@file@percent }
\@writefile{tdo}{\contentsline {todo}{Get chart and source of js performance}{5}\protected@file@percent }
\pgfsyspdfmark {pgfid8}{19562753}{15921128}
\@writefile{tdo}{\contentsline {todo}{Source for V8 performance observation}{5}\protected@file@percent }
\pgfsyspdfmark {pgfid9}{19562753}{14582010}
\@writefile{tdo}{\contentsline {todo}{more about av1}{6}\protected@file@percent }
\pgfsyspdfmark {pgfid10}{19562753}{46038744}
\@writefile{toc}{\contentsline {subsection}{\numberline {4.2}Two test cases - performance and integration}{6}\protected@file@percent }
\@writefile{toc}{\contentsline {paragraph}{Performance}{6}\protected@file@percent }
\@writefile{tdo}{\contentsline {todo}{source for simplify JS}{6}\protected@file@percent }
\pgfsyspdfmark {pgfid11}{19562753}{27631187}
\@writefile{tdo}{\contentsline {todo}{source for turf}{6}\protected@file@percent }
\pgfsyspdfmark {pgfid12}{19562753}{26375444}
\@writefile{toc}{\contentsline {paragraph}{Integration}{6}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {5}Benchmark}{7}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {5.1}State of the art: simplifyJS}{7}\protected@file@percent }
\@writefile{tdo}{\contentsline {todo}{reference object vs array form}{7}\protected@file@percent }
\pgfsyspdfmark {pgfid13}{9505910}{23172546}
\pgfsyspdfmark {pgfid16}{36067891}{23187291}
\pgfsyspdfmark {pgfid17}{37916186}{22918594}
\newlabel{lst:turf-transformation}{{1}{8}}
\@writefile{lol}{\contentsline {lstlisting}{\numberline {1}Turf.js usage of simplify.js}{8}\protected@file@percent }
\newlabel{lst:diff-simplify.js}{{2}{8}}
\@writefile{lol}{\contentsline {lstlisting}{\numberline {2}Snippet of the difference between the original Simplify.js and alternative}{8}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {5.2}The webassembly solution}{8}\protected@file@percent }
\newlabel{lst:simplify-wasm}{{5.2}{9}}
\newlabel{lst:simplify-wasm-emscripten-module}{{3}{9}}
\@writefile{lol}{\contentsline {lstlisting}{\numberline {3}My Caption}{9}\protected@file@percent }
\newlabel{lst:wasm-util-store-coords}{{4}{10}}
\@writefile{lol}{\contentsline {lstlisting}{\numberline {4}The storeCoords function}{10}\protected@file@percent }
\@writefile{tdo}{\contentsline {todo}{C code: int* simplify}{10}\protected@file@percent }
\pgfsyspdfmark {pgfid18}{19562753}{26245426}
\@writefile{tdo}{\contentsline {todo}{loadResult}{10}\protected@file@percent }
\pgfsyspdfmark {pgfid19}{19562753}{24967837}
\@writefile{toc}{\contentsline {subsection}{\numberline {5.3}The implementation}{10}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {6}Compiling an existing C++ library for use on the web}{11}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {6.1}State of the art: psimpl}{11}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {6.2}Compiling to webassembly}{11}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {6.2.1}Introduction to emscripten}{11}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {6.3}Preserving topology GeoJSON vs TopoJSON}{11}\protected@file@percent }
\@writefile{tdo}{\contentsline {todo}{object form vs array form}{11}\protected@file@percent }
\pgfsyspdfmark {pgfid20}{19562753}{38119504}
\@writefile{toc}{\contentsline {subsection}{\numberline {6.4}The implementation}{11}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {7}Results}{11}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {7.1}Benchmark results}{11}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {7.2}Comparing the results of different algorithms}{11}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {8}Conclusion}{12}\protected@file@percent }

View File

@ -1,658 +0,0 @@
This is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2019/dev/Debian) (preloaded format=pdflatex 2019.7.11) 15 JUL 2019 09:56
entering extended mode
restricted \write18 enabled.
%&-line parsing enabled.
**main.tex
(./main.tex
LaTeX2e <2018-12-01>
(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls
Document Class: article 2018/09/03 v1.4i Standard LaTeX document class
(/usr/share/texlive/texmf-dist/tex/latex/base/size12.clo
File: size12.clo 2018/09/03 v1.4i Standard LaTeX file (size option)
)
\c@part=\count80
\c@section=\count81
\c@subsection=\count82
\c@subsubsection=\count83
\c@paragraph=\count84
\c@subparagraph=\count85
\c@figure=\count86
\c@table=\count87
\abovecaptionskip=\skip41
\belowcaptionskip=\skip42
\bibindent=\dimen102
)
(/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty
Package: inputenc 2018/08/11 v1.3c Input encoding file
\inpenc@prehook=\toks14
\inpenc@posthook=\toks15
)
(/usr/share/texlive/texmf-dist/tex/latex/setspace/setspace.sty
Package: setspace 2011/12/19 v6.7a set line spacing
)
(/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty
Package: geometry 2018/04/16 v5.8 Page Geometry
(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty
Package: keyval 2014/10/28 v1.15 key=value parser (DPC)
\KV@toks@=\toks16
)
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty
Package: ifpdf 2018/09/07 v3.3 Provides the ifpdf switch
)
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifvtex.sty
Package: ifvtex 2016/05/16 v1.6 Detect VTeX and its facilities (HO)
Package ifvtex Info: VTeX not detected.
)
(/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty
Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional
)
\Gm@cnth=\count88
\Gm@cntv=\count89
\c@Gm@tempcnt=\count90
\Gm@bindingoffset=\dimen103
\Gm@wd@mp=\dimen104
\Gm@odd@mp=\dimen105
\Gm@even@mp=\dimen106
\Gm@layoutwidth=\dimen107
\Gm@layoutheight=\dimen108
\Gm@layouthoffset=\dimen109
\Gm@layoutvoffset=\dimen110
\Gm@dimlist=\toks17
)
(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty
Package: graphicx 2017/06/01 v1.1a Enhanced LaTeX Graphics (DPC,SPQR)
(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty
Package: graphics 2017/06/25 v1.2c Standard LaTeX Graphics (DPC,SPQR)
(/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty
Package: trig 2016/01/03 v1.10 sin cos tan (DPC)
)
(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration
)
Package graphics Info: Driver file: pdftex.def on input line 99.
(/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def
File: pdftex.def 2018/01/08 v1.0l Graphics/color driver for pdftex
))
\Gin@req@height=\dimen111
\Gin@req@width=\dimen112
)
(/usr/share/texlive/texmf-dist/tex/latex/todonotes/todonotes.sty
Package: todonotes 2019/01/24 v1.1.2 Todonotes source and documentation.
Package: todonotes 2018/11/22
(/usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty
Package: ifthen 2014/09/29 v1.1c Standard LaTeX ifthen package (DPC)
)
(/usr/share/texlive/texmf-dist/tex/latex/xkeyval/xkeyval.sty
Package: xkeyval 2014/12/03 v2.7a package option processing (HA)
(/usr/share/texlive/texmf-dist/tex/generic/xkeyval/xkeyval.tex
(/usr/share/texlive/texmf-dist/tex/generic/xkeyval/xkvutils.tex
\XKV@toks=\toks18
\XKV@tempa@toks=\toks19
)
\XKV@depth=\count91
File: xkeyval.tex 2014/12/03 v2.7a key=value parser (HA)
))
(/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty
Package: xcolor 2016/05/11 v2.12 LaTeX color extensions (UK)
(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg
File: color.cfg 2016/01/02 v1.6 sample color configuration
)
Package xcolor Info: Driver file: pdftex.def on input line 225.
Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1348.
Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1352.
Package xcolor Info: Model `RGB' extended on input line 1364.
Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1366.
Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1367.
Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1368.
Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1369.
Package xcolor Info: Model `Gray' substituted by `gray' on input line 1370.
Package xcolor Info: Model `wave' substituted by `hsb' on input line 1371.
)
(/usr/share/texlive/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty
(/usr/share/texlive/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty
(/usr/share/texlive/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty
(/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.tex
\pgfutil@everybye=\toks20
\pgfutil@tempdima=\dimen113
\pgfutil@tempdimb=\dimen114
(/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfutil-common-lists.t
ex)) (/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def
\pgfutil@abb=\box27
(/usr/share/texlive/texmf-dist/tex/latex/ms/everyshi.sty
Package: everyshi 2001/05/15 v3.00 EveryShipout Package (MS)
))
(/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex
(/usr/share/texlive/texmf-dist/tex/generic/pgf/pgf.revision.tex)
Package: pgfrcs 2019/02/02 v3.1.1 (3.1.1)
))
Package: pgf 2019/02/02 v3.1.1 (3.1.1)
(/usr/share/texlive/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty
(/usr/share/texlive/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty
(/usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex
Package: pgfsys 2019/02/02 v3.1.1 (3.1.1)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex
\pgfkeys@pathtoks=\toks21
\pgfkeys@temptoks=\toks22
(/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfkeysfiltered.code.t
ex
\pgfkeys@tmptoks=\toks23
))
\pgf@x=\dimen115
\pgf@y=\dimen116
\pgf@xa=\dimen117
\pgf@ya=\dimen118
\pgf@xb=\dimen119
\pgf@yb=\dimen120
\pgf@xc=\dimen121
\pgf@yc=\dimen122
\w@pgf@writea=\write3
\r@pgf@reada=\read1
\c@pgf@counta=\count92
\c@pgf@countb=\count93
\c@pgf@countc=\count94
\c@pgf@countd=\count95
\t@pgf@toka=\toks24
\t@pgf@tokb=\toks25
\t@pgf@tokc=\toks26
\pgf@sys@id@count=\count96
(/usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg
File: pgf.cfg 2019/02/02 v3.1.1 (3.1.1)
)
Driver file for pgf: pgfsys-pdftex.def
(/usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.def
File: pgfsys-pdftex.def 2019/02/02 v3.1.1 (3.1.1)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-pdf.de
f
File: pgfsys-common-pdf.def 2019/02/02 v3.1.1 (3.1.1)
)))
(/usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.
tex
File: pgfsyssoftpath.code.tex 2019/02/02 v3.1.1 (3.1.1)
\pgfsyssoftpath@smallbuffer@items=\count97
\pgfsyssoftpath@bigbuffer@items=\count98
)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.
tex
File: pgfsysprotocol.code.tex 2019/02/02 v3.1.1 (3.1.1)
))
(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex
Package: pgfcore 2019/02/02 v3.1.1 (3.1.1)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex
(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex
(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex
\pgfmath@dimen=\dimen123
\pgfmath@count=\count99
\pgfmath@box=\box28
\pgfmath@toks=\toks27
\pgfmath@stack@operand=\toks28
\pgfmath@stack@operation=\toks29
)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code.tex
(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic.code
.tex)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigonomet
ric.code.tex)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.random.cod
e.tex)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.comparison
.code.tex)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base.code.
tex)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round.code
.tex)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc.code.
tex)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integerari
thmetics.code.tex)))
(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex
\c@pgfmathroundto@lastzeros=\count100
))
(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.code.te
x
File: pgfcorepoints.code.tex 2019/02/02 v3.1.1 (3.1.1)
\pgf@picminx=\dimen124
\pgf@picmaxx=\dimen125
\pgf@picminy=\dimen126
\pgf@picmaxy=\dimen127
\pgf@pathminx=\dimen128
\pgf@pathmaxx=\dimen129
\pgf@pathminy=\dimen130
\pgf@pathmaxy=\dimen131
\pgf@xx=\dimen132
\pgf@xy=\dimen133
\pgf@yx=\dimen134
\pgf@yy=\dimen135
\pgf@zx=\dimen136
\pgf@zy=\dimen137
)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconstruct.
code.tex
File: pgfcorepathconstruct.code.tex 2019/02/02 v3.1.1 (3.1.1)
\pgf@path@lastx=\dimen138
\pgf@path@lasty=\dimen139
)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage.code
.tex
File: pgfcorepathusage.code.tex 2019/02/02 v3.1.1 (3.1.1)
\pgf@shorten@end@additional=\dimen140
\pgf@shorten@start@additional=\dimen141
)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.code.te
x
File: pgfcorescopes.code.tex 2019/02/02 v3.1.1 (3.1.1)
\pgfpic=\box29
\pgf@hbox=\box30
\pgf@layerbox@main=\box31
\pgf@picture@serial@count=\count101
)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicstate.c
ode.tex
File: pgfcoregraphicstate.code.tex 2019/02/02 v3.1.1 (3.1.1)
\pgflinewidth=\dimen142
)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransformation
s.code.tex
File: pgfcoretransformations.code.tex 2019/02/02 v3.1.1 (3.1.1)
\pgf@pt@x=\dimen143
\pgf@pt@y=\dimen144
\pgf@pt@temp=\dimen145
)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.code.tex
File: pgfcorequick.code.tex 2019/02/02 v3.1.1 (3.1.1)
)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.code.t
ex
File: pgfcoreobjects.code.tex 2019/02/02 v3.1.1 (3.1.1)
)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathprocessing
.code.tex
File: pgfcorepathprocessing.code.tex 2019/02/02 v3.1.1 (3.1.1)
)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.code.te
x
File: pgfcorearrows.code.tex 2019/02/02 v3.1.1 (3.1.1)
\pgfarrowsep=\dimen146
)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.code.tex
File: pgfcoreshade.code.tex 2019/02/02 v3.1.1 (3.1.1)
\pgf@max=\dimen147
\pgf@sys@shading@range@num=\count102
)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.code.tex
File: pgfcoreimage.code.tex 2019/02/02 v3.1.1 (3.1.1)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal.code.
tex
File: pgfcoreexternal.code.tex 2019/02/02 v3.1.1 (3.1.1)
\pgfexternal@startupbox=\box32
))
(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.code.te
x
File: pgfcorelayers.code.tex 2019/02/02 v3.1.1 (3.1.1)
)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransparency.c
ode.tex
File: pgfcoretransparency.code.tex 2019/02/02 v3.1.1 (3.1.1)
)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns.code.
tex
File: pgfcorepatterns.code.tex 2019/02/02 v3.1.1 (3.1.1)
)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code.tex
File: pgfcorerdf.code.tex 2019/02/02 v3.1.1 (3.1.1)
)))
(/usr/share/texlive/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.code.tex
File: pgfmoduleshapes.code.tex 2019/02/02 v3.1.1 (3.1.1)
\pgfnodeparttextbox=\box33
) (/usr/share/texlive/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code.tex
File: pgfmoduleplot.code.tex 2019/02/02 v3.1.1 (3.1.1)
)
(/usr/share/texlive/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65
.sty
Package: pgfcomp-version-0-65 2019/02/02 v3.1.1 (3.1.1)
\pgf@nodesepstart=\dimen148
\pgf@nodesepend=\dimen149
)
(/usr/share/texlive/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18
.sty
Package: pgfcomp-version-1-18 2019/02/02 v3.1.1 (3.1.1)
)) (/usr/share/texlive/texmf-dist/tex/latex/pgf/utilities/pgffor.sty
(/usr/share/texlive/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty
(/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex))
(/usr/share/texlive/texmf-dist/tex/latex/pgf/math/pgfmath.sty
(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex))
(/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex
Package: pgffor 2019/02/02 v3.1.1 (3.1.1)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex)
\pgffor@iter=\dimen150
\pgffor@skip=\dimen151
\pgffor@stack=\toks30
\pgffor@toks=\toks31
))
(/usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex
Package: tikz 2019/02/02 v3.1.1 (3.1.1)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/libraries/pgflibraryplothandlers
.code.tex
File: pgflibraryplothandlers.code.tex 2019/02/02 v3.1.1 (3.1.1)
\pgf@plot@mark@count=\count103
\pgfplotmarksize=\dimen152
)
\tikz@lastx=\dimen153
\tikz@lasty=\dimen154
\tikz@lastxsaved=\dimen155
\tikz@lastysaved=\dimen156
\tikzleveldistance=\dimen157
\tikzsiblingdistance=\dimen158
\tikz@figbox=\box34
\tikz@figbox@bg=\box35
\tikz@tempbox=\box36
\tikz@tempbox@bg=\box37
\tikztreelevel=\count104
\tikznumberofchildren=\count105
\tikznumberofcurrentchild=\count106
\tikz@fig@count=\count107
(/usr/share/texlive/texmf-dist/tex/generic/pgf/modules/pgfmodulematrix.code.tex
File: pgfmodulematrix.code.tex 2019/02/02 v3.1.1 (3.1.1)
\pgfmatrixcurrentrow=\count108
\pgfmatrixcurrentcolumn=\count109
\pgf@matrix@numberofcolumns=\count110
)
\tikz@expandcount=\count111
(/usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tik
zlibrarytopaths.code.tex
File: tikzlibrarytopaths.code.tex 2019/02/02 v3.1.1 (3.1.1)
)))
(/usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tik
zlibrarypositioning.code.tex
File: tikzlibrarypositioning.code.tex 2019/02/02 v3.1.1 (3.1.1)
)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tik
zlibraryshadows.code.tex
File: tikzlibraryshadows.code.tex 2019/02/02 v3.1.1 (3.1.1)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tik
zlibraryfadings.code.tex
File: tikzlibraryfadings.code.tex 2019/02/02 v3.1.1 (3.1.1)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/libraries/pgflibraryfadings.code
.tex
File: pgflibraryfadings.code.tex 2019/02/02 v3.1.1 (3.1.1)
))) (/usr/share/texlive/texmf-dist/tex/latex/tools/calc.sty
Package: calc 2017/05/25 v4.3 Infix arithmetic (KKT,FJ)
\calc@Acount=\count112
\calc@Bcount=\count113
\calc@Adimen=\dimen159
\calc@Bdimen=\dimen160
\calc@Askip=\skip43
\calc@Bskip=\skip44
LaTeX Info: Redefining \setlength on input line 80.
LaTeX Info: Redefining \addtolength on input line 81.
\calc@Ccount=\count114
\calc@Cskip=\skip45
)
\c@@todonotes@numberoftodonotes=\count115
)
(/usr/share/texlive/texmf-dist/tex/latex/url/url.sty
\Urlmuskip=\muskip10
Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc.
)
(/usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty
Package: fancyhdr 2019/01/31 v3.10 Extensive control of page headers and footer
s
\f@nch@headwidth=\skip46
\f@nch@O@elh=\skip47
\f@nch@O@erh=\skip48
\f@nch@O@olh=\skip49
\f@nch@O@orh=\skip50
\f@nch@O@elf=\skip51
\f@nch@O@erf=\skip52
\f@nch@O@olf=\skip53
\f@nch@O@orf=\skip54
)
(/usr/share/texlive/texmf-dist/tex/latex/ms/ragged2e.sty
Package: ragged2e 2009/05/21 v2.1 ragged2e Package (MS)
(/usr/share/texlive/texmf-dist/tex/latex/ms/everysel.sty
Package: everysel 2011/10/28 v1.2 EverySelectfont Package (MS)
)
\CenteringLeftskip=\skip55
\RaggedLeftLeftskip=\skip56
\RaggedRightLeftskip=\skip57
\CenteringRightskip=\skip58
\RaggedLeftRightskip=\skip59
\RaggedRightRightskip=\skip60
\CenteringParfillskip=\skip61
\RaggedLeftParfillskip=\skip62
\RaggedRightParfillskip=\skip63
\JustifyingParfillskip=\skip64
\CenteringParindent=\skip65
\RaggedLeftParindent=\skip66
\RaggedRightParindent=\skip67
\JustifyingParindent=\skip68
)
(/usr/share/texlive/texmf-dist/tex/latex/listings/listings.sty
\lst@mode=\count116
\lst@gtempboxa=\box38
\lst@token=\toks32
\lst@length=\count117
\lst@currlwidth=\dimen161
\lst@column=\count118
\lst@pos=\count119
\lst@lostspace=\dimen162
\lst@width=\dimen163
\lst@newlines=\count120
\lst@lineno=\count121
\lst@maxwidth=\dimen164
(/usr/share/texlive/texmf-dist/tex/latex/listings/lstmisc.sty
File: lstmisc.sty 2018/09/02 1.7 (Carsten Heinz)
\c@lstnumber=\count122
\lst@skipnumbers=\count123
\lst@framebox=\box39
)
(/usr/share/texlive/texmf-dist/tex/latex/listings/listings.cfg
File: listings.cfg 2018/09/02 1.7 listings configuration
))
Package: listings 2018/09/02 1.7 (Carsten Heinz)
(./custom-listing.tex) (./main.aux)
\openout1 = `main.aux'.
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 34.
LaTeX Font Info: ... okay on input line 34.
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 34.
LaTeX Font Info: ... okay on input line 34.
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 34.
LaTeX Font Info: ... okay on input line 34.
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 34.
LaTeX Font Info: ... okay on input line 34.
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 34.
LaTeX Font Info: ... okay on input line 34.
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 34.
LaTeX Font Info: ... okay on input line 34.
*geometry* driver: auto-detecting
*geometry* detected driver: pdftex
*geometry* verbose mode - [ preamble ] result:
* driver: pdftex
* paper: a4paper
* layout: <same size as paper>
* layoutoffset:(h,v)=(0.0pt,0.0pt)
* modes: includehead
* h-part:(L,W,R)=(85.35826pt, 426.79134pt, 85.35828pt)
* v-part:(T,H,B)=(42.67912pt, 731.23584pt, 71.13188pt)
* \paperwidth=597.50787pt
* \paperheight=845.04684pt
* \textwidth=426.79134pt
* \textheight=691.23584pt
* \oddsidemargin=13.08827pt
* \evensidemargin=13.08827pt
* \topmargin=-29.59087pt
* \headheight=15.0pt
* \headsep=25.0pt
* \topskip=12.0pt
* \footskip=30.0pt
* \marginparwidth=56.9055pt
* \marginparsep=10.0pt
* \columnsep=10.0pt
* \skip\footins=10.8pt plus 4.0pt minus 2.0pt
* \hoffset=0.0pt
* \voffset=0.0pt
* \mag=1000
* \@twocolumnfalse
* \@twosidefalse
* \@mparswitchfalse
* \@reversemarginfalse
* (1in=72.27pt=25.4mm, 1cm=28.453pt)
(/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
[Loading MPS to PDF converter (version 2006.09.02).]
\scratchcounter=\count124
\scratchdimen=\dimen165
\scratchbox=\box40
\nofMPsegments=\count125
\nofMParguments=\count126
\everyMPshowfont=\toks33
\MPscratchCnt=\count127
\MPscratchDim=\dimen166
\MPnumerator=\count128
\makeMPintoPDFobject=\count129
\everyMPtoPDFconversion=\toks34
) (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty
Package: epstopdf-base 2016/05/15 v2.6 Base part for package epstopdf
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/infwarerr.sty
Package: infwarerr 2016/05/16 v1.4 Providing info/warning/error messages (HO)
)
(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty
Package: grfext 2016/05/16 v1.2 Manage graphics extensions (HO)
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvdefinekeys.sty
Package: kvdefinekeys 2016/05/16 v1.4 Define keys (HO)
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty
Package: ltxcmds 2016/05/16 v1.23 LaTeX kernel commands for general use (HO)
)))
(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty
Package: kvoptions 2016/05/16 v3.12 Key value format for package options (HO)
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty
Package: kvsetkeys 2016/05/16 v1.17 Key value parser (HO)
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/etexcmds.sty
Package: etexcmds 2016/05/16 v1.6 Avoid name clashes with e-TeX commands (HO)
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifluatex.sty
Package: ifluatex 2016/05/16 v1.4 Provides the ifluatex switch (HO)
Package ifluatex Info: LuaTeX not detected.
))))
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty
Package: pdftexcmds 2018/09/10 v0.29 Utility functions of pdfTeX for LuaTeX (HO
)
Package pdftexcmds Info: LuaTeX not detected.
Package pdftexcmds Info: \pdf@primitive is available.
Package pdftexcmds Info: \pdf@ifprimitive is available.
Package pdftexcmds Info: \pdfdraftmode found.
)
Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4
38.
Package grfext Info: Graphics extension search list:
(grfext) [.pdf,.png,.jpg,.mps,.jpeg,.jbig2,.jb2,.PDF,.PNG,.JPG,.JPE
G,.JBIG2,.JB2,.eps]
(grfext) \AppendGraphicsExtensions on input line 456.
(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv
e
))
ABD: EveryShipout initializing macros ABD: EverySelectfont initializing macros
LaTeX Info: Redefining \selectfont on input line 34.
\c@lstlisting=\count130
<images/uni-augsburg.jpeg, id=29, 465.23813pt x 238.64156pt>
File: images/uni-augsburg.jpeg Graphic file (type jpg)
<use images/uni-augsburg.jpeg>
Package pdftex.def Info: images/uni-augsburg.jpeg used on input line 57.
(pdftex.def) Requested size: 170.71393pt x 87.56407pt.
[1
{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map} <./images/uni-augsburg.jpeg
>] [1] (./main.toc
LaTeX Font Info: External font `cmex10' loaded for size
(Font) <12> on input line 2.
LaTeX Font Info: External font `cmex10' loaded for size
(Font) <8> on input line 2.
LaTeX Font Info: External font `cmex10' loaded for size
(Font) <6> on input line 2.
[2])
\tf@toc=\write4
\openout4 = `main.toc'.
[3] (./chapters/introduction.tex [1]) [2]
(./chapters/chapter01.tex) [3] (./chapters/chapter03.tex) [4]
(./chapters/chapter04.tex [5]) [6] (./chapters/chapter05.tex
(../lib/turf-simplify/index.js
LaTeX Font Info: Font shape `OT1/cmtt/bx/n' in size <10> not available
(Font) Font shape `OT1/cmtt/m/n' tried instead on input line 116.
) (../lib/simplify-js-alternative/simplify.diff)
[7] [8] (../lib/simplify-wasm/index.js)
LaTeX Font Info: External font `cmex10' loaded for size
(Font) <7> on input line 49.
LaTeX Font Info: External font `cmex10' loaded for size
(Font) <5> on input line 49.
(../lib/simplify-wasm/index.js)
[9]
Underfull \hbox (badness 10000) in paragraph at lines 61--61
[][]$\OT1/cmtt/m/n/10 https : / / emscripten . org / docs / api _ reference / p
reamble . js . html #
[]
(../lib/wasm-util/coordinates.js)) [10] (./chapters/chapter06.tex)
(./chapters/results.tex) [11] (./chapters/conclusion.tex) [12] (./main.lol)
\tf@lol=\write5
\openout5 = `main.lol'.
[13] (./main.aux) )
Here is how much of TeX's memory you used:
14939 strings out of 492615
289125 string characters out of 6131390
421122 words of memory out of 5000000
18513 multiletter control sequences out of 15000+600000
8583 words of font info for 31 fonts, out of 8000000 for 9000
1141 hyphenation exceptions out of 8191
62i,12n,81p,1556b,1286s stack positions out of 5000i,500n,10000p,200000b,80000s
</usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/c
m/cmbx12.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr1
0.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr12.pfb><
/usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr7.pfb></usr/sha
re/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr8.pfb></usr/share/texli
ve/texmf-dist/fonts/type1/public/amsfonts/cm/cmsl12.pfb></usr/share/texlive/tex
mf-dist/fonts/type1/public/amsfonts/cm/cmtt10.pfb></usr/share/texlive/texmf-dis
t/fonts/type1/public/amsfonts/cm/cmtt12.pfb>
Output written on main.pdf (17 pages, 170327 bytes).
PDF statistics:
119 PDF objects out of 1000 (max. 8388607)
74 compressed objects within 1 object stream
0 named destinations out of 1000 (max. 500000)
114 words of extra memory for PDF output out of 10000 (max. 10000000)

View File

@ -1,4 +0,0 @@
\contentsline {lstlisting}{\numberline {1}Turf.js usage of simplify.js}{8}%
\contentsline {lstlisting}{\numberline {2}Snippet of the difference between the original Simplify.js and alternative}{8}%
\contentsline {lstlisting}{\numberline {3}My Caption}{9}%
\contentsline {lstlisting}{\numberline {4}The storeCoords function}{10}%

Binary file not shown.

Binary file not shown.

View File

@ -1,48 +0,0 @@
\contentsline {section}{\numberline {1}Introduction}{1}%
\contentsline {subsection}{\numberline {1.1}Binary instruction sets on the web platform}{1}%
\contentsline {subsection}{\numberline {1.2}Performance as important factor for web applications}{1}%
\contentsline {subsection}{\numberline {1.3}Topology simplification for rendering performance}{2}%
\contentsline {subsection}{\numberline {1.4}Structure of this thesis}{2}%
\contentsline {section}{\numberline {2}Principles}{3}%
\contentsline {subsection}{\numberline {2.1}Polygon basics}{3}%
\contentsline {subsubsection}{\numberline {2.1.1}Topological aspects}{3}%
\contentsline {subsection}{\numberline {2.2}LineString simplification}{3}%
\contentsline {subsubsection}{\numberline {2.2.1}Positional errors}{3}%
\contentsline {subsubsection}{\numberline {2.2.2}Length errors}{3}%
\contentsline {subsubsection}{\numberline {2.2.3}Area Errors}{3}%
\contentsline {section}{\numberline {3}Algorithms}{4}%
\contentsline {subsection}{\numberline {3.1}n-th point algorithm}{4}%
\contentsline {subsection}{\numberline {3.2}Random-point routine}{4}%
\contentsline {subsection}{\numberline {3.3}Radial distance algorithm}{4}%
\contentsline {subsection}{\numberline {3.4}Perpendicular distance algorithm}{4}%
\contentsline {subsection}{\numberline {3.5}Reumann-Witkam simplification}{4}%
\contentsline {subsection}{\numberline {3.6}Opheim simplification}{4}%
\contentsline {subsection}{\numberline {3.7}Lang simplification}{4}%
\contentsline {subsection}{\numberline {3.8}Douglas-Peucker simplification}{4}%
\contentsline {subsubsection}{\numberline {3.8.1}with reduction parameter}{4}%
\contentsline {subsection}{\numberline {3.9}Jenks simplification}{4}%
\contentsline {subsection}{\numberline {3.10}Visvalingam-Whyatt simplification}{4}%
\contentsline {subsection}{\numberline {3.11}Zhao-Saalfeld simplification}{4}%
\contentsline {subsection}{\numberline {3.12}Summary}{4}%
\contentsline {section}{\numberline {4}WebAssembly}{5}%
\contentsline {subsection}{\numberline {4.1}Introduction to Webassembly}{5}%
\contentsline {subsubsection}{\numberline {4.1.1}Existing compilers}{5}%
\contentsline {subsubsection}{\numberline {4.1.2}Technical hurdles}{5}%
\contentsline {subsubsection}{\numberline {4.1.3}Benefits of WebAssembly}{5}%
\contentsline {subsection}{\numberline {4.2}Two test cases - performance and integration}{6}%
\contentsline {paragraph}{Performance}{6}%
\contentsline {paragraph}{Integration}{6}%
\contentsline {section}{\numberline {5}Benchmark}{7}%
\contentsline {subsection}{\numberline {5.1}State of the art: simplifyJS}{7}%
\contentsline {subsection}{\numberline {5.2}The webassembly solution}{8}%
\contentsline {subsection}{\numberline {5.3}The implementation}{10}%
\contentsline {section}{\numberline {6}Compiling an existing C++ library for use on the web}{11}%
\contentsline {subsection}{\numberline {6.1}State of the art: psimpl}{11}%
\contentsline {subsection}{\numberline {6.2}Compiling to webassembly}{11}%
\contentsline {subsubsection}{\numberline {6.2.1}Introduction to emscripten}{11}%
\contentsline {subsection}{\numberline {6.3}Preserving topology GeoJSON vs TopoJSON}{11}%
\contentsline {subsection}{\numberline {6.4}The implementation}{11}%
\contentsline {section}{\numberline {7}Results}{11}%
\contentsline {subsection}{\numberline {7.1}Benchmark results}{11}%
\contentsline {subsection}{\numberline {7.2}Comparing the results of different algorithms}{11}%
\contentsline {section}{\numberline {8}Conclusion}{12}%