diff --git a/tools/android/modularization/owners/owners_git.py b/tools/android/modularization/owners/owners_git.py
index 32444f3..d448582 100644
--- a/tools/android/modularization/owners/owners_git.py
+++ b/tools/android/modularization/owners/owners_git.py
@@ -41,7 +41,7 @@
 def _run_ls_files_command(subdirectory: Optional[str],
                           git_src: str) -> List[str]:
   command = _build_ls_files_command(subdirectory)
-  filepath_str = run_command(_build_ls_files_command(subdirectory), cwd=git_src)
+  filepath_str = run_command(command, cwd=git_src)
   return [filepath for filepath in filepath_str.split('\n') if filepath]
 
 
diff --git a/tools/clang/scripts/update.py b/tools/clang/scripts/update.py
index 8498dc83..48f78ad 100755
--- a/tools/clang/scripts/update.py
+++ b/tools/clang/scripts/update.py
@@ -38,7 +38,7 @@
 # https://chromium.googlesource.com/chromium/src/+/master/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-12-init-11780-g6ef07111'
+CLANG_REVISION = 'llvmorg-12-init-12083-g94e4ec64'
 CLANG_SUB_REVISION = 1
 
 PACKAGE_VERSION = '%s-%s' % (CLANG_REVISION, CLANG_SUB_REVISION)
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index c8e61c92..a3aaaf3 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -1280,6 +1280,7 @@
 
 <enum name="AdsViolations">
   <int value="0" label="kMobileAdDensityByHeightAbove30"/>
+  <int value="1" label="kHeavyAdsInterventionAtHostLimit"/>
 </enum>
 
 <enum name="AdUserActivationStatus">
@@ -1386,7 +1387,11 @@
 </enum>
 
 <enum name="AmbientModePhotoSource">
-  <int value="0" label="Default"/>
+  <int value="0" label="Default">
+    This is when user clicked on the top level Screen Saver toggle but did not
+    click on any of photo source categories. The system will default show Art
+    Gallery with a default list of art sub categories.
+  </int>
   <int value="1" label="Art Gallery"/>
   <int value="2" label="Google Photos Recent Highlights Only"/>
   <int value="3" label="Google Photos Personal Albums Only"/>
@@ -39409,6 +39414,7 @@
   <int value="0" label="Dino game widget"/>
   <int value="1" label="Search widget"/>
   <int value="2" label="Quick actions widget"/>
+  <int value="3" label="A widget that has become obsolete"/>
 </enum>
 
 <enum name="IOSWKWebViewLinkPreviewAction">
@@ -67837,6 +67843,7 @@
   <int value="11" label="Abort: no browser window"/>
   <int value="12" label="Abort: password update"/>
   <int value="13" label="Abort: password update pending"/>
+  <int value="14" label="Abort: user declined new profile for this account"/>
 </enum>
 
 <enum name="SigninInterceptResult">
diff --git a/tools/metrics/histograms/histograms_xml/android/histograms.xml b/tools/metrics/histograms/histograms_xml/android/histograms.xml
index bbb9276..c64926b 100644
--- a/tools/metrics/histograms/histograms_xml/android/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/android/histograms.xml
@@ -2410,6 +2410,9 @@
 
 <histogram name="Android.WebView.ExtraHeaders.Valid" enum="BooleanValid"
     expires_after="2021-01-14">
+  <obsolete>
+    Removed Nov 2020; experiment is done and the data isn't useful.
+  </obsolete>
   <owner>torne@chromium.org</owner>
   <owner>src/android_webview/OWNERS</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/ash/histograms.xml b/tools/metrics/histograms/histograms_xml/ash/histograms.xml
index 11ce469..3e44d11 100644
--- a/tools/metrics/histograms/histograms_xml/ash/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/ash/histograms.xml
@@ -1169,6 +1169,10 @@
 
 <histogram name="Ash.PhoneHub.InterstitialScreenEvent.{Screen}"
     enum="PhoneHubInterstitialScreenEvent" expires_after="2021-10-31">
