Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(87)

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/omnibox/geo/VisibleNetworksTracker.java

Issue 2883063003: Introduce Visible Networks Tracker. (Closed)
Patch Set: Introduce Visible Networks Tracker. This is used to keep a cache of visible networks and pre-comput… Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package org.chromium.chrome.browser.omnibox.geo;
6
7 import android.content.Context;
8 import android.os.AsyncTask;
9
10 import org.chromium.base.Log;
11 import org.chromium.base.VisibleForTesting;
12
13 import javax.annotation.Nullable;
14 import javax.annotation.concurrent.GuardedBy;
15
16 /**
17 * VisibleNetworksTracker keeps track of the visible networks.
18 */
19 public class VisibleNetworksTracker {
20 private static final String TAG = "VNTracker";
21
22 static TimeProvider sTimeProvider = new TimeProvider();
23 private static final int AGE_THRESHOLD = 5 * 60 * 1000; // 5 min
24
25 @GuardedBy("this")
Ted C 2017/05/18 02:13:33 As these are statics, it isn't guarded by this bec
lbargu 2017/05/18 14:15:29 Sorry, fixed throughout.
26 @Nullable
27 private static VisibleNetworks sVisibleNetworks;
dougt 2017/05/18 02:59:03 Sorry, I am not sure what synchronized on |this| m
lbargu 2017/05/18 14:15:29 Removed locking. Using UI thread.
28 @GuardedBy("this")
29 private static long sVisibleNetworksTime = Long.MAX_VALUE;
30
31 private static VisibleNetworks sVisibleNetworksForTesting;
32 private static boolean sUseVisibleNetworksForTesting;
33
34 /**
35 * Returns last known visible networks. It returns the cached value if the c ache is valid or it
36 * computes the visibleNetworks, caches the value and then returns it.
37 */
38 public static synchronized VisibleNetworks getLastKnownVisibleNetworks(Conte xt context) {
Ted C 2017/05/18 02:13:33 What threads do we expect this to run on? We rare
dougt 2017/05/18 02:59:03 This method is pretty odd. It sometimes returns a
lbargu 2017/05/18 14:15:29 Decided to keep the logic here but simpler. Redoin
lbargu 2017/05/18 14:15:29 Done.
39 if (sUseVisibleNetworksForTesting) return sVisibleNetworksForTesting;
40
41 if (isValidCachedVisibleNetworks()) return getCachedVisibleNetworks();
42
43 VisibleNetworks visibleNetworks = null;
44 try {
45 // Include only the connected cell/wifi to minimize latency and comp ute the simplest
46 // visible networks possible.
47 visibleNetworks = PlatformNetworksManager.computeVisibleNetworks(
48 context, false /* includeAllVisibleNotConnectedNetworks */);
49 } catch (Exception e) {
50 Log.e(TAG, "Failed to get the visible networks. Error: ", e.toString ());
51 }
52 setCachedVisibleNetworks(visibleNetworks);
53 return sVisibleNetworks;
54 }
55
56 /**
57 * Refreshes the visible networks cache if the cache is not valid by startin g a background task
Ted C 2017/05/18 02:13:33 this describes a bit too much about the implementa
lbargu 2017/05/18 14:15:29 Done.
58 * to compute the visible networks including all visible wifis/cells. Caches the returned value
59 * when the background task completes.
60 */
61 public static void refreshVisibleNetworks(final Context context) {
62 if (isValidCachedVisibleNetworks()) {
63 return;
64 }
65 new AsyncTask<Void, Void, VisibleNetworks>() {
Ted C 2017/05/18 02:13:33 How expensive is this calculation? Looks like it
lbargu 2017/05/18 14:15:29 Done. Good point, it might be not that cheap on so
66 @Override
67 protected VisibleNetworks doInBackground(Void... params) {
68 VisibleNetworks visibleNetworks = null;
69 try {
70 // Include all visible wifis and cells.
71 visibleNetworks = PlatformNetworksManager.computeVisibleNetw orks(
72 context, true /* includeAllVisibleNotConnectedNetwor ks */);
73 } catch (Exception e) {
74 Log.e(TAG, "Failed to get the visible networks. Error: ", e. toString());
75 }
76 return visibleNetworks;
77 }
78
79 @Override
80 protected void onPostExecute(VisibleNetworks visibleNetworks) {
81 setCachedVisibleNetworks(visibleNetworks);
82 }
83 }
84 .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
85 }
86
87 @Nullable
88 @VisibleForTesting
89 static synchronized VisibleNetworks getCachedVisibleNetworks() {
90 return sVisibleNetworks;
91 }
92
93 @VisibleForTesting
94 static synchronized long getCachedVisibleNetworksTime() {
95 return sVisibleNetworksTime;
96 }
97
98 @VisibleForTesting
99 static synchronized void clearCache() {
100 setCachedVisibleNetworks(null);
101 sVisibleNetworksTime = Long.MAX_VALUE;
102 }
103
104 @VisibleForTesting
105 static void setVisibleNetworksForTesting(VisibleNetworks visibleNetworksForT esting) {
106 sVisibleNetworksForTesting = visibleNetworksForTesting;
107 sUseVisibleNetworksForTesting = true;
108 }
109
110 private static synchronized void setCachedVisibleNetworks(VisibleNetworks vi sibleNetworks) {
111 sVisibleNetworks = visibleNetworks;
112 sVisibleNetworksTime = sTimeProvider.getCurrentTime();
113 }
114
115 private static synchronized boolean isValidCachedVisibleNetworks() {
116 return sVisibleNetworks != null && sVisibleNetworksTime != Long.MAX_VALU E
117 && !sVisibleNetworks.isEmpty()
118 && sTimeProvider.getCurrentTime() - sVisibleNetworksTime < AGE_T HRESHOLD;
119 }
120
121 /**
122 * Wrapper around static time providers that allows us to mock the implement ation in
123 * tests.
124 */
125 public static class TimeProvider {
126 /**
127 * Get current time in milliseconds.
128 */
129 public long getCurrentTime() {
130 return System.currentTimeMillis();
131 }
132 }
133 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698