Chromium Code Reviews| Index: chrome/browser/extensions/extension_webrequest_time_tracker.h |
| diff --git a/chrome/browser/extensions/extension_webrequest_time_tracker.h b/chrome/browser/extensions/extension_webrequest_time_tracker.h |
| index b9911b1cfd00d8e0d8583b07e563985f953bed51..c37385326bac1a24b08601dd63aa185e42535be6 100644 |
| --- a/chrome/browser/extensions/extension_webrequest_time_tracker.h |
| +++ b/chrome/browser/extensions/extension_webrequest_time_tracker.h |
| @@ -10,6 +10,7 @@ |
| #include <queue> |
| #include <set> |
| #include <string> |
| +#include <set> |
| #include "base/time.h" |
| #include "base/gtest_prod_util.h" |
| @@ -19,6 +20,26 @@ namespace base { |
| class Time; |
| } |
| +class ExtensionWebRequestTimeTrackerDelegate { |
|
Matt Perry
2011/10/06 22:55:54
This is good for testing, but I don't think the Ex
battre
2011/10/07 14:09:24
Done.
|
| + public: |
| + virtual ~ExtensionWebRequestTimeTrackerDelegate() {} |
| + |
| + // Notifies the delegate that |num_delayed_messages| of the last |
| + // |total_num_messages| inspected messages were excessively/moderately |
| + // delayed. Every excessively delayed message is also counted as a moderately |
| + // delayed message. |
| + virtual void NotifyExcessiveDelays( |
| + void* profile, |
| + size_t num_delayed_messages, |
| + size_t total_num_messages, |
| + const std::set<std::string>& extension_ids) = 0; |
| + virtual void NotifyModerateDelays( |
| + void* profile, |
| + size_t num_delayed_messages, |
| + size_t total_num_messages, |
| + const std::set<std::string>& extension_ids) = 0; |
| +}; |
| + |
| // This class keeps monitors how much delay extensions add to network requests |
| // by using the webRequest API. If the delay is sufficient, we will warn the |
| // user that extensions are slowing down the browser. |
| @@ -29,7 +50,7 @@ class ExtensionWebRequestTimeTracker { |
| // Records the time that a request was created. |
| void LogRequestStartTime(int64 request_id, const base::Time& start_time, |
| - const GURL& url); |
| + const GURL& url, void* profile); |
| // Records the time that a request either completed or encountered an error. |
| void LogRequestEndTime(int64 request_id, const base::Time& end_time); |
| @@ -53,10 +74,13 @@ class ExtensionWebRequestTimeTracker { |
| // Called when an extension has redirected the given request to another URL. |
| void SetRequestRedirected(int64 request_id); |
| + void SetDelegate(ExtensionWebRequestTimeTrackerDelegate* delegate); |
| + |
| private: |
| // Timing information for a single request. |
| struct RequestTimeLog { |
| GURL url; // used for debug purposes only |
| + void* profile; // profile that created the request |
| bool completed; |
| base::Time request_start_time; |
| base::TimeDelta request_duration; |
| @@ -70,6 +94,9 @@ class ExtensionWebRequestTimeTracker { |
| // if necessary. |
| void Analyze(int64 request_id); |
| + // Returns a list of all extension IDs that contributed to delay for |log|. |
| + std::set<std::string> GetExtensionIds(const RequestTimeLog& log) const; |
| + |
| // A map of recent request IDs to timing info for each request. |
| std::map<int64, RequestTimeLog> request_time_logs_; |
| @@ -82,6 +109,9 @@ class ExtensionWebRequestTimeTracker { |
| std::set<int64> excessive_delays_; |
| std::set<int64> moderate_delays_; |
| + // Weak pointer. Must outlive the ExtensionWebRequestTimeTracker. |
| + ExtensionWebRequestTimeTrackerDelegate* delegate_; |
| + |
| FRIEND_TEST_ALL_PREFIXES(ExtensionWebRequestTimeTrackerTest, Basic); |
| FRIEND_TEST_ALL_PREFIXES(ExtensionWebRequestTimeTrackerTest, |
| IgnoreFastRequests); |