| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <errno.h> | 5 #include <errno.h> |
| 6 #include <stdlib.h> | 6 #include <stdlib.h> |
| 7 #include <string.h> | 7 #include <string.h> |
| 8 #include <sys/stat.h> | 8 #include <sys/stat.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 197 | 197 |
| 198 // String options that can be used to initialize TraceOptions. | 198 // String options that can be used to initialize TraceOptions. |
| 199 const char kRecordUntilFull[] = "record-until-full"; | 199 const char kRecordUntilFull[] = "record-until-full"; |
| 200 const char kRecordContinuously[] = "record-continuously"; | 200 const char kRecordContinuously[] = "record-continuously"; |
| 201 const char kRecordAsMuchAsPossible[] = "record-as-much-as-possible"; | 201 const char kRecordAsMuchAsPossible[] = "record-as-much-as-possible"; |
| 202 | 202 |
| 203 const char kRecordModeParam[] = "record_mode"; | 203 const char kRecordModeParam[] = "record_mode"; |
| 204 const char kEnableSystraceParam[] = "enable_systrace"; | 204 const char kEnableSystraceParam[] = "enable_systrace"; |
| 205 const char kEnableArgumentFilterParam[] = "enable_argument_filter"; | 205 const char kEnableArgumentFilterParam[] = "enable_argument_filter"; |
| 206 const char kIncludedCategoriesParam[] = "included_categories"; | 206 const char kIncludedCategoriesParam[] = "included_categories"; |
| 207 const char kExcludedCategoriesParam[] = "excluded_categories"; | |
| 208 | 207 |
| 209 class TraceConfigParser { | 208 class TraceConfigParser { |
| 210 public: | 209 public: |
| 211 static void FillTraceConfig(v8::Isolate* isolate, | 210 static void FillTraceConfig(v8::Isolate* isolate, |
| 212 platform::tracing::TraceConfig* trace_config, | 211 platform::tracing::TraceConfig* trace_config, |
| 213 const char* json_str) { | 212 const char* json_str) { |
| 214 HandleScope outer_scope(isolate); | 213 HandleScope outer_scope(isolate); |
| 215 Local<Context> context = Context::New(isolate); | 214 Local<Context> context = Context::New(isolate); |
| 216 Context::Scope context_scope(context); | 215 Context::Scope context_scope(context); |
| 217 HandleScope inner_scope(isolate); | 216 HandleScope inner_scope(isolate); |
| 218 | 217 |
| 219 Local<String> source = | 218 Local<String> source = |
| 220 String::NewFromUtf8(isolate, json_str, NewStringType::kNormal) | 219 String::NewFromUtf8(isolate, json_str, NewStringType::kNormal) |
| 221 .ToLocalChecked(); | 220 .ToLocalChecked(); |
| 222 Local<Value> result = JSON::Parse(context, source).ToLocalChecked(); | 221 Local<Value> result = JSON::Parse(context, source).ToLocalChecked(); |
| 223 Local<v8::Object> trace_config_object = Local<v8::Object>::Cast(result); | 222 Local<v8::Object> trace_config_object = Local<v8::Object>::Cast(result); |
| 224 | 223 |
| 225 trace_config->SetTraceRecordMode( | 224 trace_config->SetTraceRecordMode( |
| 226 GetTraceRecordMode(isolate, context, trace_config_object)); | 225 GetTraceRecordMode(isolate, context, trace_config_object)); |
| 227 if (GetBoolean(isolate, context, trace_config_object, | 226 if (GetBoolean(isolate, context, trace_config_object, |
| 228 kEnableSystraceParam)) { | 227 kEnableSystraceParam)) { |
| 229 trace_config->EnableSystrace(); | 228 trace_config->EnableSystrace(); |
| 230 } | 229 } |
| 231 if (GetBoolean(isolate, context, trace_config_object, | 230 if (GetBoolean(isolate, context, trace_config_object, |
| 232 kEnableArgumentFilterParam)) { | 231 kEnableArgumentFilterParam)) { |
| 233 trace_config->EnableArgumentFilter(); | 232 trace_config->EnableArgumentFilter(); |
| 234 } | 233 } |
| 235 UpdateCategoriesList(isolate, context, trace_config_object, | 234 UpdateIncludedCategoriesList(isolate, context, trace_config_object, |
| 236 kIncludedCategoriesParam, trace_config); | 235 trace_config); |
| 237 UpdateCategoriesList(isolate, context, trace_config_object, | |
| 238 kExcludedCategoriesParam, trace_config); | |
| 239 } | 236 } |
| 240 | 237 |
| 241 private: | 238 private: |
| 242 static bool GetBoolean(v8::Isolate* isolate, Local<Context> context, | 239 static bool GetBoolean(v8::Isolate* isolate, Local<Context> context, |
| 243 Local<v8::Object> object, const char* property) { | 240 Local<v8::Object> object, const char* property) { |
| 244 Local<Value> value = GetValue(isolate, context, object, property); | 241 Local<Value> value = GetValue(isolate, context, object, property); |
| 245 if (value->IsNumber()) { | 242 if (value->IsNumber()) { |
| 246 Local<Boolean> v8_boolean = value->ToBoolean(context).ToLocalChecked(); | 243 Local<Boolean> v8_boolean = value->ToBoolean(context).ToLocalChecked(); |
| 247 return v8_boolean->Value(); | 244 return v8_boolean->Value(); |
| 248 } | 245 } |
| 249 return false; | 246 return false; |
| 250 } | 247 } |
| 251 | 248 |
| 252 static int UpdateCategoriesList( | 249 static int UpdateIncludedCategoriesList( |
| 253 v8::Isolate* isolate, Local<Context> context, Local<v8::Object> object, | 250 v8::Isolate* isolate, Local<Context> context, Local<v8::Object> object, |
| 254 const char* property, platform::tracing::TraceConfig* trace_config) { | 251 platform::tracing::TraceConfig* trace_config) { |
| 255 Local<Value> value = GetValue(isolate, context, object, property); | 252 Local<Value> value = |
| 253 GetValue(isolate, context, object, kIncludedCategoriesParam); |
| 256 if (value->IsArray()) { | 254 if (value->IsArray()) { |
| 257 Local<Array> v8_array = Local<Array>::Cast(value); | 255 Local<Array> v8_array = Local<Array>::Cast(value); |
| 258 for (int i = 0, length = v8_array->Length(); i < length; ++i) { | 256 for (int i = 0, length = v8_array->Length(); i < length; ++i) { |
| 259 Local<Value> v = v8_array->Get(context, i) | 257 Local<Value> v = v8_array->Get(context, i) |
| 260 .ToLocalChecked() | 258 .ToLocalChecked() |
| 261 ->ToString(context) | 259 ->ToString(context) |
| 262 .ToLocalChecked(); | 260 .ToLocalChecked(); |
| 263 String::Utf8Value str(v->ToString(context).ToLocalChecked()); | 261 String::Utf8Value str(v->ToString(context).ToLocalChecked()); |
| 264 if (kIncludedCategoriesParam == property) { | 262 trace_config->AddIncludedCategory(*str); |
| 265 trace_config->AddIncludedCategory(*str); | |
| 266 } else { | |
| 267 trace_config->AddExcludedCategory(*str); | |
| 268 } | |
| 269 } | 263 } |
| 270 return v8_array->Length(); | 264 return v8_array->Length(); |
| 271 } | 265 } |
| 272 return 0; | 266 return 0; |
| 273 } | 267 } |
| 274 | 268 |
| 275 static platform::tracing::TraceRecordMode GetTraceRecordMode( | 269 static platform::tracing::TraceRecordMode GetTraceRecordMode( |
| 276 v8::Isolate* isolate, Local<Context> context, Local<v8::Object> object) { | 270 v8::Isolate* isolate, Local<Context> context, Local<v8::Object> object) { |
| 277 Local<Value> value = GetValue(isolate, context, object, kRecordModeParam); | 271 Local<Value> value = GetValue(isolate, context, object, kRecordModeParam); |
| 278 if (value->IsString()) { | 272 if (value->IsString()) { |
| (...skipping 2689 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2968 } | 2962 } |
| 2969 | 2963 |
| 2970 } // namespace v8 | 2964 } // namespace v8 |
| 2971 | 2965 |
| 2972 | 2966 |
| 2973 #ifndef GOOGLE3 | 2967 #ifndef GOOGLE3 |
| 2974 int main(int argc, char* argv[]) { | 2968 int main(int argc, char* argv[]) { |
| 2975 return v8::Shell::Main(argc, argv); | 2969 return v8::Shell::Main(argc, argv); |
| 2976 } | 2970 } |
| 2977 #endif | 2971 #endif |
| OLD | NEW |