Version 2.17.0-266.5.beta

* Cherry-pick 2badd2e71eaeb5c6b24005af5005fe1220ce21a9 to beta
* Cherry-pick 54af2c5fd1c54025196bd3a63b09c13ead817ed9 to beta
* Cherry-pick 29f9b208185ab6b7067c7d8816831d74cebbc36b to beta
* Cherry-pick 3d8290d926b7b909bc8ff19b4d6d96c2301d81c3 to beta
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