diff --git a/.github/workflows/test-package.yml b/.github/workflows/test-package.yml
index 10067f1..40fa029 100644
--- a/.github/workflows/test-package.yml
+++ b/.github/workflows/test-package.yml
@@ -46,7 +46,7 @@
       fail-fast: false
       matrix:
         os: [ubuntu-latest, macos-latest, windows-latest]
-        sdk: [2.18.0, dev]
+        sdk: [2.19.0, dev]
     steps:
       - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744
       - uses: dart-lang/setup-dart@8a4b97ea2017cc079571daec46542f76189836b1
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 588b26e..71ca39c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,8 +1,9 @@
-## 1.6.4-wip.
+## 1.6.4
 
 - allow omitting space between `//` and `coverage` in coverage ignore comments
 - allow text after coverage ignore comments
 - throw FormatException when encountering unbalanced ignore comments instead of silently erroring
+- Update `package:vm_service` constraints to '>= 9.4.0 <12.0.0'.
 
 ## 1.6.3
 
diff --git a/pubspec.yaml b/pubspec.yaml
index 1411ae8..a749847 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,10 +1,10 @@
 name: coverage
-version: 1.6.3
+version: 1.6.4
 description: Coverage data manipulation and formatting
 repository: https://github.com/dart-lang/coverage
 
 environment:
-  sdk: '>=2.18.0 <3.0.0'
+  sdk: '>=2.18.0 <4.0.0'
 
 dependencies:
   args: ^2.0.0
@@ -13,7 +13,7 @@
   path: ^1.8.0
   source_maps: ^0.10.10
   stack_trace: ^1.10.0
-  vm_service: '>=9.4.0 <12.0.0'
+  vm_service: '>=11.9.0 <13.0.0'
 
 dev_dependencies:
   benchmark_harness: ^2.2.0
diff --git a/test/collect_coverage_mock_test.mocks.dart b/test/collect_coverage_mock_test.mocks.dart
index 5bc6663..efdb260 100644
--- a/test/collect_coverage_mock_test.mocks.dart
+++ b/test/collect_coverage_mock_test.mocks.dart
@@ -1,4 +1,4 @@
-// Mocks generated by Mockito 5.3.2 from annotations
+// Mocks generated by Mockito 5.4.2 from annotations
 // in coverage/test/collect_coverage_mock_test.dart.
 // Do not manually edit this file.
 
@@ -111,8 +111,8 @@
         );
 }
 
