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

Side by Side Diff: src/debug/debug.cc

Issue 2819423005: [inspector] removed kDebugPromiseCollected event (Closed)
Patch Set: added a test Created 3 years, 8 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
« no previous file with comments | « no previous file | src/debug/interface-types.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "src/debug/debug.h" 5 #include "src/debug/debug.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "src/api.h" 9 #include "src/api.h"
10 #include "src/arguments.h" 10 #include "src/arguments.h"
(...skipping 1870 matching lines...) Expand 10 before | Expand all | Expand 10 after
1881 ProcessCompileEvent(v8::CompileError, script); 1881 ProcessCompileEvent(v8::CompileError, script);
1882 } 1882 }
1883 1883
1884 1884
1885 // Handle debugger actions when a new script is compiled. 1885 // Handle debugger actions when a new script is compiled.
1886 void Debug::OnAfterCompile(Handle<Script> script) { 1886 void Debug::OnAfterCompile(Handle<Script> script) {
1887 ProcessCompileEvent(v8::AfterCompile, script); 1887 ProcessCompileEvent(v8::AfterCompile, script);
1888 } 1888 }
1889 1889
1890 namespace { 1890 namespace {
1891 struct CollectedCallbackData {
1892 Object** location;
1893 int id;
1894 Debug* debug;
1895 Isolate* isolate;
1896
1897 CollectedCallbackData(Object** location, int id, Debug* debug,
1898 Isolate* isolate)
1899 : location(location), id(id), debug(debug), isolate(isolate) {}
1900 };
1901
1902 void SendAsyncTaskEventCancel(const v8::WeakCallbackInfo<void>& info) {
1903 std::unique_ptr<CollectedCallbackData> data(
1904 reinterpret_cast<CollectedCallbackData*>(info.GetParameter()));
1905 if (!data->debug->is_active()) return;
1906 HandleScope scope(data->isolate);
1907 data->debug->OnAsyncTaskEvent(debug::kDebugPromiseCollected, data->id, 0);
1908 }
1909
1910 void ResetPromiseHandle(const v8::WeakCallbackInfo<void>& info) {
1911 CollectedCallbackData* data =
1912 reinterpret_cast<CollectedCallbackData*>(info.GetParameter());
1913 GlobalHandles::Destroy(data->location);
1914 info.SetSecondPassCallback(&SendAsyncTaskEventCancel);
1915 }
1916
1917 // In an async function, reuse the existing stack related to the outer 1891 // In an async function, reuse the existing stack related to the outer
1918 // Promise. Otherwise, e.g. in a direct call to then, save a new stack. 1892 // Promise. Otherwise, e.g. in a direct call to then, save a new stack.
1919 // Promises with multiple reactions with one or more of them being async 1893 // Promises with multiple reactions with one or more of them being async
1920 // functions will not get a good stack trace, as async functions require 1894 // functions will not get a good stack trace, as async functions require
1921 // different stacks from direct Promise use, but we save and restore a 1895 // different stacks from direct Promise use, but we save and restore a
1922 // stack once for all reactions. 1896 // stack once for all reactions.
1923 // 1897 //
1924 // If this isn't a case of async function, we return false, otherwise 1898 // If this isn't a case of async function, we return false, otherwise
1925 // we set the correct id and return true. 1899 // we set the correct id and return true.
1926 // 1900 //
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1975 LookupIterator it(promise, isolate_->factory()->promise_async_id_symbol()); 1949 LookupIterator it(promise, isolate_->factory()->promise_async_id_symbol());
1976 Maybe<bool> maybe = JSReceiver::HasProperty(&it); 1950 Maybe<bool> maybe = JSReceiver::HasProperty(&it);
1977 if (maybe.ToChecked()) { 1951 if (maybe.ToChecked()) {
1978 MaybeHandle<Object> result = Object::GetProperty(&it); 1952 MaybeHandle<Object> result = Object::GetProperty(&it);
1979 return Handle<Smi>::cast(result.ToHandleChecked())->value(); 1953 return Handle<Smi>::cast(result.ToHandleChecked())->value();
1980 } 1954 }
1981 Handle<Smi> async_id = 1955 Handle<Smi> async_id =
1982 handle(Smi::FromInt(++thread_local_.async_task_count_), isolate_); 1956 handle(Smi::FromInt(++thread_local_.async_task_count_), isolate_);
1983 Object::SetProperty(&it, async_id, SLOPPY, Object::MAY_BE_STORE_FROM_KEYED) 1957 Object::SetProperty(&it, async_id, SLOPPY, Object::MAY_BE_STORE_FROM_KEYED)
1984 .ToChecked(); 1958 .ToChecked();
1985 Handle<Object> global_handle = isolate_->global_handles()->Create(*promise);
1986 // We send EnqueueRecurring async task event when promise is fulfilled or
1987 // rejected, WillHandle and DidHandle for every scheduled microtask for this
1988 // promise.
1989 // We need to send a cancel event when no other microtasks can be
1990 // started for this promise and all current microtasks are finished.
1991 // Since we holding promise when at least one microtask is scheduled (inside
1992 // PromiseReactionJobInfo), we can send cancel event in weak callback.
1993 GlobalHandles::MakeWeak(
1994 global_handle.location(),
1995 new CollectedCallbackData(global_handle.location(), async_id->value(),
1996 this, isolate_),
1997 &ResetPromiseHandle, v8::WeakCallbackType::kParameter);
1998 return async_id->value(); 1959 return async_id->value();
1999 } 1960 }
2000 1961
2001 namespace { 1962 namespace {
2002 debug::Location GetDebugLocation(Handle<Script> script, int source_position) { 1963 debug::Location GetDebugLocation(Handle<Script> script, int source_position) {
2003 Script::PositionInfo info; 1964 Script::PositionInfo info;
2004 Script::GetPositionInfo(script, source_position, &info, Script::WITH_OFFSET); 1965 Script::GetPositionInfo(script, source_position, &info, Script::WITH_OFFSET);
2005 return debug::Location(info.line, info.column); 1966 return debug::Location(info.line, info.column);
2006 } 1967 }
2007 } // namespace 1968 } // namespace
(...skipping 484 matching lines...) Expand 10 before | Expand all | Expand 10 after
2492 isolate_->Throw(*isolate_->factory()->NewEvalError( 2453 isolate_->Throw(*isolate_->factory()->NewEvalError(
2493 MessageTemplate::kNoSideEffectDebugEvaluate)); 2454 MessageTemplate::kNoSideEffectDebugEvaluate));
2494 } 2455 }
2495 isolate_->set_needs_side_effect_check(old_needs_side_effect_check_); 2456 isolate_->set_needs_side_effect_check(old_needs_side_effect_check_);
2496 isolate_->debug()->UpdateHookOnFunctionCall(); 2457 isolate_->debug()->UpdateHookOnFunctionCall();
2497 isolate_->debug()->side_effect_check_failed_ = false; 2458 isolate_->debug()->side_effect_check_failed_ = false;
2498 } 2459 }
2499 2460
2500 } // namespace internal 2461 } // namespace internal
2501 } // namespace v8 2462 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/debug/interface-types.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698