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

Side by Side Diff: src/api.cc

Issue 2685163006: [inspector] migrate set/remove BreakPoint to debug-interface.h (Closed)
Patch Set: added a test, ready for review Created 3 years, 10 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
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/api.h" 5 #include "src/api.h"
6 6
7 #include <string.h> // For memcpy, strlen. 7 #include <string.h> // For memcpy, strlen.
8 #ifdef V8_USE_ADDRESS_SANITIZER 8 #ifdef V8_USE_ADDRESS_SANITIZER
9 #include <sanitizer/asan_interface.h> 9 #include <sanitizer/asan_interface.h>
10 #endif // V8_USE_ADDRESS_SANITIZER 10 #endif // V8_USE_ADDRESS_SANITIZER
(...skipping 9067 matching lines...) Expand 10 before | Expand all | Expand 10 after
9078 i::HandleScope scope(isolate); 9078 i::HandleScope scope(isolate);
9079 for (i::StackTraceFrameIterator it(isolate); !it.done(); it.Advance()) { 9079 for (i::StackTraceFrameIterator it(isolate); !it.done(); it.Advance()) {
9080 if (!it.is_javascript()) continue; 9080 if (!it.is_javascript()) continue;
9081 if (!isolate->debug()->IsFrameBlackboxed(it.javascript_frame())) { 9081 if (!isolate->debug()->IsFrameBlackboxed(it.javascript_frame())) {
9082 return true; 9082 return true;
9083 } 9083 }
9084 } 9084 }
9085 return false; 9085 return false;
9086 } 9086 }
9087 9087
9088 Local<debug::BreakPoint> debug::BreakPoint::New(Isolate* v8_isolate,
9089 Local<Value> condition,
9090 Local<Value> data) {
9091 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(v8_isolate);
9092 ENTER_V8(isolate);
9093 i::HandleScope handle_scope(isolate);
9094 i::Handle<i::Object> condition_obj = Utils::OpenHandle(*condition);
Yang 2017/02/15 13:21:10 Can we limit the condition to strings only? empty
kozy 2017/02/15 16:21:33 Done.
9095 i::Handle<i::Object> data_obj = Utils::OpenHandle(*data);
9096 i::Handle<i::BreakPoint> break_point =
9097 isolate->factory()->NewBreakPoint(condition_obj, data_obj);
9098 return ToApiHandle<debug::BreakPoint>(
9099 handle_scope.CloseAndEscape(break_point));
9100 }
9101
9102 MaybeLocal<debug::BreakPoint> debug::BreakPoint::Cast(
9103 Isolate* v8_isolate, v8::Local<v8::Value> value) {
9104 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(v8_isolate);
9105 ENTER_V8(isolate);
9106 i::HandleScope handle_scope(isolate);
9107 i::Handle<i::Object> break_point_obj = Utils::OpenHandle(*value);
9108 if (!break_point_obj->IsBreakPoint()) return MaybeLocal<debug::BreakPoint>();
9109 i::Handle<i::BreakPoint> break_point(i::BreakPoint::cast(*break_point_obj),
9110 isolate);
9111 return ToApiHandle<debug::BreakPoint>(
9112 handle_scope.CloseAndEscape(break_point));
9113 }
9114
9115 v8::Local<v8::Value> debug::BreakPoint::Data() const {
9116 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
9117 i::HandleScope handle_scope(isolate);
9118 i::Handle<i::BreakPoint> break_point = Utils::OpenHandle(this);
9119 i::Handle<i::Object> data_obj(break_point->data(), isolate);
9120 return Utils::ToLocal(handle_scope.CloseAndEscape(data_obj));
9121 }
9122
9088 v8::Isolate* debug::Script::GetIsolate() const { 9123 v8::Isolate* debug::Script::GetIsolate() const {
9089 return reinterpret_cast<v8::Isolate*>(Utils::OpenHandle(this)->GetIsolate()); 9124 return reinterpret_cast<v8::Isolate*>(Utils::OpenHandle(this)->GetIsolate());
9090 } 9125 }
9091 9126
9092 ScriptOriginOptions debug::Script::OriginOptions() const { 9127 ScriptOriginOptions debug::Script::OriginOptions() const {
9093 return Utils::OpenHandle(this)->origin_options(); 9128 return Utils::OpenHandle(this)->origin_options();
9094 } 9129 }
9095 9130
9096 bool debug::Script::WasCompiled() const { 9131 bool debug::Script::WasCompiled() const {
9097 return Utils::OpenHandle(this)->compilation_state() == 9132 return Utils::OpenHandle(this)->compilation_state() ==
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
9232 line_offset = GetSmiValue(line_ends, current_line_end_index - 1) + 1; 9267 line_offset = GetSmiValue(line_ends, current_line_end_index - 1) + 1;
9233 } 9268 }
9234 locations->push_back(debug::Location( 9269 locations->push_back(debug::Location(
9235 current_line_end_index + script->line_offset(), 9270 current_line_end_index + script->line_offset(),
9236 offset - line_offset + 9271 offset - line_offset +
9237 (current_line_end_index == 0 ? script->column_offset() : 0))); 9272 (current_line_end_index == 0 ? script->column_offset() : 0)));
9238 } 9273 }
9239 return true; 9274 return true;
9240 } 9275 }
9241 9276
9277 debug::Location debug::Script::SetBreakPoint(
9278 const debug::Location& position,
9279 Local<debug::BreakPoint> break_point) const {
9280 i::Handle<i::Script> script = Utils::OpenHandle(this);
9281 i::Isolate* isolate = script->GetIsolate();
9282 int offset = GetSourcePosition(position);
9283 i::Handle<i::BreakPoint> break_point_obj = Utils::OpenHandle(*break_point);
9284 int result_offset = offset;
9285 if (!isolate->debug()->SetBreakPointForScript(
9286 script, break_point_obj, &result_offset, i::BREAK_POSITION_ALIGNED)) {
9287 return debug::Location();
9288 }
9289 i::Script::PositionInfo info;
9290 i::Script::GetPositionInfo(script, result_offset, &info,
9291 i::Script::WITH_OFFSET);
9292 return debug::Location(info.line, info.column);
9293 }
9294
9242 int debug::Script::GetSourcePosition(const debug::Location& location) const { 9295 int debug::Script::GetSourcePosition(const debug::Location& location) const {
9243 i::Handle<i::Script> script = Utils::OpenHandle(this); 9296 i::Handle<i::Script> script = Utils::OpenHandle(this);
9244 if (script->type() == i::Script::TYPE_WASM) { 9297 if (script->type() == i::Script::TYPE_WASM) {
9245 // TODO(clemensh): Return the proper thing for wasm. 9298 return i::WasmCompiledModule::cast(script->wasm_compiled_module())
9246 return 0; 9299 ->GetFunctionOffset(location.GetLineNumber()) +
9300 location.GetColumnNumber();
9247 } 9301 }
9248 9302
9249 int line = std::max(location.GetLineNumber() - script->line_offset(), 0); 9303 int line = std::max(location.GetLineNumber() - script->line_offset(), 0);
9250 int column = location.GetColumnNumber(); 9304 int column = location.GetColumnNumber();
9251 if (line == 0) { 9305 if (line == 0) {
9252 column = std::max(0, column - script->column_offset()); 9306 column = std::max(0, column - script->column_offset());
9253 } 9307 }
9254 9308
9255 i::Script::InitLineEnds(script); 9309 i::Script::InitLineEnds(script);
9256 CHECK(script->line_ends()->IsFixedArray()); 9310 CHECK(script->line_ends()->IsFixedArray());
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
9310 debug::WasmDisassembly debug::WasmScript::DisassembleFunction( 9364 debug::WasmDisassembly debug::WasmScript::DisassembleFunction(
9311 int function_index) const { 9365 int function_index) const {
9312 i::DisallowHeapAllocation no_gc; 9366 i::DisallowHeapAllocation no_gc;
9313 i::Handle<i::Script> script = Utils::OpenHandle(this); 9367 i::Handle<i::Script> script = Utils::OpenHandle(this);
9314 DCHECK_EQ(i::Script::TYPE_WASM, script->type()); 9368 DCHECK_EQ(i::Script::TYPE_WASM, script->type());
9315 i::WasmCompiledModule* compiled_module = 9369 i::WasmCompiledModule* compiled_module =
9316 i::WasmCompiledModule::cast(script->wasm_compiled_module()); 9370 i::WasmCompiledModule::cast(script->wasm_compiled_module());
9317 return compiled_module->DisassembleFunction(function_index); 9371 return compiled_module->DisassembleFunction(function_index);
9318 } 9372 }
9319 9373
9374 void debug::ClearBreakPoint(v8::Isolate* v8_isolate,
9375 Local<BreakPoint> break_point) {
9376 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(v8_isolate);
9377 ENTER_V8(isolate);
9378 i::Handle<i::Object> break_point_obj = Utils::OpenHandle(*break_point);
9379 isolate->debug()->ClearBreakPoint(break_point_obj);
9380 }
9381
9320 debug::Location::Location(int line_number, int column_number) 9382 debug::Location::Location(int line_number, int column_number)
9321 : line_number_(line_number), column_number_(column_number) { 9383 : line_number_(line_number), column_number_(column_number) {
9322 CHECK(line_number >= 0); 9384 CHECK(line_number >= 0);
9323 CHECK(column_number >= 0); 9385 CHECK(column_number >= 0);
9324 } 9386 }
9325 9387
9326 debug::Location::Location() 9388 debug::Location::Location()
9327 : line_number_(v8::Function::kLineOffsetNotFound), 9389 : line_number_(v8::Function::kLineOffsetNotFound),
9328 column_number_(v8::Function::kLineOffsetNotFound) {} 9390 column_number_(v8::Function::kLineOffsetNotFound) {}
9329 9391
9330 int debug::Location::GetLineNumber() const { 9392 int debug::Location::GetLineNumber() const {
9331 CHECK(line_number_ >= 0); 9393 CHECK(line_number_ >= 0);
9332 return line_number_; 9394 return line_number_;
9333 } 9395 }
9334 9396
9335 int debug::Location::GetColumnNumber() const { 9397 int debug::Location::GetColumnNumber() const {
9336 CHECK(column_number_ >= 0); 9398 CHECK(column_number_ >= 0);
9337 return column_number_; 9399 return column_number_;
9338 } 9400 }
9339 9401
9340 bool debug::Location::IsEmpty() const { 9402 bool debug::Location::IsEmpty() const {
9341 return line_number_ == -1 && column_number_ == -1; 9403 return line_number_ == v8::Function::kLineOffsetNotFound &&
9404 column_number_ == v8::Function::kLineOffsetNotFound;
9342 } 9405 }
9343 9406
9344 void debug::GetLoadedScripts(v8::Isolate* v8_isolate, 9407 void debug::GetLoadedScripts(v8::Isolate* v8_isolate,
9345 PersistentValueVector<debug::Script>& scripts) { 9408 PersistentValueVector<debug::Script>& scripts) {
9346 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(v8_isolate); 9409 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(v8_isolate);
9347 ENTER_V8(isolate); 9410 ENTER_V8(isolate);
9348 // TODO(kozyatinskiy): remove this GC once tests are dealt with. 9411 // TODO(kozyatinskiy): remove this GC once tests are dealt with.
9349 isolate->heap()->CollectAllGarbage(i::Heap::kFinalizeIncrementalMarkingMask, 9412 isolate->heap()->CollectAllGarbage(i::Heap::kFinalizeIncrementalMarkingMask,
9350 i::GarbageCollectionReason::kDebugger); 9413 i::GarbageCollectionReason::kDebugger);
9351 { 9414 {
(...skipping 817 matching lines...) Expand 10 before | Expand all | Expand 10 after
10169 Address callback_address = 10232 Address callback_address =
10170 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); 10233 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback));
10171 VMState<EXTERNAL> state(isolate); 10234 VMState<EXTERNAL> state(isolate);
10172 ExternalCallbackScope call_scope(isolate, callback_address); 10235 ExternalCallbackScope call_scope(isolate, callback_address);
10173 callback(info); 10236 callback(info);
10174 } 10237 }
10175 10238
10176 10239
10177 } // namespace internal 10240 } // namespace internal
10178 } // namespace v8 10241 } // namespace v8
OLDNEW
« no previous file with comments | « src/api.h ('k') | src/ast/ast-types.cc » ('j') | src/debug/debug.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698