Commit dbb1d100 authored by Tarun Bansal's avatar Tarun Bansal Committed by Commit Bot

NQE servicification of UKM page load metrics

Use network quality tracker instead of network quality estimator (NQE)
in UKM page load metrics.

Network quality tracker can provide network service when network
service is enabled as well as when network service is disabled.

Cq-Include-Trybots: luci.chromium.try:linux_mojo
Change-Id: Icffe39d2ae493934456ff911290bc50d53efab49
Bug: 819244
Reviewed-on: https://chromium-review.googlesource.com/1177199
Commit-Queue: Tarun Bansal <tbansal@chromium.org>
Reviewed-by: default avatarHelen Li <xunjieli@chromium.org>
Reviewed-by: default avatarCharlie Harrison <csharrison@chromium.org>
Cr-Commit-Position: refs/heads/master@{#583873}
parent f7dbacc9
...@@ -7,44 +7,30 @@ ...@@ -7,44 +7,30 @@
#include <memory> #include <memory>
#include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process.h"
#include "chrome/browser/net/nqe/ui_network_quality_estimator_service.h"
#include "chrome/browser/net/nqe/ui_network_quality_estimator_service_factory.h"
#include "chrome/browser/page_load_metrics/page_load_metrics_util.h" #include "chrome/browser/page_load_metrics/page_load_metrics_util.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
#include "components/metrics/net/network_metrics_provider.h" #include "components/metrics/net/network_metrics_provider.h"
#include "content/public/browser/web_contents.h"
#include "services/metrics/public/cpp/metrics_utils.h" #include "services/metrics/public/cpp/metrics_utils.h"
#include "services/metrics/public/cpp/ukm_builders.h" #include "services/metrics/public/cpp/ukm_builders.h"
#include "services/metrics/public/cpp/ukm_recorder.h" #include "services/metrics/public/cpp/ukm_recorder.h"
#include "services/network/public/cpp/network_quality_tracker.h"
#include "third_party/metrics_proto/system_profile.pb.h" #include "third_party/metrics_proto/system_profile.pb.h"
namespace {
UINetworkQualityEstimatorService* GetNQEService(
content::WebContents* web_contents) {
Profile* profile =
Profile::FromBrowserContext(web_contents->GetBrowserContext());
if (!profile)
return nullptr;
return UINetworkQualityEstimatorServiceFactory::GetForProfile(profile);
}
} // namespace
// static // static
std::unique_ptr<page_load_metrics::PageLoadMetricsObserver> std::unique_ptr<page_load_metrics::PageLoadMetricsObserver>
UkmPageLoadMetricsObserver::CreateIfNeeded(content::WebContents* web_contents) { UkmPageLoadMetricsObserver::CreateIfNeeded() {
if (!ukm::UkmRecorder::Get()) { if (!ukm::UkmRecorder::Get()) {
return nullptr; return nullptr;
} }
return std::make_unique<UkmPageLoadMetricsObserver>( return std::make_unique<UkmPageLoadMetricsObserver>(
GetNQEService(web_contents)); g_browser_process->network_quality_tracker());
} }
UkmPageLoadMetricsObserver::UkmPageLoadMetricsObserver( UkmPageLoadMetricsObserver::UkmPageLoadMetricsObserver(
net::NetworkQualityEstimator::NetworkQualityProvider* network::NetworkQualityTracker* network_quality_tracker)
network_quality_provider) : network_quality_tracker_(network_quality_tracker) {
: network_quality_provider_(network_quality_provider) {} DCHECK(network_quality_tracker_);
}
UkmPageLoadMetricsObserver::~UkmPageLoadMetricsObserver() = default; UkmPageLoadMetricsObserver::~UkmPageLoadMetricsObserver() = default;
...@@ -62,14 +48,12 @@ UkmPageLoadMetricsObserver::ObservePolicy UkmPageLoadMetricsObserver::OnStart( ...@@ -62,14 +48,12 @@ UkmPageLoadMetricsObserver::ObservePolicy UkmPageLoadMetricsObserver::OnStart(
// record UKM metrics for that data once we've confirmed that we're observing // record UKM metrics for that data once we've confirmed that we're observing
// a web page load. // a web page load.
if (network_quality_provider_) {
effective_connection_type_ = effective_connection_type_ =
network_quality_provider_->GetEffectiveConnectionType(); network_quality_tracker_->GetEffectiveConnectionType();
http_rtt_estimate_ = network_quality_provider_->GetHttpRTT(); http_rtt_estimate_ = network_quality_tracker_->GetHttpRTT();
transport_rtt_estimate_ = network_quality_provider_->GetTransportRTT(); transport_rtt_estimate_ = network_quality_tracker_->GetTransportRTT();
downstream_kbps_estimate_ = downstream_kbps_estimate_ =
network_quality_provider_->GetDownstreamThroughputKbps(); network_quality_tracker_->GetDownstreamThroughputKbps();
}
page_transition_ = navigation_handle->GetPageTransition(); page_transition_ = navigation_handle->GetPageTransition();
return CONTINUE_OBSERVING; return CONTINUE_OBSERVING;
} }
......
...@@ -10,11 +10,10 @@ ...@@ -10,11 +10,10 @@
#include "base/time/time.h" #include "base/time/time.h"
#include "chrome/browser/page_load_metrics/page_load_metrics_observer.h" #include "chrome/browser/page_load_metrics/page_load_metrics_observer.h"
#include "components/ukm/ukm_source.h" #include "components/ukm/ukm_source.h"
#include "net/nqe/network_quality_estimator.h"
#include "ui/base/page_transition_types.h" #include "ui/base/page_transition_types.h"
namespace content { namespace network {
class WebContents; class NetworkQualityTracker;
} }
// If URL-Keyed-Metrics (UKM) is enabled in the system, this is used to // If URL-Keyed-Metrics (UKM) is enabled in the system, this is used to
...@@ -24,11 +23,10 @@ class UkmPageLoadMetricsObserver ...@@ -24,11 +23,10 @@ class UkmPageLoadMetricsObserver
public: public:
// Returns a UkmPageLoadMetricsObserver, or nullptr if it is not needed. // Returns a UkmPageLoadMetricsObserver, or nullptr if it is not needed.
static std::unique_ptr<page_load_metrics::PageLoadMetricsObserver> static std::unique_ptr<page_load_metrics::PageLoadMetricsObserver>
CreateIfNeeded(content::WebContents* web_contents); CreateIfNeeded();
explicit UkmPageLoadMetricsObserver( explicit UkmPageLoadMetricsObserver(
net::NetworkQualityEstimator::NetworkQualityProvider* network::NetworkQualityTracker* network_quality_tracker);
network_quality_provider);
~UkmPageLoadMetricsObserver() override; ~UkmPageLoadMetricsObserver() override;
// page_load_metrics::PageLoadMetricsObserver implementation: // page_load_metrics::PageLoadMetricsObserver implementation:
...@@ -71,8 +69,8 @@ class UkmPageLoadMetricsObserver ...@@ -71,8 +69,8 @@ class UkmPageLoadMetricsObserver
const page_load_metrics::PageLoadExtraInfo& info, const page_load_metrics::PageLoadExtraInfo& info,
base::TimeTicks app_background_time); base::TimeTicks app_background_time);
net::NetworkQualityEstimator::NetworkQualityProvider* const // Guaranteed to be non-null during the lifetime of |this|.
network_quality_provider_; network::NetworkQualityTracker* network_quality_tracker_;
// The number of body (not header) prefilter bytes consumed by requests for // The number of body (not header) prefilter bytes consumed by requests for
// the page. // the page.
......
...@@ -15,9 +15,9 @@ ...@@ -15,9 +15,9 @@
#include "components/ukm/ukm_source.h" #include "components/ukm/ukm_source.h"
#include "content/public/test/navigation_simulator.h" #include "content/public/test/navigation_simulator.h"
#include "net/nqe/effective_connection_type.h" #include "net/nqe/effective_connection_type.h"
#include "net/nqe/network_quality_provider.h"
#include "services/metrics/public/cpp/metrics_utils.h" #include "services/metrics/public/cpp/metrics_utils.h"
#include "services/metrics/public/cpp/ukm_builders.h" #include "services/metrics/public/cpp/ukm_builders.h"
#include "services/network/public/cpp/network_quality_tracker.h"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
#include "third_party/metrics_proto/system_profile.pb.h" #include "third_party/metrics_proto/system_profile.pb.h"
...@@ -32,13 +32,13 @@ using PageLoad = ukm::builders::PageLoad; ...@@ -32,13 +32,13 @@ using PageLoad = ukm::builders::PageLoad;
const char kTestUrl1[] = "https://www.google.com/"; const char kTestUrl1[] = "https://www.google.com/";
const char kTestUrl2[] = "https://www.example.com/"; const char kTestUrl2[] = "https://www.example.com/";
class MockNetworkQualityProvider : public net::NetworkQualityProvider { class MockNetworkQualityProvider : public network::NetworkQualityTracker {
public: public:
MOCK_CONST_METHOD0(GetEffectiveConnectionType, MOCK_CONST_METHOD0(GetEffectiveConnectionType,
net::EffectiveConnectionType()); net::EffectiveConnectionType());
MOCK_CONST_METHOD0(GetHttpRTT, base::Optional<base::TimeDelta>()); MOCK_CONST_METHOD0(GetHttpRTT, base::TimeDelta());
MOCK_CONST_METHOD0(GetTransportRTT, base::Optional<base::TimeDelta>()); MOCK_CONST_METHOD0(GetTransportRTT, base::TimeDelta());
MOCK_CONST_METHOD0(GetDownstreamThroughputKbps, base::Optional<int32_t>()); MOCK_CONST_METHOD0(GetDownstreamThroughputKbps, int32_t());
}; };
} // namespace } // namespace
...@@ -60,15 +60,15 @@ class UkmPageLoadMetricsObserverTest ...@@ -60,15 +60,15 @@ class UkmPageLoadMetricsObserverTest
EXPECT_CALL(mock_network_quality_provider_, GetHttpRTT()) EXPECT_CALL(mock_network_quality_provider_, GetHttpRTT())
.Times(AnyNumber()) .Times(AnyNumber())
.WillRepeatedly(Return(base::Optional<base::TimeDelta>())); .WillRepeatedly(Return(base::TimeDelta()));
EXPECT_CALL(mock_network_quality_provider_, GetTransportRTT()) EXPECT_CALL(mock_network_quality_provider_, GetTransportRTT())
.Times(AnyNumber()) .Times(AnyNumber())
.WillRepeatedly(Return(base::Optional<base::TimeDelta>())); .WillRepeatedly(Return(base::TimeDelta()));
EXPECT_CALL(mock_network_quality_provider_, GetDownstreamThroughputKbps()) EXPECT_CALL(mock_network_quality_provider_, GetDownstreamThroughputKbps())
.Times(AnyNumber()) .Times(AnyNumber())
.WillRepeatedly(Return(base::Optional<int32_t>())); .WillRepeatedly(Return(int32_t()));
} }
MockNetworkQualityProvider& mock_network_quality_provider() { MockNetworkQualityProvider& mock_network_quality_provider() {
......
...@@ -127,7 +127,7 @@ void PageLoadMetricsEmbedder::RegisterObservers( ...@@ -127,7 +127,7 @@ void PageLoadMetricsEmbedder::RegisterObservers(
tracker->AddObserver(std::move(ads_observer)); tracker->AddObserver(std::move(ads_observer));
std::unique_ptr<page_load_metrics::PageLoadMetricsObserver> ukm_observer = std::unique_ptr<page_load_metrics::PageLoadMetricsObserver> ukm_observer =
UkmPageLoadMetricsObserver::CreateIfNeeded(web_contents_); UkmPageLoadMetricsObserver::CreateIfNeeded();
if (ukm_observer) if (ukm_observer)
tracker->AddObserver(std::move(ukm_observer)); tracker->AddObserver(std::move(ukm_observer));
......
...@@ -76,21 +76,21 @@ class COMPONENT_EXPORT(NETWORK_CPP) NetworkQualityTracker ...@@ -76,21 +76,21 @@ class COMPONENT_EXPORT(NETWORK_CPP) NetworkQualityTracker
~NetworkQualityTracker() override; ~NetworkQualityTracker() override;
// Returns the current estimate of the effective connection type. // Returns the current estimate of the effective connection type.
net::EffectiveConnectionType GetEffectiveConnectionType() const; virtual net::EffectiveConnectionType GetEffectiveConnectionType() const;
// Returns the current HTTP RTT estimate. The RTT at the HTTP layer measures // Returns the current HTTP RTT estimate. The RTT at the HTTP layer measures
// the time from when the request was sent (this happens after the connection // the time from when the request was sent (this happens after the connection
// is established) to the time when the response headers were received. // is established) to the time when the response headers were received.
base::TimeDelta GetHttpRTT() const; virtual base::TimeDelta GetHttpRTT() const;
// Returns the current transport-layer RTT estimate. The RTT at the transport // Returns the current transport-layer RTT estimate. The RTT at the transport
// layer provides an aggregate estimate of the transport RTT as computed by // layer provides an aggregate estimate of the transport RTT as computed by
// various underlying TCP and QUIC connections. // various underlying TCP and QUIC connections.
base::TimeDelta GetTransportRTT() const; virtual base::TimeDelta GetTransportRTT() const;
// Returns the current downstream throughput estimate (in kilobits per // Returns the current downstream throughput estimate (in kilobits per
// second). // second).
int32_t GetDownstreamThroughputKbps() const; virtual int32_t GetDownstreamThroughputKbps() const;
// Registers |observer| to receive notifications of network changes. The // Registers |observer| to receive notifications of network changes. The
// thread on which this is called is the thread on which |observer| will be // thread on which this is called is the thread on which |observer| will be
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment