1 /*
2  * Copyright (C) 2014 The Android Open Source Project
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 ART_COMPILER_OPTIMIZING_GRAPH_VISUALIZER_H_
18 #define ART_COMPILER_OPTIMIZING_GRAPH_VISUALIZER_H_
19 
20 #include "utils/allocation.h"
21 
22 namespace art {
23 
24 class CodeGenerator;
25 class DexCompilationUnit;
26 class HGraph;
27 
28 static const char* kLivenessPassName = "liveness";
29 static const char* kRegisterAllocatorPassName = "register";
30 
31 /**
32  * If enabled, emits compilation information suitable for the c1visualizer tool
33  * and IRHydra.
34  * Currently only works if the compiler is single threaded.
35  */
36 class HGraphVisualizer : public ValueObject {
37  public:
38   /**
39    * If output is not null, and the method name of the dex compilation
40    * unit contains `string_filter`, the compilation information will be
41    * emitted.
42    */
43   HGraphVisualizer(std::ostream* output,
44                    HGraph* graph,
45                    const char* string_filter,
46                    const CodeGenerator& codegen,
47                    const DexCompilationUnit& cu);
48 
49   /**
50    * Version of `HGraphVisualizer` for unit testing, that is when a
51    * `DexCompilationUnit` is not available.
52    */
53   HGraphVisualizer(std::ostream* output,
54                    HGraph* graph,
55                    const CodeGenerator& codegen,
56                    const char* name);
57 
58   /**
59    * If this visualizer is enabled, emit the compilation information
60    * in `output_`.
61    */
62   void DumpGraph(const char* pass_name);
63 
64  private:
65   std::ostream* const output_;
66   HGraph* const graph_;
67   const CodeGenerator& codegen_;
68 
69   // Is true when `output_` is not null, and the compiled method's name
70   // contains the string_filter given in the constructor.
71   bool is_enabled_;
72 
73   DISALLOW_COPY_AND_ASSIGN(HGraphVisualizer);
74 };
75 
76 }  // namespace art
77 
78 #endif  // ART_COMPILER_OPTIMIZING_GRAPH_VISUALIZER_H_
79