| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.chrome.browser.webapps; | 5 package org.chromium.chrome.browser.webapps; |
| 6 | 6 |
| 7 import android.content.Context; | 7 import android.content.Context; |
| 8 import android.content.SharedPreferences; | 8 import android.content.SharedPreferences; |
| 9 import android.os.SystemClock; |
| 9 import android.util.Log; | 10 import android.util.Log; |
| 10 | 11 |
| 11 import org.chromium.base.ThreadUtils; | 12 import org.chromium.base.ThreadUtils; |
| 12 import org.chromium.base.VisibleForTesting; | 13 import org.chromium.base.VisibleForTesting; |
| 14 import org.chromium.base.metrics.RecordHistogram; |
| 13 | 15 |
| 14 import java.util.ArrayList; | 16 import java.util.ArrayList; |
| 15 import java.util.HashSet; | 17 import java.util.HashSet; |
| 16 import java.util.List; | 18 import java.util.List; |
| 17 import java.util.Set; | 19 import java.util.Set; |
| 20 import java.util.concurrent.TimeUnit; |
| 18 | 21 |
| 19 /** | 22 /** |
| 20 * Manages a rotating LRU buffer of WebappActivities to assign webapps to. | 23 * Manages a rotating LRU buffer of WebappActivities to assign webapps to. |
| 21 * | 24 * |
| 22 * In order to accommodate a limited number of WebappActivities with a potential
ly unlimited number | 25 * In order to accommodate a limited number of WebappActivities with a potential
ly unlimited number |
| 23 * of webapps, we have to rotate the available WebappActivities between the weba
pps we start up. | 26 * of webapps, we have to rotate the available WebappActivities between the weba
pps we start up. |
| 24 * Activities are reused in order of when they were last used, with the least re
cently used | 27 * Activities are reused in order of when they were last used, with the least re
cently used |
| 25 * ones culled first. | 28 * ones culled first. |
| 26 * | 29 * |
| 27 * It is impossible to know whether Tasks have been removed from the Recent Task
list without the | 30 * It is impossible to know whether Tasks have been removed from the Recent Task
list without the |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 207 // Activity has already been assigned. | 210 // Activity has already been assigned. |
| 208 Set<Integer> availableWebapps = new HashSet<Integer>(); | 211 Set<Integer> availableWebapps = new HashSet<Integer>(); |
| 209 for (int i = 0; i < NUM_WEBAPP_ACTIVITIES; ++i) { | 212 for (int i = 0; i < NUM_WEBAPP_ACTIVITIES; ++i) { |
| 210 availableWebapps.add(i); | 213 availableWebapps.add(i); |
| 211 } | 214 } |
| 212 | 215 |
| 213 // Restore any entries that were previously saved. If it seems that the
preferences have | 216 // Restore any entries that were previously saved. If it seems that the
preferences have |
| 214 // been corrupted somehow, just discard the whole map. | 217 // been corrupted somehow, just discard the whole map. |
| 215 SharedPreferences prefs = mContext.getSharedPreferences(PREF_PACKAGE, Co
ntext.MODE_PRIVATE); | 218 SharedPreferences prefs = mContext.getSharedPreferences(PREF_PACKAGE, Co
ntext.MODE_PRIVATE); |
| 216 try { | 219 try { |
| 220 long time = SystemClock.elapsedRealtime(); |
| 217 final int numSavedEntries = prefs.getInt(PREF_NUM_SAVED_ENTRIES, 0); | 221 final int numSavedEntries = prefs.getInt(PREF_NUM_SAVED_ENTRIES, 0); |
| 222 try { |
| 223 RecordHistogram.recordTimesHistogram("Android.StrictMode.WebappS
haredPrefs", |
| 224 SystemClock.elapsedRealtime() - time, TimeUnit.MILLISECO
NDS); |
| 225 } catch (UnsatisfiedLinkError error) { |
| 226 // Intentionally ignored - it's ok to miss recording the metric
occasionally. |
| 227 } |
| 218 if (numSavedEntries <= NUM_WEBAPP_ACTIVITIES) { | 228 if (numSavedEntries <= NUM_WEBAPP_ACTIVITIES) { |
| 219 for (int i = 0; i < numSavedEntries; ++i) { | 229 for (int i = 0; i < numSavedEntries; ++i) { |
| 220 String currentActivityIndexPref = PREF_ACTIVITY_INDEX + i; | 230 String currentActivityIndexPref = PREF_ACTIVITY_INDEX + i; |
| 221 String currentWebappIdPref = PREF_WEBAPP_ID + i; | 231 String currentWebappIdPref = PREF_WEBAPP_ID + i; |
| 222 | 232 |
| 223 int activityIndex = prefs.getInt(currentActivityIndexPref, i
); | 233 int activityIndex = prefs.getInt(currentActivityIndexPref, i
); |
| 224 String webappId = prefs.getString(currentWebappIdPref, null)
; | 234 String webappId = prefs.getString(currentWebappIdPref, null)
; |
| 225 ActivityEntry entry = new ActivityEntry(activityIndex, webap
pId); | 235 ActivityEntry entry = new ActivityEntry(activityIndex, webap
pId); |
| 226 | 236 |
| 227 if (availableWebapps.remove(entry.mActivityIndex)) { | 237 if (availableWebapps.remove(entry.mActivityIndex)) { |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 265 editor.putInt(PREF_NUM_SAVED_ENTRIES, mActivityList.size()); | 275 editor.putInt(PREF_NUM_SAVED_ENTRIES, mActivityList.size()); |
| 266 for (int i = 0; i < mActivityList.size(); ++i) { | 276 for (int i = 0; i < mActivityList.size(); ++i) { |
| 267 String currentActivityIndexPref = PREF_ACTIVITY_INDEX + i; | 277 String currentActivityIndexPref = PREF_ACTIVITY_INDEX + i; |
| 268 String currentWebappIdPref = PREF_WEBAPP_ID + i; | 278 String currentWebappIdPref = PREF_WEBAPP_ID + i; |
| 269 editor.putInt(currentActivityIndexPref, mActivityList.get(i).mActivi
tyIndex); | 279 editor.putInt(currentActivityIndexPref, mActivityList.get(i).mActivi
tyIndex); |
| 270 editor.putString(currentWebappIdPref, mActivityList.get(i).mWebappId
); | 280 editor.putString(currentWebappIdPref, mActivityList.get(i).mWebappId
); |
| 271 } | 281 } |
| 272 editor.apply(); | 282 editor.apply(); |
| 273 } | 283 } |
| 274 } | 284 } |
| OLD | NEW |