diff --git a/tools/clang/scripts/update.py b/tools/clang/scripts/update.py
index e6b1fdc..fe897b9 100755
--- a/tools/clang/scripts/update.py
+++ b/tools/clang/scripts/update.py
@@ -35,8 +35,8 @@
 # https://chromium.googlesource.com/chromium/src/+/main/docs/updating_clang.md
 # Reverting problematic clang rolls is safe, though.
 # This is the output of `git describe` and is usable as a commit-ish.
-CLANG_REVISION = 'llvmorg-16-init-907-g8b740747'
-CLANG_SUB_REVISION = 4
+CLANG_REVISION = 'llvmorg-16-init-3221-gce6989fd'
+CLANG_SUB_REVISION = 1
 
 PACKAGE_VERSION = '%s-%s' % (CLANG_REVISION, CLANG_SUB_REVISION)
 RELEASE_VERSION = '16.0.0'
diff --git a/tools/json_schema_compiler/cpp_util.py b/tools/json_schema_compiler/cpp_util.py
index 8bdc723..d88edf0 100644
--- a/tools/json_schema_compiler/cpp_util.py
+++ b/tools/json_schema_compiler/cpp_util.py
@@ -110,7 +110,9 @@
   fields are gradually migrated away from using std::unique_ptr.
   """
 
-  if type_.property_type == PropertyType.INTEGER:
+  if type_.property_type in (PropertyType.BOOLEAN,
+                             PropertyType.DOUBLE,
+                             PropertyType.INTEGER):
     return True
 
   return False
diff --git a/tools/json_schema_compiler/manifest_parse_util.h b/tools/json_schema_compiler/manifest_parse_util.h
index a4bbcfb..700862b 100644
--- a/tools/json_schema_compiler/manifest_parse_util.h
+++ b/tools/json_schema_compiler/manifest_parse_util.h
@@ -75,7 +75,7 @@
                          std::u16string* error,
                          std::vector<base::StringPiece>* error_path_reversed);
 
-// This overload is used for optional values.
+// This overload is used for optional types wrapped as unique_ptr<T>.
 template <typename T>
 bool ParseFromDictionary(const base::DictionaryValue& dict,
                          base::StringPiece key,
@@ -83,6 +83,14 @@
                          std::u16string* error,
                          std::vector<base::StringPiece>* error_path_reversed);
 
+// This overload is used for optional types wrapped as absl::optional<T>.
+template <typename T>
+bool ParseFromDictionary(const base::DictionaryValue& dict,
+                         base::StringPiece key,
+                         absl::optional<T>* out_opt,
+                         std::u16string* error,
+                         std::vector<base::StringPiece>* error_path_reversed);
+
 // This overload is used for generated types.
 template <typename T>
 bool ParseFromDictionary(const base::DictionaryValue& dict,
@@ -137,6 +145,28 @@
   return true;
 }
 
+template <typename T>
+bool ParseFromDictionary(const base::DictionaryValue& dict,
+                         base::StringPiece key,
+                         absl::optional<T>* out_opt,
+                         std::u16string* error,
+                         std::vector<base::StringPiece>* error_path_reversed) {
+  DCHECK(out_opt);
+
+  // Ignore optional keys if they are not present without raising an error.
+  if (!dict.FindKey(key))
+    return true;
+
+  // Parse errors for optional keys which are specified should still cause a
+  // failure.
+  T result{};
+  if (!ParseFromDictionary(dict, key, &result, error, error_path_reversed))
+    return false;
+
+  *out_opt = std::move(result);
+  return true;
+}
+
 // Alias for pointer to a function which converts a string to an enum of type T.
 template <typename T>
 using StringToEnumConverter = T (*)(const std::string&);
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index ad5b25f..9923f446 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -57438,6 +57438,8 @@
   <int value="-1275552094" label="SpectreVariant2Mitigation:disabled"/>
   <int value="-1274502866" label="AllowDisableMouseAcceleration:enabled"/>
   <int value="-1273786900" label="SyncAndroidPromosWithTitle:disabled"/>
+  <int value="-1272990935"
+      label="SyncAndroidLimitNTPPromoImpressions:disabled"/>
   <int value="-1272593346" label="NewTabLoadingAnimation:disabled"/>
   <int value="-1271921284" label="WebViewThreadSafeMedia:enabled"/>
   <int value="-1271563519" label="enable-appcontainer"/>
@@ -62616,6 +62618,7 @@
   <int value="1959148757" label="OffMainThreadFetch:enabled"/>
   <int value="1961068026"
       label="EnableEphemeralGuestProfilesOnDesktop:enabled"/>
+  <int value="1961148488" label="SyncAndroidLimitNTPPromoImpressions:enabled"/>
   <int value="1961425320" label="force-qtkit"/>
   <int value="1961717207" label="PageInfoAboutThisSite:enabled"/>
   <int value="1962485086" label="DesktopPWAsLocalUpdating:enabled"/>
@@ -81014,6 +81017,7 @@
   <int value="25" label="kProfilePickerView"/>
   <int value="26" label="kCommanderFrontend"/>
   <int value="27" label="kDiceWebSigninInterceptionBubble"/>
+  <int value="28" label="kHistoryMenuBridge"/>
 </enum>
 
 <enum name="ProfileMenuActionableItem">
@@ -102453,6 +102457,7 @@
   <int value="55" label="InjectedStyleSheet"/>
   <int value="56" label="MediaSessionImplOnServiceCreated"/>
   <int value="57" label="WebTransport"/>
+  <int value="58" label="Keepalive request"/>
 </enum>
 
 <enum name="WebShareMethod">
diff --git a/tools/metrics/histograms/metadata/bookmarks/histograms.xml b/tools/metrics/histograms/metadata/bookmarks/histograms.xml
index dc633fbd..a100845 100644
--- a/tools/metrics/histograms/metadata/bookmarks/histograms.xml
+++ b/tools/metrics/histograms/metadata/bookmarks/histograms.xml
@@ -140,6 +140,17 @@
   </summary>
 </histogram>
 
+<histogram name="Bookmarks.Clone.NumCloned" units="bookmarks"
+    expires_after="2023-06-08">
+  <owner>wylieb@chromium.org</owner>
+  <owner>chrome-collections@google.com</owner>
+  <component>UI&gt;Browser&gt;Bookmarks</component>
+  <summary>
+    Records the number of bookmarks that were selected when a clone operation
+    starts. It doesn't include the children included in folder copies.
+  </summary>
+</histogram>
+
 <histogram name="Bookmarks.Count.OnProfileLoad" units="bookmarks"
     expires_after="2023-02-26">
   <owner>supertri@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/kiosk/histograms.xml b/tools/metrics/histograms/metadata/kiosk/histograms.xml
index 8a830d4..fff91112 100644
--- a/tools/metrics/histograms/metadata/kiosk/histograms.xml
+++ b/tools/metrics/histograms/metadata/kiosk/histograms.xml
@@ -43,7 +43,7 @@
 </histogram>
 
 <histogram name="Kiosk.Extensions.InstallError.{InstallSource}"
-    enum="ExtensionInstallationFailureReason" expires_after="2022-10-01">
+    enum="ExtensionInstallationFailureReason" expires_after="2023-08-24">
   <owner>yixie@chromium.org</owner>
   <owner>chromeos-kiosk-eng@google.com</owner>
   <summary>
@@ -253,7 +253,7 @@
 </histogram>
 
 <histogram name="Kiosk.WebApp.InstallError" enum="WebAppInstallResultCode"
-    expires_after="2022-10-01">
+    expires_after="2023-08-24">
   <owner>yixie@chromium.org</owner>
   <owner>chromeos-kiosk-eng@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/password/histograms.xml b/tools/metrics/histograms/metadata/password/histograms.xml
index 6e7e5c5..4fbe1415 100644
--- a/tools/metrics/histograms/metadata/password/histograms.xml
+++ b/tools/metrics/histograms/metadata/password/histograms.xml
@@ -1189,7 +1189,7 @@
 </histogram>
 
 <histogram name="PasswordManager.CompromisedCredentials2.{Issue}"
-    units="credentials" expires_after="2022-09-12">
+    units="credentials" expires_after="M110">
   <owner>vasilii@chromium.org</owner>
   <owner>vsemeniuk@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/platform/histograms.xml b/tools/metrics/histograms/metadata/platform/histograms.xml
index ce3277e..442d42d 100644
--- a/tools/metrics/histograms/metadata/platform/histograms.xml
+++ b/tools/metrics/histograms/metadata/platform/histograms.xml
@@ -1826,28 +1826,6 @@
   </summary>
 </histogram>
 
-<histogram name="PlatformThread.Mac.AttemptedRealtimePeriod"
-    units="microseconds" expires_after="2022-08-28">
-  <owner>olka@chromium.org</owner>
-  <owner>handellm@chromium.org</owner>
-  <summary>
-    Realtime period the thread is attempted to be configured with. Zero means
-    the default empirical configuration is used. Reported only on Mac.
-  </summary>
-</histogram>
-
-<histogram name="PlatformThread.Mac.SucceededRealtimePeriod"
-    units="microseconds" expires_after="2022-09-11">
-  <owner>olka@chromium.org</owner>
-  <owner>handellm@chromium.org</owner>
-  <summary>
-    Realtime thread period logged if it was applied successfully. Zero means the
-    default empirical configuration is used. Comparison with
-    PlatformThread.Mac.AttemptedRealtimePeriod may point to problematic
-    configurations. Reported only on Mac.
-  </summary>
-</histogram>
-
 </histograms>
 
 </histogram-configuration>
diff --git a/tools/metrics/histograms/metadata/storage/histograms.xml b/tools/metrics/histograms/metadata/storage/histograms.xml
index 117a0d8..cc28691 100644
--- a/tools/metrics/histograms/metadata/storage/histograms.xml
+++ b/tools/metrics/histograms/metadata/storage/histograms.xml
@@ -775,6 +775,23 @@
   </summary>
 </histogram>
 
+<histogram
+    name="Storage.SharedStorage.Document.Timing.SelectURL.ExecutedInWorklet"
+    units="ms" expires_after="2023-07-31">
+  <owner>cammie@chromium.org</owner>
+  <owner>yaoxia@chromium.org</owner>
+  <owner>chrome-ads-histograms@google.com</owner>
+  <summary>
+    Measures the time from when the mojo callback runs in
+    `SharedStorageWorkletHost::RunURLSelectionOperationOnWorklet()` to the end
+    of
+    `SharedStorageWorkletHost::OnRunURLSelectionOperationOnWorkletFinished()`.
+    Only measured for calls where the mojo callback has run with a parameter
+    `success` equal to true. Recorded in
+    `SharedStorageWorkletHost::OnRunURLSelectionOperationOnWorkletFinished()`.
+  </summary>
+</histogram>
+
 <histogram name="Storage.SharedStorage.Document.Timing.Set" units="ms"
     expires_after="2023-07-31">
   <owner>cammie@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/sync/histograms.xml b/tools/metrics/histograms/metadata/sync/histograms.xml
index cef9824..3fb02e9 100644
--- a/tools/metrics/histograms/metadata/sync/histograms.xml
+++ b/tools/metrics/histograms/metadata/sync/histograms.xml
@@ -1305,7 +1305,7 @@
 </histogram>
 
 <histogram name="Sync.TrustedVaultRecoverabilityDegradedFixTrigger"
-    enum="TrustedVaultUserActionTrigger" expires_after="2022-09-11">
+    enum="TrustedVaultUserActionTrigger" expires_after="2023-01-15">
   <owner>mmoskvitin@google.com</owner>
   <owner>mastiz@chromium.org</owner>
   <component>Services&gt;Sync</component>
diff --git a/tools/perf/contrib/power/power_mobile.py b/tools/perf/contrib/power/power_mobile.py
index 7a593901b..5b0fa99 100644
--- a/tools/perf/contrib/power/power_mobile.py
+++ b/tools/perf/contrib/power/power_mobile.py
@@ -2,50 +2,28 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-from core import perf_benchmark
 from core import platforms
 from contrib.power.top_sites_story import ContribPowerMobileTopSitesStorySet
+from contrib.power.perf_benchmark_with_profiling import PerfBenchmarkWithProfiling
 from telemetry import benchmark
 from telemetry import story
-from telemetry.timeline.chrome_trace_category_filter import ChromeTraceCategoryFilter
-from telemetry.web_perf import timeline_based_measurement
 
 
 @benchmark.Info(emails=['chrometto-team@google.com'])
-class ContribPowerMobile(perf_benchmark.PerfBenchmark):
+class ContribPowerMobile(PerfBenchmarkWithProfiling):
 
   SUPPORTED_PLATFORMS = [story.expectations.ALL_ANDROID]
   SUPPORTED_PLATFORM_TAGS = [platforms.ANDROID]
 
-  def __init__(self):
-    super(ContribPowerMobile, self).__init__()
-    self._browser_package = None
-
   def CreateStorySet(self, options):
+    del options  # unused
     return ContribPowerMobileTopSitesStorySet()
 
-  def CreateCoreTimelineBasedMeasurementOptions(self):
-    options = timeline_based_measurement.Options()
-    options.config.chrome_trace_config.SetCategoryFilter(
-        ChromeTraceCategoryFilter(''))
-    options.config.enable_experimental_system_tracing = True
-    options.config.system_trace_config.EnableProfiling(
-        '%s*' % self._browser_package, 300)
-    options.config.system_trace_config.EnableChrome(
-        chrome_trace_config=options.config.chrome_trace_config)
-    # options.config.system_trace_config.EnableProcessStats()
-    # options.config.system_trace_config.EnablePower()
-    # options.config.system_trace_config.EnableFtraceCpu()
-    options.config.system_trace_config.EnableFtraceSched()
-    return options
+  def GetSamplingFrequencyHz(self):
+    return 300
 
-  def CustomizeOptions(self, finder_options, possible_browser=None):
-    # We are not supposed to overwrite this method (see PerfBenchmark) but it is
-    # the only way to get to the possible_browser in time to set the parameters
-    # for stack sampling.
-    super(ContribPowerMobile, self).CustomizeOptions(finder_options,
-                                                     possible_browser)
-    self._browser_package = possible_browser.browser_package
+  def CustomizeSystemTraceConfig(self, system_trace_config):
+    system_trace_config.EnableFtraceSched()
 
   @classmethod
   def Name(cls):
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json
index 97f371a..c4d3f50 100644
--- a/tools/perf/core/perfetto_binary_roller/binary_deps.json
+++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -5,8 +5,8 @@
             "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux_arm64/49b4b5dcbc312d8d2c3751cf29238b8efeb4e494/trace_processor_shell"
         },
         "win": {
-            "hash": "ff7e7d8926f158df7ac6121e36df596996b69442",
-            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/437f4431c5225df1e2debd6309ae8096f63c6eda/trace_processor_shell.exe"
+            "hash": "76d94a1f8ef8d909c9761fac8e19eb7c1f04fedc",
+            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/4b26857cbecdd70127288d9c495843661300dfc6/trace_processor_shell.exe"
         },
         "linux_arm": {
             "hash": "58893933be305d3bfe0a72ebebcacde2ac3ca893",
@@ -21,8 +21,8 @@
             "full_remote_path": "perfetto-luci-artifacts/v25.0/mac-arm64/trace_processor_shell"
         },
         "linux": {
-            "hash": "80285105c214c2e700ba1c27b8579ec9637c5ec2",
-            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/437f4431c5225df1e2debd6309ae8096f63c6eda/trace_processor_shell"
+            "hash": "c3ecc08bcbf706ba378fdea1c987bfc219740a70",
+            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/588af63a4d3c5d79ee0a683dcfce9cd68806d6a1/trace_processor_shell"
         }
     },
     "power_profile.sql": {