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

Unified Diff: chrome/common/prefetch_argument_win.cc

Issue 1595633002: Use valid /prefetch arguments for process launches on Windows. - do not submit (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@move
Patch Set: format Created 4 years, 11 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/common/prefetch_argument_win.cc
diff --git a/chrome/common/prefetch_argument_win.cc b/chrome/common/prefetch_argument_win.cc
new file mode 100644
index 0000000000000000000000000000000000000000..876b53f54cd830c8a9393b2799a7a87abb234eb1
--- /dev/null
+++ b/chrome/common/prefetch_argument_win.cc
@@ -0,0 +1,61 @@
+// Copyright (c) 2016 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.
+
+#include "chrome/common/prefetch_argument_win.h"
+
+#include <string>
+
+#include "base/command_line.h"
+#include "base/logging.h"
+#include "base/strings/stringprintf.h"
+#include "chrome/common/chrome_switches.h"
+#include "chrome/installer/util/browser_distribution.h"
+#include "components/startup_metric_utils/common/pre_read_field_trial_utils_win.h"
+#include "content/public/common/content_switches.h"
+
+namespace chrome {
+
+void AddWindowsPrefetchArgument(base::CommandLine* command_line) {
+ DCHECK(command_line);
+
+ bool ignored;
+ bool trial_prefetch_argument = false;
+ startup_metric_utils::GetPreReadOptions(
+ BrowserDistribution::GetDistribution()->GetRegistryPath(), &ignored,
+ &ignored, &ignored, &ignored, &trial_prefetch_argument);
gab 2016/01/18 19:10:51 Make these parameters optional in GetPreReadOption
+ if (!trial_prefetch_argument)
+ return;
+
+ const std::string process_type =
+ command_line->GetSwitchValueASCII(switches::kProcessType);
+
+ // There can be 9 prefetch profiles per executable: a profile for launches
+ // without a prefetch argument and a profile per /prefetch:# argument, where #
+ // is [1, 8].
gab 2016/01/18 19:10:51 "prefetch argument" -> "/prefetch argument"
+ int prefetch_argument;
gab 2016/01/18 19:10:52 Default initialize to 0 and add comment (and also
+
+ if (process_type.empty()) {
+ // No prefetch argument when the browser process is launched in foreground.
+ if (!command_line->HasSwitch(switches::kNoStartupWindow))
+ return;
+ prefetch_argument = 1;
gab 2016/01/18 19:10:51 Now that there is a default value above I think th
+ } else if (process_type == switches::kRendererProcess) {
+ prefetch_argument = 2;
+ } else if (process_type == switches::kGpuProcess) {
+ prefetch_argument = 3;
+ } else if (process_type == switches::kPpapiPluginProcess) {
+ prefetch_argument = 4;
+ } else {
gab 2016/01/18 19:10:52 Worth adding one for the watcher process? (don't
+ // Default prefetch argument, shared by all process types that don't have
+ // one specified explicitly. It is likely that the prefetcher will never
gab 2016/01/18 19:10:51 s/process types that don't have one specified expl
+ // prefetch anything for these process types, as it won't be able to observe
gab 2016/01/18 19:10:51 no ","
+ // consistent file reads across launches.
gab 2016/01/18 19:10:52 s/./, but at least by using a custom profile they
+ prefetch_argument = 8;
+ }
+
gab 2016/01/18 19:10:52 DCHECK_GE(prefetch_id, 0); DCHECK_LE(prefetch_id,
+ command_line->AppendArg(
gab 2016/01/18 19:10:52 if (prefetch_id != 0)
+ base::StringPrintf("/prefetch:%d", prefetch_argument));
+}
gab 2016/01/18 19:10:51 At the end (and also mention this as a requirement
+
+} // namespace chrome

Powered by Google App Engine
This is Rietveld 408576698