diff --git a/src/com/android/settings/search/DatabaseIndexingManager.java b/src/com/android/settings/search/DatabaseIndexingManager.java
index c681912..1fbe055 100644
--- a/src/com/android/settings/search/DatabaseIndexingManager.java
+++ b/src/com/android/settings/search/DatabaseIndexingManager.java
@@ -39,11 +39,14 @@
 import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.util.Log;
+import android.util.Pair;
 import android.util.Xml;
 
+import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.SettingsActivity;
 import com.android.settings.core.PreferenceController;
 
+import com.android.settings.overlay.FeatureFactory;
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 
@@ -115,6 +118,9 @@
 public class DatabaseIndexingManager {
     private static final String LOG_TAG = "DatabaseIndexingManager";
 
+    private static final String METRICS_ACTION_SETTINGS_ASYNC_INDEX =
+            "search_asynchronous_indexing";
+
     public static final String FIELD_NAME_SEARCH_INDEX_DATA_PROVIDER =
             "SEARCH_INDEX_DATA_PROVIDER";
 
@@ -156,8 +162,7 @@
      * Only the first indexing for the default language gets static search results - subsequent
      * calls will only gather non-indexable keys.
      */
-    @VisibleForTesting
-    void performIndexing() {
+    public void performIndexing() {
         final Intent intent = new Intent(SearchIndexablesContract.PROVIDER_INTERFACE);
         final List<ResolveInfo> list =
                 mContext.getPackageManager().queryIntentContentProviders(intent, 0);
@@ -1262,6 +1267,7 @@
 
         @VisibleForTesting
         IndexingCallback mCallback;
+        private long mIndexStartTime;
 
         public IndexingTask(IndexingCallback callback) {
             mCallback = callback;
@@ -1269,6 +1275,7 @@
 
         @Override
         protected void onPreExecute() {
+            mIndexStartTime = System.currentTimeMillis();
             mIsIndexingComplete.set(false);
         }
 
@@ -1280,6 +1287,10 @@
 
         @Override
         protected void onPostExecute(Void aVoid) {
+            int indexingTime = (int) (System.currentTimeMillis() - mIndexStartTime);
+            FeatureFactory.getFactory(mContext).getMetricsFeatureProvider()
+                    .histogram(mContext, METRICS_ACTION_SETTINGS_ASYNC_INDEX, indexingTime);
+
             mIsIndexingComplete.set(true);
             if (mCallback != null) {
                 mCallback.onIndexingFinished();
diff --git a/src/com/android/settings/search/SearchFeatureProvider.java b/src/com/android/settings/search/SearchFeatureProvider.java
index 8b589cd..2fbebba 100644
--- a/src/com/android/settings/search/SearchFeatureProvider.java
+++ b/src/com/android/settings/search/SearchFeatureProvider.java
@@ -62,9 +62,15 @@
     SiteMapManager getSiteMapManager();
 
     /**
-     * Updates the Settings indexes
+     * Updates the Settings indexes and calls {@link IndexingCallback#onIndexingFinished()} on
+     * {@param callback} when indexing is complete.
      */
-    void updateIndex(Context context, IndexingCallback callback);
+    void updateIndexAsync(Context context, IndexingCallback callback);
+
+    /**
+     * Synchronously updates the Settings database.
+     */
+    void updateIndex(Context context);
 
     /**
      * @returns true when indexing is complete.
diff --git a/src/com/android/settings/search/SearchFeatureProviderImpl.java b/src/com/android/settings/search/SearchFeatureProviderImpl.java
index e3a37e9..2bcd383 100644
--- a/src/com/android/settings/search/SearchFeatureProviderImpl.java
+++ b/src/com/android/settings/search/SearchFeatureProviderImpl.java
@@ -19,10 +19,9 @@
 
 import android.content.Context;
 import android.text.TextUtils;
-import android.util.Log;
-
 import com.android.settings.applications.PackageManagerWrapperImpl;
 import com.android.settings.dashboard.SiteMapManager;
+import com.android.settings.overlay.FeatureFactory;
 
 /**
  * FeatureProvider for the refactored search code.
@@ -31,6 +30,8 @@
 
     private static final String TAG = "SearchFeatureProvider";
 
+    private static final String METRICS_ACTION_SETTINGS_INDEX = "search_synchronous_indexing";
+
     private DatabaseIndexingManager mDatabaseIndexingManager;
     private SiteMapManager mSiteMapManager;
 
@@ -78,11 +79,17 @@
     }
 
     @Override
-    public void updateIndex(Context context, IndexingCallback callback) {
-        long indexStartTime = System.currentTimeMillis();
+    public void updateIndexAsync(Context context, IndexingCallback callback) {
         getIndexingManager(context).indexDatabase(callback);
-        Log.d(TAG, "IndexDatabase() took " +
-                (System.currentTimeMillis() - indexStartTime) + " ms");
+    }
+
+    @Override
+    public void updateIndex(Context context) {
+        long indexStartTime = System.currentTimeMillis();
+        getIndexingManager(context).performIndexing();
+        int indexingTime = (int) (System.currentTimeMillis() - indexStartTime);
+        FeatureFactory.getFactory(context).getMetricsFeatureProvider()
+                .histogram(context, METRICS_ACTION_SETTINGS_INDEX, indexingTime);
     }
 
     /**
diff --git a/src/com/android/settings/search/SearchFragment.java b/src/com/android/settings/search/SearchFragment.java
index a4d34c7..7fb7257 100644
--- a/src/com/android/settings/search/SearchFragment.java
+++ b/src/com/android/settings/search/SearchFragment.java
@@ -156,7 +156,7 @@
         final Activity activity = getActivity();
         // Run the Index update only if we have some space
         if (!Utils.isLowStorage(activity)) {
-            mSearchFeatureProvider.updateIndex(activity, this /* indexingCallback */);
+            mSearchFeatureProvider.updateIndexAsync(activity, this /* indexingCallback */);
         } else {
             Log.w(TAG, "Cannot update the Indexer as we are running low on storage space!");
         }
diff --git a/tests/robotests/src/com/android/settings/search/DatabaseIndexingManagerTest.java b/tests/robotests/src/com/android/settings/search/DatabaseIndexingManagerTest.java
index 8c31e6e..729541c 100644
--- a/tests/robotests/src/com/android/settings/search/DatabaseIndexingManagerTest.java
+++ b/tests/robotests/src/com/android/settings/search/DatabaseIndexingManagerTest.java
@@ -35,6 +35,7 @@
 import android.util.ArrayMap;
 
 import com.android.settings.R;
+import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
 import com.android.settings.testutils.DatabaseTestUtils;
@@ -131,6 +132,7 @@
         mDb = IndexDatabaseHelper.getInstance(mContext).getWritableDatabase();
 
         doReturn(mPackageManager).when(mContext).getPackageManager();
+        FakeFeatureFactory.setupForTest(mContext);
     }
 
     @After
diff --git a/tests/robotests/src/com/android/settings/search/SearchFragmentTest.java b/tests/robotests/src/com/android/settings/search/SearchFragmentTest.java
index 77a8cdf..7ee3f97 100644
--- a/tests/robotests/src/com/android/settings/search/SearchFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/search/SearchFragmentTest.java
@@ -268,7 +268,7 @@
                 .thenReturn(true);
 
         fragment.onAttach(null);
-        verify(mFeatureFactory.searchFeatureProvider).updateIndex(any(Context.class),
+        verify(mFeatureFactory.searchFeatureProvider).updateIndexAsync(any(Context.class),
                 any(IndexingCallback.class));
     }
 
