Update ART Module prebuilts to build 7502540. am: 663cc9ef6b

Original change: https://googleplex-android-review.googlesource.com/c/platform/prebuilts/module_sdk/art/+/15132993

Change-Id: I2abb5fc279c41b86106d91f6908898ee5ac6415d
diff --git a/current/host-exports/include/art/libartbase/base/flags.h b/current/host-exports/include/art/libartbase/base/flags.h
index 973a5da..0345ebc 100644
--- a/current/host-exports/include/art/libartbase/base/flags.h
+++ b/current/host-exports/include/art/libartbase/base/flags.h
@@ -43,6 +43,15 @@
 
 namespace art {
 
+// Enum representing the type of the ART flag.
+enum class FlagType {
+  // A flag that only looks at the cmdline argument to retrieve its value.
+  kCmdlineOnly,
+  // A flag that also looks at system properties and device config
+  // (phenotype properties) when retrieving its value.
+  kDeviceConfig,
+};
+
 // FlagMetaBase handles automatically adding flags to the command line parser. It is parameterized
 // by all supported flag types. In general, this should be treated as though it does not exist and
 // FlagBase, which is already specialized to the types we support, should be used instead.
@@ -51,10 +60,12 @@
  public:
   FlagMetaBase(const std::string&& command_line_argument_name,
                const std::string&& system_property_name,
-               const std::string&& server_setting_name) :
+               const std::string&& server_setting_name,
+               FlagType type) :
       command_line_argument_name_(command_line_argument_name),
       system_property_name_(system_property_name),
-      server_setting_name_(server_setting_name) {}
+      server_setting_name_(server_setting_name),
+      type_(type) {}
   virtual ~FlagMetaBase() {}
 
   template <typename Builder>
@@ -124,22 +135,31 @@
   const std::string command_line_argument_name_;
   const std::string system_property_name_;
   const std::string server_setting_name_;
+  FlagType type_;
 };
 
-using FlagBase = FlagMetaBase<bool, int, std::string>;
+using FlagBase = FlagMetaBase<bool, int32_t, uint32_t, std::string>;
 
 template <>
 std::forward_list<FlagBase*> FlagBase::ALL_FLAGS;
 
 class FlagsTests;
 
