diff --git a/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java b/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java
index 0d25b81..9185776 100644
--- a/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java
+++ b/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java
@@ -318,9 +318,6 @@
                         Log.w(TAG, "Forking a process to prefetch the native library failed.");
                     }
                 }
-                // As this runs in a background thread, it can be called before histograms are
-                // initialized. In this instance, histograms are dropped.
-                RecordHistogram.initialize();
                 if (prefetch) {
                     RecordHistogram.recordBooleanHistogram("LibraryLoader.PrefetchStatus", success);
                 }
diff --git a/base/android/java/src/org/chromium/base/metrics/RecordHistogram.java b/base/android/java/src/org/chromium/base/metrics/RecordHistogram.java
index 0751264..ed3959e 100644
--- a/base/android/java/src/org/chromium/base/metrics/RecordHistogram.java
+++ b/base/android/java/src/org/chromium/base/metrics/RecordHistogram.java
@@ -292,14 +292,6 @@
         return nativeGetHistogramTotalCountForTesting(name);
     }
 
-    /**
-     * Initializes the metrics system.
-     */
-    public static void initialize() {
-        if (sDisabledBy != null) return;
-        nativeInitialize();
-    }
-
     private static native long nativeRecordCustomTimesHistogramMilliseconds(
             String name, long key, int duration, int min, int max, int numBuckets);
 
@@ -314,5 +306,4 @@
 
     private static native int nativeGetHistogramValueCountForTesting(String name, int sample);
     private static native int nativeGetHistogramTotalCountForTesting(String name);
-    private static native void nativeInitialize();
 }
diff --git a/base/android/javatests/src/org/chromium/base/metrics/RecordHistogramTest.java b/base/android/javatests/src/org/chromium/base/metrics/RecordHistogramTest.java
index daf639b..8979611 100644
--- a/base/android/javatests/src/org/chromium/base/metrics/RecordHistogramTest.java
+++ b/base/android/javatests/src/org/chromium/base/metrics/RecordHistogramTest.java
@@ -26,7 +26,6 @@
     @Before
     public void setUp() throws Exception {
         LibraryLoader.get(LibraryProcessType.PROCESS_BROWSER).ensureInitialized();
-        RecordHistogram.initialize();
     }
 
     /**
diff --git a/base/android/record_histogram.cc b/base/android/record_histogram.cc
index 02f4493..0bc8423 100644
--- a/base/android/record_histogram.cc
+++ b/base/android/record_histogram.cc
@@ -304,10 +304,6 @@
   return reinterpret_cast<jlong>(histogram);
 }
 
-void JNI_RecordHistogram_Initialize(JNIEnv* env, const JavaParamRef<jclass>&) {
-  StatisticsRecorder::Initialize();
-}
-
 // This backs a Java test util for testing histograms -
 // MetricsUtils.HistogramDelta. It should live in a test-specific file, but we
 // currently can't have test-specific native code packaged in test-specific Java
diff --git a/base/metrics/persistent_histogram_allocator.cc b/base/metrics/persistent_histogram_allocator.cc
index 79a903e..6178b21 100644
--- a/base/metrics/persistent_histogram_allocator.cc
+++ b/base/metrics/persistent_histogram_allocator.cc
@@ -1090,9 +1090,6 @@
     std::unique_ptr<PersistentMemoryAllocator> memory)
     : PersistentHistogramAllocator(std::move(memory)),
       import_iterator_(this) {
-  // Make sure the StatisticsRecorder is initialized to prevent duplicate
-  // histograms from being created. It's safe to call this multiple times.
-  StatisticsRecorder::Initialize();
 }
 
 void GlobalHistogramAllocator::ImportHistogramsToStatisticsRecorder() {
diff --git a/base/metrics/statistics_recorder.h b/base/metrics/statistics_recorder.h
index f37f17b..75352d1 100644
--- a/base/metrics/statistics_recorder.h
+++ b/base/metrics/statistics_recorder.h
@@ -68,13 +68,6 @@
   // Precondition: The recorder being deleted is the current global recorder.
   ~StatisticsRecorder();
 
-  // DEPRECATED.
-  //
-  // StatisticsRecorder is always active and ready. There is no need to
-  // explicitly initialize it.
-  static void Initialize() {}
-  static bool IsActive() { return true; }
-
   // Registers a provider of histograms that can be called to merge those into
   // the global recorder. Calls to ImportProvidedHistograms() will fetch from
   // registered providers.
diff --git a/base/test/histogram_tester.cc b/base/test/histogram_tester.cc
index 64b4ca2..8949133 100644
--- a/base/test/histogram_tester.cc
+++ b/base/test/histogram_tester.cc
@@ -17,8 +17,6 @@
 namespace base {
 
 HistogramTester::HistogramTester() {
-  StatisticsRecorder::Initialize();  // Safe to call multiple times.
-
   // Record any histogram data that exists when the object is created so it can
   // be subtracted later.
   StatisticsRecorder::Histograms histograms;
diff --git a/base/test/histogram_tester.h b/base/test/histogram_tester.h
index 1bd024c..b31c631 100644
--- a/base/test/histogram_tester.h
+++ b/base/test/histogram_tester.h
@@ -29,8 +29,7 @@
  public:
   using CountsMap = std::map<std::string, HistogramBase::Count>;
 
-  // The constructor will call StatisticsRecorder::Initialize() for you. Also,
-  // this takes a snapshot of all current histograms counts.
+  // Takes a snapshot of all current histograms counts.
   HistogramTester();
   ~HistogramTester();
 
diff --git a/dbus/signal_sender_verification_unittest.cc b/dbus/signal_sender_verification_unittest.cc
index 3a5f299..00a1138 100644
--- a/dbus/signal_sender_verification_unittest.cc
+++ b/dbus/signal_sender_verification_unittest.cc
@@ -8,7 +8,6 @@
 #include "base/message_loop/message_loop.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/metrics/histogram_samples.h"
-#include "base/metrics/statistics_recorder.h"
 #include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
 #include "base/test/test_timeouts.h"
@@ -31,8 +30,6 @@
   }
 
   void SetUp() override {
-    base::StatisticsRecorder::Initialize();
-
     // Make the main thread not to allow IO.
     base::ThreadRestrictions::SetIOAllowed(false);
 
