Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[v18.x] backport various patches of internal refactorings for snapshot and realms #45007

Closed

Commits on Oct 14, 2022

  1. src: add initial shadow realm support

    Add initial shadow realm support behind an off-by-default flag
    `--experimental-shadow-realm`.
    
    PR-URL: nodejs#42869
    Refs: nodejs#42528
    Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
    Reviewed-By: Darshan Sen <raisinten@gmail.com>
    legendecas authored and joyeecheung committed Oct 14, 2022
    Configuration menu
    Copy the full SHA
    c13a4bc View commit details
    Browse the repository at this point in the history
  2. src: per-environment time origin value

    According to https://html.spec.whatwg.org/#environment-settings-object,
    the timeOrigin is a per-environment value. Worker's timeOrigin is the
    time when the worker is created.
    
    PR-URL: nodejs#43781
    Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
    Reviewed-By: Anna Henningsen <anna@addaleax.net>
    Reviewed-By: Paolo Insogna <paolo@cowtech.it>
    Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
    legendecas authored and joyeecheung committed Oct 14, 2022
    Configuration menu
    Copy the full SHA
    99e2a11 View commit details
    Browse the repository at this point in the history
  3. src: fix cppgc incompatibility in v8

    This patch updates the layout of the BaseObjects to make sure
    that the first embedder field of them is a "type" pointer, the
    first 16 bits of which are the Node.js embedder ID, so that
    cppgc will always skip over them. In addition we now use this
    field to determine if the native object should be interpreted
    as a Node.js embedder object in the serialization and deserialization
    callbacks for the startup snapshot to improve the reliability.
    
    Co-authored-by: Joyee Cheung <joyeec9h3@gmail.com>
    PR-URL: nodejs#43521
    Reviewed-By: James M Snell <jasnell@gmail.com>
    Reviewed-By: Darshan Sen <raisinten@gmail.com>
    codebytere and joyeecheung committed Oct 14, 2022
    Configuration menu
    Copy the full SHA
    4ce5f39 View commit details
    Browse the repository at this point in the history
  4. bootstrap: check more metadata when loading the snapshot

    This patch stores the metadata about the Node.js binary
    into the SnapshotData and adds fields denoting how the
    snapshot was generated, on what platform it was
    generated as well as the V8 cached data version flag.
    Instead of simply crashing when the metadata doesn't
    match, Node.js now prints an error message and exit with
    1 for the customized snapshot, or ignore the snapshot
    and start from scratch if it's the default one.
    
    PR-URL: nodejs#44132
    Reviewed-By: Anna Henningsen <anna@addaleax.net>
    Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
    joyeecheung committed Oct 14, 2022
    Configuration menu
    Copy the full SHA
    7847629 View commit details
    Browse the repository at this point in the history
  5. src: iterate over base objects to prepare for snapshot

    Instead of iterating over the bindings, iterate over the base
    objects that are snapshottable. This allows us to snapshot
    base objects that are not bindings. In addition this refactors
    the InternalFieldInfo class to eliminate potential undefined
    behaviors, and renames it to InternalFieldInfoBase.
    The {de}serialize callbacks now expect a InternalFieldInfo struct
    nested in Snapshotable classes that can be used to carry
    serialization data around. This allows us to create structs
    inheriting from InternalFieldInfo for Snapshotable objects
    that need custom fields.
    
    PR-URL: nodejs#44192
    Refs: nodejs#37476
    Reviewed-By: Anna Henningsen <anna@addaleax.net>
    Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
    joyeecheung committed Oct 14, 2022
    Configuration menu
    Copy the full SHA
    5144634 View commit details
    Browse the repository at this point in the history
  6. src: support WeakReference in snapshot

    Move util::WeakReference to a separate header and implement
    {de}serialization for it to be snapshotable.
    
    PR-URL: nodejs#44193
    Refs: nodejs#44014
    Refs: nodejs#37476
    Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
    Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
    joyeecheung committed Oct 14, 2022
    Configuration menu
    Copy the full SHA
    4670f7c View commit details
    Browse the repository at this point in the history
  7. src: introduce node::Realm

    To distinguish per-context values from the node::Environment, split
    those values to a new node::Realm structure and consolidate
    bootstrapping methods with it.
    
    PR-URL: nodejs#44179
    Refs: nodejs#42528
    Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
    Reviewed-By: James M Snell <jasnell@gmail.com>
    legendecas authored and joyeecheung committed Oct 14, 2022
    Configuration menu
    Copy the full SHA
    4dd707a View commit details
    Browse the repository at this point in the history

Commits on Oct 17, 2022

  1. src: create BaseObject with node::Realm

    BaseObject is a wrapper around JS objects. These objects should be
    created in a node::Realm and destroyed when their associated realm is
    cleaning up.
    
    PR-URL: nodejs#44348
    Refs: nodejs#42528
    Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
    legendecas authored and joyeecheung committed Oct 17, 2022
    Configuration menu
    Copy the full SHA
    95d5daf View commit details
    Browse the repository at this point in the history
  2. src: refactor BaseObject methods

    - Wrap the initialization of the kSlot and kEmbedderType fields
      into a BaseObject::SetInternalFields() method.
    - Move the tagging of kEmbedderType field into
      BaseObject::TagNodeObject()
    - Add a variant of BaseObject::MakeLazilyInitializedJSTemplate()
      that only needs IsolateData.
    This makes it easier to create BaseObject subclasses.
    
    PR-URL: nodejs#44796
    Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
    Reviewed-By: James M Snell <jasnell@gmail.com>
    joyeecheung committed Oct 17, 2022
    Configuration menu
    Copy the full SHA
    7499284 View commit details
    Browse the repository at this point in the history
  3. benchmark: add vm context global proxy benchmark

    PR-URL: nodejs#44796
    Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
    Reviewed-By: James M Snell <jasnell@gmail.com>
    joyeecheung committed Oct 17, 2022
    Configuration menu
    Copy the full SHA
    d2192e6 View commit details
    Browse the repository at this point in the history
  4. vm: make ContextifyContext a BaseObject

    Instead of adding a reference to the ContextifyContext by using
    a v8::External, we make ContextifyContext a weak BaseObject that
    whose wrapper is referenced by the sandbox via a private symbol.
    This makes it easier to snapshot the contexts, in addition to
    reusing the BaseObject lifetime management for ContextifyContexts.
    
    PR-URL: nodejs#44796
    Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
    Reviewed-By: James M Snell <jasnell@gmail.com>
    joyeecheung committed Oct 17, 2022
    Configuration menu
    Copy the full SHA
    45f23ef View commit details
    Browse the repository at this point in the history

Commits on Oct 26, 2022

  1. Configuration menu
    Copy the full SHA
    9f90e65 View commit details
    Browse the repository at this point in the history