12da489cd246702bee5938545b18a6f710ed214bcJamie Gennis#!/usr/bin/env python
22da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# Copyright (c) 2012 The Chromium Authors. All rights reserved.
32da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# Use of this source code is governed by a BSD-style license that can be
42da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# found in the LICENSE file.
52da489cd246702bee5938545b18a6f710ed214bcJamie Gennisimport optparse
62da489cd246702bee5938545b18a6f710ed214bcJamie Gennisimport parse_deps
72da489cd246702bee5938545b18a6f710ed214bcJamie Gennisimport sys
82da489cd246702bee5938545b18a6f710ed214bcJamie Gennisimport os
92da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
102da489cd246702bee5938545b18a6f710ed214bcJamie Gennissrcdir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../src"))
112da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
122da489cd246702bee5938545b18a6f710ed214bcJamie Gennishtml_warning_message = """
132da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
142da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
152da489cd246702bee5938545b18a6f710ed214bcJamie Gennis<!------------------------------------------------------------------------------
162da489cd246702bee5938545b18a6f710ed214bcJamie GennisWARNING: This file is generated by generate_about_tracing_contents.py
172da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
182da489cd246702bee5938545b18a6f710ed214bcJamie Gennis         Do not edit directly.
192da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
202da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
212da489cd246702bee5938545b18a6f710ed214bcJamie Gennis------------------------------------------------------------------------------->
222da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
232da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
242da489cd246702bee5938545b18a6f710ed214bcJamie Gennis"""
252da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
262da489cd246702bee5938545b18a6f710ed214bcJamie Gennisjs_warning_message = """/**
272da489cd246702bee5938545b18a6f710ed214bcJamie Gennis// Copyright (c) 2012 The Chromium Authors. All rights reserved.
282da489cd246702bee5938545b18a6f710ed214bcJamie Gennis// Use of this source code is governed by a BSD-style license that can be
292da489cd246702bee5938545b18a6f710ed214bcJamie Gennis// found in the LICENSE file.
302da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
312da489cd246702bee5938545b18a6f710ed214bcJamie Gennis* WARNING: This file is generated by generate_about_tracing_contents.py
322da489cd246702bee5938545b18a6f710ed214bcJamie Gennis*
332da489cd246702bee5938545b18a6f710ed214bcJamie Gennis*        Do not edit directly.
342da489cd246702bee5938545b18a6f710ed214bcJamie Gennis*/
352da489cd246702bee5938545b18a6f710ed214bcJamie Gennis"""
362da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
372da489cd246702bee5938545b18a6f710ed214bcJamie Gennisdef generate_html():
382da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  f = open(os.path.join(srcdir, "about_tracing.html.template"), 'r')
392da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  template = f.read()
402da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  f.close()
412da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
422da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  assert template.find("<WARNING_MESSAGE></WARNING_MESSAGE>") != -1
432da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  assert template.find("<STYLE_SHEET_CONTENTS></STYLE_SHEET_CONTENTS>") != -1
442da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
452da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  filenames = [os.path.join(srcdir, x) for x in ["base.js", "profiling_view.js"]]
462da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  filenames = [os.path.relpath(x) for x in filenames]
472da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
482da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  load_sequence = parse_deps.calc_load_sequence(filenames)
492da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
502da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  style_sheet_contents = ""
512da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  for module in load_sequence:
522da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    for style_sheet in module.style_sheets:
532da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      rel_filename = os.path.relpath(style_sheet.filename, srcdir)
542da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      link_tag = """<link rel="stylesheet" href="%s">\n""" % rel_filename
552da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      style_sheet_contents += link_tag
562da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
572da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  result = template
582da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  result = result.replace("<WARNING_MESSAGE></WARNING_MESSAGE>", html_warning_message)
592da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  result = result.replace("<STYLE_SHEET_CONTENTS></STYLE_SHEET_CONTENTS>", style_sheet_contents)
602da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
612da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  return result
622da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
632da489cd246702bee5938545b18a6f710ed214bcJamie Gennisdef generate_js():
642da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  f = open(os.path.join(srcdir, "about_tracing.js.template"), 'r')
652da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  template = f.read()
662da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  f.close()
672da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
682da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  assert template.find("<WARNING_MESSAGE></WARNING_MESSAGE>") != -1
692da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  assert template.find("<SCRIPT_CONTENTS></SCRIPT_CONTENTS>") != -1
702da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
712da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  filenames = [os.path.join(srcdir, x) for x in ["base.js", "profiling_view.js"]]
722da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  filenames = [os.path.relpath(x) for x in filenames]
732da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
742da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  import parse_deps
752da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  load_sequence = parse_deps.calc_load_sequence(filenames)
762da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  script_contents = ""
772da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  script_contents += "window.FLATTENED = {};\n"
782da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  for module in load_sequence:
792da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    script_contents += "window.FLATTENED['%s'] = true;\n" % module.name
802da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
812da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  for module in load_sequence:
822da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    rel_filename = os.path.relpath(module.filename, srcdir)
832da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    script_contents += """<include src="%s">\n""" % rel_filename
842da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
852da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  result = template
862da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  result = result.replace("<WARNING_MESSAGE></WARNING_MESSAGE>",
872da489cd246702bee5938545b18a6f710ed214bcJamie Gennis                          js_warning_message)
882da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  result = result.replace("<SCRIPT_CONTENTS></SCRIPT_CONTENTS>", script_contents)
892da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
902da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  return result
912da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
922da489cd246702bee5938545b18a6f710ed214bcJamie Gennisdef is_out_of_date():
932da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  olddir = os.getcwd()
942da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  try:
952da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    os.chdir(srcdir)
962da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
972da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    o = open(os.path.join(srcdir, "about_tracing.html"), 'r')
982da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    existing_result_html = o.read()
992da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    o.close()
1002da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
1012da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    result_html = generate_html()
1022da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
1032da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    if result_html != existing_result_html:
1042da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      return True
1052da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
1062da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    o = open(os.path.join(srcdir, "about_tracing.js"), 'r')
1072da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    existing_result_js = o.read()
1082da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    o.close()
1092da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
1102da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    result_js = generate_js()
1112da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
1122da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    if result_js != existing_result_js:
1132da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      return True
1142da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
1152da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  finally:
1162da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    os.chdir(olddir)
1172da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  return False
1182da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
1192da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
1202da489cd246702bee5938545b18a6f710ed214bcJamie Gennisdef main(args):
1212da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  parser = optparse.OptionParser()
1222da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  options, args = parser.parse_args(args)
1232da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
1242da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  olddir = os.getcwd()
1252da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  try:
1262da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    os.chdir(srcdir)
1272da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
1282da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    try:
1292da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      result_html = generate_html()
1302da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    except parse_deps.DepsException, ex:
1312da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      sys.stderr.write("Error: %s\n\n" % str(ex))
1322da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      return 255
1332da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
1342da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    o = open(os.path.join(srcdir, "about_tracing.html"), 'w')
1352da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    o.write(result_html)
1362da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    o.close()
1372da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
1382da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    result_js = generate_js()
1392da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    o = open(os.path.join(srcdir, "about_tracing.js"), 'w')
1402da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    o.write(result_js)
1412da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    o.close()
1422da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
1432da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  finally:
1442da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    os.chdir(olddir)
1452da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
1462da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  return 0
1472da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
1482da489cd246702bee5938545b18a6f710ed214bcJamie Gennisif __name__ == "__main__":
1492da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  sys.exit(main(sys.argv))
150