+// Describes the possible origins of a flag value.
+enum class FlagOrigin {
+  kDefaultValue,
+  kCmdlineArg,
+  kSystemProperty,
+  kServerSetting,
+};
+
 // This class defines a flag with a value of a particular type.
 template <typename Value>
 class Flag : public FlagBase {
  public:
   // Create a new Flag. The name parameter is used to generate the names from the various parameter
   // sources. See the documentation on the Flags struct for an example.
-  explicit Flag(const std::string& name, Value default_value = {});
+  Flag(const std::string& name, Value default_value, FlagType type);
   virtual ~Flag();
 
 
@@ -151,26 +171,41 @@
   //   3) cmdline flag
   //   4) default value
   ALWAYS_INLINE Value GetValue() const {
-    return std::get<0>(GetValueLocation());
+    return std::get<0>(GetValueAndOrigin());
   }
 
   ALWAYS_INLINE Value operator()() const {
     return GetValue();
   }
 
-  // Returns the value and the location of that value for the given flag.
-  ALWAYS_INLINE std::pair<Value, std::string> GetValueLocation() const {
+  // Return the value of the flag as optional.
+  //
+  // Returns the value of the flag if and only if the flag is set via
+  // a server side setting, system property or a cmdline arg.
+  // Otherwise it returns nullopt (meaning this never returns the default value).
+  //
+  // This is useful for properties that do not have a good default natural value
+  // (e.g. file path arguments).
+  ALWAYS_INLINE std::optional<Value> GetValueOptional() const {
+    std::pair<Value, FlagOrigin> result = GetValueAndOrigin();
+    return std::get<1>(result) == FlagOrigin::kDefaultValue
+      ? std::nullopt
+      : std::make_optional(std::get<0>(result));
+  }
+
+  // Returns the value and the origin of that value for the given flag.
+  ALWAYS_INLINE std::pair<Value, FlagOrigin> GetValueAndOrigin() const {
     DCHECK(initialized_);
     if (from_server_setting_.has_value()) {
-      return std::pair{from_server_setting_.value(), server_setting_name_};
+      return std::pair{from_server_setting_.value(), FlagOrigin::kServerSetting};
     }
     if (from_system_property_.has_value()) {
-      return std::pair{from_system_property_.value(), system_property_name_};
+      return std::pair{from_system_property_.value(), FlagOrigin::kSystemProperty};
     }
     if (from_command_line_.has_value()) {
-      return std::pair{from_command_line_.value(), command_line_argument_name_};
+      return std::pair{from_command_line_.value(), FlagOrigin::kCmdlineArg};
     }
-    return std::pair{default_, "default_value"};
+    return std::pair{default_, FlagOrigin::kDefaultValue};
   }
 
   void Dump(std::ostream& oss) const override;
@@ -199,7 +234,7 @@
 //
 // Example:
 //
-//     Flag<int> WriteMetricsToLog{"my-feature-test.flag", 42};
+//     Flag<int> WriteMetricsToLog{"my-feature-test.flag", 42, FlagType::kDeviceConfig};
 //
 // This creates a boolean flag that can be read through gFlags.WriteMetricsToLog(). The default
 // value is false. Note that the default value can be left unspecified, in which the value of the
@@ -221,7 +256,50 @@
 struct Flags {
   // Flag used to test the infra.
   // TODO: can be removed once we add real flags.
-  Flag<int> MyFeatureTestFlag{"my-feature-test.flag", /*default_value=*/ 42};
+  Flag<int32_t> MyFeatureTestFlag{"my-feature-test.flag", 42, FlagType::kDeviceConfig};
+
+
+  // Metric infra flags.
+
+  // The reporting spec for regular apps. An example of valid value is "S,1,2,4,*".
+  // See metrics::ReportingPeriodSpec for complete docs.
+  Flag<std::string> MetricsReportingSpec{"metrics.reporting-spec", "", FlagType::kDeviceConfig};
+
+  // The reporting spec for the system server. See MetricsReportingSpec as well.
+  Flag<std::string> MetricsReportingSpecSystemServer{"metrics.reporting-spec-server", "",
+      FlagType::kDeviceConfig};
+
+  // The mods that should report metrics. Together with MetricsReportingNumMods, they
+  // dictate what percentage of the runtime execution will report metrics.
+  // If the `session_id (a random number) % MetricsReportingNumMods < MetricsReportingMods`
+  // then the runtime session will report metrics.
+  //
+  // By default, the mods are 0, which means the reporting is disabled.
+  Flag<uint32_t> MetricsReportingMods{"metrics.reporting-mods", 0,
+      FlagType::kDeviceConfig};
+
+  // See MetricsReportingMods docs.
+  //
+  // By default the number of mods is 100, so MetricsReportingMods will naturally
+  // read as the percent of runtime sessions that will report metrics. If a finer
+  // grain unit is needed (e.g. a tenth of a percent), the num-mods can be increased.
+  Flag<uint32_t> MetricsReportingNumMods{"metrics.reporting-num-mods", 100,
+      FlagType::kDeviceConfig};
+
+  // Whether or not we should write metrics to statsd.
+  // Note that the actual write is still controlled by
+  // MetricsReportingMods and MetricsReportingNumMods.
+  Flag<bool> MetricsWriteToStatsd{ "metrics.write-to-statsd", false, FlagType::kDeviceConfig};
+
+  // Whether or not we should write metrics to logcat.
+  // Note that the actual write is still controlled by
+  // MetricsReportingMods and MetricsReportingNumMods.
+  Flag<bool> MetricsWriteToLogcat{ "metrics.write-to-logcat", false, FlagType::kCmdlineOnly};
+
+  // Whether or not we should write metrics to a file.
+  // Note that the actual write is still controlled by
+  // MetricsReportingMods and MetricsReportingNumMods.
+  Flag<std::string> MetricsWriteToFile{"metrics.write-to-file", "", FlagType::kCmdlineOnly};
 };
 
 // This is the actual instance of all the flags.
diff --git a/current/host-exports/include/art/libartbase/base/hiddenapi_flags.h b/current/host-exports/include/art/libartbase/base/hiddenapi_flags.h
index 375bf88..3ece966 100644
--- a/current/host-exports/include/art/libartbase/base/hiddenapi_flags.h
+++ b/current/host-exports/include/art/libartbase/base/hiddenapi_flags.h
@@ -254,9 +254,26 @@
     return true;
   }
 
+  // Clamp a max-target-* up to the given maxSdk; if the given api list is higher than
+  // maxSdk, return unsupported instead.
+  static std::string CoerceAtMost(const std::string& name, const std::string& maxSdk) {
+    const auto apiListToClamp = FromName(name);
+    // If the api list is a domain instead, return it unmodified.
+    if (!apiListToClamp.IsValid()) {
+      return name;
+    }
+    const auto maxApiList = FromName(maxSdk);
+    CHECK(maxApiList.IsValid()) << "invalid api list name " << maxSdk;
+    if (apiListToClamp > maxApiList) {
+      return kValueNames[Unsupported().GetIntValue()];
+    }
+    return name;
+  }
+
   bool operator==(const ApiList& other) const { return dex_flags_ == other.dex_flags_; }
   bool operator!=(const ApiList& other) const { return !(*this == other); }
   bool operator<(const ApiList& other) const { return dex_flags_ < other.dex_flags_; }
+  bool operator>(const ApiList& other) const { return dex_flags_ > other.dex_flags_; }
 
   // Returns true if combining this ApiList with `other` will succeed.
   bool CanCombineWith(const ApiList& other) const {
diff --git a/current/host-exports/include/art/libartbase/base/metrics/metrics.h b/current/host-exports/include/art/libartbase/base/metrics/metrics.h
index 72d8365..78a6387 100644
--- a/current/host-exports/include/art/libartbase/base/metrics/metrics.h
+++ b/current/host-exports/include/art/libartbase/base/metrics/metrics.h
@@ -49,8 +49,10 @@
   METRIC(JitMethodCompileCount, MetricsCounter)                    \
   METRIC(YoungGcCollectionTime, MetricsHistogram, 15, 0, 60'000)   \
   METRIC(FullGcCollectionTime, MetricsHistogram, 15, 0, 60'000)    \
-  METRIC(YoungGcThroughput, MetricsHistogram, 15, 0, 1'000)        \
-  METRIC(FullGcThroughput, MetricsHistogram, 15, 0, 1'000)
+  METRIC(YoungGcThroughput, MetricsHistogram, 15, 0, 10'000)       \
+  METRIC(FullGcThroughput, MetricsHistogram, 15, 0, 10'000)        \
+  METRIC(YoungGcTracingThroughput, MetricsHistogram, 15, 0, 10'000)   \
+  METRIC(FullGcTracingThroughput, MetricsHistogram, 15, 0, 10'000)
 
 // A lot of the metrics implementation code is generated by passing one-off macros into ART_COUNTERS
 // and ART_HISTOGRAMS. This means metrics.h and metrics.cc are very #define-heavy, which can be
diff --git a/current/host-exports/include/art/libartbase/base/time_utils.h b/current/host-exports/include/art/libartbase/base/time_utils.h
index fbf3e94..dd73b1c 100644
--- a/current/host-exports/include/art/libartbase/base/time_utils.h
+++ b/current/host-exports/include/art/libartbase/base/time_utils.h
@@ -77,6 +77,11 @@
   return ns / 1000 / 1000;
 }
 
+// Converts the given number of nanoseconds to microseconds.
+static constexpr uint64_t NsToUs(uint64_t ns) {
+  return ns / 1000;
+}
+
 // Converts the given number of milliseconds to nanoseconds
 static constexpr uint64_t MsToNs(uint64_t ms) {
   return ms * 1000 * 1000;
diff --git a/current/host-exports/x86_64/bin/dex2oat64 b/current/host-exports/x86_64/bin/dex2oat64
index 1573cd9..55615e7 100755
--- a/current/host-exports/x86_64/bin/dex2oat64
+++ b/current/host-exports/x86_64/bin/dex2oat64
Binary files differ
diff --git a/current/host-exports/x86_64/bin/dex2oatd64 b/current/host-exports/x86_64/bin/dex2oatd64
index 8543f87..45e1716 100755
--- a/current/host-exports/x86_64/bin/dex2oatd64
+++ b/current/host-exports/x86_64/bin/dex2oatd64
Binary files differ
diff --git a/current/host-exports/x86_64/bin/dexdump b/current/host-exports/x86_64/bin/dexdump
index e3b446f..a467179 100755
--- a/current/host-exports/x86_64/bin/dexdump
+++ b/current/host-exports/x86_64/bin/dexdump
Binary files differ
diff --git a/current/host-exports/x86_64/bin/hiddenapi b/current/host-exports/x86_64/bin/hiddenapi
index e43a986..651972b 100755
--- a/current/host-exports/x86_64/bin/hiddenapi
+++ b/current/host-exports/x86_64/bin/hiddenapi
Binary files differ
diff --git a/current/host-exports/x86_64/bin/oatdump b/current/host-exports/x86_64/bin/oatdump
index 0399d4a..b4cf2b9 100755
--- a/current/host-exports/x86_64/bin/oatdump
+++ b/current/host-exports/x86_64/bin/oatdump
Binary files differ
diff --git a/current/host-exports/x86_64/bin/profman b/current/host-exports/x86_64/bin/profman
index 30f42a9..04a17ee 100755
--- a/current/host-exports/x86_64/bin/profman
+++ b/current/host-exports/x86_64/bin/profman
Binary files differ
diff --git a/current/host-exports/x86_64/bin/veridex b/current/host-exports/x86_64/bin/veridex
index 21aea88..7f80bec 100755
--- a/current/host-exports/x86_64/bin/veridex
+++ b/current/host-exports/x86_64/bin/veridex
Binary files differ
diff --git a/current/host-exports/x86_64/lib/libartbase.a b/current/host-exports/x86_64/lib/libartbase.a
index 825c2fc..747d778 100644
--- a/current/host-exports/x86_64/lib/libartbase.a
+++ b/current/host-exports/x86_64/lib/libartbase.a
Binary files differ
diff --git a/current/host-exports/x86_64/lib/libartbase.so b/current/host-exports/x86_64/lib/libartbase.so
index 72d4d5d..f221c9b 100755
--- a/current/host-exports/x86_64/lib/libartbase.so
+++ b/current/host-exports/x86_64/lib/libartbase.so
Binary files differ
diff --git a/current/host-exports/x86_64/lib/libartpalette.a b/current/host-exports/x86_64/lib/libartpalette.a
index 93a7202..e74ba05 100644
--- a/current/host-exports/x86_64/lib/libartpalette.a
+++ b/current/host-exports/x86_64/lib/libartpalette.a
Binary files differ
diff --git a/current/host-exports/x86_64/lib/libartpalette.so b/current/host-exports/x86_64/lib/libartpalette.so
index 92a6d21..93e7788 100755
--- a/current/host-exports/x86_64/lib/libartpalette.so
+++ b/current/host-exports/x86_64/lib/libartpalette.so
Binary files differ
diff --git a/current/sdk/android/arm/lib/libandroidio.so b/current/sdk/android/arm/lib/libandroidio.so
index 6f63016..5ecbbf5 100755
--- a/current/sdk/android/arm/lib/libandroidio.so
+++ b/current/sdk/android/arm/lib/libandroidio.so
Binary files differ
diff --git a/current/sdk/android/arm/lib/libdexfile.so b/current/sdk/android/arm/lib/libdexfile.so
index 3ba5514..a7c79bf 100755
--- a/current/sdk/android/arm/lib/libdexfile.so
+++ b/current/sdk/android/arm/lib/libdexfile.so
Binary files differ
diff --git a/current/sdk/android/arm/lib/libdexfile_static.a b/current/sdk/android/arm/lib/libdexfile_static.a
index 6aa8e2d..e5562db 100644
--- a/current/sdk/android/arm/lib/libdexfile_static.a
+++ b/current/sdk/android/arm/lib/libdexfile_static.a
Binary files differ
diff --git a/current/sdk/android/arm/lib/libdexfile_support.a b/current/sdk/android/arm/lib/libdexfile_support.a
index 15ab8a5..1c72db4 100644
--- a/current/sdk/android/arm/lib/libdexfile_support.a
+++ b/current/sdk/android/arm/lib/libdexfile_support.a
Binary files differ
diff --git a/current/sdk/android/arm/lib/libnativebridge.so b/current/sdk/android/arm/lib/libnativebridge.so
index b0052bd..384a601 100755
--- a/current/sdk/android/arm/lib/libnativebridge.so
+++ b/current/sdk/android/arm/lib/libnativebridge.so
Binary files differ
diff --git a/current/sdk/android/arm/lib/libnativehelper.so b/current/sdk/android/arm/lib/libnativehelper.so
index 2ad937e..2949435 100755
--- a/current/sdk/android/arm/lib/libnativehelper.so
+++ b/current/sdk/android/arm/lib/libnativehelper.so
Binary files differ
diff --git a/current/sdk/android/arm/lib/libnativehelper_lazy.a b/current/sdk/android/arm/lib/libnativehelper_lazy.a
index dc90f18..f998db7 100644
--- a/current/sdk/android/arm/lib/libnativehelper_lazy.a
+++ b/current/sdk/android/arm/lib/libnativehelper_lazy.a
Binary files differ
diff --git a/current/sdk/android/arm/lib/libnativeloader.so b/current/sdk/android/arm/lib/libnativeloader.so
index 8a12db3..2d22583 100755
--- a/current/sdk/android/arm/lib/libnativeloader.so
+++ b/current/sdk/android/arm/lib/libnativeloader.so
Binary files differ
diff --git a/current/sdk/android/arm/lib/libsigchain.so b/current/sdk/android/arm/lib/libsigchain.so
index 080dcfe..0a97316 100755
--- a/current/sdk/android/arm/lib/libsigchain.so
+++ b/current/sdk/android/arm/lib/libsigchain.so
Binary files differ
diff --git a/current/sdk/android/arm64/lib/libandroidio.so b/current/sdk/android/arm64/lib/libandroidio.so
index a98384c..af6c28e 100755
--- a/current/sdk/android/arm64/lib/libandroidio.so
+++ b/current/sdk/android/arm64/lib/libandroidio.so
Binary files differ
diff --git a/current/sdk/android/arm64/lib/libdexfile.so b/current/sdk/android/arm64/lib/libdexfile.so
index a57da96..3ac648b 100755
--- a/current/sdk/android/arm64/lib/libdexfile.so
+++ b/current/sdk/android/arm64/lib/libdexfile.so
Binary files differ
diff --git a/current/sdk/android/arm64/lib/libdexfile_static.a b/current/sdk/android/arm64/lib/libdexfile_static.a
index 268a6bf..84a1feb 100644
--- a/current/sdk/android/arm64/lib/libdexfile_static.a
+++ b/current/sdk/android/arm64/lib/libdexfile_static.a
Binary files differ
diff --git a/current/sdk/android/arm64/lib/libdexfile_support.a b/current/sdk/android/arm64/lib/libdexfile_support.a
index eb129b8..9ec430b 100644
--- a/current/sdk/android/arm64/lib/libdexfile_support.a
+++ b/current/sdk/android/arm64/lib/libdexfile_support.a
Binary files differ
diff --git a/current/sdk/android/arm64/lib/libnativebridge.so b/current/sdk/android/arm64/lib/libnativebridge.so
index bc6a4a1..a09407b 100755
--- a/current/sdk/android/arm64/lib/libnativebridge.so
+++ b/current/sdk/android/arm64/lib/libnativebridge.so
Binary files differ
diff --git a/current/sdk/android/arm64/lib/libnativehelper.so b/current/sdk/android/arm64/lib/libnativehelper.so
index 8959523..236f09f 100755
--- a/current/sdk/android/arm64/lib/libnativehelper.so
+++ b/current/sdk/android/arm64/lib/libnativehelper.so
Binary files differ
diff --git a/current/sdk/android/arm64/lib/libnativehelper_lazy.a b/current/sdk/android/arm64/lib/libnativehelper_lazy.a
index ecd507d..fc21585 100644
--- a/current/sdk/android/arm64/lib/libnativehelper_lazy.a
+++ b/current/sdk/android/arm64/lib/libnativehelper_lazy.a
Binary files differ
diff --git a/current/sdk/android/arm64/lib/libnativeloader.so b/current/sdk/android/arm64/lib/libnativeloader.so
index c02b135..b73db97 100755
--- a/current/sdk/android/arm64/lib/libnativeloader.so
+++ b/current/sdk/android/arm64/lib/libnativeloader.so
Binary files differ
diff --git a/current/sdk/android/arm64/lib/libsigchain.so b/current/sdk/android/arm64/lib/libsigchain.so
index 3500be8..9c2d730 100755
--- a/current/sdk/android/arm64/lib/libsigchain.so
+++ b/current/sdk/android/arm64/lib/libsigchain.so
Binary files differ
diff --git a/current/sdk/android/x86/lib/libandroidio.so b/current/sdk/android/x86/lib/libandroidio.so
index c65d316..305c5ca 100755
--- a/current/sdk/android/x86/lib/libandroidio.so
+++ b/current/sdk/android/x86/lib/libandroidio.so
Binary files differ
diff --git a/current/sdk/android/x86/lib/libdexfile.so b/current/sdk/android/x86/lib/libdexfile.so
index cdee166..eba52bb 100755
--- a/current/sdk/android/x86/lib/libdexfile.so
+++ b/current/sdk/android/x86/lib/libdexfile.so
Binary files differ
diff --git a/current/sdk/android/x86/lib/libdexfile_static.a b/current/sdk/android/x86/lib/libdexfile_static.a
index 51d2725..afb7643 100644
--- a/current/sdk/android/x86/lib/libdexfile_static.a
+++ b/current/sdk/android/x86/lib/libdexfile_static.a
Binary files differ
diff --git a/current/sdk/android/x86/lib/libdexfile_support.a b/current/sdk/android/x86/lib/libdexfile_support.a
index 72bc815..24542c2 100644
--- a/current/sdk/android/x86/lib/libdexfile_support.a
+++ b/current/sdk/android/x86/lib/libdexfile_support.a
Binary files differ
diff --git a/current/sdk/android/x86/lib/libnativebridge.so b/current/sdk/android/x86/lib/libnativebridge.so
index 1f475e3..c9e4008 100755
--- a/current/sdk/android/x86/lib/libnativebridge.so
+++ b/current/sdk/android/x86/lib/libnativebridge.so
Binary files differ
diff --git a/current/sdk/android/x86/lib/libnativehelper.so b/current/sdk/android/x86/lib/libnativehelper.so
index 7d78554..22d97f4 100755
--- a/current/sdk/android/x86/lib/libnativehelper.so
+++ b/current/sdk/android/x86/lib/libnativehelper.so
Binary files differ
diff --git a/current/sdk/android/x86/lib/libnativehelper_lazy.a b/current/sdk/android/x86/lib/libnativehelper_lazy.a
index ca5c620..035a6da 100644
--- a/current/sdk/android/x86/lib/libnativehelper_lazy.a
+++ b/current/sdk/android/x86/lib/libnativehelper_lazy.a
Binary files differ
diff --git a/current/sdk/android/x86/lib/libnativeloader.so b/current/sdk/android/x86/lib/libnativeloader.so
index 62a73a7..76baa3a 100755
--- a/current/sdk/android/x86/lib/libnativeloader.so
+++ b/current/sdk/android/x86/lib/libnativeloader.so
Binary files differ
diff --git a/current/sdk/android/x86/lib/libsigchain.so b/current/sdk/android/x86/lib/libsigchain.so
index 7eb7411..000394e 100755
--- a/current/sdk/android/x86/lib/libsigchain.so
+++ b/current/sdk/android/x86/lib/libsigchain.so
Binary files differ
diff --git a/current/sdk/android/x86_64/lib/libandroidio.so b/current/sdk/android/x86_64/lib/libandroidio.so
index 7c9f607..bf3a697 100755
--- a/current/sdk/android/x86_64/lib/libandroidio.so
+++ b/current/sdk/android/x86_64/lib/libandroidio.so
Binary files differ
diff --git a/current/sdk/android/x86_64/lib/libdexfile.so b/current/sdk/android/x86_64/lib/libdexfile.so
index b26a8c8..9d2c9f2 100755
--- a/current/sdk/android/x86_64/lib/libdexfile.so
+++ b/current/sdk/android/x86_64/lib/libdexfile.so
Binary files differ
diff --git a/current/sdk/android/x86_64/lib/libdexfile_static.a b/current/sdk/android/x86_64/lib/libdexfile_static.a
index e11408e..2c25005 100644
--- a/current/sdk/android/x86_64/lib/libdexfile_static.a
+++ b/current/sdk/android/x86_64/lib/libdexfile_static.a
Binary files differ
diff --git a/current/sdk/android/x86_64/lib/libdexfile_support.a b/current/sdk/android/x86_64/lib/libdexfile_support.a
index 5e08b2b..348338e 100644
--- a/current/sdk/android/x86_64/lib/libdexfile_support.a
+++ b/current/sdk/android/x86_64/lib/libdexfile_support.a
Binary files differ
diff --git a/current/sdk/android/x86_64/lib/libnativebridge.so b/current/sdk/android/x86_64/lib/libnativebridge.so
index f79fcd2..a428727 100755
--- a/current/sdk/android/x86_64/lib/libnativebridge.so
+++ b/current/sdk/android/x86_64/lib/libnativebridge.so
Binary files differ
diff --git a/current/sdk/android/x86_64/lib/libnativehelper.so b/current/sdk/android/x86_64/lib/libnativehelper.so
index 797ed0d..7ec1c14 100755
--- a/current/sdk/android/x86_64/lib/libnativehelper.so
+++ b/current/sdk/android/x86_64/lib/libnativehelper.so
Binary files differ
diff --git a/current/sdk/android/x86_64/lib/libnativehelper_lazy.a b/current/sdk/android/x86_64/lib/libnativehelper_lazy.a
index 1d695a2..b009dfc 100644
--- a/current/sdk/android/x86_64/lib/libnativehelper_lazy.a
+++ b/current/sdk/android/x86_64/lib/libnativehelper_lazy.a
Binary files differ
diff --git a/current/sdk/android/x86_64/lib/libnativeloader.so b/current/sdk/android/x86_64/lib/libnativeloader.so
index 90c1c75..fe86b14 100755
--- a/current/sdk/android/x86_64/lib/libnativeloader.so
+++ b/current/sdk/android/x86_64/lib/libnativeloader.so
Binary files differ
diff --git a/current/sdk/android/x86_64/lib/libsigchain.so b/current/sdk/android/x86_64/lib/libsigchain.so
index 788ed89..e2d03c2 100755
--- a/current/sdk/android/x86_64/lib/libsigchain.so
+++ b/current/sdk/android/x86_64/lib/libsigchain.so
Binary files differ
diff --git a/current/sdk/arm/lib/libnativebridge_lazy.so b/current/sdk/arm/lib/libnativebridge_lazy.so
index 3360f6c..6b140ae 100755
--- a/current/sdk/arm/lib/libnativebridge_lazy.so
+++ b/current/sdk/arm/lib/libnativebridge_lazy.so
Binary files differ
diff --git a/current/sdk/arm/lib/libnativehelper_compat_libc++.so b/current/sdk/arm/lib/libnativehelper_compat_libc++.so
index b30039e..2f46b99 100755
--- a/current/sdk/arm/lib/libnativehelper_compat_libc++.so
+++ b/current/sdk/arm/lib/libnativehelper_compat_libc++.so
Binary files differ
diff --git a/current/sdk/arm/lib/libnativeloader_lazy.so b/current/sdk/arm/lib/libnativeloader_lazy.so
index ff0e758..045ae10 100755
--- a/current/sdk/arm/lib/libnativeloader_lazy.so
+++ b/current/sdk/arm/lib/libnativeloader_lazy.so
Binary files differ
diff --git a/current/sdk/arm64/lib/libnativebridge_lazy.so b/current/sdk/arm64/lib/libnativebridge_lazy.so
index 99d45e6..a5e8ced 100755
--- a/current/sdk/arm64/lib/libnativebridge_lazy.so
+++ b/current/sdk/arm64/lib/libnativebridge_lazy.so
Binary files differ
diff --git a/current/sdk/arm64/lib/libnativehelper_compat_libc++.so b/current/sdk/arm64/lib/libnativehelper_compat_libc++.so
index c5874b9..fbcd964 100755
--- a/current/sdk/arm64/lib/libnativehelper_compat_libc++.so
+++ b/current/sdk/arm64/lib/libnativehelper_compat_libc++.so
Binary files differ
diff --git a/current/sdk/arm64/lib/libnativeloader_lazy.so b/current/sdk/arm64/lib/libnativeloader_lazy.so
index c8c42cc..d779413 100755
--- a/current/sdk/arm64/lib/libnativeloader_lazy.so
+++ b/current/sdk/arm64/lib/libnativeloader_lazy.so
Binary files differ
diff --git a/current/sdk/common_os/include/art/libartbase/base/flags.h b/current/sdk/common_os/include/art/libartbase/base/flags.h
index 973a5da..0345ebc 100644
--- a/current/sdk/common_os/include/art/libartbase/base/flags.h
+++ b/current/sdk/common_os/include/art/libartbase/base/flags.h
@@ -43,6 +43,15 @@
 
 namespace art {
 
+// Enum representing the type of the ART flag.
+enum class FlagType {
+  // A flag that only looks at the cmdline argument to retrieve its value.
+  kCmdlineOnly,
+  // A flag that also looks at system properties and device config
+  // (phenotype properties) when retrieving its value.
+  kDeviceConfig,
+};
+
 // FlagMetaBase handles automatically adding flags to the command line parser. It is parameterized
 // by all supported flag types. In general, this should be treated as though it does not exist and
 // FlagBase, which is already specialized to the types we support, should be used instead.
@@ -51,10 +60,12 @@
  public:
   FlagMetaBase(const std::string&& command_line_argument_name,
                const std::string&& system_property_name,
-               const std::string&& server_setting_name) :
+               const std::string&& server_setting_name,
+               FlagType type) :
       command_line_argument_name_(command_line_argument_name),
       system_property_name_(system_property_name),
-      server_setting_name_(server_setting_name) {}
+      server_setting_name_(server_setting_name),
+      type_(type) {}
   virtual ~FlagMetaBase() {}
 
   template <typename Builder>
@@ -124,22 +135,31 @@
   const std::string command_line_argument_name_;
   const std::string system_property_name_;
   const std::string server_setting_name_;
+  FlagType type_;
 };
 
-using FlagBase = FlagMetaBase<bool, int, std::string>;
+using FlagBase = FlagMetaBase<bool, int32_t, uint32_t, std::string>;
 
 template <>
 std::forward_list<FlagBase*> FlagBase::ALL_FLAGS;
 
 class FlagsTests;
 
+// Describes the possible origins of a flag value.
+enum class FlagOrigin {
+  kDefaultValue,
+  kCmdlineArg,
+  kSystemProperty,
+  kServerSetting,
+};
+
 // This class defines a flag with a value of a particular type.
 template <typename Value>
 class Flag : public FlagBase {
  public:
   // Create a new Flag. The name parameter is used to generate the names from the various parameter
   // sources. See the documentation on the Flags struct for an example.
-  explicit Flag(const std::string& name, Value default_value = {});
+  Flag(const std::string& name, Value default_value, FlagType type);
   virtual ~Flag();
 
 
@@ -151,26 +171,41 @@
   //   3) cmdline flag
   //   4) default value
   ALWAYS_INLINE Value GetValue() const {
-    return std::get<0>(GetValueLocation());
+    return std::get<0>(GetValueAndOrigin());
   }
 
   ALWAYS_INLINE Value operator()() const {
     return GetValue();
   }
 
-  // Returns the value and the location of that value for the given flag.
-  ALWAYS_INLINE std::pair<Value, std::string> GetValueLocation() const {
+  // Return the value of the flag as optional.
+  //
+  // Returns the value of the flag if and only if the flag is set via
+  // a server side setting, system property or a cmdline arg.
+  // Otherwise it returns nullopt (meaning this never returns the default value).
+  //
+  // This is useful for properties that do not have a good default natural value
+  // (e.g. file path arguments).
+  ALWAYS_INLINE std::optional<Value> GetValueOptional() const {
+    std::pair<Value, FlagOrigin> result = GetValueAndOrigin();
+    return std::get<1>(result) == FlagOrigin::kDefaultValue
+      ? std::nullopt
+      : std::make_optional(std::get<0>(result));
+  }
+
+  // Returns the value and the origin of that value for the given flag.
+  ALWAYS_INLINE std::pair<Value, FlagOrigin> GetValueAndOrigin() const {
     DCHECK(initialized_);
     if (from_server_setting_.has_value()) {
-      return std::pair{from_server_setting_.value(), server_setting_name_};
+      return std::pair{from_server_setting_.value(), FlagOrigin::kServerSetting};
     }
     if (from_system_property_.has_value()) {
-      return std::pair{from_system_property_.value(), system_property_name_};
+      return std::pair{from_system_property_.value(), FlagOrigin::kSystemProperty};
     }
     if (from_command_line_.has_value()) {
-      return std::pair{from_command_line_.value(), command_line_argument_name_};
+      return std::pair{from_command_line_.value(), FlagOrigin::kCmdlineArg};
     }
-    return std::pair{default_, "default_value"};
+    return std::pair{default_, FlagOrigin::kDefaultValue};
   }
 
   void Dump(std::ostream& oss) const override;
@@ -199,7 +234,7 @@
 //
 // Example:
 //
-//     Flag<int> WriteMetricsToLog{"my-feature-test.flag", 42};
+//     Flag<int> WriteMetricsToLog{"my-feature-test.flag", 42, FlagType::kDeviceConfig};
 //
 // This creates a boolean flag that can be read through gFlags.WriteMetricsToLog(). The default
 // value is false. Note that the default value can be left unspecified, in which the value of the
@@ -221,7 +256,50 @@
 struct Flags {
   // Flag used to test the infra.
   // TODO: can be removed once we add real flags.
-  Flag<int> MyFeatureTestFlag{"my-feature-test.flag", /*default_value=*/ 42};
+  Flag<int32_t> MyFeatureTestFlag{"my-feature-test.flag", 42, FlagType::kDeviceConfig};
+
+
+  // Metric infra flags.
+
+  // The reporting spec for regular apps. An example of valid value is "S,1,2,4,*".
+  // See metrics::ReportingPeriodSpec for complete docs.
+  Flag<std::string> MetricsReportingSpec{"metrics.reporting-spec", "", FlagType::kDeviceConfig};
+
+  // The reporting spec for the system server. See MetricsReportingSpec as well.
+  Flag<std::string> MetricsReportingSpecSystemServer{"metrics.reporting-spec-server", "",
+      FlagType::kDeviceConfig};
+
+  // The mods that should report metrics. Together with MetricsReportingNumMods, they
+  // dictate what percentage of the runtime execution will report metrics.
+  // If the `session_id (a random number) % MetricsReportingNumMods < MetricsReportingMods`
+  // then the runtime session will report metrics.
+  //
+  // By default, the mods are 0, which means the reporting is disabled.
+  Flag<uint32_t> MetricsReportingMods{"metrics.reporting-mods", 0,
+      FlagType::kDeviceConfig};
+
+  // See MetricsReportingMods docs.
+  //
+  // By default the number of mods is 100, so MetricsReportingMods will naturally
+  // read as the percent of runtime sessions that will report metrics. If a finer
+  // grain unit is needed (e.g. a tenth of a percent), the num-mods can be increased.
+  Flag<uint32_t> MetricsReportingNumMods{"metrics.reporting-num-mods", 100,
+      FlagType::kDeviceConfig};
+
+  // Whether or not we should write metrics to statsd.
+  // Note that the actual write is still controlled by
+  // MetricsReportingMods and MetricsReportingNumMods.
+  Flag<bool> MetricsWriteToStatsd{ "metrics.write-to-statsd", false, FlagType::kDeviceConfig};
+
+  // Whether or not we should write metrics to logcat.
+  // Note that the actual write is still controlled by
+  // MetricsReportingMods and MetricsReportingNumMods.
+  Flag<bool> MetricsWriteToLogcat{ "metrics.write-to-logcat", false, FlagType::kCmdlineOnly};
+
+  // Whether or not we should write metrics to a file.
+  // Note that the actual write is still controlled by
+  // MetricsReportingMods and MetricsReportingNumMods.
+  Flag<std::string> MetricsWriteToFile{"metrics.write-to-file", "", FlagType::kCmdlineOnly};
 };
 
 // This is the actual instance of all the flags.
diff --git a/current/sdk/common_os/include/art/libartbase/base/hiddenapi_flags.h b/current/sdk/common_os/include/art/libartbase/base/hiddenapi_flags.h
index 375bf88..3ece966 100644
--- a/current/sdk/common_os/include/art/libartbase/base/hiddenapi_flags.h
+++ b/current/sdk/common_os/include/art/libartbase/base/hiddenapi_flags.h
@@ -254,9 +254,26 @@
     return true;
   }
 
+  // Clamp a max-target-* up to the given maxSdk; if the given api list is higher than
+  // maxSdk, return unsupported instead.
+  static std::string CoerceAtMost(const std::string& name, const std::string& maxSdk) {
+    const auto apiListToClamp = FromName(name);
+    // If the api list is a domain instead, return it unmodified.
+    if (!apiListToClamp.IsValid()) {
+      return name;
+    }
+    const auto maxApiList = FromName(maxSdk);
+    CHECK(maxApiList.IsValid()) << "invalid api list name " << maxSdk;
+    if (apiListToClamp > maxApiList) {
+      return kValueNames[Unsupported().GetIntValue()];
+    }
+    return name;
+  }
+
   bool operator==(const ApiList& other) const { return dex_flags_ == other.dex_flags_; }
   bool operator!=(const ApiList& other) const { return !(*this == other); }
   bool operator<(const ApiList& other) const { return dex_flags_ < other.dex_flags_; }
+  bool operator>(const ApiList& other) const { return dex_flags_ > other.dex_flags_; }
 
   // Returns true if combining this ApiList with `other` will succeed.
   bool CanCombineWith(const ApiList& other) const {
diff --git a/current/sdk/common_os/include/art/libartbase/base/metrics/metrics.h b/current/sdk/common_os/include/art/libartbase/base/metrics/metrics.h
index 72d8365..78a6387 100644
--- a/current/sdk/common_os/include/art/libartbase/base/metrics/metrics.h
+++ b/current/sdk/common_os/include/art/libartbase/base/metrics/metrics.h
@@ -49,8 +49,10 @@
   METRIC(JitMethodCompileCount, MetricsCounter)                    \
   METRIC(YoungGcCollectionTime, MetricsHistogram, 15, 0, 60'000)   \
   METRIC(FullGcCollectionTime, MetricsHistogram, 15, 0, 60'000)    \
-  METRIC(YoungGcThroughput, MetricsHistogram, 15, 0, 1'000)        \
-  METRIC(FullGcThroughput, MetricsHistogram, 15, 0, 1'000)
+  METRIC(YoungGcThroughput, MetricsHistogram, 15, 0, 10'000)       \
+  METRIC(FullGcThroughput, MetricsHistogram, 15, 0, 10'000)        \
+  METRIC(YoungGcTracingThroughput, MetricsHistogram, 15, 0, 10'000)   \
+  METRIC(FullGcTracingThroughput, MetricsHistogram, 15, 0, 10'000)
 
 // A lot of the metrics implementation code is generated by passing one-off macros into ART_COUNTERS
 // and ART_HISTOGRAMS. This means metrics.h and metrics.cc are very #define-heavy, which can be
diff --git a/current/sdk/common_os/include/art/libartbase/base/time_utils.h b/current/sdk/common_os/include/art/libartbase/base/time_utils.h
index fbf3e94..dd73b1c 100644
--- a/current/sdk/common_os/include/art/libartbase/base/time_utils.h
+++ b/current/sdk/common_os/include/art/libartbase/base/time_utils.h
@@ -77,6 +77,11 @@
   return ns / 1000 / 1000;
 }
 
+// Converts the given number of nanoseconds to microseconds.
+static constexpr uint64_t NsToUs(uint64_t ns) {
+  return ns / 1000;
+}
+
 // Converts the given number of milliseconds to nanoseconds
 static constexpr uint64_t MsToNs(uint64_t ms) {
   return ms * 1000 * 1000;
diff --git a/current/sdk/common_os/include/art/libdexfile/dex/compact_dex_file.h b/current/sdk/common_os/include/art/libdexfile/dex/compact_dex_file.h
index f5cd924..9a12f4a 100644
--- a/current/sdk/common_os/include/art/libdexfile/dex/compact_dex_file.h
+++ b/current/sdk/common_os/include/art/libdexfile/dex/compact_dex_file.h
@@ -27,7 +27,8 @@
 class CompactDexFile : public DexFile {
  public:
   static constexpr uint8_t kDexMagic[kDexMagicSize] = { 'c', 'd', 'e', 'x' };
-  static constexpr uint8_t kDexMagicVersion[] = {'0', '0', '1', '\0'};
+  // Last change: remove code item deduping.
+  static constexpr uint8_t kDexMagicVersion[] = {'0', '0', '2', '\0'};
 
   enum class FeatureFlags : uint32_t {
     kDefaultMethods = 0x1,
diff --git a/current/sdk/java/art.module.public.api.stubs.jar b/current/sdk/java/art.module.public.api.stubs.jar
deleted file mode 100644
index da043d8..0000000
--- a/current/sdk/java/art.module.public.api.stubs.jar
+++ /dev/null
Binary files differ
diff --git a/current/sdk/java/core-libart.jar b/current/sdk/java/core-libart.jar
index ed71581..4ea7193 100644
--- a/current/sdk/java/core-libart.jar
+++ b/current/sdk/java/core-libart.jar
Binary files differ
diff --git a/current/sdk/java/core-oj.jar b/current/sdk/java/core-oj.jar
index 5510e2c..b3f1c9a 100644
--- a/current/sdk/java/core-oj.jar
+++ b/current/sdk/java/core-oj.jar
Binary files differ
diff --git a/current/sdk/java/legacy.art.module.platform.api.stubs.jar b/current/sdk/java/legacy.art.module.platform.api.stubs.jar
deleted file mode 100644
index 082e017..0000000
--- a/current/sdk/java/legacy.art.module.platform.api.stubs.jar
+++ /dev/null
Binary files differ
diff --git a/current/sdk/java/legacy.core.platform.api.stubs.jar b/current/sdk/java/legacy.core.platform.api.stubs.jar
index cda8615..7db6554 100644
--- a/current/sdk/java/legacy.core.platform.api.stubs.jar
+++ b/current/sdk/java/legacy.core.platform.api.stubs.jar
Binary files differ
diff --git a/current/sdk/java/okhttp.jar b/current/sdk/java/okhttp.jar
index cd4279a..8266b8b 100644
--- a/current/sdk/java/okhttp.jar
+++ b/current/sdk/java/okhttp.jar
Binary files differ
diff --git a/current/sdk/java/stable.art.module.platform.api.stubs.jar b/current/sdk/java/stable.art.module.platform.api.stubs.jar
index f220fc8..a9dc053 100644
--- a/current/sdk/java/stable.art.module.platform.api.stubs.jar
+++ b/current/sdk/java/stable.art.module.platform.api.stubs.jar
Binary files differ
diff --git a/current/sdk/java/stable.core.platform.api.stubs.jar b/current/sdk/java/stable.core.platform.api.stubs.jar
index 301c5c9..d3b664f 100644
--- a/current/sdk/java/stable.core.platform.api.stubs.jar
+++ b/current/sdk/java/stable.core.platform.api.stubs.jar
Binary files differ
diff --git a/current/sdk/linux_glibc/x86/lib/libandroidio.so b/current/sdk/linux_glibc/x86/lib/libandroidio.so
index 61fee52..1f83520 100755
--- a/current/sdk/linux_glibc/x86/lib/libandroidio.so
+++ b/current/sdk/linux_glibc/x86/lib/libandroidio.so
Binary files differ
diff --git a/current/sdk/linux_glibc/x86/lib/libdexfile.so b/current/sdk/linux_glibc/x86/lib/libdexfile.so
index 2b014cd..25d3f22 100755
--- a/current/sdk/linux_glibc/x86/lib/libdexfile.so
+++ b/current/sdk/linux_glibc/x86/lib/libdexfile.so
Binary files differ
diff --git a/current/sdk/linux_glibc/x86/lib/libdexfile_static.a b/current/sdk/linux_glibc/x86/lib/libdexfile_static.a
index a6204bf..9051397 100644
--- a/current/sdk/linux_glibc/x86/lib/libdexfile_static.a
+++ b/current/sdk/linux_glibc/x86/lib/libdexfile_static.a
Binary files differ
diff --git a/current/sdk/linux_glibc/x86/lib/libdexfile_support.a b/current/sdk/linux_glibc/x86/lib/libdexfile_support.a
index 51987ea..4d521f0 100644
--- a/current/sdk/linux_glibc/x86/lib/libdexfile_support.a
+++ b/current/sdk/linux_glibc/x86/lib/libdexfile_support.a
Binary files differ
diff --git a/current/sdk/linux_glibc/x86/lib/libnativebridge.so b/current/sdk/linux_glibc/x86/lib/libnativebridge.so
index 7b654b1..4e8cbf0 100755
--- a/current/sdk/linux_glibc/x86/lib/libnativebridge.so
+++ b/current/sdk/linux_glibc/x86/lib/libnativebridge.so
Binary files differ
diff --git a/current/sdk/linux_glibc/x86/lib/libnativehelper.so b/current/sdk/linux_glibc/x86/lib/libnativehelper.so
index f01c348..f35d158 100755
--- a/current/sdk/linux_glibc/x86/lib/libnativehelper.so
+++ b/current/sdk/linux_glibc/x86/lib/libnativehelper.so
Binary files differ
diff --git a/current/sdk/linux_glibc/x86/lib/libnativehelper_lazy.a b/current/sdk/linux_glibc/x86/lib/libnativehelper_lazy.a
index c5083fb..c71e0d7 100644
--- a/current/sdk/linux_glibc/x86/lib/libnativehelper_lazy.a
+++ b/current/sdk/linux_glibc/x86/lib/libnativehelper_lazy.a
Binary files differ
diff --git a/current/sdk/linux_glibc/x86/lib/libnativeloader.so b/current/sdk/linux_glibc/x86/lib/libnativeloader.so
index 3f285b5..4ea50b7 100755
--- a/current/sdk/linux_glibc/x86/lib/libnativeloader.so
+++ b/current/sdk/linux_glibc/x86/lib/libnativeloader.so
Binary files differ
diff --git a/current/sdk/linux_glibc/x86/lib/libsigchain.so b/current/sdk/linux_glibc/x86/lib/libsigchain.so
index 4c80e4f..7bc7329 100755
--- a/current/sdk/linux_glibc/x86/lib/libsigchain.so
+++ b/current/sdk/linux_glibc/x86/lib/libsigchain.so
Binary files differ
diff --git a/current/sdk/linux_glibc/x86_64/lib/libandroidio.so b/current/sdk/linux_glibc/x86_64/lib/libandroidio.so
index c25e73b..6923db2 100755
--- a/current/sdk/linux_glibc/x86_64/lib/libandroidio.so
+++ b/current/sdk/linux_glibc/x86_64/lib/libandroidio.so
Binary files differ
diff --git a/current/sdk/linux_glibc/x86_64/lib/libdexfile.so b/current/sdk/linux_glibc/x86_64/lib/libdexfile.so
index cfcb3dd..f3740a8 100755
--- a/current/sdk/linux_glibc/x86_64/lib/libdexfile.so
+++ b/current/sdk/linux_glibc/x86_64/lib/libdexfile.so
Binary files differ
diff --git a/current/sdk/linux_glibc/x86_64/lib/libdexfile_static.a b/current/sdk/linux_glibc/x86_64/lib/libdexfile_static.a
index fa3c482..72216af 100644
--- a/current/sdk/linux_glibc/x86_64/lib/libdexfile_static.a
+++ b/current/sdk/linux_glibc/x86_64/lib/libdexfile_static.a
Binary files differ
diff --git a/current/sdk/linux_glibc/x86_64/lib/libdexfile_support.a b/current/sdk/linux_glibc/x86_64/lib/libdexfile_support.a
index b494539..24ecdbe 100644
--- a/current/sdk/linux_glibc/x86_64/lib/libdexfile_support.a
+++ b/current/sdk/linux_glibc/x86_64/lib/libdexfile_support.a
Binary files differ
diff --git a/current/sdk/linux_glibc/x86_64/lib/libnativebridge.so b/current/sdk/linux_glibc/x86_64/lib/libnativebridge.so
index 7fe86da..c2e5525 100755
--- a/current/sdk/linux_glibc/x86_64/lib/libnativebridge.so
+++ b/current/sdk/linux_glibc/x86_64/lib/libnativebridge.so
Binary files differ
diff --git a/current/sdk/linux_glibc/x86_64/lib/libnativehelper.so b/current/sdk/linux_glibc/x86_64/lib/libnativehelper.so
index 281d4d7..e14d40f 100755
--- a/current/sdk/linux_glibc/x86_64/lib/libnativehelper.so
+++ b/current/sdk/linux_glibc/x86_64/lib/libnativehelper.so
Binary files differ
diff --git a/current/sdk/linux_glibc/x86_64/lib/libnativehelper_lazy.a b/current/sdk/linux_glibc/x86_64/lib/libnativehelper_lazy.a
index 05c4e28..75dcf6f 100644
--- a/current/sdk/linux_glibc/x86_64/lib/libnativehelper_lazy.a
+++ b/current/sdk/linux_glibc/x86_64/lib/libnativehelper_lazy.a
Binary files differ
diff --git a/current/sdk/linux_glibc/x86_64/lib/libnativeloader.so b/current/sdk/linux_glibc/x86_64/lib/libnativeloader.so
index 5b1ffd9..5a90cec 100755
--- a/current/sdk/linux_glibc/x86_64/lib/libnativeloader.so
+++ b/current/sdk/linux_glibc/x86_64/lib/libnativeloader.so
Binary files differ
diff --git a/current/sdk/linux_glibc/x86_64/lib/libsigchain.so b/current/sdk/linux_glibc/x86_64/lib/libsigchain.so
index 9e0f2f1..8f5aca9 100755
--- a/current/sdk/linux_glibc/x86_64/lib/libsigchain.so
+++ b/current/sdk/linux_glibc/x86_64/lib/libsigchain.so
Binary files differ
diff --git a/current/sdk/sdk_library/public/legacy.art.module.platform.api-stubs.jar b/current/sdk/sdk_library/public/legacy.art.module.platform.api-stubs.jar
index 858bfe2..204668f 100644
--- a/current/sdk/sdk_library/public/legacy.art.module.platform.api-stubs.jar
+++ b/current/sdk/sdk_library/public/legacy.art.module.platform.api-stubs.jar
Binary files differ
diff --git a/current/sdk/sdk_library/public/legacy.art.module.platform.api.srcjar b/current/sdk/sdk_library/public/legacy.art.module.platform.api.srcjar
index f304afe..ded126f 100644
--- a/current/sdk/sdk_library/public/legacy.art.module.platform.api.srcjar
+++ b/current/sdk/sdk_library/public/legacy.art.module.platform.api.srcjar
Binary files differ
diff --git a/current/sdk/x86/lib/libnativebridge_lazy.so b/current/sdk/x86/lib/libnativebridge_lazy.so
index b66df1e..c36c730 100755
--- a/current/sdk/x86/lib/libnativebridge_lazy.so
+++ b/current/sdk/x86/lib/libnativebridge_lazy.so
Binary files differ
diff --git a/current/sdk/x86/lib/libnativehelper_compat_libc++.so b/current/sdk/x86/lib/libnativehelper_compat_libc++.so
index 25553b2..e2eae6f 100755
--- a/current/sdk/x86/lib/libnativehelper_compat_libc++.so
+++ b/current/sdk/x86/lib/libnativehelper_compat_libc++.so
Binary files differ
diff --git a/current/sdk/x86/lib/libnativeloader_lazy.so b/current/sdk/x86/lib/libnativeloader_lazy.so
index e0005d2..425781d 100755
--- a/current/sdk/x86/lib/libnativeloader_lazy.so
+++ b/current/sdk/x86/lib/libnativeloader_lazy.so
Binary files differ
diff --git a/current/sdk/x86_64/lib/libnativebridge_lazy.so b/current/sdk/x86_64/lib/libnativebridge_lazy.so
index 58eada9..d3023a7 100755
--- a/current/sdk/x86_64/lib/libnativebridge_lazy.so
+++ b/current/sdk/x86_64/lib/libnativebridge_lazy.so
Binary files differ
diff --git a/current/sdk/x86_64/lib/libnativehelper_compat_libc++.so b/current/sdk/x86_64/lib/libnativehelper_compat_libc++.so
index 7f43839..bd3626a 100755
--- a/current/sdk/x86_64/lib/libnativehelper_compat_libc++.so
+++ b/current/sdk/x86_64/lib/libnativehelper_compat_libc++.so
Binary files differ
diff --git a/current/sdk/x86_64/lib/libnativeloader_lazy.so b/current/sdk/x86_64/lib/libnativeloader_lazy.so
index d7e2b44..ce22df1 100755
--- a/current/sdk/x86_64/lib/libnativeloader_lazy.so
+++ b/current/sdk/x86_64/lib/libnativeloader_lazy.so
Binary files differ
diff --git a/current/test-exports/Android.bp b/current/test-exports/Android.bp
index ea7e3fa..1e1faa7 100755
--- a/current/test-exports/Android.bp
+++ b/current/test-exports/Android.bp
@@ -110,8 +110,7 @@
         "//libcore",
         "//libcore/benchmarks",
         "//packages/apps/KeyChain/tests",
-        "//packages/modules/Connectivity/tests/cts/net",
-        "//packages/modules/Connectivity/tests/cts/net/api23Test",
+        "//packages/modules/Connectivity/tests:__subpackages__",
         "//prebuilts:__subpackages__",
         "//system/timezone/distro/core",
     ],
@@ -140,8 +139,7 @@
         "//libcore",
         "//libcore/benchmarks",
         "//packages/apps/KeyChain/tests",
-        "//packages/modules/Connectivity/tests/cts/net",
-        "//packages/modules/Connectivity/tests/cts/net/api23Test",
+        "//packages/modules/Connectivity/tests:__subpackages__",
         "//prebuilts:__subpackages__",
         "//system/timezone/distro/core",
     ],
diff --git a/current/test-exports/arm/lib/libjavacoretests.so b/current/test-exports/arm/lib/libjavacoretests.so
index c7a82fc..b94680b 100755
--- a/current/test-exports/arm/lib/libjavacoretests.so
+++ b/current/test-exports/arm/lib/libjavacoretests.so
Binary files differ
diff --git a/current/test-exports/arm64/lib/libjavacoretests.so b/current/test-exports/arm64/lib/libjavacoretests.so
index 2e618a1..ca4eeb4 100755
--- a/current/test-exports/arm64/lib/libjavacoretests.so
+++ b/current/test-exports/arm64/lib/libjavacoretests.so
Binary files differ
diff --git a/current/test-exports/java/core-compat-test-rules.jar b/current/test-exports/java/core-compat-test-rules.jar
index d635400..be044b8 100644
--- a/current/test-exports/java/core-compat-test-rules.jar
+++ b/current/test-exports/java/core-compat-test-rules.jar
Binary files differ
diff --git a/current/test-exports/java/core-libart-for-host.jar b/current/test-exports/java/core-libart-for-host.jar
index ed71581..4ea7193 100644
--- a/current/test-exports/java/core-libart-for-host.jar
+++ b/current/test-exports/java/core-libart-for-host.jar
Binary files differ
diff --git a/current/test-exports/java/core-tests.jar b/current/test-exports/java/core-tests.jar
index 6b1c415..f7921f4 100644
--- a/current/test-exports/java/core-tests.jar
+++ b/current/test-exports/java/core-tests.jar
Binary files differ
diff --git a/current/test-exports/java/okhttp-for-host.jar b/current/test-exports/java/okhttp-for-host.jar
index cd4279a..8266b8b 100644
--- a/current/test-exports/java/okhttp-for-host.jar
+++ b/current/test-exports/java/okhttp-for-host.jar
Binary files differ
diff --git a/current/test-exports/java/okhttp-nojarjar.jar b/current/test-exports/java/okhttp-nojarjar.jar
index 3c3cd43..2eb908d 100644
--- a/current/test-exports/java/okhttp-nojarjar.jar
+++ b/current/test-exports/java/okhttp-nojarjar.jar
Binary files differ
diff --git a/current/test-exports/x86/lib/libjavacoretests.so b/current/test-exports/x86/lib/libjavacoretests.so
index f4ace50..69b429f 100755
--- a/current/test-exports/x86/lib/libjavacoretests.so
+++ b/current/test-exports/x86/lib/libjavacoretests.so
Binary files differ
diff --git a/current/test-exports/x86_64/lib/libjavacoretests.so b/current/test-exports/x86_64/lib/libjavacoretests.so
index ddb9466..4cc3e86 100755
--- a/current/test-exports/x86_64/lib/libjavacoretests.so
+++ b/current/test-exports/x86_64/lib/libjavacoretests.so
Binary files differ