# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/config/ui.gni")

declare_args() {
  # Enables additional Oilpan heap verification instrumentation.
  enable_blink_heap_verification = false

  # Enables young generation collections in Oilpan.
  enable_blink_heap_young_generation = false

  # Enables Blink's heap to use V8's version of Oilpan.
  enable_blink_heap_use_v8_oilpan = false
}

declare_args() {
  # If enable_additional_blink_object_names is set to true, then blink provides
  # additional debug names of blink-internal (i.e. oilpan) object names at the
  # cost of additional memory. Many of these objects only show up in heap
  # snapshots if the parameter `treatGlobalObjectsAsRoots` of `takeHeapSnapshot`
  # is set.
  enable_additional_blink_object_names = enable_blink_heap_verification
}

# Unhandled Tap enable means Contextual Search aka Touch to Search.
# TODO(donnd): remove all unhandled-tap handling after the Long-press experiment
#              is fully launched.
enable_unhandled_tap = is_android

# Use Minikin hyphenation engine.
use_minikin_hyphenation = !is_mac
