Version 2.14.0-65.0.dev

Merge commit '60d149d835254cb6e74bb44f35d44186e0dacb5d' into 'dev'
diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc
index 73cd2e5..00032a4 100644
--- a/runtime/vm/service.cc
+++ b/runtime/vm/service.cc
@@ -782,7 +782,7 @@
   const char* const* enums_;
 };
 
-typedef bool (*ServiceMethodEntry)(Thread* thread, JSONStream* js);
+typedef void (*ServiceMethodEntry)(Thread* thread, JSONStream* js);
 
 struct ServiceMethodDescriptor {
   const char* name;
@@ -925,13 +925,8 @@
         js.PostReply();
         return T->StealStickyError();
       }
-      if (method->entry(T, &js)) {
-        js.PostReply();
-      } else {
-        // NOTE(turnidge): All message handlers currently return true,
-        // so this case shouldn't be reached, at present.
-        UNIMPLEMENTED();
-      }
+      method->entry(T, &js);
+      js.PostReply();
       return T->StealStickyError();
     }
 
@@ -1405,9 +1400,8 @@
     NULL,
 };
 
-static bool GetIsolate(Thread* thread, JSONStream* js) {
+static void GetIsolate(Thread* thread, JSONStream* js) {
   thread->isolate()->PrintJSON(js, false);
-  return true;
 }
 
 static const MethodParameter* get_isolate_group_params[] = {
@@ -1462,11 +1456,10 @@
       /*if_not_found=*/[&js]() { PrintSentinel(js, kExpiredSentinel); });
 }
 
-static bool GetIsolateGroup(Thread* thread, JSONStream* js) {
+static void GetIsolateGroup(Thread* thread, JSONStream* js) {
   ActOnIsolateGroup(js, [&](IsolateGroup* isolate_group) {
     isolate_group->PrintJSON(js, false);
   });
-  return true;
 }
 
 static const MethodParameter* get_memory_usage_params[] = {
@@ -1474,9 +1467,8 @@
     NULL,
 };
 
-static bool GetMemoryUsage(Thread* thread, JSONStream* js) {
+static void GetMemoryUsage(Thread* thread, JSONStream* js) {
   thread->isolate()->PrintMemoryUsageJSON(js);
-  return true;
 }
 
 static const MethodParameter* get_isolate_group_memory_usage_params[] = {
@@ -1484,11 +1476,10 @@
     NULL,
 };
 
-static bool GetIsolateGroupMemoryUsage(Thread* thread, JSONStream* js) {
+static void GetIsolateGroupMemoryUsage(Thread* thread, JSONStream* js) {
   ActOnIsolateGroup(js, [&](IsolateGroup* isolate_group) {
     isolate_group->PrintMemoryUsageJSON(js);
   });
-  return true;
 }
 
 static const MethodParameter* get_scripts_params[] = {
@@ -1496,7 +1487,7 @@
     NULL,
 };
 
-static bool GetScripts(Thread* thread, JSONStream* js) {
+static void GetScripts(Thread* thread, JSONStream* js) {
   auto object_store = thread->isolate_group()->object_store();
   Zone* zone = thread->zone();
 
@@ -1523,7 +1514,6 @@
       }
     }
   }
-  return true;
 }
 
 static const MethodParameter* get_stack_params[] = {
@@ -1532,9 +1522,9 @@
     NULL,
 };
 
-static bool GetStack(Thread* thread, JSONStream* js) {
+static void GetStack(Thread* thread, JSONStream* js) {
   if (CheckDebuggerDisabled(thread, js)) {
-    return true;
+    return;
   }
   intptr_t limit = 0;
   bool has_limit = js->HasParam("limit");
@@ -1542,7 +1532,7 @@
     limit = UIntParameter::Parse(js->LookupParam("limit"));
     if (limit < 0) {
       PrintInvalidParamError(js, "limit");
-      return true;
+      return;
     }
   }
   Isolate* isolate = thread->isolate();
@@ -1606,16 +1596,13 @@
     MessageHandler::AcquiredQueues aq(isolate->message_handler());
     jsobj.AddProperty("messages", aq.queue());
   }
-
-  return true;
 }
 
-static bool HandleCommonEcho(JSONObject* jsobj, JSONStream* js) {
+static void HandleCommonEcho(JSONObject* jsobj, JSONStream* js) {
   jsobj->AddProperty("type", "_EchoResponse");
   if (js->HasParam("text")) {
     jsobj->AddProperty("text", js->LookupParam("text"));
   }
-  return true;
 }
 
 void Service::SendEchoEvent(Isolate* isolate, const char* text) {
@@ -1651,17 +1638,17 @@
                     data_size);
 }
 
-static bool TriggerEchoEvent(Thread* thread, JSONStream* js) {
+static void TriggerEchoEvent(Thread* thread, JSONStream* js) {
   if (Service::echo_stream.enabled()) {
     Service::SendEchoEvent(thread->isolate(), js->LookupParam("text"));
   }
   JSONObject jsobj(js);
-  return HandleCommonEcho(&jsobj, js);
+  HandleCommonEcho(&jsobj, js);
 }
 
-static bool Echo(Thread* thread, JSONStream* js) {
+static void Echo(Thread* thread, JSONStream* js) {
   JSONObject jsobj(js);
-  return HandleCommonEcho(&jsobj, js);
+  HandleCommonEcho(&jsobj, js);
 }
 
 static bool ContainsNonInstance(const Object& obj) {
@@ -2121,7 +2108,7 @@
   return NULL;
 }
 
-static bool PrintInboundReferences(Thread* thread,
+static void PrintInboundReferences(Thread* thread,
                                    Object* target,
                                    intptr_t limit,
                                    JSONStream* js) {
@@ -2188,8 +2175,6 @@
   for (intptr_t i = 0; i < path.Length(); i++) {
     path.SetAt(i, Object::null_object());
   }
-
-  return true;
 }
 
 static const MethodParameter* get_inbound_references_params[] = {
@@ -2197,21 +2182,21 @@
     NULL,
 };
 
-static bool GetInboundReferences(Thread* thread, JSONStream* js) {
+static void GetInboundReferences(Thread* thread, JSONStream* js) {
   const char* target_id = js->LookupParam("targetId");
   if (target_id == NULL) {
     PrintMissingParamError(js, "targetId");
-    return true;
+    return;
   }
   const char* limit_cstr = js->LookupParam("limit");
   if (limit_cstr == NULL) {
     PrintMissingParamError(js, "limit");
-    return true;
+    return;
   }
   intptr_t limit;
   if (!GetIntegerId(limit_cstr, &limit)) {
     PrintInvalidParamError(js, "limit");
-    return true;
+    return;
   }
 
   Object& obj = Object::Handle(thread->zone());
@@ -2228,12 +2213,12 @@
     } else {
       PrintInvalidParamError(js, "targetId");
     }
-    return true;
+    return;
   }
-  return PrintInboundReferences(thread, &obj, limit, js);
+  PrintInboundReferences(thread, &obj, limit, js);
 }
 
-static bool PrintRetainingPath(Thread* thread,
+static void PrintRetainingPath(Thread* thread,
                                Object* obj,
                                intptr_t limit,
                                JSONStream* js) {
@@ -2323,8 +2308,6 @@
   for (intptr_t i = 0; i < path.Length(); i++) {
     path.SetAt(i, Object::null_object());
   }
-
-  return true;
 }
 
 static const MethodParameter* get_retaining_path_params[] = {
@@ -2332,21 +2315,21 @@
     NULL,
 };
 
-static bool GetRetainingPath(Thread* thread, JSONStream* js) {
+static void GetRetainingPath(Thread* thread, JSONStream* js) {
   const char* target_id = js->LookupParam("targetId");
   if (target_id == NULL) {
     PrintMissingParamError(js, "targetId");
-    return true;
+    return;
   }
   const char* limit_cstr = js->LookupParam("limit");
   if (limit_cstr == NULL) {
     PrintMissingParamError(js, "limit");
-    return true;
+    return;
   }
   intptr_t limit;
   if (!GetIntegerId(limit_cstr, &limit)) {
     PrintInvalidParamError(js, "limit");
-    return true;
+    return;
   }
 
   Object& obj = Object::Handle(thread->zone());
@@ -2363,9 +2346,9 @@
     } else {
       PrintInvalidParamError(js, "targetId");
     }
-    return true;
+    return;
   }
-  return PrintRetainingPath(thread, &obj, limit, js);
+  PrintRetainingPath(thread, &obj, limit, js);
 }
 
 static const MethodParameter* get_retained_size_params[] = {
@@ -2374,7 +2357,7 @@
     NULL,
 };
 
-static bool GetRetainedSize(Thread* thread, JSONStream* js) {
+static void GetRetainedSize(Thread* thread, JSONStream* js) {
   const char* target_id = js->LookupParam("targetId");
   ASSERT(target_id != NULL);
   ObjectIdRing::LookupResult lookup_result;
@@ -2388,7 +2371,7 @@
     } else {
       PrintInvalidParamError(js, "targetId");
     }
-    return true;
+    return;
   }
   // TODO(rmacnak): There is no way to get the size retained by a class object.
   // SizeRetainedByClass should be a separate RPC.
@@ -2398,14 +2381,13 @@
     intptr_t retained_size = graph.SizeRetainedByClass(cls.id());
     const Object& result = Object::Handle(Integer::New(retained_size));
     result.PrintJSON(js, true);
-    return true;
+    return;
   }
 
   ObjectGraph graph(thread);
   intptr_t retained_size = graph.SizeRetainedByInstance(obj);
   const Object& result = Object::Handle(Integer::New(retained_size));
   result.PrintJSON(js, true);
-  return true;
 }
 
 static const MethodParameter* get_reachable_size_params[] = {
@@ -2414,7 +2396,7 @@
     NULL,
 };
 
