]> git.cworth.org Git - apitrace/blob - common/trace_loader.hpp
Use skiplist-based FastCallSet within trace::CallSet
[apitrace] / common / trace_loader.hpp
1 #ifndef TRACE_LOADER_HPP
2 #define TRACE_LOADER_HPP
3
4 #include "trace_file.hpp"
5 #include "trace_parser.hpp"
6
7 #include <string>
8 #include <map>
9 #include <queue>
10 #include <vector>
11
12 namespace trace  {
13
14 class Frame;
15
16 class Loader
17 {
18 public:
19     enum FrameMarker {
20         FrameMarker_SwapBuffers,
21         FrameMarker_Flush,
22         FrameMarker_Finish,
23         FrameMarker_Clear
24     };
25 public:
26     Loader();
27     ~Loader();
28
29     Loader::FrameMarker frameMarker() const;
30     void setFrameMarker(Loader::FrameMarker marker);
31
32     unsigned numberOfFrames() const;
33     unsigned numberOfCallsInFrame(unsigned frameIdx) const;
34
35     bool open(const char *filename);
36     void close();
37
38     std::vector<trace::Call*> frame(unsigned idx);
39
40 private:
41     struct FrameBookmark {
42         FrameBookmark()
43             : numberOfCalls(0)
44         {}
45         FrameBookmark(const ParseBookmark &s)
46             : start(s),
47               numberOfCalls(0)
48         {}
49
50         ParseBookmark start;
51         unsigned numberOfCalls;
52     };
53     bool isCallAFrameMarker(const trace::Call *call) const;
54
55 private:
56     trace::Parser m_parser;
57     FrameMarker m_frameMarker;
58
59     typedef std::map<int, FrameBookmark> FrameBookmarks;
60     FrameBookmarks m_frameBookmarks;
61 };
62
63 }
64
65 #endif // TRACE_LOADER_HPP