diff --git a/DEPS b/DEPS
index c8310ef..7256708 100644
--- a/DEPS
+++ b/DEPS
@@ -110,7 +110,7 @@
   "dart_style_rev": "d7b73536a8079331c888b7da539b80e6825270ea",
 
   "dartdoc_rev" : "334072b0cad436c05f6bcecf8a1a59f2f0809b84",
-  "devtools_rev" : "2a707ca56c1a9d5eeef212c28c573548a051fdd2",
+  "devtools_rev" : "8c525828ba33029ed664bf8ea2829b6e5370535f",
   "ffi_rev": "4dd32429880a57b64edaf54c9d5af8a9fa9a4ffb",
   "fixnum_rev": "848341f061359ef7ddc0cad472c2ecbb036b28ac",
   "file_rev": "1ebc38852ffed24b564910317982298b56c2cedd",
@@ -176,7 +176,7 @@
   "webkit_inspection_protocol_rev": "dd6fb5d8b536e19cedb384d0bbf1f5631923f1e8",
   "yaml_edit_rev": "4fadb43801b07f90b3f0c6065dbce4efc6d8d55e",
   "yaml_rev": "ad0779d1baa25c6b10a192d080efc45de02b6a32",
-  "zlib_rev": "bf44340d1b6be1af8950bbdf664fec0cf5a831cc",
+  "zlib_rev": "faff052b6b6edcd6dd548513fe44ac0941427bf0",
   "crashpad_rev": "bf327d8ceb6a669607b0dbab5a83a275d03f99ed",
   "minichromium_rev": "8d641e30a8b12088649606b912c2bc4947419ccc",
   "googletest_rev": "f854f1d27488996dc8a6db3c9453f80b02585e12",
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/field_formal_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/field_formal_contributor.dart
index daa7ef1..e2ed9a99 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/field_formal_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/field_formal_contributor.dart
@@ -52,23 +52,26 @@
       }
     }
 
-    var enclosingClass = constructor.thisOrAncestorOfType<ClassDeclaration>();
+    ClassElement? enclosingClass;
+    var constructorParent = constructor.parent;
+    if (constructorParent is ClassDeclaration) {
+      enclosingClass = constructorParent.declaredElement;
+    } else if (constructorParent is EnumDeclaration) {
+      enclosingClass = constructorParent.declaredElement;
+    } else {
+      return;
+    }
     if (enclosingClass == null) {
       return;
     }
 
     // Add suggestions for fields that are not already referenced.