-static bool GetReachableSize(Thread* thread, JSONStream* js) {
+static void GetReachableSize(Thread* thread, JSONStream* js) {
   const char* target_id = js->LookupParam("targetId");
   ASSERT(target_id != NULL);
   ObjectIdRing::LookupResult lookup_result;
@@ -2428,7 +2410,7 @@
     } else {
       PrintInvalidParamError(js, "targetId");
     }
-    return true;
+    return;
   }
   // TODO(rmacnak): There is no way to get the size retained by a class object.
   // SizeRetainedByClass should be a separate RPC.
@@ -2438,14 +2420,13 @@
     intptr_t retained_size = graph.SizeReachableByClass(cls.id());
     const Object& result = Object::Handle(Integer::New(retained_size));
     result.PrintJSON(js, true);
-    return true;
+    return;
   }
 
   ObjectGraph graph(thread);
   intptr_t retained_size = graph.SizeReachableByInstance(obj);
   const Object& result = Object::Handle(Integer::New(retained_size));
   result.PrintJSON(js, true);
-  return true;
 }
 
 static const MethodParameter* invoke_params[] = {
@@ -2453,21 +2434,21 @@
     NULL,
 };
 
-static bool Invoke(Thread* thread, JSONStream* js) {
+static void Invoke(Thread* thread, JSONStream* js) {
   const char* receiver_id = js->LookupParam("targetId");
   if (receiver_id == NULL) {
     PrintMissingParamError(js, "targetId");
-    return true;
+    return;
   }
   const char* selector_cstr = js->LookupParam("selector");
   if (selector_cstr == NULL) {
     PrintMissingParamError(js, "selector");
-    return true;
+    return;
   }
   const char* argument_ids = js->LookupParam("argumentIds");
   if (argument_ids == NULL) {
     PrintMissingParamError(js, "argumentIds");
-    return true;
+    return;
   }
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
@@ -2489,7 +2470,7 @@
     } else {
       PrintInvalidParamError(js, "targetId");
     }
-    return true;
+    return;
   }
 
   const GrowableObjectArray& growable_args =
@@ -2504,7 +2485,7 @@
   intptr_t n = strlen(argument_ids);
   if ((n < 2) || (argument_ids[0] != '[') || (argument_ids[n - 1] != ']')) {
     PrintInvalidParamError(js, "argumentIds");
-    return true;
+    return;
   }
   if (n > 2) {
     intptr_t start = 1;
@@ -2516,7 +2497,7 @@
       if (end == start) {
         // Empty element.
         PrintInvalidParamError(js, "argumentIds");
-        return true;
+        return;
       }
 
       const char* argument_id =
@@ -2529,7 +2510,7 @@
       if (!(argument.IsInstance() || argument.IsNull()) ||
           ContainsNonInstance(argument)) {
         PrintInvalidParamError(js, "argumentIds");
-        return true;
+        return;
       }
       if (argument.ptr() == Object::sentinel().ptr()) {
         if (lookup_result == ObjectIdRing::kCollected) {
@@ -2539,7 +2520,7 @@
         } else {
           PrintInvalidParamError(js, "argumentIds");
         }
-        return true;
+        return;
       }
       growable_args.Add(argument);
 
@@ -2557,14 +2538,14 @@
     const Object& result =
         Object::Handle(zone, lib.Invoke(selector, args, arg_names));
     result.PrintJSON(js, true);
-    return true;
+    return;
   }
   if (receiver.IsClass()) {
     const Class& cls = Class::Cast(receiver);
     const Object& result =
         Object::Handle(zone, cls.Invoke(selector, args, arg_names));
     result.PrintJSON(js, true);
-    return true;
+    return;
   }
   if (is_instance) {
     // We don't use Instance::Cast here because it doesn't allow null.
@@ -2573,13 +2554,12 @@
     const Object& result =
         Object::Handle(zone, instance.Invoke(selector, args, arg_names));
     result.PrintJSON(js, true);
-    return true;
+    return;
   }
   js->PrintError(kInvalidParams,
                  "%s: invalid 'targetId' parameter: "
                  "Cannot invoke against a VM-internal object",
                  js->method());
-  return true;
 }
 
 static const MethodParameter* evaluate_params[] = {
@@ -2697,14 +2677,13 @@
   return false;
 }
 
-static bool Evaluate(Thread* thread, JSONStream* js) {
+static void Evaluate(Thread* thread, JSONStream* js) {
   // If a compilation service is available, this RPC invocation will have been
   // intercepted by RunningIsolates.routeRequest.
   js->PrintError(
       kExpressionCompilationError,
       "%s: No compilation service available; cannot evaluate from source.",
       js->method());
-  return true;
 }
 
 static const MethodParameter* build_expression_evaluation_scope_params[] = {
@@ -2714,9 +2693,9 @@
     NULL,
 };
 
-static bool BuildExpressionEvaluationScope(Thread* thread, JSONStream* js) {
+static void BuildExpressionEvaluationScope(Thread* thread, JSONStream* js) {
   if (CheckDebuggerDisabled(thread, js)) {
-    return true;
+    return;
   }
 
   Isolate* isolate = thread->isolate();
@@ -2724,7 +2703,7 @@
   intptr_t framePos = UIntParameter::Parse(js->LookupParam("frameIndex"));
   if (framePos >= stack->Length()) {
     PrintInvalidParamError(js, "frameIndex");
-    return true;
+    return;
   }
 
   Zone* zone = thread->zone();
@@ -2739,7 +2718,7 @@
   bool isStatic = false;
 
   if (BuildScope(thread, js, param_names, param_values)) {
-    return true;
+    return;
   }
 
   if (js->HasParam("frameIndex")) {
@@ -2748,7 +2727,7 @@
     intptr_t framePos = UIntParameter::Parse(js->LookupParam("frameIndex"));
     if (framePos >= stack->Length()) {
       PrintInvalidParamError(js, "frameIndex");
-      return true;
+      return;
     }
 
     ActivationFrame* frame = stack->FrameAt(framePos);
@@ -2772,7 +2751,7 @@
     if (!js->HasParam("targetId")) {
       js->PrintError(kInvalidParams,
                      "Either targetId or frameIndex has to be provided.");
-      return true;
+      return;
     }
     const char* target_id = js->LookupParam("targetId");
 
@@ -2781,7 +2760,7 @@
         zone, LookupHeapObject(thread, target_id, &lookup_result));
     if (obj.ptr() == Object::sentinel().ptr()) {
       PrintInvalidParamError(js, "targetId");
-      return true;
+      return;
     }
     if (obj.IsLibrary()) {
       const Library& lib = Library::Cast(obj);
@@ -2804,7 +2783,7 @@
         js->PrintError(
             kInvalidParams,
             "Expressions can be evaluated only with regular Dart instances");
-        return true;
+        return;
       }
 
       if (!cls.IsTopLevel()) {
@@ -2843,8 +2822,6 @@
     report.AddProperty("klass", klass_name.ToCString());
   }
   report.AddProperty("isStatic", isStatic);
-
-  return true;
 }
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
@@ -2895,13 +2872,12 @@
     NULL,
 };
 
-static bool CompileExpression(Thread* thread, JSONStream* js) {
+static void CompileExpression(Thread* thread, JSONStream* js) {
 #if defined(DART_PRECOMPILED_RUNTIME)
   js->PrintError(kFeatureDisabled, "Debugger is disabled in AOT mode.");
-  return true;
 #else
   if (CheckDebuggerDisabled(thread, js)) {
-    return true;
+    return;
   }
 
   if (!KernelIsolate::IsRunning() && !KernelIsolate::Start()) {
@@ -2909,7 +2885,7 @@
         kExpressionCompilationError,
         "%s: No compilation service available; cannot evaluate from source.",
         js->method());
-    return true;
+    return;
   }
 
   const char* klass = js->LookupParam("klass");
@@ -2920,14 +2896,14 @@
       GrowableObjectArray::Handle(thread->zone(), GrowableObjectArray::New());
   if (!ParseCSVList(js->LookupParam("definitions"), params)) {
     PrintInvalidParamError(js, "definitions");
-    return true;
+    return;
   }
 
   const GrowableObjectArray& type_params =
       GrowableObjectArray::Handle(thread->zone(), GrowableObjectArray::New());
   if (!ParseCSVList(js->LookupParam("typeDefinitions"), type_params)) {
     PrintInvalidParamError(js, "typedDefinitions");
-    return true;
+    return;
   }
 
   const uint8_t* kernel_buffer = Service::dart_library_kernel();
@@ -2943,7 +2919,7 @@
   if (compilation_result.status != Dart_KernelCompilationStatus_Ok) {
     js->PrintError(kExpressionCompilationError, "%s", compilation_result.error);
     free(compilation_result.error);
-    return true;
+    return;
   }
 
   const uint8_t* kernel_bytes = compilation_result.kernel;
@@ -2952,7 +2928,6 @@
 
   JSONObject report(js);
   report.AddPropertyBase64("kernelBytes", kernel_bytes, kernel_length);
-  return true;
 #endif
 }
 
@@ -2970,9 +2945,9 @@
   return ExternalTypedData::NewFinalizeWithFree(kernel_buffer, kernel_length);
 }
 
