Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2009 Google Inc. All rights reserved. | 2 * Copyright (C) 2009 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 591 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 602 return v8::MaybeLocal<v8::Value>(); | 602 return v8::MaybeLocal<v8::Value>(); |
| 603 } | 603 } |
| 604 | 604 |
| 605 // TODO(dominicc): When inspector supports tracing object | 605 // TODO(dominicc): When inspector supports tracing object |
| 606 // invocation, change this to use v8::Object instead of | 606 // invocation, change this to use v8::Object instead of |
| 607 // v8::Function. All callers use functions because | 607 // v8::Function. All callers use functions because |
| 608 // CustomElementRegistry#define's IDL signature is Function. | 608 // CustomElementRegistry#define's IDL signature is Function. |
| 609 CHECK(constructor->IsFunction()); | 609 CHECK(constructor->IsFunction()); |
| 610 v8::Local<v8::Function> function = constructor.As<v8::Function>(); | 610 v8::Local<v8::Function> function = constructor.As<v8::Function>(); |
| 611 | 611 |
| 612 if (!depth) | 612 probe::CallFunction probe(context, function, depth); |
|
alph
2017/03/08 01:32:01
Let's have it within MicrotasksScope.
| |
| 613 TRACE_EVENT_BEGIN1("devtools.timeline", "FunctionCall", "data", | |
| 614 InspectorFunctionCallEvent::data(context, function)); | |
| 615 v8::MicrotasksScope microtasksScope(isolate, | 613 v8::MicrotasksScope microtasksScope(isolate, |
| 616 v8::MicrotasksScope::kRunMicrotasks); | 614 v8::MicrotasksScope::kRunMicrotasks); |
| 617 ThreadDebugger::willExecuteScript(isolate, function->ScriptId()); | 615 ThreadDebugger::willExecuteScript(isolate, function->ScriptId()); |
| 618 v8::MaybeLocal<v8::Value> result = | 616 v8::MaybeLocal<v8::Value> result = |
| 619 constructor->CallAsConstructor(isolate->GetCurrentContext(), argc, argv); | 617 constructor->CallAsConstructor(isolate->GetCurrentContext(), argc, argv); |
| 620 CHECK(!isolate->IsDead()); | 618 CHECK(!isolate->IsDead()); |
| 621 ThreadDebugger::didExecuteScript(isolate); | 619 ThreadDebugger::didExecuteScript(isolate); |
| 622 if (!depth) | |
| 623 TRACE_EVENT_END0("devtools.timeline", "FunctionCall"); | |
| 624 return result; | 620 return result; |
| 625 } | 621 } |
| 626 | 622 |
| 627 v8::MaybeLocal<v8::Value> V8ScriptRunner::callFunction( | 623 v8::MaybeLocal<v8::Value> V8ScriptRunner::callFunction( |
| 628 v8::Local<v8::Function> function, | 624 v8::Local<v8::Function> function, |
| 629 ExecutionContext* context, | 625 ExecutionContext* context, |
| 630 v8::Local<v8::Value> receiver, | 626 v8::Local<v8::Value> receiver, |
| 631 int argc, | 627 int argc, |
| 632 v8::Local<v8::Value> args[], | 628 v8::Local<v8::Value> args[], |
| 633 v8::Isolate* isolate) { | 629 v8::Isolate* isolate) { |
| 634 LocalFrame* frame = | 630 LocalFrame* frame = |
| 635 context->isDocument() ? toDocument(context)->frame() : nullptr; | 631 context->isDocument() ? toDocument(context)->frame() : nullptr; |
| 636 ScopedFrameBlamer frameBlamer(frame); | 632 ScopedFrameBlamer frameBlamer(frame); |
| 637 TRACE_EVENT0("v8", "v8.callFunction"); | 633 TRACE_EVENT0("v8", "v8.callFunction"); |
| 638 | 634 |
| 639 int depth = v8::MicrotasksScope::GetCurrentDepth(isolate); | 635 int depth = v8::MicrotasksScope::GetCurrentDepth(isolate); |
| 640 if (depth >= kMaxRecursionDepth) | 636 if (depth >= kMaxRecursionDepth) |
| 641 return v8::MaybeLocal<v8::Value>( | 637 return v8::MaybeLocal<v8::Value>( |
| 642 throwStackOverflowExceptionIfNeeded(isolate)); | 638 throwStackOverflowExceptionIfNeeded(isolate)); |
| 643 | 639 |
| 644 RELEASE_ASSERT(!context->isIteratingOverObservers()); | 640 RELEASE_ASSERT(!context->isIteratingOverObservers()); |
| 645 | 641 |
| 646 if (ScriptForbiddenScope::isScriptForbidden()) { | 642 if (ScriptForbiddenScope::isScriptForbidden()) { |
| 647 throwScriptForbiddenException(isolate); | 643 throwScriptForbiddenException(isolate); |
| 648 return v8::MaybeLocal<v8::Value>(); | 644 return v8::MaybeLocal<v8::Value>(); |
| 649 } | 645 } |
| 650 if (!depth) | 646 probe::CallFunction probe(context, function, depth); |
|
alph
2017/03/08 01:32:01
ditto
| |
| 651 TRACE_EVENT_BEGIN1("devtools.timeline", "FunctionCall", "data", | |
| 652 InspectorFunctionCallEvent::data(context, function)); | |
| 653 | 647 |
| 654 DCHECK(!frame || | 648 DCHECK(!frame || |
| 655 BindingSecurity::shouldAllowAccessToFrame( | 649 BindingSecurity::shouldAllowAccessToFrame( |
| 656 toDOMWindow(function->CreationContext())->toLocalDOMWindow(), | 650 toDOMWindow(function->CreationContext())->toLocalDOMWindow(), |
| 657 frame, BindingSecurity::ErrorReportOption::DoNotReport)); | 651 frame, BindingSecurity::ErrorReportOption::DoNotReport)); |
| 658 CHECK(!ThreadState::current()->isWrapperTracingForbidden()); | 652 CHECK(!ThreadState::current()->isWrapperTracingForbidden()); |
| 659 v8::MicrotasksScope microtasksScope(isolate, | 653 v8::MicrotasksScope microtasksScope(isolate, |
| 660 v8::MicrotasksScope::kRunMicrotasks); | 654 v8::MicrotasksScope::kRunMicrotasks); |
| 661 probe::CallFunction probe(context, function); | |
| 662 ThreadDebugger::willExecuteScript(isolate, function->ScriptId()); | 655 ThreadDebugger::willExecuteScript(isolate, function->ScriptId()); |
| 663 v8::MaybeLocal<v8::Value> result = | 656 v8::MaybeLocal<v8::Value> result = |
| 664 function->Call(isolate->GetCurrentContext(), receiver, argc, args); | 657 function->Call(isolate->GetCurrentContext(), receiver, argc, args); |
| 665 CHECK(!isolate->IsDead()); | 658 CHECK(!isolate->IsDead()); |
| 666 ThreadDebugger::didExecuteScript(isolate); | 659 ThreadDebugger::didExecuteScript(isolate); |
| 667 if (!depth) | 660 |
| 668 TRACE_EVENT_END0("devtools.timeline", "FunctionCall"); | |
| 669 return result; | 661 return result; |
| 670 } | 662 } |
| 671 | 663 |
| 672 v8::MaybeLocal<v8::Value> V8ScriptRunner::callInternalFunction( | 664 v8::MaybeLocal<v8::Value> V8ScriptRunner::callInternalFunction( |
| 673 v8::Local<v8::Function> function, | 665 v8::Local<v8::Function> function, |
| 674 v8::Local<v8::Value> receiver, | 666 v8::Local<v8::Value> receiver, |
| 675 int argc, | 667 int argc, |
| 676 v8::Local<v8::Value> args[], | 668 v8::Local<v8::Value> args[], |
| 677 v8::Isolate* isolate) { | 669 v8::Isolate* isolate) { |
| 678 TRACE_EVENT0("v8", "v8.callFunction"); | 670 TRACE_EVENT0("v8", "v8.callFunction"); |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 733 v8AtomicString(isolate, "((e) => { throw e; })"), origin) | 725 v8AtomicString(isolate, "((e) => { throw e; })"), origin) |
| 734 .ToLocalChecked(); | 726 .ToLocalChecked(); |
| 735 v8::Local<v8::Function> thrower = runCompiledInternalScript(isolate, script) | 727 v8::Local<v8::Function> thrower = runCompiledInternalScript(isolate, script) |
| 736 .ToLocalChecked() | 728 .ToLocalChecked() |
| 737 .As<v8::Function>(); | 729 .As<v8::Function>(); |
| 738 v8::Local<v8::Value> args[] = {exception}; | 730 v8::Local<v8::Value> args[] = {exception}; |
| 739 callInternalFunction(thrower, thrower, WTF_ARRAY_LENGTH(args), args, isolate); | 731 callInternalFunction(thrower, thrower, WTF_ARRAY_LENGTH(args), args, isolate); |
| 740 } | 732 } |
| 741 | 733 |
| 742 } // namespace blink | 734 } // namespace blink |
| OLD | NEW |