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

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
« no previous file with comments | « no previous file | chrome/android/java_sources.gni » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 import android.os.SystemClock;
10
11 import org.chromium.base.Log;
12 import org.chromium.base.ThreadUtils;
13 import org.chromium.base.VisibleForTesting;
14
15 import javax.annotation.Nullable;
16
17 /**
18 * VisibleNetworksTracker keeps track of the visible networks.
19 */
20 public class VisibleNetworksTracker {
21 private static final String TAG = "VNTracker";
22
23 @VisibleForTesting
24 static final int AGE_THRESHOLD = 5 * 60 * 1000; // 5 min
25
26 @Nullable
27 private static VisibleNetworks sVisibleNetworks;
28 private static long sVisibleNetworksTime = Long.MAX_VALUE;
29
30 @Nullable
31 private static AsyncTask<Void, Void, VisibleNetworks> sOngoingRefresh = null ;
32
33 private static VisibleNetworks sVisibleNetworksForTesting;
34 private static boolean sUseVisibleNetworksForTesting;
35
36 /**
37 * Returns last known visible networks. It returns the cached value if the c ache is valid or it
38 * computes the simplest possible visibleNetworks fast, and triggers a backg round asynchronous
39 * refresh. Might return null if visible networks cannot be computed.
40 */
41 @Nullable
42 public static VisibleNetworks getLastKnownVisibleNetworks(final Context cont ext) {
43 if (sUseVisibleNetworksForTesting) return sVisibleNetworksForTesting;
44
45 if (isValidCachedVisibleNetworks()) return getCachedVisibleNetworks();
46
47 VisibleNetworks visibleNetworks = null;
48 try {
49 // Include only the connected cell/wifi to minimize latency and comp ute the simplest
50 // visible networks possible.
51 visibleNetworks = PlatformNetworksManager.computeVisibleNetworks(
52 context, false /* includeAllVisibleNotConnectedNetworks */);
53 } catch (Exception e) {
54 Log.e(TAG, "Failed to get the visible networks. Error: ", e.toString ());
55 }
56 // Update cache on the UI thread.
57 ThreadUtils.runOnUiThread(new Runnable() {
Ted C 2017/05/18 14:56:30 When is getLastKnownVisibleNetworks not run on the
lbargu 2017/05/18 15:40:41 Updated to post on UI Thread instead of run. I wan
Ted C 2017/05/18 15:45:40 The two callers are LocationBarLayout#loadUrl and
lbargu 2017/05/18 16:02:34 Done.
58 @Override
59 public void run() {
60 refreshVisibleNetworks(context);
61 }
62 });
63
64 return visibleNetworks;
65 }
66
67 /**
68 * Determines if the visible networks need to be refreshed and asynchronousl y updates them if
69 * needed.
70 */
71 public static void refreshVisibleNetworks(final Context context) {
72 ThreadUtils.assertOnUiThread();
73 if (isValidCachedVisibleNetworks() || sOngoingRefresh != null) {
74 return;
75 }
76 sOngoingRefresh = new AsyncTask<Void, Void, VisibleNetworks>() {
77 @Override
78 protected VisibleNetworks doInBackground(Void... params) {
79 VisibleNetworks visibleNetworks = null;
80 try {
81 // Include all visible wifis and cells.
82 visibleNetworks = PlatformNetworksManager.computeVisibleNetw orks(
83 context, true /* includeAllVisibleNotConnectedNetwor ks */);
84 } catch (Exception e) {
85 Log.e(TAG, "Failed to get the visible networks. Error: ", e. toString());
86 }
87 return visibleNetworks;
88 }
89
90 @Override
91 protected void onPostExecute(VisibleNetworks visibleNetworks) {
92 sOngoingRefresh = null;
93 setCachedVisibleNetworks(visibleNetworks);
94 }
95 };
96 sOngoingRefresh.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
97 }
98
99 @Nullable
100 @VisibleForTesting
101 static VisibleNetworks getCachedVisibleNetworks() {
102 return sVisibleNetworks;
103 }
104
105 @VisibleForTesting
106 static long getCachedVisibleNetworksTime() {
107 return sVisibleNetworksTime;
108 }
109
110 @VisibleForTesting
111 static void clearCache() {
112 ThreadUtils.runOnUiThread(new Runnable() {
Ted C 2017/05/18 14:56:30 same thing, if the thread restriction is a test th
lbargu 2017/05/18 15:40:41 Done.
113 @Override
114 public void run() {
115 setCachedVisibleNetworks(null);
116 sVisibleNetworksTime = Long.MAX_VALUE;
117 }
118 });
119 }
120
121 @VisibleForTesting
122 static void setVisibleNetworksForTesting(VisibleNetworks visibleNetworksForT esting) {
123 sVisibleNetworksForTesting = visibleNetworksForTesting;
124 sUseVisibleNetworksForTesting = true;
125 }
126
127 private static void setCachedVisibleNetworks(VisibleNetworks visibleNetworks ) {
128 ThreadUtils.assertOnUiThread();
129 sVisibleNetworks = visibleNetworks;
130 sVisibleNetworksTime = SystemClock.elapsedRealtime();
131 }
132
133 private static boolean isValidCachedVisibleNetworks() {
134 return sVisibleNetworks != null && sVisibleNetworksTime != Long.MAX_VALU E
135 && !sVisibleNetworks.isEmpty()
136 && SystemClock.elapsedRealtime() - sVisibleNetworksTime < AGE_TH RESHOLD;
137 }
138 }
OLDNEW
« no previous file with comments | « no previous file | chrome/android/java_sources.gni » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698