+  <obsolete>
+    Moved to tools/metrics/histograms/histograms_xml/phonehub/histograms.xml.
+    Removed 11/2020 in M89.
+  </obsolete>
   <owner>tengs@chromium.org</owner>
   <owner>khorimoto@chromium.org</owner>
   <summary>
@@ -1203,6 +1207,10 @@
 
 <histogram name="Ash.PhoneHub.NotificationCount" units="notifications"
     expires_after="2021-10-31">
+  <obsolete>
+    Moved to tools/metrics/histograms/histograms_xml/phonehub/histograms.xml.
+    Removed 11/2020 in M89.
+  </obsolete>
   <owner>tengs@chromium.org</owner>
   <owner>khorimoto@chromium.org</owner>
   <summary>
@@ -1213,6 +1221,10 @@
 
 <histogram name="Ash.PhoneHub.NotificationOptInEvents"
     enum="PhoneHubInterstitialScreenEvent" expires_after="2021-10-31">
+  <obsolete>
+    Moved to tools/metrics/histograms/histograms_xml/phonehub/histograms.xml.
+    Removed 11/2020 in M89.
+  </obsolete>
   <owner>tengs@chromium.org</owner>
   <owner>khorimoto@chromium.org</owner>
   <summary>Events for the given notification opt-in prompt.</summary>
@@ -1220,6 +1232,10 @@
 
 <histogram name="Ash.PhoneHub.QuickActionClicked" enum="PhoneHubQuickAction"
     expires_after="2021-10-31">
+  <obsolete>
+    Moved to tools/metrics/histograms/histograms_xml/phonehub/histograms.xml.
+    Removed 11/2020 in M89.
+  </obsolete>
   <owner>tengs@chromium.org</owner>
   <owner>khorimoto@chromium.org</owner>
   <summary>Event logged after the user clicks on a quick action.</summary>
@@ -1227,6 +1243,10 @@
 
 <histogram name="Ash.PhoneHub.ScreenOnSettingsButtonClicked"
     enum="PhoneHubScreen" expires_after="2021-10-31">
+  <obsolete>
+    Moved to tools/metrics/histograms/histograms_xml/phonehub/histograms.xml.
+    Removed 11/2020 in M89.
+  </obsolete>
   <owner>tengs@chromium.org</owner>
   <owner>khorimoto@chromium.org</owner>
   <summary>
@@ -1237,6 +1257,10 @@
 
 <histogram name="Ash.PhoneHub.ScreenOn{BubbleEvent}" enum="PhoneHubScreen"
     expires_after="2021-10-31">
+  <obsolete>
+    Moved to tools/metrics/histograms/histograms_xml/phonehub/histograms.xml.
+    Removed 11/2020 in M89.
+  </obsolete>
   <owner>tengs@chromium.org</owner>
   <owner>khorimoto@chromium.org</owner>
   <summary>
@@ -1251,6 +1275,10 @@
 
 <histogram name="Ash.PhoneHub.TabContinuationChipClicked" units="tab index"
     expires_after="2021-10-31">
+  <obsolete>
+    Moved to tools/metrics/histograms/histograms_xml/phonehub/histograms.xml.
+    Removed 11/2020 in M89.
+  </obsolete>
   <owner>tengs@chromium.org</owner>
   <owner>khorimoto@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/blink/histograms.xml b/tools/metrics/histograms/histograms_xml/blink/histograms.xml
index ba11ca8..203a14e7 100644
--- a/tools/metrics/histograms/histograms_xml/blink/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/blink/histograms.xml
@@ -1069,7 +1069,7 @@
 </histogram>
 
 <histogram name="Blink.KeyboardLock.MethodCalled" enum="KeyboardLockMethods"
-    expires_after="2020-12-31">
+    expires_after="2021-03-31">
   <owner>joedow@chromium.org</owner>
   <owner>garykac@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/histogram_suffixes_list.xml b/tools/metrics/histograms/histograms_xml/histogram_suffixes_list.xml
