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

Unified Diff: chrome/browser/automation/automation_provider_observers.cc

Issue 2559001: Measure loading time of several tabs. (Closed) Base URL: http://src.chromium.org/git/chromium.git
Patch Set: Revert michaeln's revert due to mac linker error Created 10 years, 6 months 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
« no previous file with comments | « chrome/browser/automation/automation_provider_observers.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/automation/automation_provider_observers.cc
diff --git a/chrome/browser/automation/automation_provider_observers.cc b/chrome/browser/automation/automation_provider_observers.cc
index cdb5de8b71e939126a27d2085035d068406a4b80..8b09fe5e4791cc30e78ad55a44f2c1dc6b8475a9 100644
--- a/chrome/browser/automation/automation_provider_observers.cc
+++ b/chrome/browser/automation/automation_provider_observers.cc
@@ -28,10 +28,31 @@
#include "chrome/browser/chromeos/login/authentication_notification_details.h"
#endif
+// Holds onto start and stop timestamps for a particular tab
+class InitialLoadObserver::TabTime {
+ public:
+ explicit TabTime(base::TimeTicks started)
+ : load_start_time_(started) {
+ }
+ void set_stop_time(base::TimeTicks stopped) {
+ load_stop_time_ = stopped;
+ }
+ base::TimeTicks stop_time() const {
+ return load_stop_time_;
+ }
+ base::TimeTicks start_time() const {
+ return load_start_time_;
+ }
+ private:
+ base::TimeTicks load_start_time_;
+ base::TimeTicks load_stop_time_;
+};
+
InitialLoadObserver::InitialLoadObserver(size_t tab_count,
AutomationProvider* automation)
: automation_(automation),
- outstanding_tab_count_(tab_count) {
+ outstanding_tab_count_(tab_count),
+ init_time_(base::TimeTicks::Now()) {
if (outstanding_tab_count_ > 0) {
registrar_.Add(this, NotificationType::LOAD_START,
NotificationService::AllSources());
@@ -48,11 +69,16 @@ void InitialLoadObserver::Observe(NotificationType type,
const NotificationDetails& details) {
if (type == NotificationType::LOAD_START) {
if (outstanding_tab_count_ > loading_tabs_.size())
- loading_tabs_.insert(source.map_key());
+ loading_tabs_.insert(TabTimeMap::value_type(
+ source.map_key(),
+ TabTime(base::TimeTicks::Now())));
} else if (type == NotificationType::LOAD_STOP) {
if (outstanding_tab_count_ > finished_tabs_.size()) {
- if (loading_tabs_.find(source.map_key()) != loading_tabs_.end())
+ TabTimeMap::iterator iter = loading_tabs_.find(source.map_key());
+ if (iter != loading_tabs_.end()) {
finished_tabs_.insert(source.map_key());
+ iter->second.set_stop_time(base::TimeTicks::Now());
+ }
if (outstanding_tab_count_ == finished_tabs_.size())
ConditionMet();
}
@@ -61,6 +87,28 @@ void InitialLoadObserver::Observe(NotificationType type,
}
}
+DictionaryValue* InitialLoadObserver::GetTimingInformation() const {
+ ListValue* items = new ListValue;
+ for (TabTimeMap::const_iterator it = loading_tabs_.begin();
+ it != loading_tabs_.end();
+ ++it) {
+ DictionaryValue* item = new DictionaryValue;
+ base::TimeDelta delta_start = it->second.start_time() - init_time_;
+
+ item->SetReal(L"load_start_ms", delta_start.InMillisecondsF());
+ if (it->second.stop_time().is_null()) {
+ item->Set(L"load_stop_ms", Value::CreateNullValue());
+ } else {
+ base::TimeDelta delta_stop = it->second.stop_time() - init_time_;
+ item->SetReal(L"load_stop_ms", delta_stop.InMillisecondsF());
+ }
+ items->Append(item);
+ }
+ DictionaryValue* return_value = new DictionaryValue;
+ return_value->Set(L"tabs", items);
+ return return_value;
+}
+
void InitialLoadObserver::ConditionMet() {
registrar_.RemoveAll();
automation_->Send(new AutomationMsg_InitialLoadsComplete(0));
« no previous file with comments | « chrome/browser/automation/automation_provider_observers.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698