Browse Source

Merge pull request #11726 from electron/faster-compare-blacklist

Make use of sorted list to speed up searching
shelley vohr 7 years ago
parent
commit
f24eab74d8
1 changed files with 116 additions and 93 deletions
  1. 116 93
      atom/app/command_line_args.cc

+ 116 - 93
atom/app/command_line_args.cc

@@ -2,10 +2,11 @@
 // Use of this source code is governed by the MIT license that can be
 // found in the LICENSE file.
 
-#include <string>
-
 #include "atom/app/command_line_args.h"
 
+#include <algorithm>
+#include <string>
+
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "content/public/common/content_switches.h"
@@ -37,18 +38,36 @@ bool IsUrlArg(const base::CommandLine::CharType* arg) {
   return false;
 }
 
-const char* blacklist[] = {
-  // node
-  "inspect",
-  "inspect-brk",
-
-  // chromium switches:
-  // find ./ -name "*switches.cc" \
-  //   | xargs grep -P --no-filename "\"\S+\";" \
-  //   | perl -pe 's|^.*?"(\S+)";|  "$1",|' \
-  //   | sort | uniq
-  "?",
+// The blacklist of command line switches, must be sorted.
+// Created with:
+//     find ./ -name "*switches.cc" \
+//       | xargs grep -P --no-filename "\"\S+\";" \
+//       | perl -pe 's|^.*?"(\S+)";|  "$1",|' \
+//       | sort | uniq
+// then manually insert following switches into the list:
+//     "inspect",
+//     "inspect-brk",
+// finally write a small piece of code to print out the sorted list since
+// the "sort" tool may use differnt rules from C++ STL.
+//     std::vector<std::string> sorted(std::begin(kBlacklist),
+//                                     std::end(kBlacklist));
+//     std::sort(sorted.begin(), sorted.end());
+//     FILE* f = fopen("testlist2", "w+");
+//     for (auto& i : sorted)
+//       fprintf(f, "\"%s\",\n", i.c_str());
+//     fclose(f);
+const char* kBlacklist[] = {
+  "/prefetch:1",
+  "/prefetch:2",
+  "/prefetch:3",
+  "/prefetch:4",
+  "/prefetch:5",
+  "/prefetch:6",
+  "/prefetch:8",
   "0",
+  "?",
+  "ChromeOSMemoryPressureHandling",
+  "SafeSites",
   "accept-resource-provider",
   "account-consistency",
   "adaboost",
@@ -58,6 +77,7 @@ const char* blacklist[] = {
   "aggressive-cache-discard",
   "aggressive-tab-discard",
   "all",
+  "all-toolchains",
   "allarticles",
   "allow-cross-origin-auth-prompt",
   "allow-external-pages",
@@ -78,7 +98,6 @@ const char* blacklist[] = {
   "allow-running-insecure-content",
   "allow-sandbox-debugging",
   "allow-silent-push",
-  "all-toolchains",
   "alsa-check-close-timeout",
   "alsa-enable-upsampling",
   "alsa-fixed-output-sample-rate",
@@ -96,8 +115,8 @@ const char* blacklist[] = {
   "alternative",
   "always-authorize-plugins",
   "always-on",
-  "alwaystrue",
   "always-use-complex-text",
+  "alwaystrue",
   "amd-switchable",
   "android-fonts-path",
   "android-stderr-port",
@@ -107,18 +126,18 @@ const char* blacklist[] = {
   "app",
   "app-auto-launched",
   "app-id",
-  "apple",
   "app-mode-auth-code",
   "app-mode-oauth-token",
   "app-mode-oem-manifest",
-  "apps-gallery-download-url",
-  "apps-gallery-update-url",
-  "apps-gallery-url",
   "app-shell-allow-roaming",
   "app-shell-host-window-size",
   "app-shell-preferred-network",
   "app-shell-refresh-token",
   "app-shell-user",
+  "apple",
+  "apps-gallery-download-url",
+  "apps-gallery-update-url",
+  "apps-gallery-url",
   "apps-keep-chrome-alive-in-tests",
   "arc-availability",
   "arc-available",
@@ -155,8 +174,8 @@ const char* blacklist[] = {
   "auth-spnego-account-type",
   "auto",
   "auto-open-devtools-for-tabs",
-  "autoplay-policy",
   "auto-select-desktop-capture-source",
+  "autoplay-policy",
   "blink-settings",
   "bootstrap",
   "browser",
@@ -178,7 +197,6 @@ const char* blacklist[] = {
   "child-wallpaper-large",
   "child-wallpaper-small",
   "chrome-home-swipe-logic",
-  "ChromeOSMemoryPressureHandling",
   "cipher-suite-blacklist",
   "clamshell",
   "class",
@@ -202,21 +220,21 @@ const char* blacklist[] = {
   "crash-dumps-dir",
   "crash-on-failure",
   "crash-on-hang-threads",
-  "crashpad-handler",
   "crash-server-url",
   "crash-test",
+  "crashpad-handler",
   "create-browser-on-startup-for-tests",
   "cros-gaia-api-v1",
-  "crosh-command",
   "cros-region",
   "cros-regions-mode",
+  "crosh-command",
   "cryptauth-http-host",
   "custom-devtools-frontend",
   "custom-launcher-page",
   "custom_summary",
+  "d3d-support",
   "d3d11",
   "d3d9",
-  "d3d-support",
   "daemon",
   "dark_muted",
   "dark_vibrant",
@@ -262,17 +280,17 @@ const char* blacklist[] = {
   "disable-accelerated-jpeg-decoding",
   "disable-accelerated-mjpeg-decode",
   "disable-accelerated-video-decode",
-  "disable-appcontainer",
   "disable-app-info-dialog-mac",
   "disable-app-list-dismiss-on-blur",
   "disable-app-window-cycling",
+  "disable-appcontainer",
   "disable-arc-data-wipe",
   "disable-arc-opt-in-verification",
   "disable-audio-support-for-desktop-share",
   "disable-avfoundation-overlays",
-  "disable-backgrounding-occluded-windows",
   "disable-background-networking",
   "disable-background-timer-throttling",
+  "disable-backgrounding-occluded-windows",
   "disable-backing-store-limit",
   "disable-blink-features",
   "disable-boot-animation",
@@ -291,7 +309,6 @@ const char* blacklist[] = {
   "disable-component-update",
   "disable-composited-antialiasing",
   "disable-contextual-search",
-  "disabled",
   "disable-d3d11",
   "disable-databases",
   "disable-datasaver-prompt",
@@ -305,7 +322,6 @@ const char* blacklist[] = {
   "disable-directwrite-for-ui",
   "disable-display-list-2d-canvas",
   "disable-distance-field-text",
-  "disabled-new-style-notification",
   "disable-domain-blocking-for-3d-apis",
   "disable-domain-reliability",
   "disable-drive-search-in-app-launcher",
@@ -352,8 +368,8 @@ const char* blacklist[] = {
   "disable-histogram-customizer",
   "disable-hosted-app-shim-creation",
   "disable-hosted-apps-in-windows",
-  "disable-infobars",
   "disable-in-process-stack-traces",
+  "disable-infobars",
   "disable-input-ime-api",
   "disable-input-view",
   "disable-ios-password-suggestions",
@@ -370,9 +386,9 @@ const char* blacklist[] = {
   "disable-low-end-device-mode",
   "disable-low-latency-dxva",
   "disable-low-res-tiling",
-  "disable-machine-cert-request",
   "disable-mac-overlays",
   "disable-mac-views-native-app-windows",
+  "disable-machine-cert-request",
   "disable-main-frame-before-activation",
   "disable-md-error-screen",
   "disable-md-oobe",
@@ -405,9 +421,9 @@ const char* blacklist[] = {
   "disable-password-generation",
   "disable-pepper-3d",
   "disable-pepper-3d-image-chromium",
+  "disable-per-user-timezone",
   "disable-permission-action-reporting",
   "disable-permissions-api",
-  "disable-per-user-timezone",
   "disable-physical-keyboard-autocorrect",
   "disable-pinch",
   "disable-pnacl-crash-throttling",
@@ -439,8 +455,8 @@ const char* blacklist[] = {
   "disable-signin-scoped-device-id",
   "disable-single-click-autofill",
   "disable-skia-runtime-opts",
-  "disable-slimming-paint-invalidation",
   "disable-slim-navigation-manager",
+  "disable-slimming-paint-invalidation",
   "disable-smooth-scrolling",
   "disable-software-rasterizer",
   "disable-speech-api",
@@ -466,18 +482,20 @@ const char* blacklist[] = {
   "disable-voice-input",
   "disable-volume-adjust-sound",
   "disable-wake-on-wifi",
+  "disable-web-notification-custom-layouts",
+  "disable-web-security",
   "disable-webgl",
   "disable-webgl-image-chromium",
-  "disable-web-notification-custom-layouts",
   "disable-webrtc-encryption",
   "disable-webrtc-hw-decoding",
   "disable-webrtc-hw-encoding",
-  "disable-web-security",
   "disable-win32k-lockdown",
   "disable-xss-auditor",
   "disable-zero-browsers-open-for-tests",
   "disable-zero-copy",
   "disable-zero-copy-dxgi-video",
+  "disabled",
+  "disabled-new-style-notification",
   "disallow-non-exact-resource-reuse",
   "disk-cache-dir",
   "disk-cache-size",
@@ -508,10 +526,10 @@ const char* blacklist[] = {
   "enable-adaptive-selection-handle-orientation",
   "enable-aggressive-domstorage-flushing",
   "enable-android-wallpapers-app",
-  "enable-appcontainer",
   "enable-app-info-dialog-mac",
   "enable-app-list",
   "enable-app-window-cycling",
+  "enable-appcontainer",
   "enable-arc",
   "enable-arc-oobe-optin",
   "enable-async-event-targeting",
@@ -536,9 +554,6 @@ const char* blacklist[] = {
   "enable-crash-reporter",
   "enable-crash-reporter-for-testing",
   "enable-crx-hash-check",
-  "enabled",
-  "enabled-2g",
-  "enabled-3g",
   "enable-data-reduction-proxy-bypass-warning",
   "enable-data-reduction-proxy-force-pingback",
   "enable-data-reduction-proxy-lite-page",
@@ -550,12 +565,10 @@ const char* blacklist[] = {
   "enable-display-list-2d-canvas",
   "enable-distance-field-text",
   "enable-distillability-service",
-  "enabled-new-style-notification",
-  "enable-domain-reliability",
   "enable-dom-distiller",
+  "enable-domain-reliability",
   "enable-drive-search-in-app-launcher",
   "enable-drm-atomic",
-  "enabled-slow2g",
   "enable-embedded-extension-options",
   "enable-encryption-migration",
   "enable-encryption-selection",
@@ -567,8 +580,8 @@ const char* blacklist[] = {
   "enable-experimental-fullscreen-exit-ui",
   "enable-experimental-input-view-features",
   "enable-experimental-web-platform-features",
-  "enable-extension-activity-logging",
   "enable-extension-activity-log-testing",
+  "enable-extension-activity-logging",
   "enable-extension-assets-sharing",
   "enable-external-drive-rename",
   "enable-fast-unload",
@@ -672,9 +685,9 @@ const char* blacklist[] = {
   "enable-single-click-autofill",
   "enable-site-settings",
   "enable-skia-benchmarking",
+  "enable-slim-navigation-manager",
   "enable-slimming-paint-invalidation",
   "enable-slimming-paint-v2",
-  "enable-slim-navigation-manager",
   "enable-smooth-scrolling",
   "enable-spatial-navigation",
   "enable-spdy-proxy-auth",
@@ -708,9 +721,9 @@ const char* blacklist[] = {
   "enable-tracing-output",
   "enable-translate-new-ux",
   "enable-ui-devtools",
-  "enable-usermedia-screen-capturing",
-  "enable-user-metrics",
   "enable-use-zoom-for-dsf",
+  "enable-user-metrics",
+  "enable-usermedia-screen-capturing",
   "enable-video-player-chromecast-support",
   "enable-viewport",
   "enable-virtual-keyboard",
@@ -718,11 +731,11 @@ const char* blacklist[] = {
   "enable-vtune-support",
   "enable-vulkan",
   "enable-wayland-server",
+  "enable-web-notification-custom-layouts",
   "enable-webfonts-intervention-trigger",
   "enable-webfonts-intervention-v2",
   "enable-webgl-draft-extensions",
   "enable-webgl-image-chromium",
-  "enable-web-notification-custom-layouts",
   "enable-webrtc-event-logging-from-extension",
   "enable-webrtc-srtp-aes-gcm",
   "enable-webrtc-srtp-encrypted-headers",
@@ -733,11 +746,16 @@ const char* blacklist[] = {
   "enable-win7-webrtc-hw-h264-decoding",
   "enable-zero-copy",
   "enable-zip-archiver-on-file-manager",
+  "enabled",
+  "enabled-2g",
+  "enabled-3g",
+  "enabled-new-style-notification",
+  "enabled-slow2g",
   "encode-binary",
   "enforce",
   "enforce-gl-minimums",
-  "enforce_strict",
   "enforce-webrtc-ip-permission-check",
+  "enforce_strict",
   "enterprise-disable-arc",
   "enterprise-enable-forced-re-enrollment",
   "enterprise-enable-license-type-selection",
@@ -745,8 +763,8 @@ const char* blacklist[] = {
   "enterprise-enrollment-initial-modulus",
   "enterprise-enrollment-modulus-limit",
   "error-console",
-  "evaluate_capability",
   "evaluate-type",
+  "evaluate_capability",
   "experiment",
   "explicitly-allowed-ports",
   "expose-internals-for-testing",
@@ -774,8 +792,8 @@ const char* blacklist[] = {
   "force-clamshell-power-button",
   "force-color-profile",
   "force-desktop-ios-promotion",
-  "force-device-scale-factor",
   "force-dev-mode-highlighting",
+  "force-device-scale-factor",
   "force-display-list-2d-canvas",
   "force-effective-connection-type",
   "force-enable-metrics-reporting",
@@ -814,8 +832,8 @@ const char* blacklist[] = {
   "generate-accessibility-test-expectations",
   "gl",
   "gl-composited-overlay-candidate-quad-border",
-  "gles",
   "gl-shader-interm-output",
+  "gles",
   "golden-screenshots-dir",
   "google-apis-url",
   "google-base-url",
@@ -875,9 +893,11 @@ const char* blacklist[] = {
   "ignore-gpu-blacklist",
   "ignore-urlfetcher-cert-requests",
   "ignore-user-profile-mapping-for-tests",
-  "incognito",
   "in-process-gpu",
+  "incognito",
   "input",
+  "inspect",
+  "inspect-brk",
   "install-chrome-app",
   "install-supervised-user-whitelists",
   "instant-process",
@@ -885,9 +905,9 @@ const char* blacklist[] = {
   "ipc-connection-timeout",
   "ipc-dump-directory",
   "ipc-fuzzer-testcase",
+  "is-running-in-mash",
   "isolate-origins",
   "isolate-sites-for-testing",
-  "is-running-in-mash",
   "javascript-harmony",
   "js-flags",
   "keep-alive-for-test",
@@ -907,11 +927,11 @@ const char* blacklist[] = {
   "local-ntp-reload",
   "local-sync-backend-dir",
   "log-gpu-control-list-decisions",
+  "log-level",
+  "log-net-log",
   "login-manager",
   "login-profile",
   "login-user",
-  "log-level",
-  "log-net-log",
   "loopback-i2s-bits",
   "loopback-i2s-bus-name",
   "loopback-i2s-channels",
@@ -923,9 +943,9 @@ const char* blacklist[] = {
   "make-default-browser",
   "managed-user-id",
   "managed-user-sync-token",
+  "mark-non-secure-as",
   "markdown",
   "market-url-for-testing",
-  "mark-non-secure-as",
   "mash",
   "material",
   "material-design-ink-drop-animation-speed",
@@ -935,11 +955,11 @@ const char* blacklist[] = {
   "max-untiled-layer-height",
   "max-untiled-layer-width",
   "media-cache-size",
+  "mem-pressure-system-reserved-kb",
   "memlog",
   "memory-pressure-off",
   "memory-pressure-thresholds",
   "memory-pressure-thresholds-mb",
-  "mem-pressure-system-reserved-kb",
   "message-center-changes-while-open",
   "method",
   "metrics-client-id",
@@ -965,37 +985,37 @@ const char* blacklist[] = {
   "native",
   "native-crx-bindings",
   "need-arc-migration-policy-check",
-  "netifs-to-ignore",
   "net-log-capture-mode",
+  "netifs-to-ignore",
   "network-country-iso",
   "network-settings-config",
   "new-window",
-  "nocolor",
   "no-default-browser-check",
-  "noerrdialogs",
   "no-experiments",
   "no-first-run",
   "no-managed-user-acknowledgment-check",
-  "none",
   "no-network-profile-warning",
-  "non-material",
-  "non-secure",
-  "non-secure-after-editing",
-  "non-secure-while-incognito",
-  "non-secure-while-incognito-or-editing",
   "no-pings",
   "no-proxy-server",
   "no-referrers",
-  "normal_muted",
-  "normal_vibrant",
   "no-sandbox",
   "no-service-autorun",
   "no-session-id",
   "no-startup-window",
-  "note-taking-app-ids",
   "no-user-gesture-required",
   "no-wifi",
   "no-zygote",
+  "nocolor",
+  "noerrdialogs",
+  "non-material",
+  "non-secure",
+  "non-secure-after-editing",
+  "non-secure-while-incognito",
+  "non-secure-while-incognito-or-editing",
+  "none",
+  "normal_muted",
+  "normal_vibrant",
+  "note-taking-app-ids",
   "ntp-snippets-add-incomplete",
   "null",
   "num-raster-threads",
@@ -1010,10 +1030,10 @@ const char* blacklist[] = {
   "oobe-timer-interval",
   "open-ash",
   "opengraph",
-  "original-process-start-time",
   "origin-trial-disabled-features",
   "origin-trial-disabled-tokens",
   "origin-trial-public-key",
+  "original-process-start-time",
   "osmesa",
   "output",
   "override",
@@ -1042,13 +1062,6 @@ const char* blacklist[] = {
   "ppapi-plugin-launcher",
   "ppapi-startup-dialog",
   "ppapi-subpixel-rendering-setting",
-  "/prefetch:1",
-  "/prefetch:2",
-  "/prefetch:3",
-  "/prefetch:4",
-  "/prefetch:5",
-  "/prefetch:6",
-  "/prefetch:8",
   "previous-app",
   "primary",
   "print-to-pdf",
@@ -1075,8 +1088,8 @@ const char* blacklist[] = {
   "reader-mode-heuristics",
   "rebaseline-pixel-tests",
   "record-type",
-  "reduced-referrer-granularity",
   "reduce-security-for-testing",
+  "reduced-referrer-granularity",
   "register-font-files",
   "register-pepper-plugins",
   "relauncher",
@@ -1108,7 +1121,6 @@ const char* blacklist[] = {
   "safebrowsing-disable-download-protection",
   "safebrowsing-disable-extension-blacklist",
   "safebrowsing-manual-download-blacklist",
-  "SafeSites",
   "sandbox-ipc",
   "save-page-as-mhtml",
   "screen-config",
@@ -1178,10 +1190,10 @@ const char* blacklist[] = {
   "ssl-version-max",
   "ssl-version-min",
   "stable-release-mode",
-  "started",
   "start-fullscreen",
   "start-maximized",
   "start-stack-profiler",
+  "started",
   "stub",
   "stub-cros-settings",
   "surface",
@@ -1209,8 +1221,6 @@ const char* blacklist[] = {
   "test-do-not-initialize-icu",
   "test-encryption-migration-ui",
   "test-gl-lib",
-  "testing-fixed-http-port",
-  "testing-fixed-https-port",
   "test-launcher-batch-limit",
   "test-launcher-bot-mode",
   "test-launcher-debug-launcher",
@@ -1231,6 +1241,8 @@ const char* blacklist[] = {
   "test-name",
   "test-tiny-timeout",
   "test-type",
+  "testing-fixed-http-port",
+  "testing-fixed-https-port",
   "tether-stub",
   "third-party-doodle-url",
   "threads",
@@ -1252,7 +1264,6 @@ const char* blacklist[] = {
   "touch_view",
   "trace-config-file",
   "trace-export-events-to-etw",
-  "tracelog",
   "trace-shutdown",
   "trace-shutdown-file",
   "trace-startup",
@@ -1262,6 +1273,7 @@ const char* blacklist[] = {
   "trace-to-file",
   "trace-to-file-name",
   "trace-upload-url",
+  "tracelog",
   "translate-ranker-model-url",
   "translate-script-url",
   "translate-security-origin",
@@ -1287,9 +1299,9 @@ const char* blacklist[] = {
   "ui-test-action-timeout",
   "uninstall",
   "unlimited-storage",
+  "unsafe-pac-url",
   "unsafely-allow-protected-media-identifier-for-domain",
   "unsafely-treat-insecure-origin-as-secure",
-  "unsafe-pac-url",
   "use-angle",
   "use-cras",
   "use-fake-device-for-media-stream",
@@ -1304,15 +1316,15 @@ const char* blacklist[] = {
   "use-mobile-user-agent",
   "use-mock-keychain",
   "use-passthrough-cmd-decoder",
+  "use-skia-renderer",
+  "use-system-default-printer",
+  "use-test-config",
+  "use-viz-hit-test",
   "user-agent",
   "user-always-affiliated",
   "user-data-dir",
   "user-gesture-required",
   "user-gesture-required-for-cross-origin",
-  "use-skia-renderer",
-  "use-system-default-printer",
-  "use-test-config",
-  "use-viz-hit-test",
   "utility",
   "utility-allowed-dir",
   "utility-cmd-prefix",
@@ -1346,16 +1358,16 @@ const char* blacklist[] = {
   "webview-enable-safebrowsing-support",
   "webview-sandboxed-renderer",
   "whitelisted-extension-id",
+  "win-jumplist-action",
   "window-position",
-  "windows10-custom-titlebar",
   "window-size",
   "window-workspace",
+  "windows10-custom-titlebar",
   "winhttp-proxy-resolver",
-  "win-jumplist-action",
   "wm-window-animations-disabled",
   "yield-between-content-script-runs",
   "zygote",
-  "zygote-cmd-prefix"
+  "zygote-cmd-prefix",
 };
 
 bool IsBlacklistedArg(const base::CommandLine::CharType* arg) {
@@ -1379,9 +1391,10 @@ bool IsBlacklistedArg(const base::CommandLine::CharType* arg) {
   if (prefix_length > 0) {
     a += prefix_length;
     std::string switch_name(a, strcspn(a, "="));
-    for (auto& item : blacklist) {
-      if (switch_name == item)
-        return true;
+    auto* iter = std::lower_bound(std::begin(kBlacklist), std::end(kBlacklist),
+                                  switch_name);
+    if (iter != std::end(kBlacklist) && switch_name == *iter) {
+      return true;
     }
   }
 
@@ -1393,6 +1406,16 @@ bool IsBlacklistedArg(const base::CommandLine::CharType* arg) {
 namespace atom {
 
 bool CheckCommandLineArguments(int argc, base::CommandLine::CharType** argv) {
+  DCHECK(std::is_sorted(std::begin(kBlacklist), std::end(kBlacklist),
+                        [](const char* a, const char* b) {
+                          return base::StringPiece(a) < base::StringPiece(b);
+                        }))
+      << "The kBlacklist must be in sorted order";
+  DCHECK_NE(std::find(std::begin(kBlacklist), std::end(kBlacklist),
+                      base::StringPiece("inspect")),
+            std::end(kBlacklist))
+      << "Do not forget to add Node command line flags to kBlacklist";
+
   const base::CommandLine::StringType dashdash(2, '-');
   bool block_blacklisted_args = false;
   for (int i = 0; i < argc; ++i) {