1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "content/browser/android/content_startup_flags.h" 6 7 #include "base/base_switches.h" 8 #include "base/command_line.h" 9 #include "base/logging.h" 10 #include "base/strings/string_number_conversions.h" 11 #include "cc/base/switches.h" 12 #include "content/public/browser/render_process_host.h" 13 #include "content/public/common/content_constants.h" 14 #include "content/public/common/content_switches.h" 15 #include "gpu/command_buffer/service/gpu_switches.h" 16 #include "ui/base/ui_base_switches.h" 17 #include "ui/native_theme/native_theme_switches.h" 18 19 namespace content { 20 21 void SetContentCommandLineFlags(bool single_process, 22 const std::string& plugin_descriptor) { 23 // May be called multiple times, to cover all possible program entry points. 24 static bool already_initialized = false; 25 if (already_initialized) 26 return; 27 already_initialized = true; 28 29 base::CommandLine* parsed_command_line = 30 base::CommandLine::ForCurrentProcess(); 31 32 int command_line_renderer_limit = -1; 33 if (parsed_command_line->HasSwitch(switches::kRendererProcessLimit)) { 34 std::string limit = parsed_command_line->GetSwitchValueASCII( 35 switches::kRendererProcessLimit); 36 int value; 37 if (base::StringToInt(limit, &value)) { 38 command_line_renderer_limit = std::max(0, value); 39 } 40 } 41 42 if (command_line_renderer_limit > 0) { 43 int limit = std::min(command_line_renderer_limit, 44 static_cast<int>(kMaxRendererProcessCount)); 45 RenderProcessHost::SetMaxRendererProcessCount(limit); 46 } 47 48 if (single_process || command_line_renderer_limit == 0) { 49 // Need to ensure the command line flag is consistent as a lot of chrome 50 // internal code checks this directly, but it wouldn't normally get set when 51 // we are implementing an embedded WebView. 52 parsed_command_line->AppendSwitch(switches::kSingleProcess); 53 } 54 55 parsed_command_line->AppendSwitch(switches::kEnableBeginFrameScheduling); 56 57 parsed_command_line->AppendSwitch(switches::kEnablePinch); 58 parsed_command_line->AppendSwitch(switches::kEnableOverlayFullscreenVideo); 59 parsed_command_line->AppendSwitch(switches::kEnableOverlayScrollbar); 60 parsed_command_line->AppendSwitch(switches::kEnableOverscrollNotifications); 61 parsed_command_line->AppendSwitch(switches::kValidateInputEventStream); 62 63 // Run the GPU service as a thread in the browser instead of as a 64 // standalone process. 65 parsed_command_line->AppendSwitch(switches::kInProcessGPU); 66 parsed_command_line->AppendSwitch(switches::kDisableGpuShaderDiskCache); 67 68 parsed_command_line->AppendSwitch(switches::kEnableViewport); 69 parsed_command_line->AppendSwitch(switches::kEnableViewportMeta); 70 parsed_command_line->AppendSwitch( 71 switches::kMainFrameResizesAreOrientationChanges); 72 73 // Disable anti-aliasing. 74 parsed_command_line->AppendSwitch( 75 cc::switches::kDisableCompositedAntialiasing); 76 77 parsed_command_line->AppendSwitch(switches::kUIPrioritizeInGpuProcess); 78 79 parsed_command_line->AppendSwitch(switches::kEnableDelegatedRenderer); 80 81 if (!plugin_descriptor.empty()) { 82 parsed_command_line->AppendSwitchNative( 83 switches::kRegisterPepperPlugins, plugin_descriptor); 84 } 85 86 // Disable profiler timing by default. 87 if (!parsed_command_line->HasSwitch(switches::kProfilerTiming)) { 88 parsed_command_line->AppendSwitchASCII( 89 switches::kProfilerTiming, switches::kProfilerTimingDisabledValue); 90 } 91 } 92 93 } // namespace content 94