index 5963664..f028b2a0 100644
--- a/tools/metrics/histograms/histograms_xml/histogram_suffixes_list.xml
+++ b/tools/metrics/histograms/histograms_xml/histogram_suffixes_list.xml
@@ -11303,6 +11303,7 @@
   <suffix name="__Test__" label=""/>
   <suffix name="ChromeUpdate" label=""/>
   <suffix name="Prefetch" label=""/>
+  <suffix name="ReadingList" label=""/>
   <suffix name="Unknown" label=""/>
   <suffix name="WebUI" label=""/>
   <affected-histogram name="Notifications.Scheduler.IhnrActionButtonEvent"/>
@@ -18347,6 +18348,7 @@
   <affected-histogram name="Sync.ModelTypeErrorSite"/>
   <affected-histogram name="Sync.ModelTypeMemoryKB"/>
   <affected-histogram name="Sync.ModelTypeStoreCommitWriteBatchOutcome"/>
+  <affected-histogram name="Sync.ModelTypeTimeUntilEncryptionKeyFound"/>
   <affected-histogram name="Sync.NonReflectionUpdateFreshnessPossiblySkewed">
     <obsolete>
       Deprecated 06/2019. Replaced by
diff --git a/tools/metrics/histograms/histograms_xml/phonehub/histograms.xml b/tools/metrics/histograms/histograms_xml/phonehub/histograms.xml
index 1efe632..29d214b 100644
--- a/tools/metrics/histograms/histograms_xml/phonehub/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/phonehub/histograms.xml
@@ -64,6 +64,83 @@
   <summary>The success rate of connecting to the Phone.</summary>
 </histogram>
 
+<histogram name="PhoneHub.InterstitialScreenEvent.{Screen}"
+    enum="PhoneHubInterstitialScreenEvent" expires_after="2021-10-31">
+  <owner>tengs@chromium.org</owner>
+  <owner>khorimoto@chromium.org</owner>
+  <summary>Events for the given PhoneHub interstitial screen.</summary>
+<!-- The entries below should be a subset of the PhoneHubScreen enum -->
+
+  <token key="Screen">
+    <variant name="BluetoothOrWifiDisabled"/>
+    <variant name="InitialConnecting"/>
+    <variant name="Onboarding.ExistingMultideviceUser"/>
+    <variant name="Onboarding.NewMultideviceUser"/>
+    <variant name="OnboardingDismissPrompt"/>
+    <variant name="PhoneConnecting"/>
+    <variant name="PhoneDisconnected"/>
+  </token>
+</histogram>
+
+<histogram name="PhoneHub.NotificationCount" units="notifications"
+    expires_after="2021-10-31">
+  <owner>tengs@chromium.org</owner>
+  <owner>khorimoto@chromium.org</owner>
+  <summary>
+    The number of PhoneHub notifications, logged each time a notification is
+    added or removed.
+  </summary>
+</histogram>
+
+<histogram name="PhoneHub.NotificationOptInEvents"
+    enum="PhoneHubInterstitialScreenEvent" expires_after="2021-10-31">
+  <owner>tengs@chromium.org</owner>
+  <owner>khorimoto@chromium.org</owner>
+  <summary>Events for the given notification opt-in prompt.</summary>
+</histogram>
+
+<histogram name="PhoneHub.QuickActionClicked" enum="PhoneHubQuickAction"
+    expires_after="2021-10-31">
+  <owner>tengs@chromium.org</owner>
+  <owner>khorimoto@chromium.org</owner>
+  <summary>Event logged after the user clicks on a quick action.</summary>
+</histogram>
+
+<histogram name="PhoneHub.ScreenOnSettingsButtonClicked" enum="PhoneHubScreen"
+    expires_after="2021-10-31">
+  <owner>tengs@chromium.org</owner>
+  <owner>khorimoto@chromium.org</owner>
+  <summary>
+    Logs the current screen when the settings button is clicked in the tray
+    bubble.
+  </summary>
+</histogram>
+
+<histogram name="PhoneHub.ScreenOn{BubbleEvent}" enum="PhoneHubScreen"
+    expires_after="2021-10-31">
+  <owner>tengs@chromium.org</owner>
+  <owner>khorimoto@chromium.org</owner>
+  <summary>
+    Logs the current screen for the PhoneHub tray given bubble event (i.e. on
+    bubble open or close).
+  </summary>
+  <token key="BubbleEvent">
+    <variant name="BubbleClose"/>
+    <variant name="BubbleOpen"/>
+  </token>
+</histogram>
+
+<histogram name="PhoneHub.TabContinuationChipClicked" units="tab index"
+    expires_after="2021-10-31">
+  <owner>tengs@chromium.org</owner>
+  <owner>khorimoto@chromium.org</owner>
+  <summary>
+    After a tab continuation chip is clicked, the index of the tab is logged.
+    Tab indices are ordered left-to-right, top-to-bottom in a standard LTR
+    locale.
+  </summary>
+</histogram>
+
 <histogram name="PhoneHub.Usage.SentMessageTypeCount"
     enum="PhoneHubMessageType" expires_after="M98">
   <owner>khorimoto@chromium.org</owner>
