Commit 733e2fb1 authored by rajendrant's avatar rajendrant Committed by Commit Bot

Report save-data savings to LiteMode site-breakdown

This CL gets the estimated data savings due to SaveData and updates as
LiteMode savings. The savings are retrieved from field trial as json.

Bug: 923551
Change-Id: Ia7c5518edfeaedce33e957c19224f6a2350df6c2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1990989
Commit-Queue: rajendrant <rajendrant@chromium.org>
Reviewed-by: default avatarTarun Bansal <tbansal@chromium.org>
Reviewed-by: default avatarRyan Sturm <ryansturm@chromium.org>
Cr-Commit-Position: refs/heads/master@{#729972}
parent ad7ffb42
......@@ -50,6 +50,10 @@ DataSaverSiteBreakdownMetricsObserver::OnCommit(
committed_host_ = navigation_handle->GetWebContents()
->GetLastCommittedURL()
.HostNoBrackets();
committed_origin_ = navigation_handle->GetWebContents()
->GetLastCommittedURL()
.GetOrigin()
.spec();
return CONTINUE_OBSERVING;
}
......@@ -65,6 +69,7 @@ void DataSaverSiteBreakdownMetricsObserver::OnResourceDataUseObserved(
if (data_reduction_proxy_settings &&
data_reduction_proxy_settings->data_reduction_proxy_service()) {
DCHECK(!committed_host_.empty());
DCHECK(!committed_origin_.empty());
int64_t received_data_length = 0;
int64_t data_reduction_proxy_bytes_saved = 0;
for (auto const& resource : resources) {
......@@ -83,6 +88,14 @@ void DataSaverSiteBreakdownMetricsObserver::OnResourceDataUseObserved(
(resource->data_reduction_proxy_compression_ratio_estimate - 1.0);
}
}
double origin_save_data_savings =
data_reduction_proxy_settings->data_reduction_proxy_service()
->GetSaveDataSavingsPercentEstimate(committed_origin_);
if (origin_save_data_savings) {
data_reduction_proxy_bytes_saved +=
received_data_length * origin_save_data_savings / 100;
}
data_reduction_proxy_settings->data_reduction_proxy_service()
->UpdateDataUseForHost(
received_data_length,
......
......@@ -42,6 +42,7 @@ class DataSaverSiteBreakdownMetricsObserver
const std::string& mime_type) const override;
std::string committed_host_;
std::string committed_origin_;
// The browser context this navigation is operating in.
content::BrowserContext* browser_context_ = nullptr;
......
......@@ -8,6 +8,7 @@
#include "base/bind.h"
#include "base/files/file_path.h"
#include "base/json/json_reader.h"
#include "base/location.h"
#include "base/metrics/field_trial_params.h"
#include "base/metrics/histogram_macros.h"
......@@ -39,6 +40,22 @@
namespace data_reduction_proxy {
namespace {
base::Optional<base::Value> GetSaveDataSavingsPercentEstimateFromFieldTrial() {
if (!base::FeatureList::IsEnabled(features::kReportSaveDataSavings))
return base::nullopt;
const auto origin_savings_estimate_json =
base::GetFieldTrialParamValueByFeature(features::kReportSaveDataSavings,
"origin_savings_estimate");
if (origin_savings_estimate_json.empty())
return base::nullopt;
return base::JSONReader::Read(origin_savings_estimate_json);
}
} // namespace
DataReductionProxyService::DataReductionProxyService(
DataReductionProxySettings* settings,
PrefService* prefs,
......@@ -62,7 +79,9 @@ DataReductionProxyService::DataReductionProxyService(
data_use_measurement_(data_use_measurement),
effective_connection_type_(net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN),
client_(client),
channel_(channel) {
channel_(channel),
save_data_savings_estimate_dict_(
GetSaveDataSavingsPercentEstimateFromFieldTrial()) {
DCHECK(settings);
DCHECK(network_quality_tracker_);
DCHECK(network_connection_tracker_);
......@@ -405,8 +424,6 @@ void DataReductionProxyService::MarkProxiesAsBad(
// process (renderer).
if (bypass_duration < base::TimeDelta()) {
LOG(ERROR) << "Received bad MarkProxiesAsBad() -- invalid bypass_duration: "
<< bypass_duration;
std::move(callback).Run();
return;
}
......@@ -420,8 +437,6 @@ void DataReductionProxyService::MarkProxiesAsBad(
// received (FindConfiguredDataReductionProxy() searches recent proxies too).
for (const auto& proxy : bad_proxies.GetAll()) {
if (!config_->FindConfiguredDataReductionProxy(proxy)) {
LOG(ERROR) << "Received bad MarkProxiesAsBad() -- not a DRP server: "
<< proxy.ToURI();
std::move(callback).Run();
return;
}
......@@ -550,4 +565,17 @@ void DataReductionProxyService::SetDependenciesForTesting(
config_client_->Initialize(url_loader_factory_);
}
double DataReductionProxyService::GetSaveDataSavingsPercentEstimate(
const std::string& origin) const {
if (origin.empty() || !save_data_savings_estimate_dict_ ||
!save_data_savings_estimate_dict_->is_dict()) {
return 0;
}
const auto savings_percent =
save_data_savings_estimate_dict_->FindDoubleKey(origin);
if (!savings_percent)
return 0;
return *savings_percent;
}
} // namespace data_reduction_proxy
......@@ -16,6 +16,7 @@
#include "base/memory/ref_counted.h"
#include "base/memory/weak_ptr.h"
#include "base/sequence_checker.h"
#include "base/values.h"
#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_metrics.h"
#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_util.h"
#include "components/data_reduction_proxy/core/browser/db_data_owner.h"
......@@ -164,6 +165,10 @@ class DataReductionProxyService
void Clone(
mojo::PendingReceiver<mojom::DataReductionProxy> receiver) override;
// Returns the percentage of data savings estimate provided by save-data for
// an origin.
double GetSaveDataSavingsPercentEstimate(const std::string& origin) const;
// Accessor methods.
DataReductionProxyCompressionStats* compression_stats() const {
return compression_stats_.get();
......@@ -309,6 +314,9 @@ class DataReductionProxyService
// is unavailable, then the destruction will happen on the UI thread.
std::unique_ptr<NetworkPropertiesManager> network_properties_manager_;
// Dictionary of save-data savings estimates by origin.
const base::Optional<base::Value> save_data_savings_estimate_dict_;
// The set of clients that will get updates about changes to the proxy config.
mojo::RemoteSet<network::mojom::CustomProxyConfigClient>
proxy_config_clients_;
......
......@@ -74,5 +74,10 @@ const base::Feature kDataReductionProxyAggressiveConfigFetch{
"DataReductionProxyAggressiveConfigFetch",
base::FEATURE_ENABLED_BY_DEFAULT};
// Reports estimated data savings due to save-data request header and JS API, as
// savings provided by DataSaver.
const base::Feature kReportSaveDataSavings{"ReportSaveDataSavings",
base::FEATURE_DISABLED_BY_DEFAULT};
} // namespace features
} // namespace data_reduction_proxy
......@@ -21,6 +21,7 @@ extern const base::Feature kDataReductionProxyPopulatePreviewsPageIDToPingback;
extern const base::Feature kDataReductionProxyDisableProxyFailedWarmup;
extern const base::Feature kDataReductionProxyServerExperiments;
extern const base::Feature kDataReductionProxyAggressiveConfigFetch;
extern const base::Feature kReportSaveDataSavings;
} // namespace features
} // namespace data_reduction_proxy
......
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