Skip to content

Engine specific Service Protocol extensions

Ian Hickson edited this page Nov 5, 2018 · 9 revisions

The Flutter engine adds several extensions to the Dart VM Service Protocol. The Flutter Engine specific extensions are documented here. Applications may also choose to register their own extensions.

List Views: _flutter.listViews

Tooling requests this very early in the application lifecycle to ask for the details of the root isolate.

No arguments.

Response:

{
  "type": "FlutterViewList",
  "views": [
    {
      "type": "FlutterView",
      "id": "_flutterView/0x1066096d8",
      "isolate": {
        "type": "@Isolate",
        "fixedId": true,
        "id": "isolates/453229818",
        "name": "main.dart$main-453229818",
        "number": 453229818
      }
    }
  ]
}

Run In View (a.k.a Cold Reload, Cold Restart, Restart, Capital "R" Reload, Not-Hot Reload...): _flutter.runInView

The IDE has requested (or the user pressed ‘R’ from the ‘flutter run’ interactive console) a cold reload. For example, this happens when the user presses the green play button.

Used to "cold reload" a running application where the shell (along with the platform view and its rasterizer bindings) remains the same but the root isolate is torn down and restarted with the new configuration. Only used in the development workflow.

Four arguments:

viewId = _flutterView/0x14ba08c68
mainScript = /path/to/application/lib/main.dart
packagesFile = /path/to/application/.packages
assetDirectory = /path/to/application/build/flutter_assets

Response:

{
  "type": "Success",
  "view": {
    "type": "FlutterView",
    "id": "_flutterView/0x104e0ab58",
    "isolate": {
      "type": "@Isolate",
      "fixedId": true,
      "id": "isolates/1056589762",
      "name": "main.dart$main-1056589762",
      "number": 1056589762
    }
  }
}

The object in the view key is constructed in the same way as the views in the List Views method.

Flush UI Thread Tasks: _flutter.flushUIThreadTasks

Does nothing but waits for all pending tasks on the UI thread to be completed before returning success to the service protocol caller.

No arguments.

Response:

{"type": "Success"}

Screenshot view as PNG: _flutter.screenshot

Get the screenshot as PNG of a random Flutter view on the device.

No arguments.

Response:

{
  "type": "Screenshot",
  "screenshot": "<base64_data>"
}

Screenshot Skia Picture: _flutter.screenshotSkp

Get the Skia SKP of a random Flutter view on the device.

No arguments.

Response:

{
  "type": "ScreenshotSkp",
  "skp": "<base64_data>"
}

Update Asset Bundle Path: _flutter.setAssetBundlePath

In case of a hot-reload, the service protocol handles source code updates. However, there may be changes to assets. The DevFS updates assets in an separate directory that needs to be used by the engine.

Two arguments:

viewId = _flutterView/0x15bf057f8
assetDirectory = /path/to/flutter_assets

Response:

{
  "type": "Success",
  "view": {
    "type": "FlutterView",
    "id": "_flutterView/0x104e0ab58",
    "isolate": {
      "type": "@Isolate",
      "fixedId": true,
      "id": "isolates/1056589762",
      "name": "main.dart$main-1056589762",
      "number": 1056589762
    }
  }
}

The object in the view key is constructed in the same way as the views in the List Views method.

Flutter Wiki

Process

Framework repo

Engine repo

Android

Plugins and packages repos

Infrastructure

Release Information

Experimental features

Clone this wiki locally