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

Unified Diff: src/inspector/v8-debugger-script.cc

Issue 2655653003: [inspector] Expose GetPossibleBreakpoints for wasm (Closed)
Patch Set: Introduce Init method and clang-format wasm-translation.cc 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
« no previous file with comments | « src/inspector/v8-debugger-script.h ('k') | src/inspector/wasm-translation.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/inspector/v8-debugger-script.cc
diff --git a/src/inspector/v8-debugger-script.cc b/src/inspector/v8-debugger-script.cc
index ae938507ea63838d621796861c26b4ca3e93ecf5..f19dd8118ce66ed7cc4c86f7ecaf8d4f513f04ff 100644
--- a/src/inspector/v8-debugger-script.cc
+++ b/src/inspector/v8-debugger-script.cc
@@ -6,6 +6,7 @@
#include "src/inspector/inspected-context.h"
#include "src/inspector/string-util.h"
+#include "src/inspector/wasm-translation.h"
namespace v8_inspector {
@@ -69,6 +70,32 @@ String16 calculateHash(const String16& str) {
return hash.toString();
}
+void TranslateProtocolLocationToV8Location(WasmTranslation* wasmTranslation,
+ v8::debug::Location* loc,
+ const String16& scriptId,
+ const String16& expectedV8ScriptId) {
+ if (loc->IsEmpty()) return;
+ int lineNumber = loc->GetLineNumber();
+ int columnNumber = loc->GetColumnNumber();
+ String16 translatedScriptId = scriptId;
+ wasmTranslation->TranslateProtocolLocationToWasmScriptLocation(
+ &translatedScriptId, &lineNumber, &columnNumber);
+ DCHECK_EQ(expectedV8ScriptId.utf8(), translatedScriptId.utf8());
+ *loc = v8::debug::Location(lineNumber, columnNumber);
+}
+
+void TranslateV8LocationToProtocolLocation(
+ WasmTranslation* wasmTranslation, v8::debug::Location* loc,
+ const String16& scriptId, const String16& expectedProtocolScriptId) {
+ int lineNumber = loc->GetLineNumber();
+ int columnNumber = loc->GetColumnNumber();
+ String16 translatedScriptId = scriptId;
+ wasmTranslation->TranslateWasmScriptLocationToProtocolLocation(
+ &translatedScriptId, &lineNumber, &columnNumber);
+ DCHECK_EQ(expectedProtocolScriptId.utf8(), translatedScriptId.utf8());
+ *loc = v8::debug::Location(lineNumber, columnNumber);
+}
+
class ActualScript : public V8DebuggerScript {
friend class V8DebuggerScript;
@@ -171,11 +198,12 @@ class WasmVirtualScript : public V8DebuggerScript {
friend class V8DebuggerScript;
public:
- WasmVirtualScript(v8::Isolate* isolate,
+ WasmVirtualScript(v8::Isolate* isolate, WasmTranslation* wasmTranslation,
v8::Local<v8::debug::WasmScript> script, String16 id,
String16 url, String16 source)
: V8DebuggerScript(isolate, std::move(id), std::move(url)),
- m_script(isolate, script) {
+ m_script(isolate, script),
+ m_wasmTranslation(wasmTranslation) {
int num_lines = 0;
int last_newline = -1;
size_t next_newline = source.find('\n', last_newline + 1);
@@ -196,10 +224,31 @@ class WasmVirtualScript : public V8DebuggerScript {
bool getPossibleBreakpoints(
const v8::debug::Location& start, const v8::debug::Location& end,
std::vector<v8::debug::Location>* locations) override {
- // TODO(clemensh): Returning false produces the protocol error "Internal
- // error". Implement and fix expected output of
- // wasm-get-breakable-locations.js.
- return false;
+ v8::HandleScope scope(m_isolate);
+ v8::Local<v8::debug::Script> script = m_script.Get(m_isolate);
+ String16 v8ScriptId = String16::fromInteger(script->Id());
+
+ v8::debug::Location translatedStart = start;
+ TranslateProtocolLocationToV8Location(m_wasmTranslation, &translatedStart,
+ scriptId(), v8ScriptId);
+
+ v8::debug::Location translatedEnd = end;
+ if (translatedEnd.IsEmpty()) {
+ // Stop before the start of the next function.
+ translatedEnd =
+ v8::debug::Location(translatedStart.GetLineNumber() + 1, 0);
+ } else {
+ TranslateProtocolLocationToV8Location(m_wasmTranslation, &translatedEnd,
+ scriptId(), v8ScriptId);
+ }
+
+ bool success = script->GetPossibleBreakpoints(translatedStart,
+ translatedEnd, locations);
+ for (v8::debug::Location& loc : *locations) {
+ TranslateV8LocationToProtocolLocation(m_wasmTranslation, &loc, v8ScriptId,
+ scriptId());
+ }
+ return success;
}
void resetBlackboxedStateCache() override {}
@@ -211,6 +260,7 @@ class WasmVirtualScript : public V8DebuggerScript {
}
v8::Global<v8::debug::WasmScript> m_script;
+ WasmTranslation* m_wasmTranslation;
};
} // namespace
@@ -223,11 +273,12 @@ std::unique_ptr<V8DebuggerScript> V8DebuggerScript::Create(
}
std::unique_ptr<V8DebuggerScript> V8DebuggerScript::CreateWasm(
- v8::Isolate* isolate, v8::Local<v8::debug::WasmScript> underlyingScript,
- String16 id, String16 url, String16 source) {
+ v8::Isolate* isolate, WasmTranslation* wasmTranslation,
+ v8::Local<v8::debug::WasmScript> underlyingScript, String16 id,
+ String16 url, String16 source) {
return std::unique_ptr<WasmVirtualScript>(
- new WasmVirtualScript(isolate, underlyingScript, std::move(id),
- std::move(url), std::move(source)));
+ new WasmVirtualScript(isolate, wasmTranslation, underlyingScript,
+ std::move(id), std::move(url), std::move(source)));
}
V8DebuggerScript::V8DebuggerScript(v8::Isolate* isolate, String16 id,
« no previous file with comments | « src/inspector/v8-debugger-script.h ('k') | src/inspector/wasm-translation.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698