-class _FakeIsolate_9 extends _i1.SmartFake implements _i2.Isolate {
-  _FakeIsolate_9(
+class _FakeInstanceRef_9 extends _i1.SmartFake implements _i2.InstanceRef {
+  _FakeInstanceRef_9(
     Object parent,
     Invocation parentInvocation,
   ) : super(
@@ -121,8 +121,8 @@
         );
 }
 
-class _FakeIsolateGroup_10 extends _i1.SmartFake implements _i2.IsolateGroup {
-  _FakeIsolateGroup_10(
+class _FakeIsolate_10 extends _i1.SmartFake implements _i2.Isolate {
+  _FakeIsolate_10(
     Object parent,
     Invocation parentInvocation,
   ) : super(
@@ -131,8 +131,8 @@
         );
 }
 
-class _FakeMemoryUsage_11 extends _i1.SmartFake implements _i2.MemoryUsage {
-  _FakeMemoryUsage_11(
+class _FakeIsolateGroup_11 extends _i1.SmartFake implements _i2.IsolateGroup {
+  _FakeIsolateGroup_11(
     Object parent,
     Invocation parentInvocation,
   ) : super(
@@ -141,8 +141,8 @@
         );
 }
 
-class _FakeScriptList_12 extends _i1.SmartFake implements _i2.ScriptList {
-  _FakeScriptList_12(
+class _FakeEvent_12 extends _i1.SmartFake implements _i2.Event {
+  _FakeEvent_12(
     Object parent,
     Invocation parentInvocation,
   ) : super(
@@ -151,8 +151,8 @@
         );
 }
 
-class _FakeObj_13 extends _i1.SmartFake implements _i2.Obj {
-  _FakeObj_13(
+class _FakeMemoryUsage_13 extends _i1.SmartFake implements _i2.MemoryUsage {
+  _FakeMemoryUsage_13(
     Object parent,
     Invocation parentInvocation,
   ) : super(
@@ -161,8 +161,8 @@
         );
 }
 
-class _FakePortList_14 extends _i1.SmartFake implements _i2.PortList {
-  _FakePortList_14(
+class _FakeScriptList_14 extends _i1.SmartFake implements _i2.ScriptList {
+  _FakeScriptList_14(
     Object parent,
     Invocation parentInvocation,
   ) : super(
@@ -171,8 +171,8 @@
         );
 }
 
-class _FakeRetainingPath_15 extends _i1.SmartFake implements _i2.RetainingPath {
-  _FakeRetainingPath_15(
+class _FakeObj_15 extends _i1.SmartFake implements _i2.Obj {
+  _FakeObj_15(
     Object parent,
     Invocation parentInvocation,
   ) : super(
@@ -181,9 +181,51 @@
         );
 }
 
-class _FakeProcessMemoryUsage_16 extends _i1.SmartFake
+class _FakePerfettoCpuSamples_16 extends _i1.SmartFake
+    implements _i2.PerfettoCpuSamples {
+  _FakePerfettoCpuSamples_16(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakePerfettoTimeline_17 extends _i1.SmartFake
+    implements _i2.PerfettoTimeline {
+  _FakePerfettoTimeline_17(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakePortList_18 extends _i1.SmartFake implements _i2.PortList {
+  _FakePortList_18(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeRetainingPath_19 extends _i1.SmartFake implements _i2.RetainingPath {
+  _FakeRetainingPath_19(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeProcessMemoryUsage_20 extends _i1.SmartFake
     implements _i2.ProcessMemoryUsage {
-  _FakeProcessMemoryUsage_16(
+  _FakeProcessMemoryUsage_20(
     Object parent,
     Invocation parentInvocation,
   ) : super(
@@ -192,8 +234,8 @@
         );
 }
 
-class _FakeStack_17 extends _i1.SmartFake implements _i2.Stack {
-  _FakeStack_17(
+class _FakeStack_21 extends _i1.SmartFake implements _i2.Stack {
+  _FakeStack_21(
     Object parent,
     Invocation parentInvocation,
   ) : super(
@@ -202,8 +244,8 @@
         );
 }
 
-class _FakeProtocolList_18 extends _i1.SmartFake implements _i2.ProtocolList {
-  _FakeProtocolList_18(
+class _FakeProtocolList_22 extends _i1.SmartFake implements _i2.ProtocolList {
+  _FakeProtocolList_22(
     Object parent,
     Invocation parentInvocation,
   ) : super(
@@ -212,8 +254,8 @@
         );
 }
 
-class _FakeSourceReport_19 extends _i1.SmartFake implements _i2.SourceReport {
-  _FakeSourceReport_19(
+class _FakeSourceReport_23 extends _i1.SmartFake implements _i2.SourceReport {
+  _FakeSourceReport_23(
     Object parent,
     Invocation parentInvocation,
   ) : super(
@@ -222,8 +264,8 @@
         );
 }
 
-class _FakeVersion_20 extends _i1.SmartFake implements _i2.Version {
-  _FakeVersion_20(
+class _FakeVersion_24 extends _i1.SmartFake implements _i2.Version {
+  _FakeVersion_24(
     Object parent,
     Invocation parentInvocation,
   ) : super(
@@ -232,8 +274,8 @@
         );
 }
 
-class _FakeVM_21 extends _i1.SmartFake implements _i2.VM {
-  _FakeVM_21(
+class _FakeVM_25 extends _i1.SmartFake implements _i2.VM {
+  _FakeVM_25(
     Object parent,
     Invocation parentInvocation,
   ) : super(
@@ -242,8 +284,8 @@
         );
 }
 
-class _FakeTimeline_22 extends _i1.SmartFake implements _i2.Timeline {
-  _FakeTimeline_22(
+class _FakeTimeline_26 extends _i1.SmartFake implements _i2.Timeline {
+  _FakeTimeline_26(
     Object parent,
     Invocation parentInvocation,
   ) : super(
@@ -252,8 +294,8 @@
         );
 }
 
-class _FakeTimelineFlags_23 extends _i1.SmartFake implements _i2.TimelineFlags {
-  _FakeTimelineFlags_23(
+class _FakeTimelineFlags_27 extends _i1.SmartFake implements _i2.TimelineFlags {
+  _FakeTimelineFlags_27(
     Object parent,
     Invocation parentInvocation,
   ) : super(
@@ -262,8 +304,8 @@
         );
 }
 
-class _FakeTimestamp_24 extends _i1.SmartFake implements _i2.Timestamp {
-  _FakeTimestamp_24(
+class _FakeTimestamp_28 extends _i1.SmartFake implements _i2.Timestamp {
+  _FakeTimestamp_28(
     Object parent,
     Invocation parentInvocation,
   ) : super(
@@ -272,8 +314,8 @@
         );
 }
 
-class _FakeUriList_25 extends _i1.SmartFake implements _i2.UriList {
-  _FakeUriList_25(
+class _FakeUriList_29 extends _i1.SmartFake implements _i2.UriList {
+  _FakeUriList_29(
     Object parent,
     Invocation parentInvocation,
   ) : super(
@@ -282,8 +324,8 @@
         );
 }
 
-class _FakeReloadReport_26 extends _i1.SmartFake implements _i2.ReloadReport {
-  _FakeReloadReport_26(
+class _FakeReloadReport_30 extends _i1.SmartFake implements _i2.ReloadReport {
+  _FakeReloadReport_30(
     Object parent,
     Invocation parentInvocation,
   ) : super(
@@ -305,76 +347,91 @@
         Invocation.getter(#onVMEvent),
         returnValue: _i3.Stream<_i2.Event>.empty(),
       ) as _i3.Stream<_i2.Event>);
+
   @override
   _i3.Stream<_i2.Event> get onIsolateEvent => (super.noSuchMethod(
         Invocation.getter(#onIsolateEvent),
         returnValue: _i3.Stream<_i2.Event>.empty(),
       ) as _i3.Stream<_i2.Event>);
+
   @override
   _i3.Stream<_i2.Event> get onDebugEvent => (super.noSuchMethod(
         Invocation.getter(#onDebugEvent),
         returnValue: _i3.Stream<_i2.Event>.empty(),
       ) as _i3.Stream<_i2.Event>);
+
   @override
   _i3.Stream<_i2.Event> get onProfilerEvent => (super.noSuchMethod(
         Invocation.getter(#onProfilerEvent),
         returnValue: _i3.Stream<_i2.Event>.empty(),
       ) as _i3.Stream<_i2.Event>);
+
   @override
   _i3.Stream<_i2.Event> get onGCEvent => (super.noSuchMethod(
         Invocation.getter(#onGCEvent),
         returnValue: _i3.Stream<_i2.Event>.empty(),
       ) as _i3.Stream<_i2.Event>);
+
   @override
   _i3.Stream<_i2.Event> get onExtensionEvent => (super.noSuchMethod(
         Invocation.getter(#onExtensionEvent),
         returnValue: _i3.Stream<_i2.Event>.empty(),
       ) as _i3.Stream<_i2.Event>);
+
   @override
   _i3.Stream<_i2.Event> get onTimelineEvent => (super.noSuchMethod(
         Invocation.getter(#onTimelineEvent),
         returnValue: _i3.Stream<_i2.Event>.empty(),
       ) as _i3.Stream<_i2.Event>);
+
   @override
   _i3.Stream<_i2.Event> get onLoggingEvent => (super.noSuchMethod(
         Invocation.getter(#onLoggingEvent),
         returnValue: _i3.Stream<_i2.Event>.empty(),
       ) as _i3.Stream<_i2.Event>);
+
   @override
   _i3.Stream<_i2.Event> get onServiceEvent => (super.noSuchMethod(
         Invocation.getter(#onServiceEvent),
         returnValue: _i3.Stream<_i2.Event>.empty(),
       ) as _i3.Stream<_i2.Event>);
+
   @override
   _i3.Stream<_i2.Event> get onHeapSnapshotEvent => (super.noSuchMethod(
         Invocation.getter(#onHeapSnapshotEvent),
         returnValue: _i3.Stream<_i2.Event>.empty(),
       ) as _i3.Stream<_i2.Event>);
+
   @override
   _i3.Stream<_i2.Event> get onStdoutEvent => (super.noSuchMethod(
         Invocation.getter(#onStdoutEvent),
         returnValue: _i3.Stream<_i2.Event>.empty(),
       ) as _i3.Stream<_i2.Event>);
+
   @override
   _i3.Stream<_i2.Event> get onStderrEvent => (super.noSuchMethod(
         Invocation.getter(#onStderrEvent),
         returnValue: _i3.Stream<_i2.Event>.empty(),
       ) as _i3.Stream<_i2.Event>);
+
   @override
   _i3.Stream<String> get onSend => (super.noSuchMethod(
         Invocation.getter(#onSend),
         returnValue: _i3.Stream<String>.empty(),
       ) as _i3.Stream<String>);
+
   @override
   _i3.Stream<String> get onReceive => (super.noSuchMethod(
         Invocation.getter(#onReceive),
         returnValue: _i3.Stream<String>.empty(),
       ) as _i3.Stream<String>);
+
   @override
   _i3.Future<dynamic> get onDone => (super.noSuchMethod(
         Invocation.getter(#onDone),
         returnValue: _i3.Future<dynamic>.value(),
       ) as _i3.Future<dynamic>);
+
   @override
   _i3.Stream<_i2.Event> onEvent(String? streamId) => (super.noSuchMethod(
         Invocation.method(
@@ -383,6 +440,7 @@
         ),
         returnValue: _i3.Stream<_i2.Event>.empty(),
       ) as _i3.Stream<_i2.Event>);
+
   @override
   _i3.Future<_i2.Breakpoint> addBreakpoint(
     String? isolateId,
@@ -413,6 +471,7 @@
           ),
         )),
       ) as _i3.Future<_i2.Breakpoint>);
+
   @override
   _i3.Future<_i2.Breakpoint> addBreakpointWithScriptUri(
     String? isolateId,
@@ -443,6 +502,7 @@
           ),
         )),
       ) as _i3.Future<_i2.Breakpoint>);
+
   @override
   _i3.Future<_i2.Breakpoint> addBreakpointAtEntry(
     String? isolateId,
@@ -467,6 +527,7 @@
           ),
         )),
       ) as _i3.Future<_i2.Breakpoint>);
+
   @override
   _i3.Future<_i2.Success> clearCpuSamples(String? isolateId) =>
       (super.noSuchMethod(
@@ -482,6 +543,7 @@
           ),
         )),
       ) as _i3.Future<_i2.Success>);
+
   @override
   _i3.Future<_i2.Success> clearVMTimeline() => (super.noSuchMethod(
         Invocation.method(
@@ -496,6 +558,7 @@
           ),
         )),
       ) as _i3.Future<_i2.Success>);
+
   @override
   _i3.Future<_i2.Response> invoke(
     String? isolateId,
@@ -529,6 +592,7 @@
           ),
         )),
       ) as _i3.Future<_i2.Response>);
+
   @override
   _i3.Future<_i2.Response> evaluate(
     String? isolateId,
@@ -566,6 +630,7 @@
           ),
         )),
       ) as _i3.Future<_i2.Response>);
+
   @override
   _i3.Future<_i2.Response> evaluateInFrame(
     String? isolateId,
@@ -603,6 +668,7 @@
           ),
         )),
       ) as _i3.Future<_i2.Response>);
+
   @override
   _i3.Future<_i2.AllocationProfile> getAllocationProfile(
     String? isolateId, {
@@ -631,6 +697,7 @@
           ),
         )),
       ) as _i3.Future<_i2.AllocationProfile>);
+
   @override
   _i3.Future<_i2.CpuSamples> getAllocationTraces(
     String? isolateId, {
@@ -661,6 +728,7 @@
           ),
         )),
       ) as _i3.Future<_i2.CpuSamples>);
+
   @override
   _i3.Future<_i2.ClassList> getClassList(String? isolateId) =>
       (super.noSuchMethod(
@@ -676,6 +744,7 @@
           ),
         )),
       ) as _i3.Future<_i2.ClassList>);
+
   @override
   _i3.Future<_i2.CpuSamples> getCpuSamples(
     String? isolateId,
@@ -703,6 +772,7 @@
           ),
         )),
       ) as _i3.Future<_i2.CpuSamples>);
+
   @override
   _i3.Future<_i2.FlagList> getFlagList() => (super.noSuchMethod(
         Invocation.method(
@@ -717,6 +787,7 @@
           ),
         )),
       ) as _i3.Future<_i2.FlagList>);
+
   @override
   _i3.Future<_i2.InboundReferences> getInboundReferences(
     String? isolateId,
@@ -745,6 +816,7 @@
           ),
         )),
       ) as _i3.Future<_i2.InboundReferences>);
+
   @override
   _i3.Future<_i2.InstanceSet> getInstances(
     String? isolateId,
@@ -782,13 +854,49 @@
           ),
         )),
       ) as _i3.Future<_i2.InstanceSet>);
+
+  @override
+  _i3.Future<_i2.InstanceRef> getInstancesAsList(
+    String? isolateId,
+    String? objectId, {
+    bool? includeSubclasses,
+    bool? includeImplementers,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getInstancesAsList,
+          [
+            isolateId,
+            objectId,
+          ],
+          {
+            #includeSubclasses: includeSubclasses,
+            #includeImplementers: includeImplementers,
+          },
+        ),
+        returnValue: _i3.Future<_i2.InstanceRef>.value(_FakeInstanceRef_9(
+          this,
+          Invocation.method(
+            #getInstancesAsList,
+            [
+              isolateId,
+              objectId,
+            ],
+            {
+              #includeSubclasses: includeSubclasses,
+              #includeImplementers: includeImplementers,
+            },
+          ),
+        )),
+      ) as _i3.Future<_i2.InstanceRef>);
+
   @override
   _i3.Future<_i2.Isolate> getIsolate(String? isolateId) => (super.noSuchMethod(
         Invocation.method(
           #getIsolate,
           [isolateId],
         ),
-        returnValue: _i3.Future<_i2.Isolate>.value(_FakeIsolate_9(
+        returnValue: _i3.Future<_i2.Isolate>.value(_FakeIsolate_10(
           this,
           Invocation.method(
             #getIsolate,
@@ -796,6 +904,7 @@
           ),
         )),
       ) as _i3.Future<_i2.Isolate>);
+
   @override
   _i3.Future<_i2.IsolateGroup> getIsolateGroup(String? isolateGroupId) =>
       (super.noSuchMethod(
@@ -803,7 +912,7 @@
           #getIsolateGroup,
           [isolateGroupId],
         ),
-        returnValue: _i3.Future<_i2.IsolateGroup>.value(_FakeIsolateGroup_10(
+        returnValue: _i3.Future<_i2.IsolateGroup>.value(_FakeIsolateGroup_11(
           this,
           Invocation.method(
             #getIsolateGroup,
@@ -811,6 +920,23 @@
           ),
         )),
       ) as _i3.Future<_i2.IsolateGroup>);
+
+  @override
+  _i3.Future<_i2.Event> getIsolatePauseEvent(String? isolateId) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getIsolatePauseEvent,
+          [isolateId],
+        ),
+        returnValue: _i3.Future<_i2.Event>.value(_FakeEvent_12(
+          this,
+          Invocation.method(
+            #getIsolatePauseEvent,
+            [isolateId],
+          ),
+        )),
+      ) as _i3.Future<_i2.Event>);
+
   @override
   _i3.Future<_i2.MemoryUsage> getMemoryUsage(String? isolateId) =>
       (super.noSuchMethod(
@@ -818,7 +944,7 @@
           #getMemoryUsage,
           [isolateId],
         ),
-        returnValue: _i3.Future<_i2.MemoryUsage>.value(_FakeMemoryUsage_11(
+        returnValue: _i3.Future<_i2.MemoryUsage>.value(_FakeMemoryUsage_13(
           this,
           Invocation.method(
             #getMemoryUsage,
@@ -826,6 +952,7 @@
           ),
         )),
       ) as _i3.Future<_i2.MemoryUsage>);
+
   @override
   _i3.Future<_i2.MemoryUsage> getIsolateGroupMemoryUsage(
           String? isolateGroupId) =>
@@ -834,7 +961,7 @@
           #getIsolateGroupMemoryUsage,
           [isolateGroupId],
         ),
-        returnValue: _i3.Future<_i2.MemoryUsage>.value(_FakeMemoryUsage_11(
+        returnValue: _i3.Future<_i2.MemoryUsage>.value(_FakeMemoryUsage_13(
           this,
           Invocation.method(
             #getIsolateGroupMemoryUsage,
@@ -842,6 +969,7 @@
           ),
         )),
       ) as _i3.Future<_i2.MemoryUsage>);
+
   @override
   _i3.Future<_i2.ScriptList> getScripts(String? isolateId) =>
       (super.noSuchMethod(
@@ -849,7 +977,7 @@
           #getScripts,
           [isolateId],
         ),
-        returnValue: _i3.Future<_i2.ScriptList>.value(_FakeScriptList_12(
+        returnValue: _i3.Future<_i2.ScriptList>.value(_FakeScriptList_14(
           this,
           Invocation.method(
             #getScripts,
@@ -857,6 +985,7 @@
           ),
         )),
       ) as _i3.Future<_i2.ScriptList>);
+
   @override
   _i3.Future<_i2.Obj> getObject(
     String? isolateId,
@@ -876,7 +1005,7 @@
             #count: count,
           },
         ),
-        returnValue: _i3.Future<_i2.Obj>.value(_FakeObj_13(
+        returnValue: _i3.Future<_i2.Obj>.value(_FakeObj_15(
           this,
           Invocation.method(
             #getObject,
@@ -891,13 +1020,71 @@
           ),
         )),
       ) as _i3.Future<_i2.Obj>);
+
+  @override
+  _i3.Future<_i2.PerfettoCpuSamples> getPerfettoCpuSamples(
+    String? isolateId, {
+    int? timeOriginMicros,
+    int? timeExtentMicros,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getPerfettoCpuSamples,
+          [isolateId],
+          {
+            #timeOriginMicros: timeOriginMicros,
+            #timeExtentMicros: timeExtentMicros,
+          },
+        ),
+        returnValue:
+            _i3.Future<_i2.PerfettoCpuSamples>.value(_FakePerfettoCpuSamples_16(
+          this,
+          Invocation.method(
+            #getPerfettoCpuSamples,
+            [isolateId],
+            {
+              #timeOriginMicros: timeOriginMicros,
+              #timeExtentMicros: timeExtentMicros,
+            },
+          ),
+        )),
+      ) as _i3.Future<_i2.PerfettoCpuSamples>);
+
+  @override
+  _i3.Future<_i2.PerfettoTimeline> getPerfettoVMTimeline({
+    int? timeOriginMicros,
+    int? timeExtentMicros,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getPerfettoVMTimeline,
+          [],
+          {
+            #timeOriginMicros: timeOriginMicros,
+            #timeExtentMicros: timeExtentMicros,
+          },
+        ),
+        returnValue:
+            _i3.Future<_i2.PerfettoTimeline>.value(_FakePerfettoTimeline_17(
+          this,
+          Invocation.method(
+            #getPerfettoVMTimeline,
+            [],
+            {
+              #timeOriginMicros: timeOriginMicros,
+              #timeExtentMicros: timeExtentMicros,
+            },
+          ),
+        )),
+      ) as _i3.Future<_i2.PerfettoTimeline>);
+
   @override
   _i3.Future<_i2.PortList> getPorts(String? isolateId) => (super.noSuchMethod(
         Invocation.method(
           #getPorts,
           [isolateId],
         ),
-        returnValue: _i3.Future<_i2.PortList>.value(_FakePortList_14(
+        returnValue: _i3.Future<_i2.PortList>.value(_FakePortList_18(
           this,
           Invocation.method(
             #getPorts,
@@ -905,6 +1092,7 @@
           ),
         )),
       ) as _i3.Future<_i2.PortList>);
+
   @override
   _i3.Future<_i2.RetainingPath> getRetainingPath(
     String? isolateId,
@@ -920,7 +1108,7 @@
             limit,
           ],
         ),
-        returnValue: _i3.Future<_i2.RetainingPath>.value(_FakeRetainingPath_15(
+        returnValue: _i3.Future<_i2.RetainingPath>.value(_FakeRetainingPath_19(
           this,
           Invocation.method(
             #getRetainingPath,
@@ -932,6 +1120,7 @@
           ),
         )),
       ) as _i3.Future<_i2.RetainingPath>);
+
   @override
   _i3.Future<_i2.ProcessMemoryUsage> getProcessMemoryUsage() =>
       (super.noSuchMethod(
@@ -940,7 +1129,7 @@
           [],
         ),
         returnValue:
-            _i3.Future<_i2.ProcessMemoryUsage>.value(_FakeProcessMemoryUsage_16(
+            _i3.Future<_i2.ProcessMemoryUsage>.value(_FakeProcessMemoryUsage_20(
           this,
           Invocation.method(
             #getProcessMemoryUsage,
@@ -948,6 +1137,7 @@
           ),
         )),
       ) as _i3.Future<_i2.ProcessMemoryUsage>);
+
   @override
   _i3.Future<_i2.Stack> getStack(
     String? isolateId, {
@@ -959,7 +1149,7 @@
           [isolateId],
           {#limit: limit},
         ),
-        returnValue: _i3.Future<_i2.Stack>.value(_FakeStack_17(
+        returnValue: _i3.Future<_i2.Stack>.value(_FakeStack_21(
           this,
           Invocation.method(
             #getStack,
@@ -968,13 +1158,14 @@
           ),
         )),
       ) as _i3.Future<_i2.Stack>);
+
   @override
   _i3.Future<_i2.ProtocolList> getSupportedProtocols() => (super.noSuchMethod(
         Invocation.method(
           #getSupportedProtocols,
           [],
         ),
-        returnValue: _i3.Future<_i2.ProtocolList>.value(_FakeProtocolList_18(
+        returnValue: _i3.Future<_i2.ProtocolList>.value(_FakeProtocolList_22(
           this,
           Invocation.method(
             #getSupportedProtocols,
@@ -982,6 +1173,7 @@
           ),
         )),
       ) as _i3.Future<_i2.ProtocolList>);
+
   @override
   _i3.Future<_i2.SourceReport> getSourceReport(
     String? isolateId,
@@ -992,6 +1184,7 @@
     bool? forceCompile,
     bool? reportLines,
     List<String>? libraryFilters,
+    List<String>? librariesAlreadyCompiled,
   }) =>
       (super.noSuchMethod(
         Invocation.method(
@@ -1007,9 +1200,10 @@
             #forceCompile: forceCompile,
             #reportLines: reportLines,
             #libraryFilters: libraryFilters,
+            #librariesAlreadyCompiled: librariesAlreadyCompiled,
           },
         ),
-        returnValue: _i3.Future<_i2.SourceReport>.value(_FakeSourceReport_19(
+        returnValue: _i3.Future<_i2.SourceReport>.value(_FakeSourceReport_23(
           this,
           Invocation.method(
             #getSourceReport,
@@ -1024,17 +1218,19 @@
               #forceCompile: forceCompile,
               #reportLines: reportLines,
               #libraryFilters: libraryFilters,
+              #librariesAlreadyCompiled: librariesAlreadyCompiled,
             },
           ),
         )),
       ) as _i3.Future<_i2.SourceReport>);
+
   @override
   _i3.Future<_i2.Version> getVersion() => (super.noSuchMethod(
         Invocation.method(
           #getVersion,
           [],
         ),
-        returnValue: _i3.Future<_i2.Version>.value(_FakeVersion_20(
+        returnValue: _i3.Future<_i2.Version>.value(_FakeVersion_24(
           this,
           Invocation.method(
             #getVersion,
@@ -1042,13 +1238,14 @@
           ),
         )),
       ) as _i3.Future<_i2.Version>);
+
   @override
   _i3.Future<_i2.VM> getVM() => (super.noSuchMethod(
         Invocation.method(
           #getVM,
           [],
         ),
-        returnValue: _i3.Future<_i2.VM>.value(_FakeVM_21(
+        returnValue: _i3.Future<_i2.VM>.value(_FakeVM_25(
           this,
           Invocation.method(
             #getVM,
@@ -1056,6 +1253,7 @@
           ),
         )),
       ) as _i3.Future<_i2.VM>);
+
   @override
   _i3.Future<_i2.Timeline> getVMTimeline({
     int? timeOriginMicros,
@@ -1070,7 +1268,7 @@
             #timeExtentMicros: timeExtentMicros,
           },
         ),
-        returnValue: _i3.Future<_i2.Timeline>.value(_FakeTimeline_22(
+        returnValue: _i3.Future<_i2.Timeline>.value(_FakeTimeline_26(
           this,
           Invocation.method(
             #getVMTimeline,
@@ -1082,13 +1280,14 @@
           ),
         )),
       ) as _i3.Future<_i2.Timeline>);
+
   @override
   _i3.Future<_i2.TimelineFlags> getVMTimelineFlags() => (super.noSuchMethod(
         Invocation.method(
           #getVMTimelineFlags,
           [],
         ),
-        returnValue: _i3.Future<_i2.TimelineFlags>.value(_FakeTimelineFlags_23(
+        returnValue: _i3.Future<_i2.TimelineFlags>.value(_FakeTimelineFlags_27(
           this,
           Invocation.method(
             #getVMTimelineFlags,
@@ -1096,13 +1295,14 @@
           ),
         )),
       ) as _i3.Future<_i2.TimelineFlags>);
+
   @override
   _i3.Future<_i2.Timestamp> getVMTimelineMicros() => (super.noSuchMethod(
         Invocation.method(
           #getVMTimelineMicros,
           [],
         ),
-        returnValue: _i3.Future<_i2.Timestamp>.value(_FakeTimestamp_24(
+        returnValue: _i3.Future<_i2.Timestamp>.value(_FakeTimestamp_28(
           this,
           Invocation.method(
             #getVMTimelineMicros,
@@ -1110,6 +1310,7 @@
           ),
         )),
       ) as _i3.Future<_i2.Timestamp>);
+
   @override
   _i3.Future<_i2.Success> pause(String? isolateId) => (super.noSuchMethod(
         Invocation.method(
@@ -1124,6 +1325,7 @@
           ),
         )),
       ) as _i3.Future<_i2.Success>);
+
   @override
   _i3.Future<_i2.Success> kill(String? isolateId) => (super.noSuchMethod(
         Invocation.method(
@@ -1138,6 +1340,7 @@
           ),
         )),
       ) as _i3.Future<_i2.Success>);
+
   @override
   _i3.Future<_i2.UriList> lookupResolvedPackageUris(
     String? isolateId,
@@ -1153,7 +1356,7 @@
           ],
           {#local: local},
         ),
-        returnValue: _i3.Future<_i2.UriList>.value(_FakeUriList_25(
+        returnValue: _i3.Future<_i2.UriList>.value(_FakeUriList_29(
           this,
           Invocation.method(
             #lookupResolvedPackageUris,
@@ -1165,6 +1368,7 @@
           ),
         )),
       ) as _i3.Future<_i2.UriList>);
+
   @override
   _i3.Future<_i2.UriList> lookupPackageUris(
     String? isolateId,
@@ -1178,7 +1382,7 @@
             uris,
           ],
         ),
-        returnValue: _i3.Future<_i2.UriList>.value(_FakeUriList_25(
+        returnValue: _i3.Future<_i2.UriList>.value(_FakeUriList_29(
           this,
           Invocation.method(
             #lookupPackageUris,
@@ -1189,6 +1393,7 @@
           ),
         )),
       ) as _i3.Future<_i2.UriList>);
+
   @override
   _i3.Future<_i2.Success> registerService(
     String? service,
@@ -1213,6 +1418,7 @@
           ),
         )),
       ) as _i3.Future<_i2.Success>);
+
   @override
   _i3.Future<_i2.ReloadReport> reloadSources(
     String? isolateId, {
@@ -1232,7 +1438,7 @@
             #packagesUri: packagesUri,
           },
         ),
-        returnValue: _i3.Future<_i2.ReloadReport>.value(_FakeReloadReport_26(
+        returnValue: _i3.Future<_i2.ReloadReport>.value(_FakeReloadReport_30(
           this,
           Invocation.method(
             #reloadSources,
@@ -1246,6 +1452,7 @@
           ),
         )),
       ) as _i3.Future<_i2.ReloadReport>);
+
   @override
   _i3.Future<_i2.Success> removeBreakpoint(
     String? isolateId,
@@ -1270,6 +1477,7 @@
           ),
         )),
       ) as _i3.Future<_i2.Success>);
+
   @override
   _i3.Future<_i2.Success> requestHeapSnapshot(String? isolateId) =>
       (super.noSuchMethod(
@@ -1285,6 +1493,7 @@
           ),
         )),
       ) as _i3.Future<_i2.Success>);
