|
7 | 7 | module Development.IDE.Graph.Internal.Profile (writeProfile) where
|
8 | 8 |
|
9 | 9 | import Data.Bifunctor
|
10 |
| -import qualified Data.ByteString.Lazy.Char8 as LBS |
| 10 | +import qualified Data.ByteString.Lazy.Char8 as LBS |
11 | 11 | import Data.Char
|
12 |
| -import Data.Dynamic (toDyn) |
13 |
| -import qualified Data.HashMap.Strict as Map |
| 12 | +import Data.Dynamic (toDyn) |
| 13 | +import qualified Data.HashMap.Strict as Map |
14 | 14 | import Data.IORef
|
15 |
| -import Data.IntMap (IntMap) |
16 |
| -import qualified Data.IntMap as IntMap |
17 |
| -import qualified Data.IntSet as Set |
18 |
| -import Data.List (dropWhileEnd, foldl', |
19 |
| - intercalate, partition, |
20 |
| - sort, sortBy) |
21 |
| -import Data.List.Extra (nubOrd) |
| 15 | +import Data.IntMap (IntMap) |
| 16 | +import qualified Data.IntMap as IntMap |
| 17 | +import qualified Data.IntSet as Set |
| 18 | +import Data.List (dropWhileEnd, foldl', |
| 19 | + intercalate, |
| 20 | + partition, sort, |
| 21 | + sortBy) |
| 22 | +import Data.List.Extra (nubOrd) |
22 | 23 | import Data.Maybe
|
23 |
| -import Data.Time (defaultTimeLocale, |
24 |
| - formatTime, |
25 |
| - getCurrentTime, |
26 |
| - iso8601DateFormat) |
| 24 | +import Data.Time (defaultTimeLocale, |
| 25 | + formatTime, |
| 26 | + getCurrentTime, |
| 27 | + iso8601DateFormat) |
27 | 28 | import Development.IDE.Graph.Classes
|
28 |
| -import qualified Development.IDE.Graph.Internal.Ids as Ids |
| 29 | +import Development.IDE.Graph.Internal.Database (getDirtySet) |
| 30 | +import qualified Development.IDE.Graph.Internal.Ids as Ids |
29 | 31 | import Development.IDE.Graph.Internal.Paths
|
30 | 32 | import Development.IDE.Graph.Internal.Types
|
31 |
| -import qualified Language.Javascript.DGTable as DGTable |
32 |
| -import qualified Language.Javascript.Flot as Flot |
33 |
| -import qualified Language.Javascript.JQuery as JQuery |
34 |
| -import Numeric.Extra (showDP) |
| 33 | +import qualified Language.Javascript.DGTable as DGTable |
| 34 | +import qualified Language.Javascript.Flot as Flot |
| 35 | +import qualified Language.Javascript.JQuery as JQuery |
| 36 | +import Numeric.Extra (showDP) |
35 | 37 | import System.FilePath
|
36 |
| -import System.IO.Unsafe (unsafePerformIO) |
37 |
| -import System.Time.Extra (Seconds) |
| 38 | +import System.IO.Unsafe (unsafePerformIO) |
| 39 | +import System.Time.Extra (Seconds) |
38 | 40 |
|
39 | 41 | #ifdef FILE_EMBED
|
40 | 42 | import Data.FileEmbed
|
41 |
| -import Language.Haskell.TH.Syntax (runIO) |
| 43 | +import Language.Haskell.TH.Syntax (runIO) |
42 | 44 | #endif
|
43 | 45 |
|
44 | 46 | -- | Generates an report given some build system profiling data.
|
45 | 47 | writeProfile :: FilePath -> Database -> IO ()
|
46 | 48 | writeProfile out db = do
|
47 |
| - dirtyKeys <- readIORef (databaseDirtySet db) |
48 | 49 | (report, mapping) <- toReport db
|
49 |
| - let dirtyKeysMapped = mapMaybe (`IntMap.lookup` mapping) . Set.toList <$> dirtyKeys |
50 |
| - rpt <- generateHTML (sort <$> dirtyKeysMapped) report |
| 50 | + dirtyKeysMapped <- do |
| 51 | + dirtyIds <- Set.fromList . fmap fst <$> getDirtySet db |
| 52 | + let dirtyKeysMapped = mapMaybe (`IntMap.lookup` mapping) . Set.toList $ dirtyIds |
| 53 | + return $ Just $ sort dirtyKeysMapped |
| 54 | + rpt <- generateHTML dirtyKeysMapped report |
51 | 55 | LBS.writeFile out rpt
|
52 | 56 |
|
53 | 57 | data ProfileEntry = ProfileEntry
|
|
0 commit comments