OLD | NEW |
1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 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 #if !defined(_WIN32) && !defined(_WIN64) | 5 #if !defined(_WIN32) && !defined(_WIN64) |
6 #include <unistd.h> // NOLINT | 6 #include <unistd.h> // NOLINT |
7 #endif // !defined(_WIN32) && !defined(_WIN64) | 7 #endif // !defined(_WIN32) && !defined(_WIN64) |
8 | 8 |
9 #include <locale.h> | 9 #include <locale.h> |
10 | 10 |
11 #include "include/libplatform/libplatform.h" | 11 #include "include/libplatform/libplatform.h" |
12 #include "include/v8.h" | 12 #include "include/v8.h" |
13 | 13 |
14 #include "src/base/platform/platform.h" | 14 #include "src/base/platform/platform.h" |
15 #include "src/flags.h" | 15 #include "src/flags.h" |
| 16 #include "src/inspector/test-interface.h" |
16 #include "src/utils.h" | 17 #include "src/utils.h" |
17 #include "src/vector.h" | 18 #include "src/vector.h" |
18 | 19 |
19 #include "test/inspector/inspector-impl.h" | 20 #include "test/inspector/inspector-impl.h" |
20 #include "test/inspector/task-runner.h" | 21 #include "test/inspector/task-runner.h" |
21 | 22 |
22 namespace { | 23 namespace { |
23 | 24 |
24 std::vector<TaskRunner*> task_runners; | 25 std::vector<TaskRunner*> task_runners; |
25 | 26 |
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
250 } | 251 } |
251 TaskRunner::FromContext(context)->Append(task.release()); | 252 TaskRunner::FromContext(context)->Append(task.release()); |
252 } | 253 } |
253 }; | 254 }; |
254 | 255 |
255 class InspectorExtension : public v8::Extension { | 256 class InspectorExtension : public v8::Extension { |
256 public: | 257 public: |
257 InspectorExtension() | 258 InspectorExtension() |
258 : v8::Extension("v8_inspector/inspector", | 259 : v8::Extension("v8_inspector/inspector", |
259 "native function attachInspector();" | 260 "native function attachInspector();" |
260 "native function detachInspector();") {} | 261 "native function detachInspector();" |
| 262 "native function setMaxAsyncTaskStacks();") {} |
261 | 263 |
262 virtual v8::Local<v8::FunctionTemplate> GetNativeFunctionTemplate( | 264 virtual v8::Local<v8::FunctionTemplate> GetNativeFunctionTemplate( |
263 v8::Isolate* isolate, v8::Local<v8::String> name) { | 265 v8::Isolate* isolate, v8::Local<v8::String> name) { |
264 v8::Local<v8::Context> context = isolate->GetCurrentContext(); | 266 v8::Local<v8::Context> context = isolate->GetCurrentContext(); |
265 if (name->Equals(context, | 267 if (name->Equals(context, |
266 v8::String::NewFromUtf8(isolate, "attachInspector", | 268 v8::String::NewFromUtf8(isolate, "attachInspector", |
267 v8::NewStringType::kNormal) | 269 v8::NewStringType::kNormal) |
268 .ToLocalChecked()) | 270 .ToLocalChecked()) |
269 .FromJust()) { | 271 .FromJust()) { |
270 return v8::FunctionTemplate::New(isolate, InspectorExtension::Attach); | 272 return v8::FunctionTemplate::New(isolate, InspectorExtension::Attach); |
271 } else if (name->Equals(context, | 273 } else if (name->Equals(context, |
272 v8::String::NewFromUtf8(isolate, "detachInspector", | 274 v8::String::NewFromUtf8(isolate, "detachInspector", |
273 v8::NewStringType::kNormal) | 275 v8::NewStringType::kNormal) |
274 .ToLocalChecked()) | 276 .ToLocalChecked()) |
275 .FromJust()) { | 277 .FromJust()) { |
276 return v8::FunctionTemplate::New(isolate, InspectorExtension::Detach); | 278 return v8::FunctionTemplate::New(isolate, InspectorExtension::Detach); |
| 279 } else if (name->Equals(context, v8::String::NewFromUtf8( |
| 280 isolate, "setMaxAsyncTaskStacks", |
| 281 v8::NewStringType::kNormal) |
| 282 .ToLocalChecked()) |
| 283 .FromJust()) { |
| 284 return v8::FunctionTemplate::New( |
| 285 isolate, InspectorExtension::SetMaxAsyncTaskStacks); |
277 } | 286 } |
278 return v8::Local<v8::FunctionTemplate>(); | 287 return v8::Local<v8::FunctionTemplate>(); |
279 } | 288 } |
280 | 289 |
281 private: | 290 private: |
282 static void Attach(const v8::FunctionCallbackInfo<v8::Value>& args) { | 291 static void Attach(const v8::FunctionCallbackInfo<v8::Value>& args) { |
283 v8::Isolate* isolate = args.GetIsolate(); | 292 v8::Isolate* isolate = args.GetIsolate(); |
284 v8::Local<v8::Context> context = isolate->GetCurrentContext(); | 293 v8::Local<v8::Context> context = isolate->GetCurrentContext(); |
285 v8_inspector::V8Inspector* inspector = | 294 v8_inspector::V8Inspector* inspector = |
286 InspectorClientImpl::InspectorFromContext(context); | 295 InspectorClientImpl::InspectorFromContext(context); |
287 if (!inspector) { | 296 if (!inspector) { |
288 fprintf(stderr, "Inspector client not found - cannot attach!"); | 297 fprintf(stderr, "Inspector client not found - cannot attach!"); |
289 Exit(); | 298 Exit(); |
290 } | 299 } |
291 inspector->contextCreated( | 300 inspector->contextCreated( |
292 v8_inspector::V8ContextInfo(context, 1, v8_inspector::StringView())); | 301 v8_inspector::V8ContextInfo(context, 1, v8_inspector::StringView())); |
293 } | 302 } |
294 | 303 |
295 static void Detach(const v8::FunctionCallbackInfo<v8::Value>& args) { | 304 static void Detach(const v8::FunctionCallbackInfo<v8::Value>& args) { |
296 v8::Isolate* isolate = args.GetIsolate(); | 305 v8::Isolate* isolate = args.GetIsolate(); |
297 v8::Local<v8::Context> context = isolate->GetCurrentContext(); | 306 v8::Local<v8::Context> context = isolate->GetCurrentContext(); |
298 v8_inspector::V8Inspector* inspector = | 307 v8_inspector::V8Inspector* inspector = |
299 InspectorClientImpl::InspectorFromContext(context); | 308 InspectorClientImpl::InspectorFromContext(context); |
300 if (!inspector) { | 309 if (!inspector) { |
301 fprintf(stderr, "Inspector client not found - cannot detach!"); | 310 fprintf(stderr, "Inspector client not found - cannot detach!"); |
302 Exit(); | 311 Exit(); |
303 } | 312 } |
304 inspector->contextDestroyed(context); | 313 inspector->contextDestroyed(context); |
305 } | 314 } |
| 315 |
| 316 static void SetMaxAsyncTaskStacks( |
| 317 const v8::FunctionCallbackInfo<v8::Value>& args) { |
| 318 if (args.Length() != 1 || !args[0]->IsInt32()) { |
| 319 fprintf(stderr, "Internal error: setMaxAsyncTaskStacks(max)."); |
| 320 Exit(); |
| 321 } |
| 322 v8_inspector::V8Inspector* inspector = |
| 323 InspectorClientImpl::InspectorFromContext( |
| 324 args.GetIsolate()->GetCurrentContext()); |
| 325 CHECK(inspector); |
| 326 v8_inspector::SetMaxAsyncTaskStacksForTest( |
| 327 inspector, args[0].As<v8::Int32>()->Value()); |
| 328 } |
306 }; | 329 }; |
307 | 330 |
308 v8::Local<v8::String> ToString(v8::Isolate* isolate, | 331 v8::Local<v8::String> ToString(v8::Isolate* isolate, |
309 const v8_inspector::StringView& string) { | 332 const v8_inspector::StringView& string) { |
310 if (string.is8Bit()) | 333 if (string.is8Bit()) |
311 return v8::String::NewFromOneByte(isolate, string.characters8(), | 334 return v8::String::NewFromOneByte(isolate, string.characters8(), |
312 v8::NewStringType::kNormal, | 335 v8::NewStringType::kNormal, |
313 static_cast<int>(string.length())) | 336 static_cast<int>(string.length())) |
314 .ToLocalChecked(); | 337 .ToLocalChecked(); |
315 else | 338 else |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
407 argv[i]); | 430 argv[i]); |
408 Exit(); | 431 Exit(); |
409 } | 432 } |
410 frontend_runner.Append(new ExecuteStringTask(chars)); | 433 frontend_runner.Append(new ExecuteStringTask(chars)); |
411 } | 434 } |
412 | 435 |
413 frontend_runner.Join(); | 436 frontend_runner.Join(); |
414 backend_runner.Join(); | 437 backend_runner.Join(); |
415 return 0; | 438 return 0; |
416 } | 439 } |
OLD | NEW |