-    for (var member in enclosingClass.members) {
-      if (member is FieldDeclaration && !member.isStatic) {
-        for (var variable in member.fields.variables) {
-          var field = variable.name.staticElement;
-          if (field is FieldElement) {
-            var fieldName = field.name;
-            if (fieldName.isNotEmpty) {
-              if (!referencedFields.contains(fieldName)) {
-                builder.suggestFieldFormalParameter(field);
-              }
-            }
+    for (var field in enclosingClass.fields) {
+      if (!field.isSynthetic && !field.isEnumConstant && !field.isStatic) {
+        var fieldName = field.name;
+        if (fieldName.isNotEmpty) {
+          if (!referencedFields.contains(fieldName)) {
+            builder.suggestFieldFormalParameter(field);
           }
         }
       }
diff --git a/pkg/analysis_server/test/services/completion/dart/location/field_formal_parameter_test.dart b/pkg/analysis_server/test/services/completion/dart/location/field_formal_parameter_test.dart
index 41f4004..68b4c68 100644
--- a/pkg/analysis_server/test/services/completion/dart/location/field_formal_parameter_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/location/field_formal_parameter_test.dart
@@ -30,66 +30,63 @@
 }
 
 mixin SuperFormalParameterTestCases on AbstractCompletionDriverTest {
-  /// https://github.com/dart-lang/sdk/issues/39028
-  Future<void> test_mixin_constructor() async {
-    var response = await getTestCodeSuggestions('''
-mixin M {
-  var field = 0;
-  M(this.^);
-}
-''');
-
-    check(response).suggestions.isEmpty;
+  Future<void> test_class_replacement_left() async {
+    _checkContainers(
+      declarations: 'var field = 0;',
+      constructorParameters: 'this.f^',
+      validator: (response) {
+        check(response)
+          ..hasReplacement(left: 1)
+          ..suggestions.matchesInAnyOrder([
+            (suggestion) => suggestion
+              ..completion.isEqualTo('field')
+              ..isField
+              ..returnType.isEqualTo('int'),
+          ]);
+      },
+    );
   }
 
-  Future<void> test_replacement_left() async {
-    var response = await getTestCodeSuggestions('''
-class A {
-  var field = 0;
-  A(this.f^);
-}
-''');
-
-    check(response)
-      ..hasReplacement(left: 1)
-      ..suggestions.matchesInAnyOrder([
-        (suggestion) => suggestion
-          ..completion.isEqualTo('field')
-          ..isField
-          ..returnType.isEqualTo('int'),
-      ]);
+  Future<void> test_class_replacement_right() async {
+    _checkContainers(
+      declarations: 'var field = 0;',
+      constructorParameters: 'this.^f',
+      validator: (response) {
+        check(response)
+          ..hasReplacement(right: 1)
+          ..suggestions.matchesInAnyOrder([
+            (suggestion) => suggestion
+              ..completion.isEqualTo('field')
+              ..isField
+              ..returnType.isEqualTo('int'),
+          ]);
+      },
+    );
   }
 
-  Future<void> test_replacement_right() async {
+  Future<void> test_class_suggestions_instanceFields_local() async {
     var response = await getTestCodeSuggestions('''
 class A {
-  var field = 0;
-  A(this.^f);
-}
-''');
-
-    check(response)
-      ..hasReplacement(right: 1)
-      ..suggestions.matchesInAnyOrder([
-        (suggestion) => suggestion
-          ..completion.isEqualTo('field')
-          ..isField
-          ..returnType.isEqualTo('int'),
-      ]);
-  }
-
-  Future<void> test_suggestions_onlyLocal() async {
-    var response = await getTestCodeSuggestions('''
-class A {
+  static final superStatic = 0;
   var inherited = 0;
+
+  void superMethod() {}
+  int get superGetter => 0;
+  void superSetter(int _) {}
 }
 
 class B extends A {
+  static final thisStatic = 0;
+
   var first = 0;
   var second = 1.2;
+
   B(this.^);
-  B.constructor() {}
-  void method() {}
+  B.otherConstructor() {}
+
+  void thisMethod() {}
+  int get thisGetter => 0;
+  void thisSetter(int _) {}
 }
 ''');
 
@@ -107,12 +104,56 @@
       ]);
   }
 
-  Future<void> test_suggestions_onlyNotSpecified_optionalNamed() async {
+  Future<void> test_class_suggestions_onlyNotSpecified_optionalNamed() async {
+    _checkContainers(
+      declarations: 'final int x; final int y;',
+      constructorParameters: '{this.x, this.^}',
+      validator: (response) {
+        check(response)
+          ..hasEmptyReplacement()
+          ..suggestions.matchesInAnyOrder([
+            (suggestion) => suggestion
+              ..completion.isEqualTo('y')
+              ..isField
+              ..returnType.isEqualTo('int'),
+          ]);
+      },
+    );
+  }
+
+  Future<void>
+      test_class_suggestions_onlyNotSpecified_requiredPositional() async {
+    _checkContainers(
+      declarations: 'final int x; final int y;',
+      constructorParameters: 'this.x, this.^',
+      validator: (response) {
+        check(response)
+          ..hasEmptyReplacement()
+          ..suggestions.matchesInAnyOrder([
+            (suggestion) => suggestion
+              ..completion.isEqualTo('y')
+              ..isField
+              ..returnType.isEqualTo('int'),
+          ]);
+      },
+    );
+  }
+
+  Future<void> test_enum_suggestions_instanceFields() async {
     var response = await getTestCodeSuggestions('''
-class Point {
-  final int x;
-  final int y;
-  Point({this.x, this.^});
+enum E {
+  v();
+
+  static final zero = 0;
+  final int first;
+  final double second;
+
+  E(this.^);
+  E.otherConstructor();
+
+  void myMethod() {}
+  int get myGetter => 0;
+  void mySetter(int _) {}
 }
 ''');
 
@@ -120,28 +161,53 @@
       ..hasEmptyReplacement()
       ..suggestions.matchesInAnyOrder([
         (suggestion) => suggestion
-          ..completion.isEqualTo('y')
+          ..completion.isEqualTo('first')
           ..isField
           ..returnType.isEqualTo('int'),
+        (suggestion) => suggestion
+          ..completion.isEqualTo('second')
+          ..isField
+          ..returnType.isEqualTo('double'),
       ]);
   }
 
-  Future<void> test_suggestions_onlyNotSpecified_requiredPositional() async {
+  /// https://github.com/dart-lang/sdk/issues/39028
+  Future<void> test_mixin_constructor() async {
     var response = await getTestCodeSuggestions('''
-class Point {
-  final int x;
-  final int y;
-  Point(this.x, this.^);
+mixin M {
+  var field = 0;
+  M(this.^);
 }
 ''');
 
-    check(response)
-      ..hasEmptyReplacement()
-      ..suggestions.matchesInAnyOrder([
-        (suggestion) => suggestion
-          ..completion.isEqualTo('y')
-          ..isField
-          ..returnType.isEqualTo('int'),
-      ]);
+    check(response).suggestions.isEmpty;
+  }
+
+  Future<void> _checkContainers({
+    required String declarations,
+    required String constructorParameters,
+    required void Function(CompletionResponseForTesting response) validator,
+  }) async {
+    // class
+    {
+      var response = await getTestCodeSuggestions('''
+class A {
+  $declarations
+  A($constructorParameters);
+}
+''');
+      validator(response);
+    }
+    // enum
+    {
+      var response = await getTestCodeSuggestions('''
+enum E {
+  v;
+  $declarations
+  E($constructorParameters);
+}
+''');
+      validator(response);
+    }
   }
 }
diff --git a/runtime/vm/os_macos.cc b/runtime/vm/os_macos.cc
index eed635d..05f9ee4 100644
--- a/runtime/vm/os_macos.cc
+++ b/runtime/vm/os_macos.cc
@@ -106,6 +106,12 @@
 }
 
 int64_t OS::GetCurrentThreadCPUMicros() {
+  if (__builtin_available(macOS 10.12, iOS 10.0, *)) {
+    // This is more efficient when available.
+    return clock_gettime_nsec_np(CLOCK_THREAD_CPUTIME_ID) /
+           kNanosecondsPerMicrosecond;
+  }
+
   mach_msg_type_number_t count = THREAD_BASIC_INFO_COUNT;
   thread_basic_info_data_t info_data;
   thread_basic_info_t info = &info_data;
diff --git a/tools/VERSION b/tools/VERSION
index 349b693..caf2558 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -28,4 +28,4 @@
 MINOR 17
 PATCH 0
 PRERELEASE 266
-PRERELEASE_PATCH 1
\ No newline at end of file
+PRERELEASE_PATCH 5
\ No newline at end of file
