Imported Upstream version 1.12.0
[platform/core/ml/nnfw.git] / compiler / luci / pass / src / ProgressReporter.h
1 /*
2  * Copyright (c) 2020 Samsung Electronics Co., Ltd. All Rights Reserved
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *    http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #ifndef __LUCI_PROGRESSREPORTER_H__
18 #define __LUCI_PROGRESSREPORTER_H__
19
20 #include <logo/Phase.h>
21
22 #include <loco.h>
23
24 #include <luci/IR/Module.h>
25
26 namespace luci
27 {
28
29 class ProgressReporter : public logo::PhaseEventListener
30 {
31 public:
32   ProgressReporter(loco::Graph *graph, logo::PhaseStrategy strategy)
33       : _graph{graph}, _strategy{strategy}
34   {
35     // DO NOTHING
36   }
37
38 public:
39   void notify(const logo::PhaseEventInfo<logo::PhaseEvent::PhaseBegin> *) override;
40   void notify(const logo::PhaseEventInfo<logo::PhaseEvent::PhaseEnd> *) override;
41   void notify(const logo::PhaseEventInfo<logo::PhaseEvent::PassBegin> *) override;
42   void notify(const logo::PhaseEventInfo<logo::PhaseEvent::PassEnd> *) override;
43
44 public:
45   loco::Graph *graph(void) const { return _graph; }
46   logo::PhaseStrategy strategy(void) const { return _strategy; }
47
48 private:
49   loco::Graph *_graph;
50   logo::PhaseStrategy _strategy;
51 };
52
53 class ModuleProgressReporter : public logo::PhaseEventListener
54 {
55 public:
56   ModuleProgressReporter(luci::Module *module, logo::PhaseStrategy strategy)
57       : _module{module}, _strategy{strategy}
58   {
59     // DO NOTHING
60   }
61
62 public:
63   void notify(const logo::PhaseEventInfo<logo::PhaseEvent::PhaseBegin> *) override;
64   void notify(const logo::PhaseEventInfo<logo::PhaseEvent::PhaseEnd> *) override;
65   void notify(const logo::PhaseEventInfo<logo::PhaseEvent::PassBegin> *) override;
66   void notify(const logo::PhaseEventInfo<logo::PhaseEvent::PassEnd> *) override;
67
68 public:
69   luci::Module *module(void) const { return _module; }
70   logo::PhaseStrategy strategy(void) const { return _strategy; }
71
72 private:
73   luci::Module *_module;
74   logo::PhaseStrategy _strategy;
75 };
76
77 } // namespace luci
78
79 #endif // __LUCI_PROGRESSREPORTER_H__