Home | History | Annotate | Download | only in base
      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 "cc/base/switches.h"
      6 
      7 #include "base/command_line.h"
      8 
      9 namespace cc {
     10 namespace switches {
     11 
     12 // On platforms where checkerboards are used, prefer background colors instead
     13 // of checkerboards.
     14 const char kBackgroundColorInsteadOfCheckerboard[] =
     15     "background-color-instead-of-checkerboard";
     16 
     17 // Disables LCD text.
     18 const char kDisableLCDText[] = "disable-lcd-text";
     19 
     20 const char kDisableThreadedAnimation[] = "disable-threaded-animation";
     21 
     22 // Disables layer-edge anti-aliasing in the compositor.
     23 const char kDisableCompositedAntialiasing[] =
     24     "disable-composited-antialiasing";
     25 
     26 // Paint content on the main thread instead of the compositor thread.
     27 // Overrides the kEnableImplSidePainting flag.
     28 const char kDisableImplSidePainting[] = "disable-impl-side-painting";
     29 
     30 // Enables LCD text.
     31 const char kEnableLCDText[] = "enable-lcd-text";
     32 
     33 // Paint content on the compositor thread instead of the main thread.
     34 const char kEnableImplSidePainting[] = "enable-impl-side-painting";
     35 
     36 const char kEnableTopControlsPositionCalculation[] =
     37     "enable-top-controls-position-calculation";
     38 
     39 // Allow heuristics to determine when a layer tile should be drawn with
     40 // the Skia GPU backend.  Only valid with GPU accelerated compositing +
     41 // impl-side painting.
     42 const char kEnableGPURasterization[] = "enable-gpu-rasterization";
     43 
     44 // The height of the movable top controls.
     45 const char kTopControlsHeight[] = "top-controls-height";
     46 
     47 // Percentage of the top controls need to be hidden before they will auto hide.
     48 const char kTopControlsHideThreshold[] = "top-controls-hide-threshold";
     49 
     50 // Percentage of the top controls need to be shown before they will auto show.
     51 const char kTopControlsShowThreshold[] = "top-controls-show-threshold";
     52 
     53 // Number of worker threads used to rasterize content.
     54 const char kNumRasterThreads[] = "num-raster-threads";
     55 
     56 // Show metrics about overdraw in about:tracing recordings, such as the number
     57 // of pixels culled, and the number of pixels drawn, for each frame.
     58 const char kTraceOverdraw[] = "trace-overdraw";
     59 
     60 // Re-rasters everything multiple times to simulate a much slower machine.
     61 // Give a scale factor to cause raster to take that many times longer to
     62 // complete, such as --slow-down-raster-scale-factor=25.
     63 const char kSlowDownRasterScaleFactor[] = "slow-down-raster-scale-factor";
     64 
     65 // Max tiles allowed for each tilings interest area.
     66 const char kMaxTilesForInterestArea[] = "max-tiles-for-interest-area";
     67 
     68 // The amount of unused resource memory compositor is allowed to keep around.
     69 const char kMaxUnusedResourceMemoryUsagePercentage[] =
     70     "max-unused-resource-memory-usage-percentage";
     71 
     72 // Causes the compositor to render to textures which are then sent to the parent
     73 // through the texture mailbox mechanism.
     74 // Requires --enable-compositor-frame-message.
     75 const char kCompositeToMailbox[] = "composite-to-mailbox";
     76 
     77 // Check that property changes during paint do not occur.
     78 const char kStrictLayerPropertyChangeChecking[] =
     79     "strict-layer-property-change-checking";
     80 
     81 // Virtual viewport for fixed-position elements, scrollbars during pinch.
     82 const char kEnablePinchVirtualViewport[] = "enable-pinch-virtual-viewport";
     83 
     84 const char kEnablePartialSwap[] = "enable-partial-swap";
     85 // Disable partial swap which is needed for some OpenGL drivers / emulators.
     86 const char kUIDisablePartialSwap[] = "ui-disable-partial-swap";
     87 
     88 const char kEnablePerTilePainting[] = "enable-per-tile-painting";
     89 const char kUIEnablePerTilePainting[] = "ui-enable-per-tile-painting";
     90 
     91 // Renders a border around compositor layers to help debug and study
     92 // layer compositing.
     93 const char kShowCompositedLayerBorders[] = "show-composited-layer-borders";
     94 const char kUIShowCompositedLayerBorders[] = "ui-show-layer-borders";
     95 
     96 // Draws a FPS indicator
     97 const char kShowFPSCounter[] = "show-fps-counter";
     98 const char kUIShowFPSCounter[] = "ui-show-fps-counter";
     99 
    100 // Renders a border that represents the bounding box for the layer's animation.
    101 const char kShowLayerAnimationBounds[] = "show-layer-animation-bounds";
    102 const char kUIShowLayerAnimationBounds[] = "ui-show-layer-animation-bounds";
    103 
    104 // Show rects in the HUD around layers whose properties have changed.
    105 const char kShowPropertyChangedRects[] = "show-property-changed-rects";
    106 const char kUIShowPropertyChangedRects[] = "ui-show-property-changed-rects";
    107 
    108 // Show rects in the HUD around damage as it is recorded into each render
    109 // surface.
    110 const char kShowSurfaceDamageRects[] = "show-surface-damage-rects";
    111 const char kUIShowSurfaceDamageRects[] = "ui-show-surface-damage-rects";
    112 
    113 // Show rects in the HUD around the screen-space transformed bounds of every
    114 // layer.
    115 const char kShowScreenSpaceRects[] = "show-screenspace-rects";
    116 const char kUIShowScreenSpaceRects[] = "ui-show-screenspace-rects";
    117 
    118 // Show rects in the HUD around the screen-space transformed bounds of every
    119 // layer's replica, when they have one.
    120 const char kShowReplicaScreenSpaceRects[] = "show-replica-screenspace-rects";
    121 const char kUIShowReplicaScreenSpaceRects[] =
    122     "ui-show-replica-screenspace-rects";
    123 
    124 // Show rects in the HUD wherever something is known to be drawn opaque and is
    125 // considered occluding the pixels behind it.
    126 const char kShowOccludingRects[] = "show-occluding-rects";
    127 const char kUIShowOccludingRects[] = "ui-show-occluding-rects";
    128 
    129 // Show rects in the HUD wherever something is not known to be drawn opaque and
    130 // is not considered to be occluding the pixels behind it.
    131 const char kShowNonOccludingRects[] = "show-nonoccluding-rects";
    132 const char kUIShowNonOccludingRects[] = "ui-show-nonoccluding-rects";
    133 
    134 // Enable rasterizer that writes directly to GPU memory.
    135 const char kEnableMapImage[] = "enable-map-image";
    136 
    137 // Disable rasterizer that writes directly to GPU memory.
    138 // Overrides the kEnableMapImage flag.
    139 const char kDisableMapImage[] = "disable-map-image";
    140 
    141 // Prevents the layer tree unit tests from timing out.
    142 const char kCCLayerTreeTestNoTimeout[] = "cc-layer-tree-test-no-timeout";
    143 
    144 // Makes pixel tests write their output instead of read it.
    145 const char kCCRebaselinePixeltests[] = "cc-rebaseline-pixeltests";
    146 
    147 // Disable textures using RGBA_4444 layout.
    148 const char kDisable4444Textures[] = "disable-4444-textures";
    149 
    150 // Disable touch hit testing in the compositor.
    151 const char kDisableCompositorTouchHitTesting[] =
    152     "disable-compositor-touch-hit-testing";
    153 
    154 bool IsLCDTextEnabled() {
    155   const CommandLine* command_line = CommandLine::ForCurrentProcess();
    156   if (command_line->HasSwitch(switches::kDisableLCDText))
    157     return false;
    158   else if (command_line->HasSwitch(switches::kEnableLCDText))
    159     return true;
    160 
    161 #if defined(OS_ANDROID)
    162   return false;
    163 #else
    164   return true;
    165 #endif
    166 }
    167 
    168 namespace {
    169 bool CheckImplSidePaintingStatus() {
    170   const CommandLine& command_line = *CommandLine::ForCurrentProcess();
    171 
    172   if (command_line.HasSwitch(switches::kDisableImplSidePainting))
    173     return false;
    174   else if (command_line.HasSwitch(switches::kEnableImplSidePainting))
    175     return true;
    176 
    177 #if defined(OS_ANDROID)
    178   return true;
    179 #else
    180   return false;
    181 #endif
    182 }
    183 
    184 bool CheckGPURasterizationStatus() {
    185   const CommandLine& command_line = *CommandLine::ForCurrentProcess();
    186   return command_line.HasSwitch(switches::kEnableGPURasterization);
    187 }
    188 
    189 }  // namespace
    190 
    191 bool IsImplSidePaintingEnabled() {
    192   static bool enabled = CheckImplSidePaintingStatus();
    193   return enabled;
    194 }
    195 
    196 bool IsGPURasterizationEnabled() {
    197   static bool enabled = CheckGPURasterizationStatus();
    198   return enabled;
    199 }
    200 
    201 bool IsMapImageEnabled() {
    202   const CommandLine& command_line = *CommandLine::ForCurrentProcess();
    203 
    204   if (command_line.HasSwitch(switches::kDisableMapImage))
    205     return false;
    206   else if (command_line.HasSwitch(switches::kEnableMapImage))
    207     return true;
    208 
    209   return false;
    210 }
    211 
    212 }  // namespace switches
    213 }  // namespace cc
    214