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

Unified Diff: chrome/browser/extensions/extension_webrequest_time_tracker.h

Issue 7693004: Added tracking of time spent waiting on extensions to the webRequest API. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: compile Created 9 years, 4 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
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
new file mode 100755
index 0000000000000000000000000000000000000000..e1c86f97119de8cd5d681c2b1916d72489752f0d
--- /dev/null
+++ b/chrome/browser/extensions/extension_webrequest_time_tracker.h
@@ -0,0 +1,95 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_WEBREQUEST_TIME_TRACKER_H_
+#define CHROME_BROWSER_EXTENSIONS_EXTENSION_WEBREQUEST_TIME_TRACKER_H_
+#pragma once
+
+#include <map>
+#include <queue>
+#include <set>
+#include <string>
+
+#include "base/time.h"
+#include "base/gtest_prod_util.h"
+#include "googleurl/src/gurl.h"
+
+namespace base {
+class Time;
+}
+
+// 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.
+class ExtensionWebRequestTimeTracker {
+ public:
+ ExtensionWebRequestTimeTracker();
+ ~ExtensionWebRequestTimeTracker();
+
+ // Records the time that a request was created.
+ void LogRequestStartTime(int64 request_id, const base::Time& start_time,
+ const GURL& url);
+
+ // Records the time that a request either completed or encountered an error.
+ void LogRequestEndTime(int64 request_id, const base::Time& end_time);
+
+ // Records an additional delay for the given request caused by the given
+ // extension.
+ void IncrementExtensionBlockTime(
+ const std::string& extension_id,
+ int64 request_id,
+ const base::TimeDelta& block_time);
+
+ // Records an additional delay for the given request caused by all extensions
+ // combined.
+ void IncrementTotalBlockTime(
+ int64 request_id,
+ const base::TimeDelta& block_time);
+
+ // Called when an extension has canceled the given request.
+ void SetRequestCanceled(int64 request_id);
+
+ // Called when an extension has redirected the given request to another URL.
+ void SetRequestRedirected(int64 request_id);
+
+ private:
+ // Timing information for a single request.
+ struct RequestTimeLog {
+ GURL url; // used for debug purposes only
+ bool completed;
+ base::Time request_start_time;
+ base::TimeDelta request_duration;
+ base::TimeDelta block_duration;
+ std::map<std::string, base::TimeDelta> extension_block_durations;
+ RequestTimeLog();
+ ~RequestTimeLog();
+ };
+
+ // Called after a request finishes, to analyze the delays and warn the user
+ // if necessary.
+ void Analyze(int64 request_id);
+
+ // A map of recent request IDs to timing info for each request.
+ std::map<int64, RequestTimeLog> request_time_logs_;
+
+ // A list of recent request IDs that we know about. Used to limit the size of
+ // the logs.
+ std::queue<int64> request_ids_;
+
+ // The set of recent requests that have been delayed either a large or
+ // moderate amount by extensions.
+ std::set<int64> excessive_delays_;
+ std::set<int64> moderate_delays_;
+
+ FRIEND_TEST_ALL_PREFIXES(ExtensionWebRequestTimeTrackerTest, Basic);
+ FRIEND_TEST_ALL_PREFIXES(ExtensionWebRequestTimeTrackerTest,
+ IgnoreFastRequests);
+ FRIEND_TEST_ALL_PREFIXES(ExtensionWebRequestTimeTrackerTest,
+ CancelOrRedirect);
+ FRIEND_TEST_ALL_PREFIXES(ExtensionWebRequestTimeTrackerTest, Delays);
+
+ DISALLOW_COPY_AND_ASSIGN(ExtensionWebRequestTimeTracker);
+};
+
+#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_WEBREQUEST_TIME_TRACKER_H_
« no previous file with comments | « chrome/browser/extensions/extension_webrequest_api.cc ('k') | chrome/browser/extensions/extension_webrequest_time_tracker.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698