From 3247a71c787b19c9901a25073b7afb76ee63f4c8 Mon Sep 17 00:00:00 2001 From: "yangguo@chromium.org" Date: Wed, 25 Jun 2014 09:13:09 +0000 Subject: [PATCH] Do not unnecessarily expose execution state in debug event data. When we fire a debug event, we create duplicate execution state objects, one as argument for the debug event listener, one as property on the debug event data object. The latter is never used by chrome. R=yurys@chromium.org Review URL: https://codereview.chromium.org/355793002 git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@22001 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/debug-debugger.js | 61 ++++++++++----------------------- src/debug.cc | 18 +++------- test/mjsunit/mjsunit-assertoptimized.js | 17 --------- test/mjsunit/mjsunit.status | 1 - 4 files changed, 24 insertions(+), 73 deletions(-) delete mode 100644 test/mjsunit/mjsunit-assertoptimized.js diff --git a/src/debug-debugger.js b/src/debug-debugger.js index 660ea79..aa370f0 100644 --- a/src/debug-debugger.js +++ b/src/debug-debugger.js @@ -986,44 +986,39 @@ ExecutionState.prototype.debugCommandProcessor = function(opt_is_running) { }; -function MakeBreakEvent(exec_state, break_points_hit) { - return new BreakEvent(exec_state, break_points_hit); +function MakeBreakEvent(break_id, break_points_hit) { + return new BreakEvent(break_id, break_points_hit); } -function BreakEvent(exec_state, break_points_hit) { - this.exec_state_ = exec_state; +function BreakEvent(break_id, break_points_hit) { + this.frame_ = new FrameMirror(break_id, 0); this.break_points_hit_ = break_points_hit; } -BreakEvent.prototype.executionState = function() { - return this.exec_state_; -}; - - BreakEvent.prototype.eventType = function() { return Debug.DebugEvent.Break; }; BreakEvent.prototype.func = function() { - return this.exec_state_.frame(0).func(); + return this.frame_.func(); }; BreakEvent.prototype.sourceLine = function() { - return this.exec_state_.frame(0).sourceLine(); + return this.frame_.sourceLine(); }; BreakEvent.prototype.sourceColumn = function() { - return this.exec_state_.frame(0).sourceColumn(); + return this.frame_.sourceColumn(); }; BreakEvent.prototype.sourceLineText = function() { - return this.exec_state_.frame(0).sourceLineText(); + return this.frame_.sourceLineText(); }; @@ -1036,8 +1031,7 @@ BreakEvent.prototype.toJSONProtocol = function() { var o = { seq: next_response_seq++, type: "event", event: "break", - body: { invocationText: this.exec_state_.frame(0).invocationText(), - } + body: { invocationText: this.frame_.invocationText() } }; // Add script related information to the event if available. @@ -1070,24 +1064,19 @@ BreakEvent.prototype.toJSONProtocol = function() { }; -function MakeExceptionEvent(exec_state, exception, uncaught, promise) { - return new ExceptionEvent(exec_state, exception, uncaught, promise); +function MakeExceptionEvent(break_id, exception, uncaught, promise) { + return new ExceptionEvent(break_id, exception, uncaught, promise); } -function ExceptionEvent(exec_state, exception, uncaught, promise) { - this.exec_state_ = exec_state; +function ExceptionEvent(break_id, exception, uncaught, promise) { + this.exec_state_ = new ExecutionState(break_id); this.exception_ = exception; this.uncaught_ = uncaught; this.promise_ = promise; } -ExceptionEvent.prototype.executionState = function() { - return this.exec_state_; -}; - - ExceptionEvent.prototype.eventType = function() { return Debug.DebugEvent.Exception; }; @@ -1154,23 +1143,17 @@ ExceptionEvent.prototype.toJSONProtocol = function() { }; -function MakeCompileEvent(exec_state, script, before) { - return new CompileEvent(exec_state, script, before); +function MakeCompileEvent(script, before) { + return new CompileEvent(script, before); } -function CompileEvent(exec_state, script, before) { - this.exec_state_ = exec_state; +function CompileEvent(script, before) { this.script_ = MakeMirror(script); this.before_ = before; } -CompileEvent.prototype.executionState = function() { - return this.exec_state_; -}; - - CompileEvent.prototype.eventType = function() { if (this.before_) { return Debug.DebugEvent.BeforeCompile; @@ -1200,13 +1183,12 @@ CompileEvent.prototype.toJSONProtocol = function() { }; -function MakeScriptCollectedEvent(exec_state, id) { - return new ScriptCollectedEvent(exec_state, id); +function MakeScriptCollectedEvent(id) { + return new ScriptCollectedEvent(id); } -function ScriptCollectedEvent(exec_state, id) { - this.exec_state_ = exec_state; +function ScriptCollectedEvent(id) { this.id_ = id; } @@ -1216,11 +1198,6 @@ ScriptCollectedEvent.prototype.id = function() { }; -ScriptCollectedEvent.prototype.executionState = function() { - return this.exec_state_; -}; - - ScriptCollectedEvent.prototype.toJSONProtocol = function() { var o = new ProtocolMessage(); o.running = true; diff --git a/src/debug.cc b/src/debug.cc index 58c0e44..cf5cf43 100644 --- a/src/debug.cc +++ b/src/debug.cc @@ -2534,10 +2534,9 @@ MaybeHandle Debug::MakeExecutionState() { MaybeHandle Debug::MakeBreakEvent(Handle break_points_hit) { - Handle exec_state; - if (!MakeExecutionState().ToHandle(&exec_state)) return MaybeHandle(); // Create the new break event object. - Handle argv[] = { exec_state, break_points_hit }; + Handle argv[] = { isolate_->factory()->NewNumberFromInt(break_id()), + break_points_hit }; return MakeJSObject("MakeBreakEvent", ARRAY_SIZE(argv), argv); } @@ -2545,10 +2544,8 @@ MaybeHandle Debug::MakeBreakEvent(Handle break_points_hit) { MaybeHandle Debug::MakeExceptionEvent(Handle exception, bool uncaught, Handle promise) { - Handle exec_state; - if (!MakeExecutionState().ToHandle(&exec_state)) return MaybeHandle(); // Create the new exception event object. - Handle argv[] = { exec_state, + Handle argv[] = { isolate_->factory()->NewNumberFromInt(break_id()), exception, isolate_->factory()->ToBoolean(uncaught), promise }; @@ -2558,23 +2555,18 @@ MaybeHandle Debug::MakeExceptionEvent(Handle exception, MaybeHandle Debug::MakeCompileEvent(Handle