diff options
author | tbansal <tbansal@chromium.org> | 2015-09-14 10:35:01 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-09-14 17:36:16 +0000 |
commit | 59a1ddc1dd3af5e4f30e50a8c959da5e9ce5efa2 (patch) | |
tree | 3a0ba897c9adf53413f3fd1666ed3d9a7697b469 | |
parent | f76ae11f25dc0056cea63e15c16039fdbd5f3470 (diff) | |
download | chromium_src-59a1ddc1dd3af5e4f30e50a8c959da5e9ce5efa2.zip chromium_src-59a1ddc1dd3af5e4f30e50a8c959da5e9ce5efa2.tar.gz chromium_src-59a1ddc1dd3af5e4f30e50a8c959da5e9ce5efa2.tar.bz2 |
Expose TrafficStats API to native code
This change exposes TrafficStats API to native code. Also,
provides a pure virtual class that will be used on non
Android platforms.
Right now, only one API from TrafficStats is exposed.
More APIs will be exposed in forthcoming changes.
BUG=521646
Review URL: https://codereview.chromium.org/1286233003
Cr-Commit-Position: refs/heads/master@{#348646}
-rw-r--r-- | net/BUILD.gn | 1 | ||||
-rw-r--r-- | net/android/BUILD.gn | 2 | ||||
-rw-r--r-- | net/android/java/src/org/chromium/net/AndroidTrafficStats.java | 29 | ||||
-rw-r--r-- | net/android/net_jni_registrar.cc | 2 | ||||
-rw-r--r-- | net/android/traffic_stats.cc | 36 | ||||
-rw-r--r-- | net/android/traffic_stats.h | 37 | ||||
-rw-r--r-- | net/android/traffic_stats_unittest.cc | 44 | ||||
-rw-r--r-- | net/net.gyp | 10 | ||||
-rw-r--r-- | net/net.gypi | 3 |
9 files changed, 164 insertions, 0 deletions
diff --git a/net/BUILD.gn b/net/BUILD.gn index d08afb1..7b68ade 100644 --- a/net/BUILD.gn +++ b/net/BUILD.gn @@ -1200,6 +1200,7 @@ if (is_android) { "android/java/src/org/chromium/net/AndroidKeyStore.java", "android/java/src/org/chromium/net/AndroidNetworkLibrary.java", "android/java/src/org/chromium/net/AndroidPrivateKey.java", + "android/java/src/org/chromium/net/AndroidTrafficStats.java", "android/java/src/org/chromium/net/GURLUtils.java", "android/java/src/org/chromium/net/HttpNegotiateAuthenticator.java", "android/java/src/org/chromium/net/NetStringUtil.java", diff --git a/net/android/BUILD.gn b/net/android/BUILD.gn index c891da7..0003962 100644 --- a/net/android/BUILD.gn +++ b/net/android/BUILD.gn @@ -70,6 +70,7 @@ java_cpp_enum("net_android_java_enums_srcjar") { "../base/network_change_notifier.h", "cert_verify_result_android.h", "keystore.h", + "traffic_stats.cc", ] outputs = [ "org/chromium/net/CertificateMimeType.java", @@ -77,6 +78,7 @@ java_cpp_enum("net_android_java_enums_srcjar") { "org/chromium/net/ConnectionSubtype.java", "org/chromium/net/ConnectionType.java", "org/chromium/net/PrivateKeyType.java", + "org/chromium/net/TrafficStatsError.java", ] } diff --git a/net/android/java/src/org/chromium/net/AndroidTrafficStats.java b/net/android/java/src/org/chromium/net/AndroidTrafficStats.java new file mode 100644 index 0000000..059e399 --- /dev/null +++ b/net/android/java/src/org/chromium/net/AndroidTrafficStats.java @@ -0,0 +1,29 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.net; + +import android.net.TrafficStats; + +import org.chromium.base.annotations.CalledByNative; +import org.chromium.base.annotations.JNINamespace; + +/** + * This class interacts with TrafficStats API provided by Android. + */ +@JNINamespace("net::android::traffic_stats") +public class AndroidTrafficStats { + private AndroidTrafficStats() {} + + /** + * @return Number of bytes transmitted since device boot. Counts packets across all network + * interfaces, and always increases monotonically since device boot. Statistics are + * measured at the network layer, so they include both TCP and UDP usage. + */ + @CalledByNative + private static long getTotalTxBytes() { + long bytes = TrafficStats.getTotalTxBytes(); + return bytes != TrafficStats.UNSUPPORTED ? bytes : TrafficStatsError.ERROR_NOT_SUPPORTED; + } +} diff --git a/net/android/net_jni_registrar.cc b/net/android/net_jni_registrar.cc index dec74ec..baf43be 100644 --- a/net/android/net_jni_registrar.cc +++ b/net/android/net_jni_registrar.cc @@ -12,6 +12,7 @@ #include "net/android/keystore.h" #include "net/android/network_change_notifier_android.h" #include "net/android/network_library.h" +#include "net/android/traffic_stats.h" #include "net/cert/x509_util_android.h" #include "net/proxy/proxy_config_service_android.h" @@ -27,6 +28,7 @@ static base::android::RegistrationMethod kNetRegisteredMethods[] = { {"AndroidPrivateKey", RegisterAndroidPrivateKey}, {"AndroidKeyStore", RegisterKeyStore}, {"AndroidNetworkLibrary", RegisterNetworkLibrary}, + {"AndroidTrafficStats", traffic_stats::Register}, {"GURLUtils", RegisterGURLUtils}, {"HttpAuthNegotiateAndroid", HttpAuthNegotiateAndroid::Register}, {"NetworkChangeNotifierAndroid", NetworkChangeNotifierAndroid::Register}, diff --git a/net/android/traffic_stats.cc b/net/android/traffic_stats.cc new file mode 100644 index 0000000..6ae5953 --- /dev/null +++ b/net/android/traffic_stats.cc @@ -0,0 +1,36 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "net/android/traffic_stats.h" + +#include "jni/AndroidTrafficStats_jni.h" + +namespace net { + +namespace android { + +namespace traffic_stats { + +// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.net +enum TrafficStatsError { + // Value returned by AndroidTrafficStats APIs when a valid value is + // unavailable. + ERROR_NOT_SUPPORTED = 0, +}; + +bool GetTotalTxBytes(int64_t* bytes) { + JNIEnv* env = base::android::AttachCurrentThread(); + *bytes = Java_AndroidTrafficStats_getTotalTxBytes(env); + return *bytes != ERROR_NOT_SUPPORTED; +} + +bool Register(JNIEnv* env) { + return RegisterNativesImpl(env); +} + +} // namespace traffic_stats + +} // namespace android + +} // namespace net diff --git a/net/android/traffic_stats.h b/net/android/traffic_stats.h new file mode 100644 index 0000000..3434d89 --- /dev/null +++ b/net/android/traffic_stats.h @@ -0,0 +1,37 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef NET_ANDROID_TRAFFIC_STATS_H_ +#define NET_ANDROID_TRAFFIC_STATS_H_ + +// This file provides functions that interact with TrafficStats APIs that are +// provided on Android. + +#include <jni.h> +#include <stdint.h> + +#include "net/base/net_export.h" + +namespace net { + +namespace android { + +namespace traffic_stats { + +// Returns true if the number of bytes transmitted since device boot is +// available and sets |*bytes| to that value. Counts packets across all network +// interfaces, and always increases monotonically since device boot. +// Statistics are measured at the network layer, so they include both TCP and +// UDP usage. |bytes| must not be nullptr. +NET_EXPORT bool GetTotalTxBytes(int64_t* bytes); + +bool Register(JNIEnv* env); + +} // namespace traffic_stats + +} // namespace android + +} // namespace net + +#endif // NET_ANDROID_TRAFFIC_STATS_H_ diff --git a/net/android/traffic_stats_unittest.cc b/net/android/traffic_stats_unittest.cc new file mode 100644 index 0000000..ad5198f --- /dev/null +++ b/net/android/traffic_stats_unittest.cc @@ -0,0 +1,44 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "net/android/traffic_stats.h" + +#include "base/run_loop.h" +#include "net/test/embedded_test_server/embedded_test_server.h" +#include "net/url_request/url_request_test_util.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "url/gurl.h" + +namespace net { + +namespace { + +TEST(TrafficStatsAndroidTest, BasicsTest) { + test_server::EmbeddedTestServer embedded_test_server; + embedded_test_server.ServeFilesFromDirectory( + base::FilePath(FILE_PATH_LITERAL("net/data/url_request_unittest"))); + ASSERT_TRUE(embedded_test_server.InitializeAndWaitUntilReady()); + + int64_t bytes_before_request = -1; + EXPECT_TRUE(android::traffic_stats::GetTotalTxBytes(&bytes_before_request)); + EXPECT_GE(bytes_before_request, 0); + + TestDelegate test_delegate; + TestURLRequestContext context(false); + + scoped_ptr<URLRequest> request( + context.CreateRequest(embedded_test_server.GetURL("/echo.html"), + DEFAULT_PRIORITY, &test_delegate)); + request->Start(); + base::RunLoop().Run(); + + // Bytes should increase because of the network traffic. + int64_t bytes_after_request; + EXPECT_TRUE(android::traffic_stats::GetTotalTxBytes(&bytes_after_request)); + DCHECK_GT(bytes_after_request, bytes_before_request); +} + +} // namespace + +} // namespace net diff --git a/net/net.gyp b/net/net.gyp index 5895a93..cd23f61 100644 --- a/net/net.gyp +++ b/net/net.gyp @@ -1352,6 +1352,7 @@ 'android/java/src/org/chromium/net/AndroidKeyStore.java', 'android/java/src/org/chromium/net/AndroidNetworkLibrary.java', 'android/java/src/org/chromium/net/AndroidPrivateKey.java', + 'android/java/src/org/chromium/net/AndroidTrafficStats.java', 'android/java/src/org/chromium/net/GURLUtils.java', 'android/java/src/org/chromium/net/HttpNegotiateAuthenticator.java', 'android/java/src/org/chromium/net/NetStringUtil.java', @@ -1391,6 +1392,7 @@ 'net_errors_java', 'private_key_types_java', 'remote_android_keystore_aidl', + 'traffic_stats_error_java', ], 'includes': [ '../build/java.gypi' ], }, @@ -1489,6 +1491,14 @@ 'includes': [ '../build/android/java_cpp_enum.gypi' ], }, { + 'target_name': 'traffic_stats_error_java', + 'type': 'none', + 'variables': { + 'source_file': 'android/traffic_stats.cc', + }, + 'includes': [ '../build/android/java_cpp_enum.gypi' ], + }, + { 'target_name': 'net_unittests_apk', 'type': 'none', 'dependencies': [ diff --git a/net/net.gypi b/net/net.gypi index 6bef5cb..3ad550a 100644 --- a/net/net.gypi +++ b/net/net.gypi @@ -413,6 +413,8 @@ 'android/network_change_notifier_factory_android.h', 'android/network_library.cc', 'android/network_library.h', + 'android/traffic_stats.cc', + 'android/traffic_stats.h', 'base/address_tracker_linux.cc', 'base/address_tracker_linux.h', 'base/backoff_entry.cc', @@ -1244,6 +1246,7 @@ 'android/http_auth_negotiate_android_unittest.cc', 'android/keystore_unittest.cc', 'android/network_change_notifier_android_unittest.cc', + 'android/traffic_stats_unittest.cc', 'base/address_list_unittest.cc', 'base/address_tracker_linux_unittest.cc', 'base/backoff_entry_serializer_unittest.cc', |