# Copyright 2017 The Cobalt Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#####################################################################
# If you modify this file, PLEASE REMEMBER TO UPDATE
# //cobalt/build/config/base.gni AS WELL
#####################################################################

# This contains the defaults and documentation for all Cobalt-defined GYP
# variables. Starboard-defined variables are specified in
# starboard/build/base_configuration.gypi.
#
# starboard/build/cobalt_configuration includes this file automatically in all
# .gyp files processed by starboard/build/gyp_cobalt.
{
  'variables': {
    # Cobalt variables.

    # We need to define some variables inside of an inner 'variables' scope
    # so that they can be referenced by other outer variables here.  Also, it
    # allows for the specification of default values that get referenced by
    # a top level scope.
    'variables': {
      'cobalt_webapi_extension_source_idl_files%': [],
      'cobalt_webapi_extension_generated_header_idl_files%': [],
      'cobalt_v8_buildtime_snapshot%': 1,
      'cobalt_v8_enable_embedded_builtins%': 1,
    },

    # Whether Cobalt is being built.
    'cobalt': 1,

    # Contains the current build configuration.
    'cobalt_config%': 'gold',
    'cobalt_fastbuild%': 0,

    # Enable support for the map to mesh filter, which is primarily used to
    # implement spherical video playback.
    # This setting is deprecated in favor of the cobalt graphics extension
    # (CobaltGraphicsExtensionApi) function `IsMapToMeshEnabled()`.
    # If the CobaltGraphicsExtensionApi is not implemented, then Cobalt will
    # fall back onto a default. For starboard API versions 12 and later, the
    # default is true (i.e. Cobalt will assume map to mesh is supported).
    # For earlier starboard API versions, if this gyp variable is redefined to
    # a value other than -1, it will use the new value as the default. If it is
    # not redefined, the default is false.
    'enable_map_to_mesh%': -1,

    # Deprecated. Implement the CobaltExtensionConfigurationApi function
    # CobaltUserOnExitStrategy instead.
    # This variable defines what Cobalt's preferred strategy should be for
    # handling internally triggered application exit requests (e.g. the user
    # chooses to back out of the application).
    #   'stop'    -- The application should call SbSystemRequestStop() on exit,
    #                resulting in a complete shutdown of the application.
    #   'suspend' -- The application should call SbSystemRequestSuspend() on
    #                exit, resulting in the application being "minimized".
    #   'noexit'  -- The application should never allow the user to trigger an
    #                exit, this will be managed by the system.
    'cobalt_user_on_exit_strategy%': '',

    # Contains the current font package selection.  This can be used to trade
    # font quality, coverage, and latency for different font package sizes.
    # The font package can be one of the following options:
    #   'standard' -- The default package. It includes all sans-serif, serif,
    #                 and FCC fonts, non-CJK fallback fonts in both 'normal' and
    #                 'bold' weights, 'normal' weight CJK ('bold' weight CJK is
    #                 synthesized from it), historic script fonts, and color
    #                 emojis. This package is ~38.3MB.
    #   'limited'  -- A significantly smaller package than 'standard'. This
    #                 package removes all but 'normal' and 'bold' weighted
    #                 sans-serif and serif, removes the FCC fonts (which must be
    #                 provided by the system or downloaded from the web),
    #                 replaces standard CJK with low quality CJK, removes
    #                 historic script fonts, and replaces colored emojis with
    #                 uncolored ones. Because low quality CJK cannot synthesize
    #                 bold, bold glyphs are unavailable in Chinese, Japanese and
    #                 Korean. This package is ~8.3MB.
    #   'minimal'  -- The smallest possible font package. It only includes
    #                 Roboto's Basic Latin characters. Everything else must be
    #                 provided by the system or downloaded from the web. This
    #                 package is ~40.0KB.
    # NOTE: When bold is needed, but unavailable, it is typically synthesized,
    #       resulting in lower quality glyphs than those generated directly from
    #       a bold font. However, this does not occur with low quality CJK,
    #       which is not high enough quality to synthesize. Its glyphs always
    #       have a 'normal' weight.
    'cobalt_font_package%': 'standard',

    # Font package overrides can be used to modify the files included within the
    # selected package. The following values are available:
    #   -1 -- The package value for the specified category is not overridden.
    #    0 -- The package value is overridden and no fonts for the specified
    #         category are included.
    #    1 -- The package value is overridden and fonts from the specified
    #         category with a weight of 'normal' and a style of 'normal' are
    #         included.
    #    2 -- The package value is overridden and fonts from the specified
    #         category with a weight of either 'normal' or bold' and a style of
    #         'normal' are included.
    #    3 -- The package value is overridden and fonts from the specified
    #         category with a weight of either 'normal' or 'bold' and a style of
    #         either 'normal' or 'italic' are included.
    #    4 -- The package value is overridden and all available fonts from the
    #         specified category are included. This may include additional
    #         weights beyond 'normal' and 'bold'.
    # See content/fonts/README.md for details on the specific values used by
    # each of the packages use for the various font categories.
    'cobalt_font_package_override_named_sans_serif%': -1,
    'cobalt_font_package_override_named_serif%': -1,
    'cobalt_font_package_override_named_fcc_fonts%': -1,
    'cobalt_font_package_override_fallback_lang_non_cjk%': -1,
    'cobalt_font_package_override_fallback_lang_cjk%': -1,
    'cobalt_font_package_override_fallback_lang_cjk_low_quality%': -1,
    'cobalt_font_package_override_fallback_historic%': -1,
    'cobalt_font_package_override_fallback_color_emoji%': -1,
    'cobalt_font_package_override_fallback_emoji%': -1,
    'cobalt_font_package_override_fallback_symbols%': -1,

    # Build version number.
    'cobalt_version%': '<(BUILD_NUMBER)',

    # Deprecated. Implement the CobaltExtensionConfigurationApi function
    # CobaltRasterizerType instead.
    # Defines what kind of rasterizer will be used.  This can be adjusted to
    # force a stub graphics implementation.
    # It can be one of the following options:
    #   'direct-gles' -- Uses a light wrapper over OpenGL ES to handle most
    #                    draw elements. This will fall back to the skia hardware
    #                    rasterizer for some render tree node types, but is
    #                    generally faster on the CPU and GPU. This can handle
    #                    360 rendering.
    #   'hardware'    -- As much hardware acceleration of graphics commands as
    #                    possible. This uses skia to wrap OpenGL ES commands.
    #                    Required for 360 rendering.
    #   'stub'        -- Stub graphics rasterization.  A rasterizer object will
    #                    still be available and valid, but it will do nothing.
    'rasterizer_type%': '',

    # Deprecated. Implement the CobaltExtensionConfigurationApi function
    # CobaltRenderDirtyRegionOnly instead.
    # If set to 1, will enable support for rendering only the regions of the
    # display that are modified due to animations, instead of re-rendering the
    # entire scene each frame.  This feature can reduce startup time where
    # usually there is a small loading spinner animating on the screen.  On GLES
    # renderers, Cobalt will attempt to implement this support by using
    # eglSurfaceAttrib(..., EGL_SWAP_BEHAVIOR, EGL_BUFFER_PRESERVED), otherwise
    # the dirty region will be silently disabled.  On Blitter API platforms,
    # if this is enabled, we explicitly create an extra offscreen full-size
    # intermediate surface to render into.  Note that some GLES driver
    # implementations may internally allocate an extra full screen surface to
    # support this feature, and many have been noticed to not properly support
    # this functionality (but they report that they do), and for these reasons
    # this value is defaulted to 0.
    'render_dirty_region_only%': -1,

    # Override this value to adjust the default rasterizer setting for your
    # platform.
    'default_renderer_options_dependency%': '<(DEPTH)/cobalt/renderer/default_options_starboard.gyp:default_options',

    # NOTE: Web Extension support is deprecated. Please use Platform Services
    # (cobalt/doc/platform_services.md) instead.
    #
    # Override this to inject a custom interface into Cobalt's JavaScript
    # `window` global object.  This implies that you will have to provide your
    # own IDL files to describe that interface and all interfaces that it
    # references.  See cobalt/doc/webapi_extension.md for more information.
    'cobalt_webapi_extension_source_idl_files%': [
      '<@(cobalt_webapi_extension_source_idl_files)',
    ],
    # Override this to have Cobalt build IDL files that result in generated
    # header files that may need to be included from other C++ source files.
    # This includes, for example, IDL enumerations.  See
    # cobalt/doc/webapi_extension.md for more information.
    'cobalt_webapi_extension_generated_header_idl_files%': [
      '<@(cobalt_webapi_extension_generated_header_idl_files)',
    ],

    # This gyp target must implement the functions defined in
    # <(DEPTH)/cobalt/browser/idl_extensions.h.  See
    # cobalt/doc/webapi_extension.md for more information.
    'cobalt_webapi_extension_gyp_target%':
        '<(DEPTH)/cobalt/browser/null_webapi_extension.gyp:null_webapi_extension',

    # Allow throttling of the frame rate. This is expressed in terms of
    # milliseconds and can be a floating point number. Keep in mind that
    # swapping frames may take some additional processing time, so it may be
    # better to specify a lower delay. For example, '33' instead of '33.33'
    # for 30 Hz refresh. This value is deprecated in favor of the usage of
    # CobaltExtensionGraphicsApi::GetMinimumFrameIntervalInMilliseconds API.
    # The default value has been moved into cobalt/renderer/pipeline.cc.
    'cobalt_minimum_frame_time_in_milliseconds%': '-1',

    # Deprecated. Implement the CobaltExtensionConfigurationApi function
    # CobaltEglSwapInterval instead.
    # Cobalt will call eglSwapInterval() and specify this value before calling
    # eglSwapBuffers() each frame.
    'cobalt_egl_swap_interval%': -1,

    # Set to 1 to build with DIAL support.
    'in_app_dial%': 0,

    # Set to 1 to enable a custom MediaSessionClient.
    'custom_media_session_client%': 0,

    # Set to 1 to enable H5vccAccountManager.
    'enable_account_manager%': 0,

    # Set to 1 to enable H5vccCrashLog.
    'enable_crash_log%': 0,

    # Set to 1 to enable H5vccSSO (Single Sign On).
    'enable_sso%': 0,

    # Set to 1 to enable filtering of HTTP headers before sending.
    'enable_xhr_header_filtering%': 0,

    # Set to 1 to enable setting Interceptors on the URLRequestJobFactory
    'enable_configure_request_job_factory%': 0,

    # List of platform-specific targets that get compiled into cobalt.
    'cobalt_platform_dependencies%': [],

    # Deprecated. Implement the CobaltExtensionConfigurationApi function
    # CobaltFallbackSplashScreenUrl instead.
    # The URL of default build time splash screen - see
    #   cobalt/doc/splash_screen.md for information about this.
    'fallback_splash_screen_url%': '',
    # The path to a splash screen to copy into content/data/web which can be
    # accessed via a file URL starting with
    # "file:///cobalt/browser/splash_screen/". If '', no file is copied.
    'cobalt_splash_screen_file%': '',

    # Set to "true" to enable v8 snapshot generation at Cobalt build time.
    'cobalt_v8_buildtime_snapshot%': '<(cobalt_v8_buildtime_snapshot)',

    # Some compiler can not compile with raw assembly(.S files) and v8
    # converts asm to inline assembly for these platforms.
    'cobalt_v8_emit_builtins_as_inline_asm%': 1,

    # Deprecated. Implement the CobaltExtensionConfigurationApi function
    # CobaltEnableQuic instead.
    'cobalt_enable_quic%': -1,

    # Cache parameters
    # Deprecated. These can now be configured by implementing
    # the corresponding function in the CobaltExtensionConfigurationApi.

    # The following set of parameters define how much memory is reserved for
    # different Cobalt caches.  These caches affect CPU *and* GPU memory usage.
    #
    # The sum of the following caches effectively describes the maximum GPU
    # texture memory usage (though it doesn't consider video textures and
    # display color buffers):
    #   - skia_cache_size_in_bytes (GLES2 rasterizer only)
    #   - image_cache_size_in_bytes
    #   - skia_glyph_atlas_width * skia_glyph_atlas_height
    #
    # The other caches affect CPU memory usage.

    # Determines the capacity of the skia cache.  The Skia cache is maintained
    # within Skia and is used to cache the results of complicated effects such
    # as shadows, so that Skia draw calls that are used repeatedly across
    # frames can be cached into surfaces.  This setting is only relevant when
    # using the hardware-accelerated Skia rasterizer (e.g. as opposed to the
    # Blitter API).
    'skia_cache_size_in_bytes%': -1,

    # Deprecated. Implement the CobaltExtensionConfigurationApi function
    # CobaltOffscreenTargetCacheSizeInBytes instead.
    # Determines the amount of GPU memory the offscreen target atlases will
    # use. This is specific to the direct-GLES rasterizer and caches any render
    # tree nodes which require skia for rendering. Two atlases will be allocated
    # from this memory or multiple atlases of the frame size if the limit
    # allows. It is recommended that enough memory be reserved for two RGBA
    # atlases about a quarter of the frame size.
    'offscreen_target_cache_size_in_bytes%': -1,

    # Deprecated. Implement the CobaltExtensionConfigurationApi function
    # CobaltEncodedImageCacheSizeInBytes instead.
    # Determines the capacity of the encoded image cache, which manages encoded
    # images downloaded from a web page. These images are cached within CPU
    # memory.  This not only reduces network traffic to download the encoded
    # images, but also allows the downloaded images to be held during suspend.
    # Note that there is also a cache for the decoded images whose capacity is
    # specified in |image_cache_size_in_bytes|.  The decoded images are often
    # cached in the GPU memory and will be released during suspend.
    #
    # If a system meet the following requirements:
    # 1. Has a fast image decoder.
    # 2. Has enough CPU memory, or has a unified memory architecture that allows
    #    sharing of CPU and GPU memory.
    # Then it may consider to set |encoded_image_cache_size_in_bytes| to a much
    # bigger value, and set the value of |image_cache_size_in_bytes| to a much
    # smaller value. This allows the app to cache significant more images.
    #
    # Set this to 0 can disable the cache completely.
    'encoded_image_cache_size_in_bytes%': -1,

    # Deprecated. Implement the CobaltExtensionConfigurationApi function
    # CobaltImageCacheSizeInBytes instead.
    # Determines the capacity of the image cache, which manages image surfaces
    # downloaded from a web page.  While it depends on the platform, often (and
    # ideally) these images are cached within GPU memory.
    # Set to -1 to automatically calculate the value at runtime, based on
    # features like windows dimensions and the value of
    # SbSystemGetTotalGPUMemory().
    'image_cache_size_in_bytes%': -1,

    # Deprecated. Implement the CobaltExtensionConfigurationApi function
    # CobaltLocalTypeFaceCacheSizeInBytes instead.
    # Determines the capacity of the local font cache, which manages all fonts
    # loaded from local files. Newly encountered sections of font files are
    # lazily loaded into the cache, enabling subsequent requests to the same
    # file sections to be handled via direct memory access. Once the limit is
    # reached, further requests are handled via file stream.
    # Setting the value to 0 disables memory caching and causes all font file
    # accesses to be done using file streams.
    'local_font_cache_size_in_bytes%': -1,

    # Deprecated. Implement the CobaltExtensionConfigurationApi function
    # CobaltRemoteTypefaceCacheSizeInBytes instead.
    # Determines the capacity of the remote font cache, which manages all
    # fonts downloaded from a web page.
    'remote_font_cache_size_in_bytes%': -1,

    # Deprecated. Implement the CobaltExtensionConfigurationApi function
    # CobaltMeshCacheSizeInBytes instead.
    # Determines the capacity of the mesh cache. Each mesh is held compressed
    # in main memory, to be inflated into a GPU buffer when needed for
    # projection. When set to 'auto', will be adjusted according to whether
    # the enable_map_to_mesh is true or not.  If enable_map_to_mesh is false,
    # then the mesh cache size will be set to 0.
    'mesh_cache_size_in_bytes%': -1,

    # Deprecated. Implement the CobaltExtensionConfigurationApi function
    # CobaltSoftwareSurfaceCacheSizeInBytes instead.
    # Only relevant if you are using the Blitter API.
    # Determines the capacity of the software surface cache, which is used to
    # cache all surfaces that are rendered via a software rasterizer to avoid
    # re-rendering them.
    'software_surface_cache_size_in_bytes%': -1,

    # Deprecated. Implement the CobaltExtensionConfigurationApi function
    # CobaltImageCacheCapactityMultiplierWhenPlayingVideo.
    # Modifying this value to be non-1.0f will result in the image cache
    # capacity being cleared and then temporarily reduced for the duration that
    # a video is playing.  This can be useful for some platforms if they are
    # particularly constrained for (GPU) memory during video playback.  When
    # playing a video, the image cache is reduced to:
    # image_cache_size_in_bytes *
    #     image_cache_capacity_multiplier_when_playing_video.
    'image_cache_capacity_multiplier_when_playing_video%': '',

    # Deprecated. Implement the CobaltExtensionConfigurationApi functions
    # CobaltSkiaGlyphAtlasWidth and CobaltSkiaGlyphAtlasHeight, respectively.
    # Determines the size in pixels of the glyph atlas where rendered glyphs are
    # cached. The resulting memory usage is 2 bytes of GPU memory per pixel.
    # When a value is used that is too small, thrashing may occur that will
    # result in visible stutter. Such thrashing is more likely to occur when CJK
    # language glyphs are rendered and when the size of the glyphs in pixels is
    # larger, such as for higher resolution displays.
    # The negative default values indicates to the engine that these settings
    # should be automatically set.
    'skia_glyph_atlas_width%': '-1',
    'skia_glyph_atlas_height%': '-1',

    # Deprecated. Implement the CobaltExtensionConfigurationApi function
    # CobaltJsGarbageCollectionThresholdInBytes instead.
    # Determines the size of garbage collection threshold. After this many
    # bytes have been allocated, the SpiderMonkey garbage collector will run.
    # Lowering this has been found to reduce performance and decrease
    # JavaScript memory usage. For example, we have measured on at least one
    # platform that performance becomes 7% worse on average in certain cases
    # when adjusting this number from 8MB to 1MB.
    'mozjs_garbage_collection_threshold_in_bytes%': -1,

    # Max Cobalt CPU usage specifies that the cobalt program should
    # keep it's size below the specified size.
    # This setting is deprecated. Implement starboard API function
    # SbSystemGetTotalCPUMemory() instead.
    'max_cobalt_cpu_usage%': -1,

    # Max Cobalt GPU usage specifies that the cobalt program should
    # keep it's size below the specified size.
    # This setting is deprecated. Implement starboard API function
    # SbSystemGetTotalGPUMemory() instead.
    'max_cobalt_gpu_usage%': -1,

    # Deprecated. Implement the CobaltExtensionConfigurationApi function
    # CobaltReduceCpuMemoryBy instead.
    # When specified this value will reduce the cpu memory consumption by
    # the specified amount. -1 disables the value.
    # When this value is specified then max_cobalt_cpu_usage will not be
    # used in memory_constrainer, but will still be used for triggering
    # a warning if the engine consumes more memory than this value specifies.
    'reduce_cpu_memory_by%': -1,

    # Deprecated. Implement the CobaltExtensionConfigurationApi function
    # CobaltReduceGpuMemoryBy instead.
    # When specified this value will reduce the gpu memory consumption by
    # the specified amount. -1 disables the value.
    # When this value is specified then max_cobalt_gpu_usage will not be
    # used in memory_constrainer, but will still be used for triggering
    # a warning if the engine consumes more memory than this value specifies.
    'reduce_gpu_memory_by%': -1,

    # Note: Ideally, |javascript_engine| would live here, however due to weird
    # gyp variable usage in bindings gyp files (that if we removed, would
    # result in large code duplication), we have to define it in the python gyp
    # platform files instead.  See "starboard/build/platform_configuration.py"
    # for its documentation.

    # Deprecated. Implement the CobaltExtensionConfigurationApi function
    # CobaltEnableJit instead.
    'cobalt_enable_jit%': -1,

    # Deprecated. Implement the CobaltExtensionConfigurationApi function
    # CobaltGcZeal instead.
    # Can be set to enable zealous garbage collection, if |javascript_engine|
    # supports it.  Zealous garbage collection will cause garbage collection
    # to occur much more frequently than normal, for the purpose of finding or
    # reproducing bugs.
    'cobalt_gc_zeal%': -1,

    # The cobalt_media_* variables defined below are deprecated. Their
    # corresponding Starboard functions should be defined instead of setting
    # their values through GYP.

    # This can be set to "memory" or "file".  When it is set to "memory", the
    # media buffers will be stored in main memory allocated by SbMemory
    # functions.  When it is set to "file", the media buffers will be stored in
    # a temporary file in the system cache folder acquired by calling
    # SbSystemGetPath() with "kSbSystemPathCacheDirectory".  Note that when its
    # value is "file" the media stack will still allocate memory to cache the
    # the buffers in use.
    'cobalt_media_buffer_storage_type%': '',
    # When either |cobalt_media_buffer_initial_capacity| or
    # |cobalt_media_buffer_allocation_unit| isn't zero, media buffers will be
    # allocated using a memory pool.  Set the following variable to 1 to
    # allocate the media buffer pool memory on demand and return all memory to
    # the system when there is no media buffer allocated.  Setting the following
    # value to 0 results in that Cobalt will allocate
    # |cobalt_media_buffer_initial_capacity| bytes for media buffer on startup
    # and will not release any media buffer memory back to the system even if
    # there is no media buffers allocated.
    'cobalt_media_buffer_pool_allocate_on_demand%': -1,
    # The amount of memory that will be used to store media buffers allocated
    # during system startup.  To allocate a large chunk at startup helps with
    # reducing fragmentation and can avoid failures to allocate incrementally.
    # This can be set to 0.
    'cobalt_media_buffer_initial_capacity%': -1,
    # The maximum amount of memory that will be used to store media buffers when
    # video resolution is no larger than 1080p. This must be larger than sum of
    # 1080p video budget and non-video budget.
    'cobalt_media_buffer_max_capacity_1080p%': -1,
    # The maximum amount of memory that will be used to store media buffers when
    # video resolution is 4k. If 0, then memory can grow without bound. This
    # must be larger than sum of 4k video budget and non-video budget.
    'cobalt_media_buffer_max_capacity_4k%': -1,

    # When the media stack needs more memory to store media buffers, it will
    # allocate extra memory in units of |cobalt_media_buffer_allocation_unit|.
    # This can be set to 0, in which case the media stack will allocate extra
    # memory on demand.  When |cobalt_media_buffer_initial_capacity| and this
    # value are both set to 0, the media stack will allocate individual buffers
    # directly using SbMemory functions.
    'cobalt_media_buffer_allocation_unit%': -1,

    # The media buffer will be allocated using the following alignment.  Set
    # this to a larger value may increase the memory consumption of media
    # buffers.
    'cobalt_media_buffer_alignment%': -1,
    # Extra bytes allocated at the end of a media buffer to ensure that the
    # buffer can be use optimally by specific instructions like SIMD.  Set to 0
    # to remove any padding.
    'cobalt_media_buffer_padding%': -1,

    # The memory used when playing mp4 videos that is not in DASH format.  The
    # resolution of such videos shouldn't go beyond 1080p.  Its value should be
    # less than the sum of 'cobalt_media_buffer_non_video_budget' and
    # 'cobalt_media_buffer_video_budget_1080p' but not less than 8 MB.
    'cobalt_media_buffer_progressive_budget%': -1,

    # Specifies the maximum amount of memory used by audio or text buffers of
    # media source before triggering a garbage collection.  A large value will
    # cause more memory being used by audio buffers but will also make
    # JavaScript app less likely to re-download audio data.  Note that the
    # JavaScript app may experience significant difficulty if this value is too
    # low.
    'cobalt_media_buffer_non_video_budget%': -1,

    # Specifies the maximum amount of memory used by video buffers of media
    # source before triggering a garbage collection when the video resolution is
    # lower than 1080p (1920x1080).  A large value will cause more memory being
    # used by video buffers but will also make JavaScript app less likely to
    # re-download video data.  Note that the JavaScript app may experience
    # significant difficulty if this value is too low.
    'cobalt_media_buffer_video_budget_1080p%': -1,
    # Specifies the maximum amount of memory used by video buffers of media
    # source before triggering a garbage collection when the video resolution is
    # lower than 4k (3840x2160).  A large value will cause more memory being
    # used by video buffers but will also make JavaScript app less likely to
    # re-download video data.  Note that the JavaScript app may experience
    # significant difficulty if this value is too low.
    'cobalt_media_buffer_video_budget_4k%': -1,

    # Specifies the duration threshold of media source garbage collection.  When
    # the accumulated duration in a source buffer exceeds this value, the media
    # source implementation will try to eject existing buffers from the cache.
    # This is usually triggered when the video being played has a simple content
    # and the encoded data is small.  In such case this can limit how much is
    # allocated for the book keeping data of the media buffers and avoid OOM of
    # system heap.
    # This should be set to 170 for most of the platforms.  But it can be
    # further reduced on systems with extremely low memory.
    'cobalt_media_source_garbage_collection_duration_threshold_in_seconds%': -1,

    'compiler_flags_host': [
      '-D__LB_HOST__',  # TODO: Is this still needed?
    ],

    'defines_debug': [
      'ALLOCATOR_STATS_TRACKING',
      'COBALT_BOX_DUMP_ENABLED',
      'COBALT_BUILD_TYPE_DEBUG',
      'COBALT_ENABLE_JAVASCRIPT_ERROR_LOGGING',
      'COBALT_ENABLE_VERSION_COMPATIBILITY_VALIDATIONS',
      'COBALT_SECURITY_SCREEN_CLEAR_TO_UGLY_COLOR',
      'ENABLE_DEBUG_COMMAND_LINE_SWITCHES',
      'ENABLE_DEBUG_C_VAL',
      'ENABLE_IGNORE_CERTIFICATE_ERRORS',
      'ENABLE_PARTIAL_LAYOUT_CONTROL',
      'ENABLE_TEST_DATA',
      'ENABLE_TEST_RUNNER',
      'ENABLE_TOKEN_ALPHABETICAL_SORTING',

      # TODO: Rename to COBALT_LOGGING_ENABLED.
      '__LB_SHELL__FORCE_LOGGING__',

      'SK_DEVELOPER',
    ],
    'defines_devel': [
      'ALLOCATOR_STATS_TRACKING',
      'COBALT_BUILD_TYPE_DEVEL',
      'COBALT_ENABLE_JAVASCRIPT_ERROR_LOGGING',
      'COBALT_ENABLE_VERSION_COMPATIBILITY_VALIDATIONS',
      'COBALT_SECURITY_SCREEN_CLEAR_TO_UGLY_COLOR',
      'ENABLE_DEBUG_COMMAND_LINE_SWITCHES',
      'ENABLE_DEBUG_C_VAL',
      'ENABLE_IGNORE_CERTIFICATE_ERRORS',
      'ENABLE_PARTIAL_LAYOUT_CONTROL',
      'ENABLE_TEST_DATA',
      'ENABLE_TEST_RUNNER',
      'ENABLE_TOKEN_ALPHABETICAL_SORTING',
      '__LB_SHELL__FORCE_LOGGING__',
      'SK_DEVELOPER',
    ],
    'defines_qa': [
      'ALLOCATOR_STATS_TRACKING',
      'COBALT_BUILD_TYPE_QA',
      'COBALT_ENABLE_JAVASCRIPT_ERROR_LOGGING',
      'COBALT_SECURITY_SCREEN_CLEAR_TO_UGLY_COLOR',
      'ENABLE_DEBUG_COMMAND_LINE_SWITCHES',
      'ENABLE_DEBUG_C_VAL',
      'ENABLE_IGNORE_CERTIFICATE_ERRORS',
      'ENABLE_PARTIAL_LAYOUT_CONTROL',
      'ENABLE_TEST_DATA',
      'ENABLE_TEST_RUNNER',
    ],
    'defines_gold': [
      'ALLOCATOR_STATS_TRACKING',
      'COBALT_BUILD_TYPE_GOLD',
      'COBALT_FORCE_CSP',
      'COBALT_FORCE_HTTPS',
      'OFFICIAL_BUILD',  # Chromium base relies on this.
      'TRACING_DISABLED',
    ],
  },

  'target_defaults': {
    'defines': [
      'COBALT',
    ],
    'conditions': [
      ['cobalt_media_buffer_pool_allocate_on_demand != -1', {
        'defines': [
          'COBALT_MEDIA_BUFFER_POOL_ALLOCATE_ON_DEMAND=<(cobalt_media_buffer_pool_allocate_on_demand)',
        ],
      }],
      ['cobalt_media_buffer_initial_capacity != -1', {
        'defines': [
          'COBALT_MEDIA_BUFFER_INITIAL_CAPACITY=<(cobalt_media_buffer_initial_capacity)',
        ],
      }],
      ['cobalt_media_buffer_max_capacity_1080p != -1', {
        'defines': [
          'COBALT_MEDIA_BUFFER_MAX_CAPACITY_1080P=<(cobalt_media_buffer_max_capacity_1080p)',
        ],
      }],
      ['cobalt_media_buffer_max_capacity_4k != -1', {
        'defines': [
          'COBALT_MEDIA_BUFFER_MAX_CAPACITY_4K=<(cobalt_media_buffer_max_capacity_4k)',
        ],
      }],
      ['cobalt_media_buffer_max_capacity_4k != -1', {
        'defines': [
          'COBALT_MEDIA_BUFFER_MAX_CAPACITY_4K=<(cobalt_media_buffer_max_capacity_4k)',
        ],
      }],
      ['cobalt_media_buffer_max_capacity_4k != -1', {
        'defines': [
          'COBALT_MEDIA_BUFFER_MAX_CAPACITY_4K=<(cobalt_media_buffer_max_capacity_4k)',
        ],
      }],
      ['cobalt_media_buffer_allocation_unit != -1', {
        'defines': [
          'COBALT_MEDIA_BUFFER_ALLOCATION_UNIT=<(cobalt_media_buffer_allocation_unit)',
        ],
      }],
      ['cobalt_media_buffer_alignment != -1', {
        'defines': [
          'COBALT_MEDIA_BUFFER_ALIGNMENT=<(cobalt_media_buffer_alignment)',
        ],
      }],
      ['cobalt_media_buffer_padding != -1', {
        'defines': [
          'COBALT_MEDIA_BUFFER_PADDING=<(cobalt_media_buffer_padding)',
        ],
      }],
      ['cobalt_media_buffer_progressive_budget != -1', {
        'defines': [
          'COBALT_MEDIA_BUFFER_PROGRESSIVE_BUDGET=<(cobalt_media_buffer_progressive_budget)',
        ],
      }],
      ['cobalt_media_buffer_non_video_budget != -1', {
        'defines': [
          'COBALT_MEDIA_BUFFER_NON_VIDEO_BUDGET=<(cobalt_media_buffer_non_video_budget)',
        ],
      }],
      ['cobalt_media_buffer_video_budget_1080p != -1', {
        'defines': [
          'COBALT_MEDIA_BUFFER_VIDEO_BUDGET_1080P=<(cobalt_media_buffer_video_budget_1080p)',
        ],
      }],
      ['cobalt_media_buffer_video_budget_4k != -1', {
        'defines': [
          'COBALT_MEDIA_BUFFER_VIDEO_BUDGET_4K=<(cobalt_media_buffer_video_budget_4k)',
        ],
      }],
      ['cobalt_media_source_garbage_collection_duration_threshold_in_seconds != -1', {
        'defines': [
          'COBALT_MEDIA_SOURCE_GARBAGE_COLLECTION_DURATION_THRESHOLD_IN_SECONDS=<(cobalt_media_source_garbage_collection_duration_threshold_in_seconds)',
        ],
      }],
      ['cobalt_media_buffer_storage_type == "memory"', {
        'defines': [
          'COBALT_MEDIA_BUFFER_STORAGE_TYPE_MEMORY=1',
        ],
      }, {
        'conditions': [
          ['cobalt_media_buffer_storage_type != ""', {
            'defines': [
              'COBALT_MEDIA_BUFFER_STORAGE_TYPE_FILE=1',
            ],
          }],
        ],
      }],
      ['in_app_dial == 1', {
        'defines': [
          'DIAL_SERVER',
        ],
      }],
      ['enable_debugger == 1', {
        'defines': [
          'ENABLE_DEBUGGER',
        ],
      }],
      ['cobalt_v8_buildtime_snapshot == 1', {
        'defines': [
          'COBALT_V8_BUILDTIME_SNAPSHOT=1',
        ],
      }],
      ['host_os=="win"', {
        # A few flags to mute MSVC compiler errors that does not appear on Linux.
        'compiler_flags_host': [
          '/wd4267',  # Possible loss of precision from size_t to a smaller type.
          '/wd4715',  # Not all control paths return value.
        ],
      }],
    ],
  }, # end of target_defaults

  # For configurations other than Gold, set the flag that lets test data files
  # be copied and carried along with the build.
  # Clients must copy over all content; to avoid having to copy over extra data, we
  # omit the test data
  'conditions': [
    ['cobalt_config != "gold"', {
      'variables' : {
        'enable_about_scheme': 1,
        'enable_fake_microphone': 1,
        'enable_network_logging': 1,
        'enable_webdriver%': 1,
      },
    },
    {
      'variables' : {
        'enable_about_scheme': 0,
        'enable_fake_microphone': 0,
        'enable_network_logging': 0,
        'enable_webdriver': 0,
      },
    }],
    ['cobalt_config != "gold"', {
      'variables' : {
        'cobalt_copy_test_data': 1,
      },
    },
    {
      'variables' : {
        'cobalt_copy_test_data': 0,
      },
    }],
  ],
}
