Skip to content

inspector: support non-V8 dispatchers #7393

Description

@joshgav

Background

In #7266 (comment) we began discussing separating the Inspector Protocol front-end from the V8-specific backend implementation in Google's v8_inspector contribution.

I believe we should do this so that the same Inspector Agent and Protocol Gateway in Node.js work with multiple backend implementations, starting with V8 Inspector. This would let other VM vendors create backends optimized for their APIs and capabilities, and would facilitate others adding new capabilities to the protocol through their own implementations.

If we don't do this other VMs would have to provide an alternate agent, gateway, and backend implementation for their diagnostic system; or provide (yet another) shim to V8's C++ diagnostic APIs.

Proof of Concept

To prove the concept, I implemented most of the separation in just this small commit: joshgav@5f2507d. The main changes are:

  • Add Inspector.h|cpp to ./deps/v8_inspector/platform/inspector_protocol as base class for all backend implementations, starting with V8Inspector in ./deps/v8_inspector/platform/v8_inspector/public/V8Inspector.h.
  • Refactor v8_inspector.gyp file into two - one for generating and compiling the protocol frontend and one for the backend implementation.
  • Configure ./src/inspector_agent.h|cc to dynamically load the correct backend implementation.
    • Note: Marked with a TODO because there are several ways to do this.

So, @nodejs/collaborators and @pavelfeldman:

  • In theory, what do you think of the proposal?
  • In practice, how can we implement this in cooperation with upstream?

One option could be to create an "inspector-gateway" repo in the nodejs org and maintain the protocol frontend there as an open project. We'd then include it in ./deps like other upstream dependencies.


Related

/cc @nodejs/diagnostics @thealphanerd @ofrobots @pavelfeldman @nodejs/chakracore @ehsan

Edits:
edit (2016-06-24): fix issue title to better match conventions

Activity

  1. pavelfeldman commented on Jun 23, 2016

    @pavelfeldman
    Contributor

    In practice, how can we implement this in cooperation with upstream?

    Overall, given that the protocol format is stable and the code generator is only a 2KLOC, cloning it for the sake of making progress would also work. Reusing some of it also makes sense and we are trying to land it as v8's dependency that embedder can control (similarly to ICU). But there are too many moving parts for us as we are moving v8_inspector from Blink to V8, so we'd rather let the dust settle before we think about it.

  2. added
    inspectorIssues and PRs related to the V8 inspector protocol.
    discussIssues opened for discussion and feedback.
    on Jun 23, 2016
  3. changed the title [-]Proposal: Separate Inspector Protocol Gateway from V8-specific backend implementation[/-] [+]inspector: proposal: separate Inspector Protocol gateway from V8 backend implementation[/+] on Jun 24, 2016
  4. changed the title [-]inspector: proposal: separate Inspector Protocol gateway from V8 backend implementation[/-] [+]inspector: proposal: separate Inspector protocol gateway from V8 backend implementation[/+] on Jun 24, 2016
  5. rvagg commented on Jun 27, 2016

    @rvagg
    Member

    Sounds good in theory. It doesn't seem like there's a big delta here so it's probably only worth it if most of it can be handled upstream.

  6. joshgav commented on Jun 29, 2016

    @joshgav
    ContributorAuthor

    Thanks @pavelfeldman and @rvagg, glad you like the idea in theory. Good point that the codebase is small and we could do this when we're ready without too much complication.

    Perhaps this would facilitate suggestions like microsoft/language-server-protocol#25?

    In the meantime how about I'll continue to monitor PRs and we all keep this in mind as the inspector component matures? @pavelfeldman any chance you can share a timeline?

    /cc @nojvek

  7. pavelfeldman commented on Jul 6, 2016

    @pavelfeldman
    Contributor

    any chance you can share a timeline

    Back from vacations, let me get back to you when I am up to speed with where we are.

  8. changed the title [-]inspector: proposal: separate Inspector protocol gateway from V8 backend implementation[/-] [+]inspector: proposal: separate Inspector protocol gateway to support multiple JS VMs[/+] on Oct 5, 2016
  9. changed the title [-]inspector: proposal: separate Inspector protocol gateway to support multiple JS VMs[/-] [+]inspector: proposal: separate protocol gateway to support multiple JS VMs[/+] on Oct 5, 2016
  10. changed the title [-]inspector: proposal: separate protocol gateway to support multiple JS VMs[/-] [+]inspector: support non-V8-specific dispatchers[/+] on Feb 27, 2017
  11. changed the title [-]inspector: support non-V8-specific dispatchers[/-] [+]inspector: support non-V8 dispatchers[/+] on Feb 27, 2017
  12. jasnell commented on May 30, 2017

    @jasnell
    Member

    ping @joshgav .. any progress on this?

  13. joshgav commented on May 30, 2017

    @joshgav
    ContributorAuthor

    the implementation I proposed here is no longer feasible so I'll close this issue.

    related discussions on Inspector extensibility continue in the Diag WG, particularly in nodejs/diagnostics#75 and nodejs/diagnostics#77

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    discussIssues opened for discussion and feedback.inspectorIssues and PRs related to the V8 inspector protocol.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions