OLD | NEW |
---|---|
(Empty) | |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #include "chrome/browser/android/net/network_quality_provider.h" | |
6 | |
7 #include <stdint.h> | |
8 | |
9 #include "jni/NetworkQualityProvider_jni.h" | |
10 #include "net/base/network_quality.h" | |
11 | |
12 NetworkQualityProvider::NetworkQualityProvider() { | |
nyquist
2015/08/06 23:26:28
Does this also need to be called on a valid thread
tbansal1
2015/08/07 00:52:02
No, |thread_checker_| is constructed in the constr
| |
13 JNIEnv* env = base::android::AttachCurrentThread(); | |
14 DCHECK(j_network_quality_provider_.is_null()); | |
15 j_network_quality_provider_.Reset(Java_NetworkQualityProvider_create( | |
16 env, base::android::GetApplicationContext())); | |
17 DCHECK(!j_network_quality_provider_.is_null()); | |
18 no_value_ = Java_NetworkQualityProvider_getNoValue(env); | |
19 net::NetworkChangeNotifier::AddConnectionTypeObserver(this); | |
20 } | |
21 | |
22 NetworkQualityProvider::~NetworkQualityProvider() { | |
23 DCHECK(thread_checker_.CalledOnValidThread()); | |
24 net::NetworkChangeNotifier::RemoveConnectionTypeObserver(this); | |
25 } | |
26 | |
27 bool NetworkQualityProvider::IsEstimateAvailable() { | |
28 DCHECK(thread_checker_.CalledOnValidThread()); | |
29 JNIEnv* env = base::android::AttachCurrentThread(); | |
30 return Java_NetworkQualityProvider_isEstimateAvailable( | |
31 env, j_network_quality_provider_.obj()); | |
32 } | |
33 | |
34 void NetworkQualityProvider::RequestUpdate() { | |
35 DCHECK(thread_checker_.CalledOnValidThread()); | |
36 JNIEnv* env = base::android::AttachCurrentThread(); | |
37 Java_NetworkQualityProvider_requestUpdate(env, | |
38 j_network_quality_provider_.obj()); | |
39 } | |
40 | |
41 bool NetworkQualityProvider::GetRTT(base::TimeDelta* rtt) { | |
42 DCHECK(thread_checker_.CalledOnValidThread()); | |
43 JNIEnv* env = base::android::AttachCurrentThread(); | |
44 int32_t milliseconds = Java_NetworkQualityProvider_getRTTMilliseconds( | |
45 env, j_network_quality_provider_.obj()); | |
46 DCHECK(milliseconds >= no_value_); | |
47 if (milliseconds == no_value_) { | |
48 *rtt = net::NetworkQuality::InvalidRTT(); | |
49 return false; | |
50 } | |
51 *rtt = base::TimeDelta::FromMilliseconds(milliseconds); | |
52 return true; | |
53 } | |
54 | |
55 bool NetworkQualityProvider::GetDownstreamThroughputKbps( | |
56 int32_t* downstream_throughput_kbps) { | |
57 DCHECK(thread_checker_.CalledOnValidThread()); | |
58 JNIEnv* env = base::android::AttachCurrentThread(); | |
59 int32_t kbps = Java_NetworkQualityProvider_getDownstreamThroughputKbps( | |
60 env, j_network_quality_provider_.obj()); | |
61 DCHECK(kbps >= no_value_); | |
62 if (kbps == no_value_) { | |
63 *downstream_throughput_kbps = net::NetworkQuality::kInvalidThroughput; | |
64 return false; | |
65 } | |
66 *downstream_throughput_kbps = kbps; | |
67 return true; | |
68 } | |
69 | |
70 bool NetworkQualityProvider::GetUpstreamThroughputKbps( | |
71 int32_t* upstream_throughput_kbps) { | |
72 DCHECK(thread_checker_.CalledOnValidThread()); | |
73 JNIEnv* env = base::android::AttachCurrentThread(); | |
74 int32_t kbps = Java_NetworkQualityProvider_getUpstreamThroughputKbps( | |
75 env, j_network_quality_provider_.obj()); | |
76 DCHECK(kbps >= no_value_); | |
77 if (kbps == no_value_) { | |
78 *upstream_throughput_kbps = net::NetworkQuality::kInvalidThroughput; | |
79 return false; | |
80 } | |
81 *upstream_throughput_kbps = kbps; | |
82 return true; | |
83 } | |
84 | |
85 bool NetworkQualityProvider::GetTimeSinceLastUpdate( | |
86 base::TimeDelta* time_since_last_update) { | |
87 DCHECK(thread_checker_.CalledOnValidThread()); | |
88 JNIEnv* env = base::android::AttachCurrentThread(); | |
89 int32_t seconds = Java_NetworkQualityProvider_getTimeSinceLastUpdateSeconds( | |
90 env, j_network_quality_provider_.obj()); | |
91 DCHECK(seconds >= no_value_); | |
92 if (seconds == no_value_) { | |
93 *time_since_last_update = base::TimeDelta::Max(); | |
94 return false; | |
95 } | |
96 *time_since_last_update = base::TimeDelta::FromMilliseconds(seconds); | |
97 return true; | |
98 } | |
99 | |
100 void NetworkQualityProvider::OnConnectionTypeChanged( | |
101 net::NetworkChangeNotifier::ConnectionType type) { | |
102 RequestUpdate(); | |
103 } | |
104 | |
105 bool RegisterNetworkQualityProvider(JNIEnv* env) { | |
106 return RegisterNativesImpl(env); | |
107 } | |
OLD | NEW |