Home | History | Annotate | Download | only in android
      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 
     18 namespace content {
     19 
     20 void SetContentCommandLineFlags(int max_render_process_count,
     21                                 const std::string& plugin_descriptor) {
     22   // May be called multiple times, to cover all possible program entry points.
     23   static bool already_initialized = false;
     24   if (already_initialized)
     25     return;
     26   already_initialized = true;
     27 
     28   CommandLine* parsed_command_line = CommandLine::ForCurrentProcess();
     29 
     30   if (parsed_command_line->HasSwitch(switches::kRendererProcessLimit)) {
     31     std::string limit = parsed_command_line->GetSwitchValueASCII(
     32         switches::kRendererProcessLimit);
     33     int value;
     34     if (base::StringToInt(limit, &value))
     35       max_render_process_count = value;
     36   }
     37 
     38   if (max_render_process_count <= 0) {
     39     // Need to ensure the command line flag is consistent as a lot of chrome
     40     // internal code checks this directly, but it wouldn't normally get set when
     41     // we are implementing an embedded WebView.
     42     parsed_command_line->AppendSwitch(switches::kSingleProcess);
     43   } else {
     44     max_render_process_count =
     45         std::min(max_render_process_count,
     46                  static_cast<int>(content::kMaxRendererProcessCount));
     47     content::RenderProcessHost::SetMaxRendererProcessCount(
     48         max_render_process_count);
     49   }
     50 
     51   parsed_command_line->AppendSwitch(switches::kForceCompositingMode);
     52   parsed_command_line->AppendSwitch(switches::kAllowWebUICompositing);
     53   parsed_command_line->AppendSwitch(switches::kEnableThreadedCompositing);
     54   parsed_command_line->AppendSwitch(
     55       switches::kEnableCompositingForFixedPosition);
     56   parsed_command_line->AppendSwitch(switches::kEnableAcceleratedOverflowScroll);
     57   parsed_command_line->AppendSwitch(
     58       switches::kEnableAcceleratedScrollableFrames);
     59   parsed_command_line->AppendSwitch(
     60       switches::kEnableCompositedScrollingForFrames);
     61   parsed_command_line->AppendSwitch(switches::kEnableBeginFrameScheduling);
     62   parsed_command_line->AppendSwitch(switches::kEnableDeadlineScheduling);
     63 
     64   parsed_command_line->AppendSwitch(switches::kDisableGestureDebounce);
     65   parsed_command_line->AppendSwitch(switches::kEnableGestureTapHighlight);
     66   parsed_command_line->AppendSwitch(switches::kEnablePinch);
     67   parsed_command_line->AppendSwitch(switches::kEnableOverlayFullscreenVideo);
     68   parsed_command_line->AppendSwitch(switches::kEnableOverlayScrollbars);
     69   parsed_command_line->AppendSwitch(switches::kEnableOverscrollNotifications);
     70   parsed_command_line->AppendSwitchASCII(switches::kTouchAckTimeoutDelayMs,
     71                                          "200");
     72 
     73   // Run the GPU service as a thread in the browser instead of as a
     74   // standalone process.
     75   parsed_command_line->AppendSwitch(switches::kInProcessGPU);
     76   parsed_command_line->AppendSwitch(switches::kDisableGpuShaderDiskCache);
     77 
     78   parsed_command_line->AppendSwitch(switches::kEnableViewport);
     79   parsed_command_line->AppendSwitch(switches::kEnableViewportMeta);
     80   parsed_command_line->AppendSwitch(
     81       switches::kMainFrameResizesAreOrientationChanges);
     82 
     83   // Disable anti-aliasing.
     84   parsed_command_line->AppendSwitch(
     85       cc::switches::kDisableCompositedAntialiasing);
     86 
     87   parsed_command_line->AppendSwitch(switches::kUIPrioritizeInGpuProcess);
     88 
     89   if (!plugin_descriptor.empty()) {
     90     parsed_command_line->AppendSwitchNative(
     91       switches::kRegisterPepperPlugins, plugin_descriptor);
     92   }
     93 
     94   // Disable profiler timing by default.
     95   if (!parsed_command_line->HasSwitch(switches::kProfilerTiming)) {
     96     parsed_command_line->AppendSwitchASCII(
     97         switches::kProfilerTiming, switches::kProfilerTimingDisabledValue);
     98   }
     99 }
    100 
    101 }  // namespace content
    102