summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2016-11-18 14:03:08 +0100
committerJohn MacFarlane <jgm@berkeley.edu>2016-11-18 14:03:33 +0100
commitaabf10b8bdcfc1620aa2b0f7a57a3b562f5b8039 (patch)
tree0cdcdef468c0b4b68378fbdd4dd34fa6f3f13d3b
parent31076adf090b8b87f5bab90c8b91f872f81aa2bd (diff)
Added weigh-pandoc for memory usage diagnostics.
See #3169.
-rw-r--r--benchmark/weigh-pandoc.hs37
-rw-r--r--pandoc.cabal20
2 files changed, 57 insertions, 0 deletions
diff --git a/benchmark/weigh-pandoc.hs b/benchmark/weigh-pandoc.hs
new file mode 100644
index 000000000..198d09b46
--- /dev/null
+++ b/benchmark/weigh-pandoc.hs
@@ -0,0 +1,37 @@
+import Weigh
+import Text.Pandoc
+
+main :: IO ()
+main = do
+ doc <- read <$> readFile "tests/testsuite.native"
+ mainWith $ do
+ func "Pandoc document" id doc
+ mapM_
+ (\(n,r) -> weighReader doc n (handleError . r def{ readerSmart = True }))
+ [("markdown", readMarkdown)
+ ,("html", readHtml)
+ ,("docbook", readDocBook)
+ ,("latex", readLaTeX)
+ ,("commonmark", readCommonMark)
+ ]
+ mapM_
+ (\(n,w) -> weighWriter doc n (w def))
+ [("markdown", writeMarkdown)
+ ,("html", writeHtmlString)
+ ,("docbook", writeDocbook)
+ ,("latex", writeLaTeX)
+ ,("commonmark", writeCommonMark)
+ ]
+
+weighWriter :: Pandoc -> String -> (Pandoc -> String) -> Weigh ()
+weighWriter doc name writer = func (name ++ " writer") writer doc
+
+weighReader :: Pandoc -> String -> (String -> Pandoc) -> Weigh ()
+weighReader doc name reader = do
+ case lookup name writers of
+ Just (PureStringWriter writer) ->
+ let inp = writer def{ writerWrapText = WrapAuto} doc
+ in func (name ++ " reader") reader inp
+ _ -> return () -- no writer for reader
+
+
diff --git a/pandoc.cabal b/pandoc.cabal
index 368ce5c1d..05e9c4157 100644
--- a/pandoc.cabal
+++ b/pandoc.cabal
@@ -236,6 +236,10 @@ Flag trypandoc
Description: Build trypandoc cgi executable.
Default: False
+Flag weigh-pandoc
+ Description: Build weigh-pandoc to measure memory usage.
+ Default: False
+
Flag https
Description: Enable support for downloading of resources over https.
Default: True
@@ -472,6 +476,22 @@ Executable trypandoc
else
Buildable: False
+Executable weigh-pandoc
+ Main-Is: weigh-pandoc.hs
+ Hs-Source-Dirs: benchmark
+ if impl(ghc < 7.10)
+ Hs-Source-Dirs: prelude
+ Other-Modules: Prelude
+ if flag(weigh-pandoc)
+ Build-Depends: pandoc,
+ base >= 4.2 && < 5,
+ weigh >= 0.0 && < 0.1
+ Buildable: True
+ else
+ Buildable: False
+ Ghc-Options: -rtsopts -Wall -fno-warn-unused-do-bind
+ Default-Language: Haskell98
+
Test-Suite test-pandoc
Type: exitcode-stdio-1.0
Main-Is: test-pandoc.hs