diff --git a/tools/metrics/histograms/histograms_xml/sync/histograms.xml b/tools/metrics/histograms/histograms_xml/sync/histograms.xml
index 7e6bc30e..c3eaa02 100644
--- a/tools/metrics/histograms/histograms_xml/sync/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/sync/histograms.xml
@@ -577,6 +577,19 @@
   </summary>
 </histogram>
 
+<histogram base="true" name="Sync.ModelTypeTimeUntilEncryptionKeyFound"
+    units="GetUpdatesResponses" expires_after="2021-05-18">
+  <owner>victorvianna@google.com</owner>
+  <owner>mastiz@chromium.org</owner>
+  <summary>
+    Records how long it took from the moment the first update encrypted with
+    this key was received by ModelTypeWorker, to the moment where the key was
+    available to the Cryptographer. The time is measured by the number of
+    GetUpdatesResponse received by the worker *while* the Cryptographer didn't
+    have pending keys (and thus the key should have been known in theory).
+  </summary>
+</histogram>
+
 <histogram base="true" name="Sync.ModelTypeUpdateDrop" enum="SyncModelTypes"
     expires_after="2021-05-01">
 <!-- Name completed by histogram_suffixes name="SyncModelTypeUpdateDrop" -->
diff --git a/tools/metrics/histograms/histograms_xml/windows/histograms.xml b/tools/metrics/histograms/histograms_xml/windows/histograms.xml
index b9901488..d3edc879 100644
--- a/tools/metrics/histograms/histograms_xml/windows/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/windows/histograms.xml
@@ -31,6 +31,17 @@
   </summary>
 </histogram>
 
+<histogram name="Windows.CetAvailable" enum="BooleanAvailable"
+    expires_after="2021-12-01">
+  <owner>ajgo@chromium.org</owner>
+  <owner>wfh@chromium.org</owner>
+  <summary>
+    Records if CET (Control-flow Enforcement Technology / Hardware Enforced
+    Shadow Stack) is available, based on IsUserCetAvailableInEnvironment().
+    Reported once per browser session, on startup.
+  </summary>
+</histogram>
+
 <histogram name="Windows.ChromeDllPrefetchResult" enum="FilePrefetchResult"
     expires_after="2021-07-01">
   <owner>brucedawson@chromium.org</owner>
diff --git a/tools/perf/core/tbmv3/run_tbmv3_metric_unittest.py b/tools/perf/core/tbmv3/run_tbmv3_metric_unittest.py
index 210c236..41c5c66e 100644
--- a/tools/perf/core/tbmv3/run_tbmv3_metric_unittest.py
+++ b/tools/perf/core/tbmv3/run_tbmv3_metric_unittest.py
@@ -74,3 +74,15 @@
             '--metric', name,
             '--outfile', self.outfile_path,
         ])