-static bool EvaluateCompiledExpression(Thread* thread, JSONStream* js) {
+static void EvaluateCompiledExpression(Thread* thread, JSONStream* js) {
   if (CheckDebuggerDisabled(thread, js)) {
-    return true;
+    return;
   }
 
   Isolate* isolate = thread->isolate();
@@ -2985,7 +2960,7 @@
   intptr_t frame_pos = UIntParameter::Parse(js->LookupParam("frameIndex"));
   if (frame_pos >= stack->Length()) {
     PrintInvalidParamError(js, "frameIndex");
-    return true;
+    return;
   }
   Zone* zone = thread->zone();
   const GrowableObjectArray& param_names =
@@ -2993,7 +2968,7 @@
   const GrowableObjectArray& param_values =
       GrowableObjectArray::Handle(zone, GrowableObjectArray::New());
   if (BuildScope(thread, js, param_names, param_values)) {
-    return true;
+    return;
   }
   const GrowableObjectArray& type_params_names =
       GrowableObjectArray::Handle(zone, GrowableObjectArray::New());
@@ -3006,7 +2981,7 @@
     intptr_t frame_pos = UIntParameter::Parse(js->LookupParam("frameIndex"));
     if (frame_pos >= stack->Length()) {
       PrintInvalidParamError(js, "frameIndex");
-      return true;
+      return;
     }
 
     ActivationFrame* frame = stack->FrameAt(frame_pos);
@@ -3022,13 +2997,12 @@
             Array::Handle(zone, Array::MakeFixedLength(param_values)),
             type_arguments));
     result.PrintJSON(js, true);
-    return true;
   } else {
     // evaluating expression in the context of a given object
     if (!js->HasParam("targetId")) {
       js->PrintError(kInvalidParams,
                      "Either targetId or frameIndex has to be provided.");
-      return true;
+      return;
     }
     const char* target_id = js->LookupParam("targetId");
     ObjectIdRing::LookupResult lookup_result;
@@ -3042,7 +3016,7 @@
       } else {
         PrintInvalidParamError(js, "targetId");
       }
-      return true;
+      return;
     }
     TypeArguments& type_arguments = TypeArguments::Handle(zone);
     if (obj.IsLibrary()) {
@@ -3055,7 +3029,7 @@
               Array::Handle(zone, Array::MakeFixedLength(param_values)),
               type_arguments));
       result.PrintJSON(js, true);
-      return true;
+      return;
     }
     if (obj.IsClass()) {
       const Class& cls = Class::Cast(obj);
@@ -3067,7 +3041,7 @@
               Array::Handle(zone, Array::MakeFixedLength(param_values)),
               type_arguments));
       result.PrintJSON(js, true);
-      return true;
+      return;
     }
     if ((obj.IsInstance() || obj.IsNull()) && !ContainsNonInstance(obj)) {
       // We don't use Instance::Cast here because it doesn't allow null.
@@ -3082,13 +3056,12 @@
               Array::Handle(zone, Array::MakeFixedLength(param_values)),
               type_arguments));
       result.PrintJSON(js, true);
-      return true;
+      return;
     }
     js->PrintError(kInvalidParams,
                    "%s: invalid 'targetId' parameter: "
                    "Cannot evaluate against a VM-internal object",
                    js->method());
-    return true;
   }
 }
 
@@ -3099,14 +3072,13 @@
     NULL,
 };
 
-static bool EvaluateInFrame(Thread* thread, JSONStream* js) {
+static void EvaluateInFrame(Thread* thread, JSONStream* js) {
   // If a compilation service is available, this RPC invocation will have been
   // intercepted by RunningIsolates.routeRequest.
   js->PrintError(
       kExpressionCompilationError,
       "%s: No compilation service available; cannot evaluate from source.",
       js->method());
-  return true;
 }
 
 static void MarkClasses(const Class& root,
@@ -3197,27 +3169,27 @@
     NULL,
 };
 
-static bool GetInstances(Thread* thread, JSONStream* js) {
+static void GetInstances(Thread* thread, JSONStream* js) {
   const char* object_id = js->LookupParam("objectId");
   if (object_id == NULL) {
     PrintMissingParamError(js, "objectId");
-    return true;
+    return;
   }
   const char* limit_cstr = js->LookupParam("limit");
   if (limit_cstr == NULL) {
     PrintMissingParamError(js, "limit");
-    return true;
+    return;
   }
   intptr_t limit;
   if (!GetIntegerId(limit_cstr, &limit)) {
     PrintInvalidParamError(js, "limit");
-    return true;
+    return;
   }
 
   const Object& obj = Object::Handle(LookupHeapObject(thread, object_id, NULL));
   if (obj.ptr() == Object::sentinel().ptr() || !obj.IsClass()) {
     PrintInvalidParamError(js, "objectId");
-    return true;
+    return;
   }
   const Class& cls = Class::Cast(obj);
 
@@ -3244,7 +3216,6 @@
       samples.AddValue(storage.At(i));
     }
   }
-  return true;
 }
 
 static const MethodParameter* get_instances_as_array_params[] = {
@@ -3252,11 +3223,11 @@
     NULL,
 };
 
-static bool GetInstancesAsArray(Thread* thread, JSONStream* js) {
+static void GetInstancesAsArray(Thread* thread, JSONStream* js) {
   const char* object_id = js->LookupParam("objectId");
   if (object_id == NULL) {
     PrintMissingParamError(js, "objectId");
-    return true;
+    return;
   }
 
   bool include_subclasses =
@@ -3267,7 +3238,7 @@
   const Object& obj = Object::Handle(LookupHeapObject(thread, object_id, NULL));
   if (obj.ptr() == Object::sentinel().ptr() || !obj.IsClass()) {
     PrintInvalidParamError(js, "objectId");
-    return true;
+    return;
   }
   const Class& cls = Class::Cast(obj);
 
@@ -3293,7 +3264,6 @@
     }
   }
   instances.PrintJSON(js, /* as_ref */ true);
-  return true;
 }
 
 static const MethodParameter* get_ports_params[] = {
@@ -3301,7 +3271,7 @@
     NULL,
 };
 
-static bool GetPorts(Thread* thread, JSONStream* js) {
+static void GetPorts(Thread* thread, JSONStream* js) {
   // Ensure the array and handles created below are promptly destroyed.
   StackZone zone(thread);
   HANDLESCOPE(thread);
@@ -3320,7 +3290,6 @@
       }
     }
   }
-  return true;
 }
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
@@ -3345,13 +3314,12 @@
     NULL,
 };
 
