Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(392)

Side by Side Diff: bin/main.cc

Issue 10446116: Add flow graph printing into a .cfg file with flag --print-flow-graph-file. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/runtime/
Patch Set: Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | include/dart_api.h » ('j') | vm/dart.h » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include <stdlib.h> 5 #include <stdlib.h>
6 #include <string.h> 6 #include <string.h>
7 #include <stdio.h> 7 #include <stdio.h>
8 8
9 #include "include/dart_api.h" 9 #include "include/dart_api.h"
10 #include "include/dart_debugger_api.h" 10 #include "include/dart_debugger_api.h"
(...skipping 21 matching lines...) Expand all
32 // Global state that stores the import URL map specified on the 32 // Global state that stores the import URL map specified on the
33 // command line. 33 // command line.
34 static CommandLineOptions* import_map_options = NULL; 34 static CommandLineOptions* import_map_options = NULL;
35 35
36 36
37 // Global state that indicates whether pprof symbol information is 37 // Global state that indicates whether pprof symbol information is
38 // to be generated or not. 38 // to be generated or not.
39 static const char* generate_pprof_symbols_filename = NULL; 39 static const char* generate_pprof_symbols_filename = NULL;
40 40
41 41
42 // Global state that stores a file name for flow graph debugging output.
43 // NULL if no output is generated.
44 static File* flow_graph_file = NULL;
45
42 // Global state that indicates whether there is a debug breakpoint. 46 // Global state that indicates whether there is a debug breakpoint.
43 // This pointer points into an argv buffer and does not need to be 47 // This pointer points into an argv buffer and does not need to be
44 // free'd. 48 // free'd.
45 static const char* breakpoint_at = NULL; 49 static const char* breakpoint_at = NULL;
46 50
47 51
48 // Global state that indicates whether we should open a connection 52 // Global state that indicates whether we should open a connection
49 // and listen for a debugger to connect. 53 // and listen for a debugger to connect.
50 static bool start_debugger = false; 54 static bool start_debugger = false;
51 static const int DEFAULT_DEBUG_PORT = 5858; 55 static const int DEFAULT_DEBUG_PORT = 5858;
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 start_debugger = true; 126 start_debugger = true;
123 } 127 }
124 128
125 129
126 static void ProcessPprofOption(const char* filename) { 130 static void ProcessPprofOption(const char* filename) {
127 ASSERT(filename != NULL); 131 ASSERT(filename != NULL);
128 generate_pprof_symbols_filename = filename; 132 generate_pprof_symbols_filename = filename;
129 } 133 }
130 134
131 135
136 static void ProcessFlowGraphOption(const char* flowgraph_option) {
137 ASSERT(flowgraph_option != NULL);
138 flow_graph_file = File::Open("flowgraph.cfg", File::kWriteTruncate);
139 ASSERT(flow_graph_file != NULL);
siva 2012/06/04 18:23:57 Where is flow_graph_file closed?
Florian Schneider 2012/06/06 11:06:10 At process exit. I could close it explicitly righ
siva 2012/06/06 17:02:47 I disagree, correctness not conciseness is the yar
Florian Schneider 2012/06/07 09:32:26 I view this as an experimental flag. How about ab
140 }
141
142
132 static void ProcessImportMapOption(const char* map) { 143 static void ProcessImportMapOption(const char* map) {
133 ASSERT(map != NULL); 144 ASSERT(map != NULL);
134 import_map_options->AddArgument(map); 145 import_map_options->AddArgument(map);
135 } 146 }
136 147
137 148
138 static struct { 149 static struct {
139 const char* option_name; 150 const char* option_name;
140 void (*process)(const char* option); 151 void (*process)(const char* option);
141 } main_options[] = { 152 } main_options[] = {
142 { "--break_at=", ProcessBreakpointOption }, 153 { "--break_at=", ProcessBreakpointOption },
143 { "--compile_all", ProcessCompileAllOption }, 154 { "--compile_all", ProcessCompileAllOption },
144 { "--debug", ProcessDebugOption }, 155 { "--debug", ProcessDebugOption },
145 { "--generate_pprof_symbols=", ProcessPprofOption }, 156 { "--generate_pprof_symbols=", ProcessPprofOption },
146 { "--import_map=", ProcessImportMapOption }, 157 { "--import_map=", ProcessImportMapOption },
147 { "--package-root=", ProcessPackageRootOption }, 158 { "--package-root=", ProcessPackageRootOption },
159 { "--generate_flow_graph", ProcessFlowGraphOption },
148 { NULL, NULL } 160 { NULL, NULL }
149 }; 161 };
150 162
151 163
152 static bool ProcessMainOptions(const char* option) { 164 static bool ProcessMainOptions(const char* option) {
153 int i = 0; 165 int i = 0;
154 const char* name = main_options[0].option_name; 166 const char* name = main_options[0].option_name;
155 while (name != NULL) { 167 while (name != NULL) {
156 int length = strlen(name); 168 int length = strlen(name);
157 if (strncmp(option, name, length) == 0) { 169 if (strncmp(option, name, length) == 0) {
158 main_options[i].process(option + length); 170 main_options[i].process(option + length);
159 return true; 171 return true;
160 } 172 }
161 i += 1; 173 i += 1;
162 name = main_options[i].option_name; 174 name = main_options[i].option_name;
163 } 175 }
164 return false; 176 return false;
165 } 177 }
166 178
167 179
180 static void WriteToFlowGraphFile(const char* buffer, int64_t num_bytes) {
181 ASSERT(flow_graph_file != NULL);
182 flow_graph_file->WriteFully(buffer, num_bytes);
183 }
184
185
168 // Parse out the command line arguments. Returns -1 if the arguments 186 // Parse out the command line arguments. Returns -1 if the arguments
169 // are incorrect, 0 otherwise. 187 // are incorrect, 0 otherwise.
170 static int ParseArguments(int argc, 188 static int ParseArguments(int argc,
171 char** argv, 189 char** argv,
172 CommandLineOptions* vm_options, 190 CommandLineOptions* vm_options,
173 char** executable_name, 191 char** executable_name,
174 char** script_name, 192 char** script_name,
175 CommandLineOptions* dart_options) { 193 CommandLineOptions* dart_options) {
176 const char* kPrefix = "--"; 194 const char* kPrefix = "--";
177 const intptr_t kPrefixLen = strlen(kPrefix); 195 const intptr_t kPrefixLen = strlen(kPrefix);
(...skipping 10 matching lines...) Expand all
188 i++; 206 i++;
189 } else { 207 } else {
190 vm_options->AddArgument(argv[i]); 208 vm_options->AddArgument(argv[i]);
191 i++; 209 i++;
192 } 210 }
193 } 211 }
194 if (generate_pprof_symbols_filename != NULL) { 212 if (generate_pprof_symbols_filename != NULL) {
195 Dart_InitPprofSupport(); 213 Dart_InitPprofSupport();
196 } 214 }
197 215
216 if (flow_graph_file != NULL) {
217 Dart_InitFlowGraphPrinting(&WriteToFlowGraphFile);
218 }
219
198 // Get the script name. 220 // Get the script name.
199 if (i < argc) { 221 if (i < argc) {
200 *script_name = argv[i]; 222 *script_name = argv[i];
201 i++; 223 i++;
202 } else { 224 } else {
203 return -1; 225 return -1;
204 } 226 }
205 227
206 // Parse out options to be passed to dart main. 228 // Parse out options to be passed to dart main.
207 while (i < argc) { 229 while (i < argc) {
(...skipping 550 matching lines...) Expand 10 before | Expand all | Expand 10 after
758 DumpPprofSymbolInfo(); 780 DumpPprofSymbolInfo();
759 // Shutdown the isolate. 781 // Shutdown the isolate.
760 Dart_ShutdownIsolate(); 782 Dart_ShutdownIsolate();
761 // Terminate process exit-code handler. 783 // Terminate process exit-code handler.
762 Process::TerminateExitCodeHandler(); 784 Process::TerminateExitCodeHandler();
763 785
764 free(const_cast<char*>(original_working_directory)); 786 free(const_cast<char*>(original_working_directory));
765 787
766 return 0; 788 return 0;
767 } 789 }
OLDNEW
« no previous file with comments | « no previous file | include/dart_api.h » ('j') | vm/dart.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698