#!/usr/bin/env python
# Copyright 2014 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.

"""Scans the Chromium source of UseCounter, formats the Feature enum for
histograms.xml and merges it. This script can also generate a python code
snippet to put in uma.py of Chromium Dashboard. Make sure that you review the
output for correctness.
"""

import optparse
import os
import sys

sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'common'))
from update_histogram_enum import ReadHistogramValues
from update_histogram_enum import UpdateHistogramEnum


def PrintEnumForDashboard(enum_dict):
  """Prints enum_items formatted for use in uma.py of Chromium dashboard."""
  for key in sorted(enum_dict.iterkeys()):
    print '  %d: \'%s\',' % (key, enum_dict[key])


if __name__ == '__main__':
  parser = optparse.OptionParser()
  parser.add_option('--for-dashboard', action='store_true', dest='dashboard',
                    default=False,
                    help='Print enum definition formatted for use in uma.py of '
                    'Chromium dashboard developed at '
                    'https://github.com/GoogleChrome/chromium-dashboard')
  options, args = parser.parse_args()

  source_path = \
      '../../../third_party/WebKit/Source/core/frame/UseCounter.h'

  START_MARKER = '^enum Feature {'
  END_MARKER = '^NumberOfFeatures'

  if options.dashboard:
    enum_dict = ReadHistogramValues(source_path, START_MARKER, END_MARKER)
    PrintEnumForDashboard(enum_dict)
  else:
    UpdateHistogramEnum(
        histogram_enum_name='FeatureObserver',
        source_enum_path=source_path,
        start_marker=START_MARKER,
        end_marker=END_MARKER)