+
   @override
   _i3.Future<_i2.Success> resume(
     String? isolateId, {
@@ -1312,6 +1521,7 @@
           ),
         )),
       ) as _i3.Future<_i2.Success>);
+
   @override
   _i3.Future<_i2.Breakpoint> setBreakpointState(
     String? isolateId,
@@ -1339,6 +1549,7 @@
           ),
         )),
       ) as _i3.Future<_i2.Breakpoint>);
+
   @override
   _i3.Future<_i2.Success> setExceptionPauseMode(
     String? isolateId,
@@ -1363,6 +1574,7 @@
           ),
         )),
       ) as _i3.Future<_i2.Success>);
+
   @override
   _i3.Future<_i2.Success> setIsolatePauseMode(
     String? isolateId, {
@@ -1390,6 +1602,7 @@
           ),
         )),
       ) as _i3.Future<_i2.Success>);
+
   @override
   _i3.Future<_i2.Response> setFlag(
     String? name,
@@ -1414,6 +1627,7 @@
           ),
         )),
       ) as _i3.Future<_i2.Response>);
+
   @override
   _i3.Future<_i2.Success> setLibraryDebuggable(
     String? isolateId,
@@ -1441,6 +1655,7 @@
           ),
         )),
       ) as _i3.Future<_i2.Success>);
