v8/test/inspector
Benedikt Meurer c27c167c44 [inspector] Implement Debug Proxy API via Interceptors.
Previously the Debug Proxy API that's exposed on Wasm frames by
Runtime.evaluateOnCallFrame() was implemented via actual JSProxy
instances. That means that all entities such as "memories", "tables",
"stack", "globals", etc. were JSProxy instances with "get" and "has"
traps. But that has a couple of down-sides:

1. In DevTools front-end, the proxies are shown as JSProxy, which is not
   very useful to developers, since they cannot interact with them nor
   can they inspect their contents. And the object preview also only
   shows "Proxy {}" for them.
2. The performance doesn't scale well, which becomes a painful
   bottleneck with larger Wasm modules that contain hundreds of
   thousands of functions or globals.
3. We cannot use the JSProxy instances in the Scope view (for the
   reasons outlined in 1.) and hence we have different logic to provide
   Scope values than values in the rest of DevTools, which led to subtle
   but annoying bugs and inconsistencies.

This also changes the "locals" implementation by querying the values
ahead of time, similar to the object exposed to the Scope view, instead
of on-demand, since the "locals" object might survive the current
debugger pause and peeking into the stack afterwards would read invalid
memory (and might even be a security issue). For being able to change
locals we need to look into a similar solution as what we have for
JavaScript locals already. The expression stack already works this way.

For performance reasons (especially scaling to huge, realistic Wasm
modules), we cache the per-instance proxies ("functions", "memories",
"tables" and "globals") on the WasmInstanceObject and reuse them (which
is safe since they have a `null` prototype and are non-extensible), and
we also cache the proxy maps (with the interceptors) on the
JSGlobalObject per native context.

Doc: http://bit.ly/devtools-wasm-entities
Bug: chromium:1127914, chromium:1159402, chromium:1071432, chromium:1164241
Change-Id: I6191035fdfd887835ae533fcdaabb5bbc8e661ae
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2606058
Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
Auto-Submit: Benedikt Meurer <bmeurer@chromium.org>
Reviewed-by: Yang Guo <yangguo@chromium.org>
Cr-Commit-Position: refs/heads/master@{#71981}
2021-01-08 15:46:08 +00:00
..
console Reland 2 ScriptContext CLs 2020-01-22 15:40:06 +00:00
counters [DevTools] Re-implemented Profiler.getRuntimeCallStats. 2020-09-08 18:32:05 +00:00
cpu-profiler [wasm][profiler] Report source URL and position 2020-12-10 13:20:08 +00:00
debugger [inspector] Implement Debug Proxy API via Interceptors. 2021-01-08 15:46:08 +00:00
heap-profiler heap-snapshot: Add detachedness field 2020-09-09 14:42:41 +00:00
regress [inspector] Check for null pointer after creating a stack trace 2020-11-13 07:37:13 +00:00
runtime [debug] Make JSArrayBuffer (pre)views into internal properties. 2020-12-29 11:00:53 +00:00
runtime-call-stats [DevTools] Re-implemented Profiler.getRuntimeCallStats. 2020-09-08 18:32:05 +00:00
sessions DevTools: add support for system-unique execution context ids 2020-12-23 05:15:47 +00:00
type-profiler [tests] Filter out non-existent methods in inspector tests 2020-01-17 12:21:29 +00:00
BUILD.gn [inspector] Remove spurious data dep 2020-12-09 16:03:37 +00:00
DEPS [inspector][fuzzer] Extract functionality for reuse 2020-10-28 08:37:25 +00:00
DIR_METADATA Add DIR_METADATA files to v8. 2020-10-20 22:12:28 +00:00
frontend-channel.h [cleanup] Remove DISALLOW_COPY_AND_ASSIGN in test/{cctest,fuzzer,inspector} 2020-11-10 01:24:43 +00:00
inspector-test.cc [inspector] do not interrupt with pause when running regexp 2020-12-24 11:06:35 +00:00
inspector.status [inspector] Remove redundant tests. 2021-01-05 07:45:47 +00:00
isolate-data.cc Delegate unique id generation to embedder 2020-12-22 18:40:10 +00:00
isolate-data.h Delegate unique id generation to embedder 2020-12-22 18:40:10 +00:00
json-parse-expected.txt [inspector] Refactor protocol-test.js 2017-05-19 00:35:45 +00:00
json-parse.js [inspector] Refactor protocol-test.js 2017-05-19 00:35:45 +00:00
OWNERS Add DIR_METADATA files to v8. 2020-10-20 22:12:28 +00:00
print-method-not-found-expected.txt [tests] Filter out non-existent methods in inspector tests 2020-01-17 12:21:29 +00:00
print-method-not-found.js [tests] Filter out non-existent methods in inspector tests 2020-01-17 12:21:29 +00:00
protocol-test.js DevTools: add support for system-unique execution context ids 2020-12-23 05:15:47 +00:00
task-runner.cc [inspector] do not interrupt with pause when running regexp 2020-12-24 11:06:35 +00:00
task-runner.h [inspector] do not interrupt with pause when running regexp 2020-12-24 11:06:35 +00:00
tasks.cc [api] Simplify ScriptOrigin 2020-11-24 19:51:42 +00:00
tasks.h [cleanup] Remove DISALLOW_COPY_AND_ASSIGN in test/{cctest,fuzzer,inspector} 2020-11-10 01:24:43 +00:00
testcfg.py [test] Load missing file to Android devices for inspector test suite 2020-07-21 14:11:11 +00:00
utils.cc [inspector][fuzzer] Extract functionality for reuse 2020-10-28 08:37:25 +00:00
utils.h [inspector][fuzzer] Extract functionality for reuse 2020-10-28 08:37:25 +00:00
wasm-inspector-test.js [inspector] Remove special wasm RemoteObject type. 2021-01-08 02:40:54 +00:00