-static bool GetSourceReport(Thread* thread, JSONStream* js) {
+static void GetSourceReport(Thread* thread, JSONStream* js) {
 #if defined(DART_PRECOMPILED_RUNTIME)
   js->PrintError(kFeatureDisabled, "disabled in AOT mode and PRODUCT.");
-  return false;
 #else
   if (CheckCompilerDisabled(thread, js)) {
-    return true;
+    return;
   }
 
   const char* reports_str = js->LookupParam("reports");
@@ -3388,7 +3356,7 @@
         Object::Handle(LookupHeapObject(thread, script_id_param, NULL));
     if (obj.ptr() == Object::sentinel().ptr() || !obj.IsScript()) {
       PrintInvalidParamError(js, "scriptId");
-      return true;
+      return;
     }
     script ^= obj.ptr();
   } else {
@@ -3397,20 +3365,19 @@
           kInvalidParams,
           "%s: the 'tokenPos' parameter requires the 'scriptId' parameter",
           js->method());
-      return true;
+      return;
     }
     if (js->HasParam("endTokenPos")) {
       js->PrintError(
           kInvalidParams,
           "%s: the 'endTokenPos' parameter requires the 'scriptId' parameter",
           js->method());
-      return true;
+      return;
     }
   }
   SourceReport report(report_set, compile_mode);
   report.PrintJSON(js, script, TokenPosition::Deserialize(start_pos),
                    TokenPosition::Deserialize(end_pos));
-  return true;
 #endif  // !DART_PRECOMPILED_RUNTIME
 }
 
@@ -3423,20 +3390,19 @@
     NULL,
 };
 
-static bool ReloadSources(Thread* thread, JSONStream* js) {
+static void ReloadSources(Thread* thread, JSONStream* js) {
 #if defined(DART_PRECOMPILED_RUNTIME)
   js->PrintError(kFeatureDisabled, "Compiler is disabled in AOT mode.");
-  return true;
 #else
   if (CheckCompilerDisabled(thread, js)) {
-    return true;
+    return;
   }
 
   IsolateGroup* isolate_group = thread->isolate_group();
   if (isolate_group->library_tag_handler() == nullptr) {
     js->PrintError(kFeatureDisabled,
                    "A library tag handler must be installed.");
-    return true;
+    return;
   }
   // TODO(dartbug.com/36097): We need to change the "reloadSources" service-api
   // call to accept an isolate group instead of an isolate.
@@ -3446,16 +3412,16 @@
     js->PrintError(kIsolateReloadBarred,
                    "This isolate cannot reload sources anymore because there "
                    "was an unhandled exception error. Restart the isolate.");
-    return true;
+    return;
   }
   if (isolate_group->IsReloading()) {
     js->PrintError(kIsolateIsReloading, "This isolate is being reloaded.");
-    return true;
+    return;
   }
   if (!isolate_group->CanReload()) {
     js->PrintError(kFeatureDisabled,
                    "This isolate cannot reload sources right now.");
-    return true;
+    return;
   }
   const bool force_reload =
       BoolParameter::Parse(js->LookupParam("force"), false);
@@ -3465,7 +3431,6 @@
 
   Service::CheckForPause(isolate, js);
 
-  return true;
 #endif
 }
 
@@ -3491,11 +3456,11 @@
   return error.ptr();
 }
 
-static bool AddBreakpointCommon(Thread* thread,
+static void AddBreakpointCommon(Thread* thread,
                                 JSONStream* js,
                                 const String& script_uri) {
   if (CheckDebuggerDisabled(thread, js)) {
-    return true;
+    return;
   }
 
   const char* line_param = js->LookupParam("line");
@@ -3507,7 +3472,7 @@
     if (col == 0) {
       // Column number is 1-based.
       PrintInvalidParamError(js, "column");
-      return true;
+      return;
     }
   }
   ASSERT(!script_uri.IsNull());
@@ -3518,10 +3483,9 @@
     js->PrintError(kCannotAddBreakpoint,
                    "%s: Cannot add breakpoint at line '%s'", js->method(),
                    line_param);
-    return true;
+    return;
   }
   bpt->PrintJSON(js);
-  return true;
 }
 
 static const MethodParameter* add_breakpoint_params[] = {
@@ -3532,21 +3496,21 @@
     NULL,
 };
 