+
+  def testRunInternalTBMv3Metric(self):
+    """Run metric that is compiled into Trace Processor."""
+    # This won't produce any histograms because trace_metadata proto is not
+    # annotated. Check only that it doesn't throw errors. 'trace_metadata'
+    # metric is relatively unlikely to be removed from Perfetto, but if it
+    # is, we will have to pick a different metric.
+    run_tbmv3_metric.Main([
+        '--trace', self.trace_path,
+        '--metric', 'trace_metadata',
+        '--outfile', self.outfile_path,
+    ])
diff --git a/tools/perf/core/tbmv3/trace_processor.py b/tools/perf/core/tbmv3/trace_processor.py
index 6b98dfb..19808bc 100644
--- a/tools/perf/core/tbmv3/trace_processor.py
+++ b/tools/perf/core/tbmv3/trace_processor.py
@@ -21,7 +21,7 @@
                                              'metrics'))
 POWER_PROFILE_SQL = 'power_profile.sql'
 
-MetricFiles = namedtuple('MetricFiles', ('sql', 'proto'))
+MetricFiles = namedtuple('MetricFiles', ('sql', 'proto', 'internal_metric'))
 
 
 class InvalidTraceProcessorOutput(Exception):
@@ -69,15 +69,18 @@
 
 
 def _CreateMetricFiles(metric_name):
-  # Currently assuming all metric files live in tbmv3/metrics directory. We will
-  # revise this decision later.
-  metric_files = MetricFiles(
-      sql=os.path.join(METRICS_PATH, metric_name + '.sql'),
-      proto=os.path.join(METRICS_PATH, metric_name + '.proto'))
-  for filetype, path in metric_files._asdict().iteritems():
-    if not os.path.isfile(path):
-      raise RuntimeError('metric %s file not found at %s' % (filetype, path))
-  return metric_files
+  # Currently assuming all metric files live in tbmv3/metrics directory unless
+  # the metrics are compiled into trace processor. We will revise this decision
+  # later.
+  sql_file = os.path.join(METRICS_PATH, metric_name + '.sql')
+  proto_file = os.path.join(METRICS_PATH, metric_name + '.proto')
+  internal_metric = False
+  if not (os.path.isfile(sql_file) and os.path.isfile(proto_file)):
+    # Metric files not found - metric may be compiled into trace processor.
+    internal_metric = True
+  return MetricFiles(sql=sql_file,
+                     proto=proto_file,
+                     internal_metric=internal_metric)
 
 
 def _ScopedHistogramName(metric_name, histogram_name):
@@ -200,9 +203,13 @@
   """
   trace_processor_path = _EnsureTraceProcessor(trace_processor_path)
   metric_files = _CreateMetricFiles(metric_name)
+  if metric_files.internal_metric:
+    metric_name_arg = metric_name
+  else:
+    metric_name_arg = metric_files.sql
   command_args = [
       trace_processor_path,
-      '--run-metrics', metric_files.sql,
+      '--run-metrics', metric_name_arg,
       '--metrics-output', 'json',
       trace_file,
   ]
diff --git a/tools/privacy_budget/blink_apis/generate_blink_api_db_entrypoint.py b/tools/privacy_budget/blink_apis/generate_blink_api_db_entrypoint.py
index 13232f0..7e62f3ae 100755
--- a/tools/privacy_budget/blink_apis/generate_blink_api_db_entrypoint.py
+++ b/tools/privacy_budget/blink_apis/generate_blink_api_db_entrypoint.py
@@ -7,8 +7,9 @@
 import os
 
 if __name__ == "__main__":
+  shell = (os.name == 'nt')
   subprocess.call([
       "vpython",
       os.path.join(os.path.dirname(os.path.realpath(__file__)),
                    "generate_blink_api_db.py")
-  ] + sys.argv[1:])
+  ] + sys.argv[1:], shell=shell)