Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(74)

Unified Diff: content/browser/loader/resource_scheduler.cc

Issue 782903002: Breakdown ClientLoadedTime histograms into buckets based on number of clients. Fix RequestTimeThrot… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/loader/resource_scheduler.cc
diff --git a/content/browser/loader/resource_scheduler.cc b/content/browser/loader/resource_scheduler.cc
index 64d7e654e61a95d47241026038eefe681ebdbc27..f4264d43543a8053b7924b5d44d8cd4afa4f6389 100644
--- a/content/browser/loader/resource_scheduler.cc
+++ b/content/browser/loader/resource_scheduler.cc
@@ -27,11 +27,10 @@ namespace content {
namespace {
-void PostHistogram(const char* base_name,
- const char* suffix,
+void PostHistogram(std::string base_name,
+ std::string suffix,
Ilya Sherman 2014/12/09 02:59:36 nit: Why not const-ref?
aiolos (Not reviewing) 2015/01/05 23:37:59 Done. I had changed it to std::string to simplify
base::TimeDelta time) {
- std::string histogram_name =
- base::StringPrintf("ResourceScheduler.%s.%s", base_name, suffix);
+ std::string histogram_name = "ResourceScheduler." + base_name + '.' + suffix;
base::HistogramBase* histogram_counter = base::Histogram::FactoryTimeGet(
histogram_name,
base::TimeDelta::FromMilliseconds(1),
@@ -168,7 +167,7 @@ class ResourceScheduler::ScheduledResourceRequest
// tabs which have switched between active and background multiple times.
// Ex: A tab with the following transitions Active -> Background -> Active
// will be recorded as Active.
- const char* client_state = "Other";
+ std::string client_state = "Other";
if (current_state == client_state_on_creation_ && current_state == ACTIVE) {
client_state = "Active";
} else if (current_state == client_state_on_creation_ &&
@@ -368,15 +367,21 @@ class ResourceScheduler::Client {
return;
}
base::TimeTicks cur_time = base::TimeTicks::Now();
- const char* client_catagory = "Other";
+ std::string num_clients = scheduler_->GetNumClientsString();
mmenke 2014/12/09 15:53:28 Per suggestion below, can make this a const char*
aiolos (Not reviewing) 2015/01/05 23:37:59 Done.
+ std::string client_catagory = "Other";
if (last_active_switch_time_.is_null()) {
client_catagory = is_active() ? "Active" : "Background";
} else if (is_active()) {
- PostHistogram("ClientLoadedTime", "Other.SwitchedToActive",
+ PostHistogram(
+ "ClientLoadedTime", "Other.SwitchedToActive",
+ cur_time - last_active_switch_time_);
mmenke 2014/12/09 15:53:28 Suggest putting "cur_time - last_active_switch_tim
aiolos (Not reviewing) 2015/01/05 23:37:58 Done.
+ PostHistogram("ClientLoadedTime", "Other.SwitchedToActive." + num_clients,
cur_time - last_active_switch_time_);
}
PostHistogram("ClientLoadedTime", client_catagory,
cur_time - load_started_time_);
+ PostHistogram("ClientLoadedTime", client_catagory + '.' + num_clients,
+ cur_time - load_started_time_);
// TODO(aiolos): The above histograms will not take main resource load time
// into account with PlzNavigate into account. The ResourceScheduler also
// will load the main resources without a clients with the current logic.
@@ -790,6 +795,7 @@ class ResourceScheduler::Client {
ResourceScheduler::ResourceScheduler()
: should_coalesce_(false),
should_throttle_(false),
+ num_clients_(0),
active_clients_loading_(0),
coalesced_clients_(0),
coalescing_timer_(new base::Timer(true /* retain_user_task */,
@@ -878,9 +884,8 @@ void ResourceScheduler::OnClientCreated(int child_id,
Client* client = new Client(this, is_visible, is_audible);
client_map_[client_id] = client;
- // TODO(aiolos): set Client visibility/audibility when signals are added
- // this will UNTHROTTLE Clients as needed
client->UpdateThrottleState();
+ ++num_clients_;
}
void ResourceScheduler::OnClientDeleted(int child_id, int route_id) {
@@ -903,6 +908,7 @@ void ResourceScheduler::OnClientDeleted(int child_id, int route_id) {
delete client;
client_map_.erase(it);
+ --num_clients_;
}
void ResourceScheduler::OnLoadingStateChanged(int child_id,
@@ -989,6 +995,18 @@ ResourceScheduler::Client* ResourceScheduler::GetClient(int child_id,
return client_it->second;
}
+std::string ResourceScheduler::GetNumClientsString() {
mmenke 2014/12/09 15:53:28 Can't we return a const char*?
mmenke 2014/12/09 15:53:28 +const. Or better, remove it from ResourceSchedul
aiolos (Not reviewing) 2015/01/05 23:37:59 Done.
aiolos (Not reviewing) 2015/01/05 23:37:59 Done.
+ if (num_clients_ == 1)
mmenke 2014/12/09 15:53:28 I'd recommend just using client_map_.size() instea
aiolos (Not reviewing) 2015/01/05 23:37:59 Done.
+ return "1Client";
+ else if (num_clients_ <= 5)
+ return "Max5Clients";
+ else if (num_clients_ <= 15)
+ return "Max15Clients";
+ else if (num_clients_ <= 30)
+ return "Max30Clients";
+ return "Over30Clients";
+}
+
void ResourceScheduler::DecrementActiveClientsLoading() {
DCHECK_NE(0u, active_clients_loading_);
--active_clients_loading_;

Powered by Google App Engine
This is Rietveld 408576698