+
   @override
   _i3.Future<_i2.Success> setName(
     String? isolateId,
@@ -1465,6 +1680,7 @@
           ),
         )),
       ) as _i3.Future<_i2.Success>);
+
   @override
   _i3.Future<_i2.Success> setTraceClassAllocation(
     String? isolateId,
@@ -1492,6 +1708,7 @@
           ),
         )),
       ) as _i3.Future<_i2.Success>);
+
   @override
   _i3.Future<_i2.Success> setVMName(String? name) => (super.noSuchMethod(
         Invocation.method(
@@ -1506,6 +1723,7 @@
           ),
         )),
       ) as _i3.Future<_i2.Success>);
+
   @override
   _i3.Future<_i2.Success> setVMTimelineFlags(List<String>? recordedStreams) =>
       (super.noSuchMethod(
@@ -1521,6 +1739,7 @@
           ),
         )),
       ) as _i3.Future<_i2.Success>);
+
   @override
   _i3.Future<_i2.Success> streamCancel(String? streamId) => (super.noSuchMethod(
         Invocation.method(
@@ -1535,6 +1754,7 @@
           ),
         )),
       ) as _i3.Future<_i2.Success>);
+
   @override
   _i3.Future<_i2.Success> streamCpuSamplesWithUserTag(List<String>? userTags) =>
       (super.noSuchMethod(
@@ -1550,6 +1770,7 @@
           ),
         )),
       ) as _i3.Future<_i2.Success>);
+
   @override
   _i3.Future<_i2.Success> streamListen(String? streamId) => (super.noSuchMethod(
         Invocation.method(
@@ -1564,6 +1785,7 @@
           ),
         )),
       ) as _i3.Future<_i2.Success>);
+
   @override
   _i3.Future<_i2.Response> callMethod(
     String? method, {
@@ -1591,6 +1813,7 @@
           ),
         )),
       ) as _i3.Future<_i2.Response>);
+
   @override
   _i3.Future<_i2.Response> callServiceExtension(
     String? method, {
@@ -1618,6 +1841,7 @@
           ),
         )),
       ) as _i3.Future<_i2.Response>);
+
   @override
   _i3.Future<void> dispose() => (super.noSuchMethod(
         Invocation.method(
@@ -1627,6 +1851,7 @@
         returnValue: _i3.Future<void>.value(),
         returnValueForMissingStub: _i3.Future<void>.value(),
       ) as _i3.Future<void>);
+
   @override
   void registerServiceCallback(
     String? service,
