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

Unified Diff: src/debug/debug.cc

Issue 2633803002: [inspector] implemented blackboxing inside v8 (Closed)
Patch Set: rebased Created 3 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: src/debug/debug.cc
diff --git a/src/debug/debug.cc b/src/debug/debug.cc
index 61e0e0792ef3d538a83cc76c5a0b87738ae44339..25780fdc252ec5a507eb811e2f67a1eb0342b3d4 100644
--- a/src/debug/debug.cc
+++ b/src/debug/debug.cc
@@ -863,6 +863,7 @@ void Debug::FloodWithOneShot(Handle<JSFunction> function,
// Return if we failed to retrieve the debug info.
return;
}
+ if (shared->debug_is_blackboxed()) return;
Yang 2017/01/19 13:55:35 Do we need to ensure debug info if it's blackboxed
kozy 2017/01/19 16:08:38 Done.
// Flood the function with break points.
Handle<DebugInfo> debug_info(shared->GetDebugInfo());
@@ -969,7 +970,8 @@ void Debug::PrepareStepOnThrow() {
// Find the closest Javascript frame we can flood with one-shots.
while (!it.done() &&
- !it.frame()->function()->shared()->IsSubjectToDebugging()) {
+ (!it.frame()->function()->shared()->IsSubjectToDebugging() ||
+ it.frame()->function()->shared()->debug_is_blackboxed())) {
it.Advance();
}
@@ -1043,8 +1045,10 @@ void Debug::PrepareStep(StepAction step_action) {
// Advance to caller frame.
frames_it.Advance();
// Skip native and extension functions on the stack.
- while (!frames_it.done() &&
- !frames_it.frame()->function()->shared()->IsSubjectToDebugging()) {
+ while (
+ !frames_it.done() &&
+ (!frames_it.frame()->function()->shared()->IsSubjectToDebugging() ||
+ frames_it.frame()->function()->shared()->debug_is_blackboxed())) {
// Builtin functions are not subject to stepping, but need to be
// deoptimized to include checks for step-in at call sites.
Deoptimizer::DeoptimizeFunction(frames_it.frame()->function());
@@ -1756,8 +1760,11 @@ void Debug::OnException(Handle<Object> exception, Handle<Object> promise) {
}
{
- // Check whether the break location is muted.
JavaScriptFrameIterator it(isolate_);
+ // Check whether the top frame is blackboxed.
+ if (!it.done() && it.frame()->function()->shared()->debug_is_blackboxed())
Yang 2017/01/19 13:55:35 please add {} around if-statement body if we have
kozy 2017/01/19 16:08:38 Done.
+ return;
+ // Check whether the break location is muted.
if (!it.done() && IsMutedAtCurrentLocation(it.frame())) return;
Yang 2017/01/19 13:55:35 can we merge these two redundant checks?
kozy 2017/01/19 16:08:38 Done.
}
@@ -1897,6 +1904,35 @@ int Debug::NextAsyncTaskId(Handle<JSObject> promise) {
return async_id->value();
}
+void Debug::SetIsBlackboxedCallback(debug::IsBlackboxedCallback callback,
+ void* data) {
+ is_blackboxed_callback_ = callback;
+ is_blackboxed_callback_data_ = data;
+}
+
+namespace {
+debug::Location GetDebugLocation(Handle<Script> script, int source_position) {
+ Script::InitLineEnds(script);
+ int line = Script::GetLineNumber(script, source_position);
+ int column = Script::GetColumnNumber(script, source_position);
+ return debug::Location(line, column);
+}
+} // namespace
+
+void Debug::OnNewSharedFunctionInfo(Handle<SharedFunctionInfo> shared) {
+ if (!is_blackboxed_callback_) return;
+ Handle<Script> script(Script::cast(shared->script()));
+ if (script->type() != i::Script::TYPE_NORMAL) return;
+
+ debug::Location start = GetDebugLocation(script, shared->start_position());
+ debug::Location end = GetDebugLocation(script, shared->end_position());
+
+ bool is_blackboxed =
+ is_blackboxed_callback_(ToApiHandle<debug::Script>(script), start, end,
+ is_blackboxed_callback_data_);
+ shared->set_debug_is_blackboxed(is_blackboxed);
+}
+
void Debug::OnAsyncTaskEvent(debug::PromiseDebugActionType type, int id) {
if (in_debug_scope() || ignore_events()) return;
@@ -2279,6 +2315,9 @@ void Debug::HandleDebugBreak() {
if (fun && fun->IsJSFunction()) {
// Don't stop in builtin functions.
if (!JSFunction::cast(fun)->shared()->IsSubjectToDebugging()) return;
+ if (isolate_->stack_guard()->CheckDebugBreak() &&
+ JSFunction::cast(fun)->shared()->debug_is_blackboxed())
+ return;
JSGlobalObject* global =
JSFunction::cast(fun)->context()->global_object();
// Don't stop in debugger functions.
« src/compiler.cc ('K') | « src/debug/debug.h ('k') | src/debug/debug-interface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698