-static bool AddBreakpoint(Thread* thread, JSONStream* js) {
+static void AddBreakpoint(Thread* thread, JSONStream* js) {
   if (CheckDebuggerDisabled(thread, js)) {
-    return true;
+    return;
   }
 
   const char* script_id_param = js->LookupParam("scriptId");
   Object& obj = Object::Handle(LookupHeapObject(thread, script_id_param, NULL));
   if (obj.ptr() == Object::sentinel().ptr() || !obj.IsScript()) {
     PrintInvalidParamError(js, "scriptId");
-    return true;
+    return;
   }
   const Script& script = Script::Cast(obj);
   const String& script_uri = String::Handle(script.url());
   ASSERT(!script_uri.IsNull());
-  return AddBreakpointCommon(thread, js, script_uri);
+  AddBreakpointCommon(thread, js, script_uri);
 }
 
 static const MethodParameter* add_breakpoint_with_script_uri_params[] = {
@@ -3557,14 +3521,14 @@
     NULL,
 };
 
-static bool AddBreakpointWithScriptUri(Thread* thread, JSONStream* js) {
+static void AddBreakpointWithScriptUri(Thread* thread, JSONStream* js) {
   if (CheckDebuggerDisabled(thread, js)) {
-    return true;
+    return;
   }
 
   const char* script_uri_param = js->LookupParam("scriptUri");
   const String& script_uri = String::Handle(String::New(script_uri_param));
-  return AddBreakpointCommon(thread, js, script_uri);
+  AddBreakpointCommon(thread, js, script_uri);
 }
 
 static const MethodParameter* add_breakpoint_at_entry_params[] = {
@@ -3573,16 +3537,16 @@
     NULL,
 };
 
-static bool AddBreakpointAtEntry(Thread* thread, JSONStream* js) {
+static void AddBreakpointAtEntry(Thread* thread, JSONStream* js) {
   if (CheckDebuggerDisabled(thread, js)) {
-    return true;
+    return;
   }
 
   const char* function_id = js->LookupParam("functionId");
   Object& obj = Object::Handle(LookupHeapObject(thread, function_id, NULL));
   if (obj.ptr() == Object::sentinel().ptr() || !obj.IsFunction()) {
     PrintInvalidParamError(js, "functionId");
-    return true;
+    return;
   }
   const Function& function = Function::Cast(obj);
   Breakpoint* bpt =
@@ -3591,10 +3555,9 @@
     js->PrintError(kCannotAddBreakpoint,
                    "%s: Cannot add breakpoint at function '%s'", js->method(),
                    function.ToCString());
-    return true;
+    return;
   }
   bpt->PrintJSON(js);
-  return true;
 }
 
 static const MethodParameter* add_breakpoint_at_activation_params[] = {
@@ -3603,16 +3566,16 @@
     NULL,
 };
 
-static bool AddBreakpointAtActivation(Thread* thread, JSONStream* js) {
+static void AddBreakpointAtActivation(Thread* thread, JSONStream* js) {
   if (CheckDebuggerDisabled(thread, js)) {
-    return true;
+    return;
   }
 
   const char* object_id = js->LookupParam("objectId");
   Object& obj = Object::Handle(LookupHeapObject(thread, object_id, NULL));
   if (obj.ptr() == Object::sentinel().ptr() || !obj.IsInstance()) {
     PrintInvalidParamError(js, "objectId");
-    return true;
+    return;
   }
   const Instance& closure = Instance::Cast(obj);
   Breakpoint* bpt =
@@ -3620,10 +3583,9 @@
   if (bpt == NULL) {
     js->PrintError(kCannotAddBreakpoint,
                    "%s: Cannot add breakpoint at activation", js->method());
-    return true;
+    return;
   }
   bpt->PrintJSON(js);
-  return true;
 }
 
 static const MethodParameter* remove_breakpoint_params[] = {
@@ -3631,14 +3593,14 @@
     NULL,
 };
 
-static bool RemoveBreakpoint(Thread* thread, JSONStream* js) {
+static void RemoveBreakpoint(Thread* thread, JSONStream* js) {
   if (CheckDebuggerDisabled(thread, js)) {
-    return true;
+    return;
   }
 
   if (!js->HasParam("breakpointId")) {
     PrintMissingParamError(js, "breakpointId");
-    return true;
+    return;
   }
   const char* bpt_id = js->LookupParam("breakpointId");
   ObjectIdRing::LookupResult lookup_result;
@@ -3648,11 +3610,10 @@
   // have been already removed?
   if (bpt == NULL) {
     PrintInvalidParamError(js, "breakpointId");
-    return true;
+    return;
   }
   isolate->debugger()->RemoveBreakpoint(bpt->id());
   PrintSuccess(js);
-  return true;
 }
 
 static ClassPtr GetMetricsClass(Thread* thread) {
@@ -3667,7 +3628,7 @@
   return metrics_cls.ptr();
 }
 
-static bool HandleNativeMetricsList(Thread* thread, JSONStream* js) {
+static void HandleNativeMetricsList(Thread* thread, JSONStream* js) {
   JSONObject obj(js);
   obj.AddProperty("type", "MetricList");
   {
@@ -3685,15 +3646,14 @@
     ISOLATE_GROUP_METRIC_LIST(ADD_METRIC);
 #undef ADD_METRIC
   }
-  return true;
 }
 
-static bool HandleNativeMetric(Thread* thread, JSONStream* js, const char* id) {
+static void HandleNativeMetric(Thread* thread, JSONStream* js, const char* id) {
   auto isolate = thread->isolate();
 #define ADD_METRIC(type, variable, name, unit)                                 \
   if (strcmp(id, name) == 0) {                                                 \
     isolate->Get##variable##Metric()->PrintJSON(js);                           \
-    return true;                                                               \
+    return;                                                                    \
   }
   ISOLATE_METRIC_LIST(ADD_METRIC);
 #undef ADD_METRIC
@@ -3702,16 +3662,15 @@
 #define ADD_METRIC(type, variable, name, unit)                                 \
   if (strcmp(id, name) == 0) {                                                 \
     isolate_group->Get##variable##Metric()->PrintJSON(js);                     \
-    return true;                                                               \
+    return;                                                                    \
   }
   ISOLATE_GROUP_METRIC_LIST(ADD_METRIC);
 #undef ADD_METRIC
 
   PrintInvalidParamError(js, "metricId");
-  return true;
 }
 
-static bool HandleDartMetricsList(Thread* thread, JSONStream* js) {
+static void HandleDartMetricsList(Thread* thread, JSONStream* js) {
   Zone* zone = thread->zone();
   const Class& metrics_cls = Class::Handle(zone, GetMetricsClass(thread));
   const auto& error = metrics_cls.EnsureIsFinalized(Thread::Current());
@@ -3729,10 +3688,9 @@
   ASSERT(result.IsString());
   TextBuffer* buffer = js->buffer();
   buffer->AddString(String::Cast(result).ToCString());
-  return true;
 }
 
-static bool HandleDartMetric(Thread* thread, JSONStream* js, const char* id) {
+static void HandleDartMetric(Thread* thread, JSONStream* js, const char* id) {
   Zone* zone = thread->zone();
   const Class& metrics_cls = Class::Handle(zone, GetMetricsClass(thread));
   const String& print_metric_name = String::Handle(String::New("_printMetric"));
@@ -3751,10 +3709,9 @@
     ASSERT(result.IsString());
     TextBuffer* buffer = js->buffer();
     buffer->AddString(String::Cast(result).ToCString());
-    return true;
+    return;
   }
   PrintInvalidParamError(js, "metricId");
-  return true;
 }
 
 static const MethodParameter* get_isolate_metric_list_params[] = {
@@ -3762,7 +3719,7 @@
     NULL,
 };
 
-static bool GetIsolateMetricList(Thread* thread, JSONStream* js) {
+static void GetIsolateMetricList(Thread* thread, JSONStream* js) {
   bool native_metrics = false;
   if (js->HasParam("type")) {
     if (js->ParamIs("type", "Native")) {
@@ -3771,16 +3728,17 @@
       native_metrics = false;
     } else {
       PrintInvalidParamError(js, "type");
-      return true;
+      return;
     }
   } else {
     PrintMissingParamError(js, "type");
-    return true;
+    return;
   }
   if (native_metrics) {
-    return HandleNativeMetricsList(thread, js);
+    HandleNativeMetricsList(thread, js);
+  } else {
+    HandleDartMetricsList(thread, js);
   }
-  return HandleDartMetricsList(thread, js);
 }
 
 static const MethodParameter* get_isolate_metric_params[] = {
@@ -3788,52 +3746,31 @@
     NULL,
 };
 
-static bool GetIsolateMetric(Thread* thread, JSONStream* js) {
+static void GetIsolateMetric(Thread* thread, JSONStream* js) {
   const char* metric_id = js->LookupParam("metricId");
   if (metric_id == NULL) {
     PrintMissingParamError(js, "metricId");
-    return true;
+    return;
   }
   // Verify id begins with "metrics/".
   static const char* const kMetricIdPrefix = "metrics/";
   static intptr_t kMetricIdPrefixLen = strlen(kMetricIdPrefix);
   if (strncmp(metric_id, kMetricIdPrefix, kMetricIdPrefixLen) != 0) {
     PrintInvalidParamError(js, "metricId");
-    return true;
+    return;
   }
   // Check if id begins with "metrics/native/".
   static const char* const kNativeMetricIdPrefix = "metrics/native/";
   static intptr_t kNativeMetricIdPrefixLen = strlen(kNativeMetricIdPrefix);
   const bool native_metric =
       strncmp(metric_id, kNativeMetricIdPrefix, kNativeMetricIdPrefixLen) == 0;
+  const char* id = metric_id + (native_metric ? kNativeMetricIdPrefixLen
+                                              : kMetricIdPrefixLen);
   if (native_metric) {
-    const char* id = metric_id + kNativeMetricIdPrefixLen;
-    return HandleNativeMetric(thread, js, id);
+    HandleNativeMetric(thread, js, id);
+  } else {
+    HandleDartMetric(thread, js, id);
   }
-  const char* id = metric_id + kMetricIdPrefixLen;
-  return HandleDartMetric(thread, js, id);
-}
-
-static const MethodParameter* get_vm_metric_list_params[] = {
-    NO_ISOLATE_PARAMETER,
-    NULL,
-};
-
-static bool GetVMMetricList(Thread* thread, JSONStream* js) {
-  return false;
-}
-
-static const MethodParameter* get_vm_metric_params[] = {
-    NO_ISOLATE_PARAMETER,
-    NULL,
-};
-
-static bool GetVMMetric(Thread* thread, JSONStream* js) {
-  const char* metric_id = js->LookupParam("metricId");
-  if (metric_id == NULL) {
-    PrintMissingParamError(js, "metricId");
-  }
-  return false;
 }
 
 static const char* const timeline_streams_enum_names[] = {
@@ -3864,10 +3801,9 @@
 }
 #endif
 
-static bool SetVMTimelineFlags(Thread* thread, JSONStream* js) {
+static void SetVMTimelineFlags(Thread* thread, JSONStream* js) {
 #if !defined(SUPPORT_TIMELINE)
   PrintSuccess(js);
-  return true;
 #else
   Isolate* isolate = thread->isolate();
   ASSERT(isolate != NULL);
@@ -3892,8 +3828,6 @@
   }
 
   PrintSuccess(js);
-
-  return true;
 #endif
 }
 
@@ -3902,17 +3836,15 @@
     NULL,
 };
 
-static bool GetVMTimelineFlags(Thread* thread, JSONStream* js) {
+static void GetVMTimelineFlags(Thread* thread, JSONStream* js) {
 #if !defined(SUPPORT_TIMELINE)
   JSONObject obj(js);
   obj.AddProperty("type", "TimelineFlags");
-  return true;
 #else
   Isolate* isolate = thread->isolate();
   ASSERT(isolate != NULL);
   StackZone zone(thread);
   Timeline::PrintFlagsToJSON(js);
-  return true;
 #endif
 }
 
@@ -3921,11 +3853,10 @@
     NULL,
 };
 
-static bool GetVMTimelineMicros(Thread* thread, JSONStream* js) {
+static void GetVMTimelineMicros(Thread* thread, JSONStream* js) {
   JSONObject obj(js);
   obj.AddProperty("type", "Timestamp");
   obj.AddPropertyTimeMicros("timestamp", OS::GetCurrentMonotonicMicros());
-  return true;
 }
 
 static const MethodParameter* clear_vm_timeline_params[] = {
@@ -3933,7 +3864,7 @@
     NULL,
 };
 
-static bool ClearVMTimeline(Thread* thread, JSONStream* js) {
+static void ClearVMTimeline(Thread* thread, JSONStream* js) {
   Isolate* isolate = thread->isolate();
   ASSERT(isolate != NULL);
   StackZone zone(thread);
@@ -3941,8 +3872,6 @@
   Timeline::Clear();
 
   PrintSuccess(js);
-
-  return true;
 }
 
 static const MethodParameter* get_vm_timeline_params[] = {
@@ -3952,7 +3881,7 @@
     NULL,
 };
 
-static bool GetVMTimeline(Thread* thread, JSONStream* js) {
+static void GetVMTimeline(Thread* thread, JSONStream* js) {
   Isolate* isolate = thread->isolate();
   ASSERT(isolate != NULL);
   StackZone zone(thread);
@@ -3970,7 +3899,7 @@
                    "documentation for more details on where timeline events "
                    "can be found for this recorder type.",
                    timeline_recorder->name());
-    return true;
+    return;
   }
   int64_t time_origin_micros =
       Int64Parameter::Parse(js->LookupParam("timeOriginMicros"));
@@ -3978,7 +3907,6 @@
       Int64Parameter::Parse(js->LookupParam("timeExtentMicros"));
   TimelineEventFilter filter(time_origin_micros, time_extent_micros);
   timeline_recorder->PrintJSON(js, &filter);
-  return true;
 }
 
 static const char* const step_enum_names[] = {
@@ -3999,7 +3927,7 @@
     NULL,
 };
 
-static bool Resume(Thread* thread, JSONStream* js) {
+static void Resume(Thread* thread, JSONStream* js) {
   const char* step_param = js->LookupParam("step");
   Debugger::ResumeAction step = Debugger::kContinue;
   if (step_param != NULL) {
@@ -4014,7 +3942,7 @@
           kInvalidParams,
           "%s: the 'frameIndex' parameter can only be used when rewinding",
           js->method());
-      return true;
+      return;
     }
     frame_index = UIntParameter::Parse(js->LookupParam("frameIndex"));
   }
@@ -4032,7 +3960,7 @@
       Service::HandleEvent(&event);
     }
     PrintSuccess(js);
-    return true;
+    return;
   }
   if (isolate->message_handler()->should_pause_on_start()) {
     isolate->message_handler()->set_should_pause_on_start(false);
@@ -4042,28 +3970,27 @@
       Service::HandleEvent(&event);
     }
     PrintSuccess(js);
-    return true;
+    return;
   }
   if (isolate->message_handler()->is_paused_on_exit()) {
     isolate->message_handler()->set_should_pause_on_exit(false);
     isolate->SetResumeRequest();
     // We don't send a resume event because we will be exiting.
     PrintSuccess(js);
-    return true;
+    return;
   }
   if (isolate->debugger()->PauseEvent() == NULL) {
     js->PrintError(kIsolateMustBePaused, NULL);
-    return true;
+    return;
   }
 
   const char* error = NULL;
   if (!isolate->debugger()->SetResumeAction(step, frame_index, &error)) {
     js->PrintError(kCannotResume, "%s", error);
-    return true;
+    return;
   }
   isolate->SetResumeRequest();
   PrintSuccess(js);
-  return true;
 }
 
 static const MethodParameter* kill_params[] = {
@@ -4071,14 +3998,13 @@
     NULL,
 };
 
-static bool Kill(Thread* thread, JSONStream* js) {
+static void Kill(Thread* thread, JSONStream* js) {
   const String& msg =
       String::Handle(String::New("isolate terminated by Kill service request"));
   const UnwindError& error = UnwindError::Handle(UnwindError::New(msg));
   error.set_is_user_initiated(true);
   Thread::Current()->set_sticky_error(error);
   PrintSuccess(js);
-  return true;
 }
 
 static const MethodParameter* pause_params[] = {
@@ -4086,7 +4012,7 @@
     NULL,
 };
 
-static bool Pause(Thread* thread, JSONStream* js) {
+static void Pause(Thread* thread, JSONStream* js) {
   // TODO(turnidge): This interrupt message could have been sent from
   // the service isolate directly, but would require some special case
   // code.  That would prevent this isolate getting double-interrupted
@@ -4095,20 +4021,18 @@
   isolate->SendInternalLibMessage(Isolate::kInterruptMsg,
                                   isolate->pause_capability());
   PrintSuccess(js);
-  return true;
 }
 
 static const MethodParameter* enable_profiler_params[] = {
     NULL,
 };
 
-static bool EnableProfiler(Thread* thread, JSONStream* js) {
+static void EnableProfiler(Thread* thread, JSONStream* js) {
   if (!FLAG_profiler) {
     FLAG_profiler = true;
     Profiler::Init();
   }
   PrintSuccess(js);
-  return true;
 }
 
 static const MethodParameter* get_tag_profile_params[] = {
@@ -4116,11 +4040,10 @@
     NULL,
 };
 
-static bool GetTagProfile(Thread* thread, JSONStream* js) {
+static void GetTagProfile(Thread* thread, JSONStream* js) {
   JSONObject miniProfile(js);
   miniProfile.AddProperty("type", "TagProfile");
   thread->isolate()->vm_tag_counters()->PrintToJSONObject(&miniProfile);
-  return true;
 }
 
 static const MethodParameter* get_cpu_samples_params[] = {
@@ -4130,7 +4053,7 @@
     NULL,
 };
 
-static bool GetCpuSamples(Thread* thread, JSONStream* js) {
+static void GetCpuSamples(Thread* thread, JSONStream* js) {
   int64_t time_origin_micros =
       Int64Parameter::Parse(js->LookupParam("timeOriginMicros"));
   int64_t time_extent_micros =
@@ -4138,11 +4061,10 @@
   const bool include_code_samples =
       BoolParameter::Parse(js->LookupParam("_code"), false);
   if (CheckProfilerDisabled(thread, js)) {
-    return true;
+    return;
   }
   ProfilerService::PrintJSON(js, time_origin_micros, time_extent_micros,
                              include_code_samples);
-  return true;
 }
 
 static const MethodParameter* get_allocation_traces_params[] = {
@@ -4153,7 +4075,7 @@
     NULL,
 };
 
-static bool GetAllocationTraces(Thread* thread, JSONStream* js) {
+static void GetAllocationTraces(Thread* thread, JSONStream* js) {
   int64_t time_origin_micros =
       Int64Parameter::Parse(js->LookupParam("timeOriginMicros"));
   int64_t time_extent_micros =
@@ -4167,7 +4089,7 @@
     GetPrefixedIntegerId(class_id, "classes/", &cid);
     if (IsValidClassId(isolate, cid)) {
       if (CheckProfilerDisabled(thread, js)) {
-        return true;
+        return;
       }
       const Class& cls = Class::Handle(GetClassForId(isolate, cid));
       ProfilerService::PrintAllocationJSON(js, cls, time_origin_micros,
@@ -4178,12 +4100,11 @@
   } else {
     // Otherwise, return allocations for all traced class IDs.
     if (CheckProfilerDisabled(thread, js)) {
-      return true;
+      return;
     }
     ProfilerService::PrintAllocationJSON(js, time_origin_micros,
                                          time_extent_micros);
   }
-  return true;
 }
 
 static const MethodParameter* get_native_allocation_samples_params[] = {
@@ -4193,7 +4114,7 @@
     NULL,
 };
 
-static bool GetNativeAllocationSamples(Thread* thread, JSONStream* js) {
+static void GetNativeAllocationSamples(Thread* thread, JSONStream* js) {
   int64_t time_origin_micros =
       Int64Parameter::Parse(js->LookupParam("timeOriginMicros"));
   int64_t time_extent_micros =
@@ -4204,11 +4125,10 @@
   IsolateGroup::Current()->heap()->CollectAllGarbage();
 #endif
   if (CheckNativeAllocationProfilerDisabled(thread, js)) {
-    return true;
+    return;
   }
   ProfilerService::PrintNativeAllocationJSON(
       js, time_origin_micros, time_extent_micros, include_code_samples);
-  return true;
 }
 
 static const MethodParameter* clear_cpu_samples_params[] = {
@@ -4216,13 +4136,12 @@
     NULL,
 };
 
-static bool ClearCpuSamples(Thread* thread, JSONStream* js) {
+static void ClearCpuSamples(Thread* thread, JSONStream* js) {
   ProfilerService::ClearSamples();
   PrintSuccess(js);
-  return true;
 }
 
-static bool GetAllocationProfileImpl(Thread* thread,
+static void GetAllocationProfileImpl(Thread* thread,
                                      JSONStream* js,
                                      bool internal) {
   bool should_reset_accumulator = false;
@@ -4232,7 +4151,7 @@
       should_reset_accumulator = true;
     } else {
       PrintInvalidParamError(js, "reset");
-      return true;
+      return;
     }
   }
   if (js->HasParam("gc")) {
@@ -4240,7 +4159,7 @@
       should_collect = true;
     } else {
       PrintInvalidParamError(js, "gc");
-      return true;
+      return;
     }
   }
   auto isolate_group = thread->isolate_group();
@@ -4252,7 +4171,6 @@
     isolate_group->heap()->CollectAllGarbage();
   }
   isolate_group->class_table()->AllocationProfilePrintJSON(js, internal);
-  return true;
 }
 
 static const MethodParameter* get_allocation_profile_params[] = {
@@ -4260,12 +4178,12 @@
     NULL,
 };
 
-static bool GetAllocationProfilePublic(Thread* thread, JSONStream* js) {
-  return GetAllocationProfileImpl(thread, js, false);
+static void GetAllocationProfilePublic(Thread* thread, JSONStream* js) {
+  GetAllocationProfileImpl(thread, js, false);
 }
 
-static bool GetAllocationProfile(Thread* thread, JSONStream* js) {
-  return GetAllocationProfileImpl(thread, js, true);
+static void GetAllocationProfile(Thread* thread, JSONStream* js) {
+  GetAllocationProfileImpl(thread, js, true);
 }
 
 static const MethodParameter* collect_all_garbage_params[] = {
@@ -4273,11 +4191,10 @@
     NULL,
 };
 
-static bool CollectAllGarbage(Thread* thread, JSONStream* js) {
+static void CollectAllGarbage(Thread* thread, JSONStream* js) {
   auto heap = thread->isolate_group()->heap();
   heap->CollectAllGarbage(Heap::kDebugging);
   PrintSuccess(js);
-  return true;
 }
 
 static const MethodParameter* get_heap_map_params[] = {
@@ -4285,7 +4202,7 @@
     NULL,
 };
 
-static bool GetHeapMap(Thread* thread, JSONStream* js) {
+static void GetHeapMap(Thread* thread, JSONStream* js) {
   auto isolate_group = thread->isolate_group();
   if (js->HasParam("gc")) {
     if (js->ParamIs("gc", "scavenge")) {
@@ -4297,11 +4214,10 @@
                                             Heap::kDebugging);
     } else {
       PrintInvalidParamError(js, "gc");
-      return true;
+      return;
     }
   }
   isolate_group->heap()->PrintHeapMapToJSONStream(isolate_group, js);
-  return true;
 }
 
 static const MethodParameter* request_heap_snapshot_params[] = {
@@ -4309,14 +4225,13 @@
     NULL,
 };
 
-static bool RequestHeapSnapshot(Thread* thread, JSONStream* js) {
+static void RequestHeapSnapshot(Thread* thread, JSONStream* js) {
   if (Service::heapsnapshot_stream.enabled()) {
     HeapSnapshotWriter writer(thread);
     writer.Write();
   }
   // TODO(koda): Provide some id that ties this request to async response(s).
   PrintSuccess(js);
-  return true;
 }
 
 static intptr_t GetProcessMemoryUsageHelper(JSONStream* js) {
@@ -4453,9 +4368,8 @@
     NULL,
 };
 
-static bool GetProcessMemoryUsage(Thread* thread, JSONStream* js) {
+static void GetProcessMemoryUsage(Thread* thread, JSONStream* js) {
   GetProcessMemoryUsageHelper(js);
-  return true;
 }
 
 void Service::SendInspectEvent(Isolate* isolate, const Object& inspectee) {
@@ -4574,7 +4488,7 @@
   JSONArray* handles_;
 };
 
-static bool GetPersistentHandles(Thread* thread, JSONStream* js) {
+static void GetPersistentHandles(Thread* thread, JSONStream* js) {
   Isolate* isolate = thread->isolate();
   ASSERT(isolate != NULL);
 
@@ -4605,8 +4519,6 @@
           });
     }
   }
-
-  return true;
 }
 
 static const MethodParameter* get_ports_private_params[] = {
@@ -4614,13 +4526,12 @@
     NULL,
 };
 
-static bool GetPortsPrivate(Thread* thread, JSONStream* js) {
+static void GetPortsPrivate(Thread* thread, JSONStream* js) {
   MessageHandler* message_handler = thread->isolate()->message_handler();
   PortMap::PrintPortsForMessageHandler(message_handler, js);
-  return true;
 }
 
-static bool RespondWithMalformedJson(Thread* thread, JSONStream* js) {
+static void RespondWithMalformedJson(Thread* thread, JSONStream* js) {
   JSONObject jsobj(js);
   jsobj.AddProperty("a", "a");
   JSONObject jsobj1(js);
@@ -4629,13 +4540,11 @@
   jsobj2.AddProperty("a", "a");
   JSONObject jsobj3(js);
   jsobj3.AddProperty("a", "a");
-  return true;
 }
 
-static bool RespondWithMalformedObject(Thread* thread, JSONStream* js) {
+static void RespondWithMalformedObject(Thread* thread, JSONStream* js) {
   JSONObject jsobj(js);
   jsobj.AddProperty("bart", "simpson");
-  return true;
 }
 
 static const MethodParameter* get_object_params[] = {
@@ -4645,17 +4554,17 @@
     NULL,
 };
 
-static bool GetObject(Thread* thread, JSONStream* js) {
+static void GetObject(Thread* thread, JSONStream* js) {
   const char* id = js->LookupParam("objectId");
   if (id == NULL) {
     PrintMissingParamError(js, "objectId");
-    return true;
+    return;
   }
   if (js->HasParam("offset")) {
     intptr_t value = UIntParameter::Parse(js->LookupParam("offset"));
     if (value < 0) {
       PrintInvalidParamError(js, "offset");
-      return true;
+      return;
     }
     js->set_offset(value);
   }
@@ -4663,7 +4572,7 @@
     intptr_t value = UIntParameter::Parse(js->LookupParam("count"));
     if (value < 0) {
       PrintInvalidParamError(js, "count");
-      return true;
+      return;
     }
     js->set_count(value);
   }
@@ -4689,27 +4598,26 @@
 #endif  // !defined(DART_PRECOMPILED_RUNTIME)
     // We found a heap object for this id.  Return it.
     obj.PrintJSON(js, false);
-    return true;
+    return;
   } else if (lookup_result == ObjectIdRing::kCollected) {
     PrintSentinel(js, kCollectedSentinel);
-    return true;
+    return;
   } else if (lookup_result == ObjectIdRing::kExpired) {
     PrintSentinel(js, kExpiredSentinel);
-    return true;
+    return;
   }
 
   // Handle non-heap objects.
   Breakpoint* bpt = LookupBreakpoint(thread->isolate(), id, &lookup_result);
   if (bpt != NULL) {
     bpt->PrintJSON(js);
-    return true;
+    return;
   } else if (lookup_result == ObjectIdRing::kCollected) {
     PrintSentinel(js, kCollectedSentinel);
-    return true;
+    return;
   }
 
   PrintInvalidParamError(js, "objectId");
-  return true;
 }
 
 static const MethodParameter* get_object_store_params[] = {
@@ -4717,10 +4625,9 @@
     NULL,
 };
 
-static bool GetObjectStore(Thread* thread, JSONStream* js) {
+static void GetObjectStore(Thread* thread, JSONStream* js) {
   JSONObject jsobj(js);
   thread->isolate_group()->object_store()->PrintToJSONObject(&jsobj);
-  return true;
 }
 
 static const MethodParameter* get_isolate_object_store_params[] = {
@@ -4728,10 +4635,9 @@
     NULL,
 };
 
-static bool GetIsolateObjectStore(Thread* thread, JSONStream* js) {
+static void GetIsolateObjectStore(Thread* thread, JSONStream* js) {
   JSONObject jsobj(js);
   thread->isolate()->isolate_object_store()->PrintToJSONObject(&jsobj);
-  return true;
 }
 
 static const MethodParameter* get_class_list_params[] = {
@@ -4739,11 +4645,10 @@
     NULL,
 };
 
-static bool GetClassList(Thread* thread, JSONStream* js) {
+static void GetClassList(Thread* thread, JSONStream* js) {
   ClassTable* table = thread->isolate_group()->class_table();
   JSONObject jsobj(js);
   table->PrintToJSONObject(&jsobj);
-  return true;
 }
 
 static const MethodParameter* get_type_arguments_list_params[] = {
@@ -4751,7 +4656,7 @@
     NULL,
 };
 
-static bool GetTypeArgumentsList(Thread* thread, JSONStream* js) {
+static void GetTypeArgumentsList(Thread* thread, JSONStream* js) {
   bool only_with_instantiations = false;
   if (js->ParamIs("onlyWithInstantiations", "true")) {
     only_with_instantiations = true;
@@ -4780,7 +4685,6 @@
     }
   }
   typeargs_table.Release();
-  return true;
 }
 
 static const MethodParameter* get_version_params[] = {
@@ -4788,7 +4692,7 @@
     NULL,
 };
 
-static bool GetVersion(Thread* thread, JSONStream* js) {
+static void GetVersion(Thread* thread, JSONStream* js) {
   JSONObject jsobj(js);
   jsobj.AddProperty("type", "Version");
   jsobj.AddProperty("major",
@@ -4797,7 +4701,6 @@
                     static_cast<intptr_t>(SERVICE_PROTOCOL_MINOR_VERSION));
   jsobj.AddProperty("_privateMajor", static_cast<intptr_t>(0));
   jsobj.AddProperty("_privateMinor", static_cast<intptr_t>(0));
-  return true;
 }
 
 class ServiceIsolateVisitor : public IsolateVisitor {
@@ -4924,9 +4827,8 @@
   }
 }
 
-static bool GetVM(Thread* thread, JSONStream* js) {
+static void GetVM(Thread* thread, JSONStream* js) {
   Service::PrintJSONForVM(js, false);
-  return true;
 }
 
 static const char* exception_pause_mode_names[] = {
@@ -4949,17 +4851,17 @@
     NULL,
 };
 
-static bool SetExceptionPauseMode(Thread* thread, JSONStream* js) {
+static void SetExceptionPauseMode(Thread* thread, JSONStream* js) {
   const char* mode = js->LookupParam("mode");
   if (mode == NULL) {
     PrintMissingParamError(js, "mode");
-    return true;
+    return;
   }
   Dart_ExceptionPauseInfo info =
       EnumMapper(mode, exception_pause_mode_names, exception_pause_mode_values);
   if (info == kInvalidExceptionPauseInfo) {
     PrintInvalidParamError(js, "mode");
-    return true;
+    return;
   }
   Isolate* isolate = thread->isolate();
   isolate->debugger()->SetExceptionPauseInfo(info);
@@ -4968,7 +4870,6 @@
     Service::HandleEvent(&event);
   }
   PrintSuccess(js);
-  return true;
 }
 
 static const MethodParameter* set_breakpoint_state_params[] = {
@@ -4978,7 +4879,7 @@
     nullptr,
 };
 
-static bool SetBreakpointState(Thread* thread, JSONStream* js) {
+static void SetBreakpointState(Thread* thread, JSONStream* js) {
   Isolate* isolate = thread->isolate();
   const char* bpt_id = js->LookupParam("breakpointId");
   bool enable = BoolParameter::Parse(js->LookupParam("enable"), true);
@@ -4988,7 +4889,7 @@
   // have been already removed?
   if (bpt == nullptr) {
     PrintInvalidParamError(js, "breakpointId");
-    return true;
+    return;
   }
   if (isolate->debugger()->SetBreakpointState(bpt, enable)) {
     if (Service::debug_stream.enabled()) {
@@ -4998,7 +4899,6 @@
     }
   }
   bpt->PrintJSON(js);
-  return true;
 }
 
 static const MethodParameter* get_flag_list_params[] = {
@@ -5006,9 +4906,8 @@
     NULL,
 };
 
-static bool GetFlagList(Thread* thread, JSONStream* js) {
+static void GetFlagList(Thread* thread, JSONStream* js) {
   Flags::PrintJSON(js);
-  return true;
 }
 
 static const MethodParameter* set_flags_params[] = {
@@ -5016,23 +4915,23 @@
     NULL,
 };
 
-static bool SetFlag(Thread* thread, JSONStream* js) {
+static void SetFlag(Thread* thread, JSONStream* js) {
   const char* flag_name = js->LookupParam("name");
   if (flag_name == NULL) {
     PrintMissingParamError(js, "name");
-    return true;
+    return;
   }
   const char* flag_value = js->LookupParam("value");
   if (flag_value == NULL) {
     PrintMissingParamError(js, "value");
-    return true;
+    return;
   }
 
   if (Flags::Lookup(flag_name) == NULL) {
     JSONObject jsobj(js);
     jsobj.AddProperty("type", "Error");
     jsobj.AddProperty("message", "Cannot set flag: flag not found");
-    return true;
+    return;
   }
 
   // Changing most flags at runtime is dangerous because e.g., it may leave the
@@ -5063,7 +4962,7 @@
     JSONObject jsobj(js);
     jsobj.AddProperty("type", "Error");
     jsobj.AddProperty("message", "Cannot set flag: cannot change at runtime");
-    return true;
+    return;
   }
 
   const char* error = NULL;
@@ -5083,12 +4982,10 @@
       event.set_flag_new_value(flag_value);
       Service::HandleEvent(&event);
     }
-    return true;
   } else {
     JSONObject jsobj(js);
     jsobj.AddProperty("type", "Error");
     jsobj.AddProperty("message", error);
-    return true;
   }
 }
 
@@ -5099,7 +4996,7 @@
     NULL,
 };
 
-static bool SetLibraryDebuggable(Thread* thread, JSONStream* js) {
+static void SetLibraryDebuggable(Thread* thread, JSONStream* js) {
   const char* lib_id = js->LookupParam("libraryId");
   ObjectIdRing::LookupResult lookup_result;
   Object& obj =
@@ -5110,10 +5007,9 @@
     const Library& lib = Library::Cast(obj);
     lib.set_debuggable(is_debuggable);
     PrintSuccess(js);
-    return true;
+    return;
   }
   PrintInvalidParamError(js, "libraryId");
-  return true;
 }
 
 static const MethodParameter* set_name_params[] = {
@@ -5122,7 +5018,7 @@
     NULL,
 };
 
-static bool SetName(Thread* thread, JSONStream* js) {
+static void SetName(Thread* thread, JSONStream* js) {
   Isolate* isolate = thread->isolate();
   isolate->set_name(js->LookupParam("name"));
   if (Service::isolate_stream.enabled()) {
@@ -5130,7 +5026,7 @@
     Service::HandleEvent(&event);
   }
   PrintSuccess(js);
-  return true;
+  return;
 }
 
 static const MethodParameter* set_vm_name_params[] = {
@@ -5139,7 +5035,7 @@
     NULL,
 };
 
-static bool SetVMName(Thread* thread, JSONStream* js) {
+static void SetVMName(Thread* thread, JSONStream* js) {
   const char* name_param = js->LookupParam("name");
   free(vm_name);
   vm_name = Utils::StrDup(name_param);
@@ -5148,7 +5044,7 @@
     Service::HandleEvent(&event);
   }
   PrintSuccess(js);
-  return true;
+  return;
 }
 
 static const MethodParameter* set_trace_class_allocation_params[] = {
@@ -5158,9 +5054,9 @@
     NULL,
 };
 
-static bool SetTraceClassAllocation(Thread* thread, JSONStream* js) {
+static void SetTraceClassAllocation(Thread* thread, JSONStream* js) {
   if (CheckCompilerDisabled(thread, js)) {
-    return true;
+    return;
   }
 
   const char* class_id = js->LookupParam("classId");
@@ -5170,13 +5066,12 @@
   Isolate* isolate = thread->isolate();
   if (!IsValidClassId(isolate, cid)) {
     PrintInvalidParamError(js, "classId");
-    return true;
+    return;
   }
   const Class& cls = Class::Handle(GetClassForId(isolate, cid));
   ASSERT(!cls.IsNull());
   cls.SetTraceAllocation(enable);
   PrintSuccess(js);
-  return true;
 }
 
 static const MethodParameter* get_default_classes_aliases_params[] = {
@@ -5184,7 +5079,7 @@
     NULL,
 };
 
-static bool GetDefaultClassesAliases(Thread* thread, JSONStream* js) {
+static void GetDefaultClassesAliases(Thread* thread, JSONStream* js) {
   JSONObject jsobj(js);
   jsobj.AddProperty("type", "ClassesAliasesMap");
 
@@ -5257,8 +5152,6 @@
 #undef DEFINE_ADD_MAP_KEY
 #undef DEFINE_ADD_VALUE_F_CID
 #undef DEFINE_ADD_VALUE_F
-
-  return true;
 }
 
 // clang-format off
@@ -5360,10 +5253,6 @@
     get_version_params },
   { "getVM", GetVM,
     get_vm_params },
-  { "_getVMMetric", GetVMMetric,
-    get_vm_metric_params },
-  { "_getVMMetricList", GetVMMetricList,
-    get_vm_metric_list_params },
   { "getVMTimeline", GetVMTimeline,
     get_vm_timeline_params },
   { "getVMTimelineFlags", GetVMTimelineFlags,
diff --git a/tools/VERSION b/tools/VERSION
index 5c5e3c3..4cfe1b9 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 14
 PATCH 0
-PRERELEASE 64
+PRERELEASE 65
 PRERELEASE_PATCH 0
\ No newline at end of file