Commit 40296583 authored by pasko's avatar pasko Committed by Commit bot

Prerender: Hardcode the Silence experiment date

As confirmed with the UMA team, the field trial allows only 60-70% coverage of
users for one day (particularly, on Windows).

To address this shortcoming, this change hardcodes the explicit date of the
experiment (for December 14th as seen in PST, to be synchronized with field
trial server-seeding better). To be effective this must be cherry-picked to M55.

The experiment still has the ability to serve as a "kill switch" by setting the
group "ExperimentYes_expires_2016-12-14T07:00:00Z" (or any earlier date in the
string). As discussed above, this has limited effect in the day range.

Also this changes AGSA to opt out of the experiment. Currently AGSA only uses
ORIGIN_EXTERNAL_REQUEST_FORCED_CELLULAR. The experiment will not take effect
on these origins. Other 1st party apps are not using this prerender::Origin, as
far as we know, and the use of it is restricted to 1st party, hence this change
should not affect the experiment for other Android apps.

BUG=640592

Review-Url: https://codereview.chromium.org/2538723003
Cr-Commit-Position: refs/heads/master@{#435610}
parent b0622c15
...@@ -1261,8 +1261,10 @@ void PrerenderManager::RecordNetworkBytes(Origin origin, ...@@ -1261,8 +1261,10 @@ void PrerenderManager::RecordNetworkBytes(Origin origin,
} }
bool PrerenderManager::IsPrerenderSilenceExperiment(Origin origin) const { bool PrerenderManager::IsPrerenderSilenceExperiment(Origin origin) const {
if (origin == ORIGIN_OFFLINE) if (origin == ORIGIN_OFFLINE ||
origin == ORIGIN_EXTERNAL_REQUEST_FORCED_CELLULAR) {
return false; return false;
}
// The group name should contain expiration time formatted as: // The group name should contain expiration time formatted as:
// "ExperimentYes_expires_YYYY-MM-DDTHH:MM:SSZ". // "ExperimentYes_expires_YYYY-MM-DDTHH:MM:SSZ".
...@@ -1271,6 +1273,16 @@ bool PrerenderManager::IsPrerenderSilenceExperiment(Origin origin) const { ...@@ -1271,6 +1273,16 @@ bool PrerenderManager::IsPrerenderSilenceExperiment(Origin origin) const {
const char kExperimentPrefix[] = "ExperimentYes"; const char kExperimentPrefix[] = "ExperimentYes";
if (!base::StartsWith(group_name, kExperimentPrefix, if (!base::StartsWith(group_name, kExperimentPrefix,
base::CompareCase::INSENSITIVE_ASCII)) { base::CompareCase::INSENSITIVE_ASCII)) {
// The experiment group was not set, use 2016-12-14 PST as the day of the
// experiment.
base::Time experiment_start;
if (!base::Time::FromString("2016-12-14-08:00:00Z", &experiment_start))
NOTREACHED();
base::Time current_time = GetCurrentTime();
if ((experiment_start <= current_time) &&
(current_time < experiment_start + base::TimeDelta::FromDays(1))) {
return true;
}
return false; return false;
} }
const char kExperimentPrefixWithExpiration[] = "ExperimentYes_expires_"; const char kExperimentPrefixWithExpiration[] = "ExperimentYes_expires_";
......
...@@ -97,6 +97,17 @@ const gfx::Size kSize(640, 480); ...@@ -97,6 +97,17 @@ const gfx::Size kSize(640, 480);
const uint32_t kDefaultRelTypes = PrerenderRelTypePrerender; const uint32_t kDefaultRelTypes = PrerenderRelTypePrerender;
const Origin g_prerender_silence_origins[] = {
ORIGIN_GWS_PRERENDER,
ORIGIN_OMNIBOX,
ORIGIN_NONE,
ORIGIN_LINK_REL_PRERENDER_SAMEDOMAIN,
ORIGIN_LINK_REL_PRERENDER_CROSSDOMAIN,
ORIGIN_EXTERNAL_REQUEST,
ORIGIN_INSTANT,
ORIGIN_LINK_REL_NEXT,
};
base::SimpleTestTickClock* OverridePrerenderManagerTimeTicks( base::SimpleTestTickClock* OverridePrerenderManagerTimeTicks(
PrerenderManager* prerender_manager) { PrerenderManager* prerender_manager) {
auto tick_clock = base::MakeUnique<base::SimpleTestTickClock>(); auto tick_clock = base::MakeUnique<base::SimpleTestTickClock>();
...@@ -1134,29 +1145,59 @@ TEST_F(PrerenderTest, PrerenderSilenceAllowsOffline) { ...@@ -1134,29 +1145,59 @@ TEST_F(PrerenderTest, PrerenderSilenceAllowsOffline) {
EXPECT_EQ(ORIGIN_OFFLINE, prerender_handle->contents()->origin()); EXPECT_EQ(ORIGIN_OFFLINE, prerender_handle->contents()->origin());
} }
// Checks that the "PrerenderSilence experiment does not disable forced-cellular
// prerendering.
TEST_F(PrerenderTest, PrerenderSilenceAllowsForcedCellular) {
// Set the time to 30 seconds before the experiment expires.
ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
"PrerenderSilence", "ExperimentYes_expires_2016-12-20T00:01:00Z"));
ASSERT_TRUE(OverridePrerenderManagerTime("2016-12-20T00:00:30Z",
prerender_manager()));
GURL url("http://www.google.com/");
DummyPrerenderContents* prerender_contents =
prerender_manager()->CreateNextPrerenderContents(
url, ORIGIN_EXTERNAL_REQUEST_FORCED_CELLULAR,
FINAL_STATUS_MANAGER_SHUTDOWN);
std::unique_ptr<PrerenderHandle> prerender_handle =
prerender_manager()->AddPrerenderOnCellularFromExternalRequest(
url, content::Referrer(), nullptr, gfx::Rect(kSize));
EXPECT_TRUE(prerender_handle);
EXPECT_TRUE(prerender_handle->IsPrerendering());
EXPECT_TRUE(prerender_contents->prerendering_has_started());
EXPECT_EQ(prerender_contents, prerender_handle->contents());
EXPECT_EQ(ORIGIN_EXTERNAL_REQUEST_FORCED_CELLULAR,
prerender_handle->contents()->origin());
}
// Checks that the "PrerenderSilence" experiment disables prerendering. // Checks that the "PrerenderSilence" experiment disables prerendering.
TEST_F(PrerenderTest, PrerenderSilenceDisallowsNonOffline) { TEST_F(PrerenderTest, PrerenderSilenceDisallowsNonOffline) {
ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
"PrerenderSilence", "ExperimentYes_expires_2016-12-20T00:02:00Z")); "PrerenderSilence", "ExperimentYes_expires_2016-12-20T00:02:00Z"));
ASSERT_TRUE(OverridePrerenderManagerTime("2016-12-20T00:01:00Z", ASSERT_TRUE(OverridePrerenderManagerTime("2016-12-20T00:01:00Z",
prerender_manager())); prerender_manager()));
const Origin origins[] = { for (const Origin& origin : g_prerender_silence_origins) {
ORIGIN_GWS_PRERENDER,
ORIGIN_OMNIBOX,
ORIGIN_NONE,
ORIGIN_LINK_REL_PRERENDER_SAMEDOMAIN,
ORIGIN_LINK_REL_PRERENDER_CROSSDOMAIN,
ORIGIN_EXTERNAL_REQUEST,
ORIGIN_INSTANT,
ORIGIN_LINK_REL_NEXT,
ORIGIN_EXTERNAL_REQUEST_FORCED_CELLULAR,
};
for (const Origin& origin : origins) {
EXPECT_TRUE( EXPECT_TRUE(
prerender_manager()->IsPrerenderSilenceExperimentForTesting(origin)); prerender_manager()->IsPrerenderSilenceExperimentForTesting(origin));
} }
} }
// Checks that the "PrerenderSilence" experiment disables prerendering even
// without the field trial, then expires.
TEST_F(PrerenderTest, PrerenderSilenceWithoutFieldTrial) {
ASSERT_TRUE(OverridePrerenderManagerTime("2016-12-14T08:00:01Z",
prerender_manager()));
for (const Origin& origin : g_prerender_silence_origins) {
EXPECT_TRUE(
prerender_manager()->IsPrerenderSilenceExperimentForTesting(origin));
}
ASSERT_TRUE(OverridePrerenderManagerTime("2016-12-15T08:00:00Z",
prerender_manager()));
for (const Origin& origin : g_prerender_silence_origins) {
EXPECT_FALSE(
prerender_manager()->IsPrerenderSilenceExperimentForTesting(origin));
}
}
// Checks that prerendering is enabled after expiration of the // Checks that prerendering is enabled after expiration of the
// "PrerenderSilence" experiment. // "PrerenderSilence" experiment.
TEST_F(PrerenderTest, PrerenderSilenceAllowsAfterExpiration) { TEST_F(PrerenderTest, PrerenderSilenceAllowsAfterExpiration) {
......
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