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

Unified Diff: chrome/browser/extensions/extension_protocols.cc

Issue 227943003: Add experiment to measure time to hash extension content as we read it (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 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 | « no previous file | net/net.gyp » ('j') | net/url_request/url_request_file_job.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/extensions/extension_protocols.cc
diff --git a/chrome/browser/extensions/extension_protocols.cc b/chrome/browser/extensions/extension_protocols.cc
index e3e9865cb89f808ed4bd5c33ea136bf0525567ce..7efb81b98d66b76219a939a0e420a0337f83097d 100644
--- a/chrome/browser/extensions/extension_protocols.cc
+++ b/chrome/browser/extensions/extension_protocols.cc
@@ -14,6 +14,7 @@
#include "base/logging.h"
#include "base/memory/weak_ptr.h"
#include "base/message_loop/message_loop.h"
+#include "base/metrics/field_trial.h"
#include "base/metrics/histogram.h"
#include "base/path_service.h"
#include "base/sha1.h"
@@ -33,6 +34,8 @@
#include "chrome/common/url_constants.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/resource_request_info.h"
+#include "crypto/secure_hash.h"
+#include "crypto/sha2.h"
#include "extensions/browser/info_map.h"
#include "extensions/common/constants.h"
#include "extensions/common/extension.h"
@@ -45,6 +48,7 @@
#include "extensions/common/manifest_handlers/web_accessible_resources_info.h"
#include "extensions/common/manifest_handlers/webview_info.h"
#include "grit/component_extension_resources_map.h"
+#include "net/base/io_buffer.h"
#include "net/base/mime_util.h"
#include "net/base/net_errors.h"
#include "net/http/http_request_headers.h"
@@ -285,20 +289,31 @@ class URLRequestExtensionJob : public net::URLRequestFileJob {
const std::string& content_security_policy,
bool send_cors_header,
bool follow_symlinks_anywhere)
- : net::URLRequestFileJob(
- request, network_delegate, base::FilePath(),
- BrowserThread::GetBlockingPool()->GetTaskRunnerWithShutdownBehavior(
- base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)),
- directory_path_(directory_path),
- // TODO(tc): Move all of these files into resources.pak so we don't break
- // when updating on Linux.
- resource_(extension_id, directory_path, relative_path),
- content_security_policy_(content_security_policy),
- send_cors_header_(send_cors_header),
- weak_factory_(this) {
+ : net::URLRequestFileJob(
+ request,
+ network_delegate,
+ base::FilePath(),
+ BrowserThread::GetBlockingPool()->GetTaskRunnerWithShutdownBehavior(
+ base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)),
+ seek_position_(0),
+ bytes_read_(0),
+ directory_path_(directory_path),
+ // TODO(tc): Move all of these files into resources.pak so we don't
+ // break when updating on Linux.
+ resource_(extension_id, directory_path, relative_path),
+ content_security_policy_(content_security_policy),
+ send_cors_header_(send_cors_header),
+ weak_factory_(this) {
if (follow_symlinks_anywhere) {
resource_.set_follow_symlinks_anywhere();
}
+ const std::string& group =
+ base::FieldTrialList::FindFullName("ExtensionContentHashMeasurement");
+ if (group == "Yes") {
+ base::ElapsedTimer timer;
+ hash_.reset(crypto::SecureHash::Create(crypto::SecureHash::SHA256));
+ hashing_time_ += timer.Elapsed();
rvargas (doing something else) 2014/04/08 16:53:45 hashing_time_ =
asargent_no_longer_on_chrome 2014/04/09 20:59:59 Done.
+ }
}
virtual void GetResponseInfo(net::HttpResponseInfo* info) OVERRIDE {
@@ -310,7 +325,8 @@ class URLRequestExtensionJob : public net::URLRequestFileJob {
base::Time* last_modified_time = new base::Time();
bool posted = BrowserThread::PostBlockingPoolTaskAndReply(
FROM_HERE,
- base::Bind(&ReadResourceFilePathAndLastModifiedTime, resource_,
+ base::Bind(&ReadResourceFilePathAndLastModifiedTime,
+ resource_,
directory_path_,
base::Unretained(read_file_path),
base::Unretained(last_modified_time)),
@@ -321,8 +337,36 @@ class URLRequestExtensionJob : public net::URLRequestFileJob {
DCHECK(posted);
}
+ virtual void OnSeekComplete(int64 result) OVERRIDE {
+ DCHECK_EQ(seek_position_, 0);
+ seek_position_ = result;
+ }
+
+ virtual void OnReadComplete(net::IOBuffer* buffer, int result) OVERRIDE {
+ UMA_HISTOGRAM_COUNTS("ExtensionUrlRequest.OnReadCompleteResult", result);
rvargas (doing something else) 2014/04/08 16:53:45 What do you expect to get out of this histogram?
asargent_no_longer_on_chrome 2014/04/09 20:59:59 I'm interested to see the distribution of common r
+ if (result > 0) {
+ bytes_read_ += result;
+ if (hash_.get()) {
+ base::ElapsedTimer timer;
+ hash_->Update(buffer->data(), result);
+ hashing_time_ += timer.Elapsed();
+ }
+ }
+ }
+
private:
- virtual ~URLRequestExtensionJob() {}
+ virtual ~URLRequestExtensionJob() {
+ if (hash_.get()) {
+ base::ElapsedTimer timer;
+ std::string hash_bytes(crypto::kSHA256Length, 0);
+ hash_->Finish(string_as_array(&hash_bytes), hash_bytes.size());
+ hashing_time_ += timer.Elapsed();
+ UMA_HISTOGRAM_TIMES("ExtensionUrlRequest.HashTimeMs", hashing_time_);
+ }
+ UMA_HISTOGRAM_COUNTS("ExtensionUrlRequest.TotalKbRead",
+ bytes_read_ / 1024);
+ UMA_HISTOGRAM_COUNTS("ExtensionUrlRequest.SeekPosition", seek_position_);
+ }
void OnFilePathAndLastModifiedTimeRead(base::FilePath* read_file_path,
base::Time* last_modified_time) {
@@ -334,6 +378,18 @@ class URLRequestExtensionJob : public net::URLRequestFileJob {
URLRequestFileJob::Start();
}
+ // A hash of the contents we've read from the file.
+ scoped_ptr<crypto::SecureHash> hash_;
+
+ // The position we seeked to in the file.
+ int64 seek_position_;
+
+ // The number of bytes of content we read from the file.
+ int bytes_read_;
+
+ // Used to count the total time it takes to do hashing operations.
+ base::TimeDelta hashing_time_;
+
net::HttpResponseInfo response_info_;
base::FilePath directory_path_;
extensions::ExtensionResource resource_;
« no previous file with comments | « no previous file | net/net.gyp » ('j') | net/url_request/url_request_file_job.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698