Index: tools/python_charts/webrtc/main.py |
diff --git a/tools/python_charts/webrtc/main.py b/tools/python_charts/webrtc/main.py |
deleted file mode 100644 |
index d3fb40c888eeb03c35ce719662036dc72603f965..0000000000000000000000000000000000000000 |
--- a/tools/python_charts/webrtc/main.py |
+++ /dev/null |
@@ -1,159 +0,0 @@ |
-#!/usr/bin/env python |
-# Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. |
-# |
-# Use of this source code is governed by a BSD-style license |
-# that can be found in the LICENSE file in the root of the source |
-# tree. An additional intellectual property rights grant can be found |
-# in the file PATENTS. All contributing project authors may |
-# be found in the AUTHORS file in the root of the source tree. |
- |
-import os |
-import gviz_api |
-import webrtc.data_helper |
- |
-def main(): |
- """ |
- This Python script displays a web page with test created with the |
- video_quality_measurement program, which is a tool in WebRTC. |
- |
- The script requires on two external files and one Python library: |
- - A HTML template file with layout and references to the json variables |
- defined in this script |
- - A data file in Python format, containing the following: |
- - test_configuration - a dictionary of test configuration names and values. |
- - frame_data_types - a dictionary that maps the different metrics to their |
- data types. |
- - frame_data - a list of dictionaries where each dictionary maps a metric to |
- it's value. |
- - The gviz_api.py of the Google Visualization Python API, available at |
- http://code.google.com/p/google-visualization-python/ |
- |
- The HTML file is shipped with the script, while the data file must be |
- generated by running video_quality_measurement with the --python flag |
- specified. |
- """ |
- print 'Content-type: text/html\n' # the newline is required! |
- |
- page_template_filename = '../templates/chart_page_template.html' |
- # The data files must be located in the project tree for app engine being |
- # able to access them. |
- data_filenames = ['../data/vp8_sw.py', '../data/vp8_hw.py'] |
- # Will contain info/error messages to be displayed on the resulting page. |
- messages = [] |
- # Load the page HTML template. |
- try: |
- f = open(page_template_filename) |
- page_template = f.read() |
- f.close() |
- except IOError as e: |
- ShowErrorPage('Cannot open page template file: %s<br>Details: %s' % |
- (page_template_filename, e)) |
- return |
- |
- # Read data from external Python script files. First check that they exist. |
- for filename in data_filenames: |
- if not os.path.exists(filename): |
- messages.append('Cannot open data file: %s' % filename) |
- data_filenames.remove(filename) |
- |
- # Read data from all existing input files. |
- data_list = [] |
- test_configurations = [] |
- names = [] |
- |
- for filename in data_filenames: |
- read_vars = {} # empty dictionary to load the data into. |
- execfile(filename, read_vars, read_vars) |
- |
- test_configuration = read_vars['test_configuration'] |
- table_description = read_vars['frame_data_types'] |
- table_data = read_vars['frame_data'] |
- |
- # Verify the data in the file loaded properly. |
- if not table_description or not table_data: |
- messages.append('Invalid input file: %s. Missing description list or ' |
- 'data dictionary variables.' % filename) |
- continue |
- |
- # Frame numbers appear as number type in the data, but Chart API requires |
- # values of the X-axis to be of string type. |
- # Change the frame_number column data type: |
- table_description['frame_number'] = ('string', 'Frame number') |
- # Convert all the values to string types: |
- for row in table_data: |
- row['frame_number'] = str(row['frame_number']) |
- |
- # Store the unique data from this file in the high level lists. |
- test_configurations.append(test_configuration) |
- data_list.append(table_data) |
- # Name of the test run must be present. |
- test_name = FindConfiguration(test_configuration, 'name') |
- if not test_name: |
- messages.append('Invalid input file: %s. Missing configuration key ' |
- '"name"', filename) |
- continue |
- names.append(test_name) |
- |
- # Create data helper and build data tables for each graph. |
- helper = webrtc.data_helper.DataHelper(data_list, table_description, |
- names, messages) |
- |
- # Loading it into gviz_api.DataTable objects and create JSON strings. |
- description, data = helper.CreateConfigurationTable(test_configurations) |
- configurations = gviz_api.DataTable(description, data) |
- json_configurations = configurations.ToJSon() # pylint: disable=W0612 |
- |
- description, data = helper.CreateData('ssim') |
- ssim = gviz_api.DataTable(description, data) |
- # pylint: disable=W0612 |
- json_ssim_data = ssim.ToJSon(helper.GetOrdering(description)) |
- |
- description, data = helper.CreateData('psnr') |
- psnr = gviz_api.DataTable(description, data) |
- # pylint: disable=W0612 |
- json_psnr_data = psnr.ToJSon(helper.GetOrdering(description)) |
- |
- description, data = helper.CreateData('packets_dropped') |
- packet_loss = gviz_api.DataTable(description, data) |
- # pylint: disable=W0612 |
- json_packet_loss_data = packet_loss.ToJSon(helper.GetOrdering(description)) |
- |
- description, data = helper.CreateData('bit_rate') |
- # Add a column of data points for the desired bit rate to be plotted. |
- # (uses test configuration from the last data set, assuming it is the same |
- # for all of them) |
- desired_bit_rate = FindConfiguration(test_configuration, 'bit_rate_in_kbps') |
- if not desired_bit_rate: |
- ShowErrorPage('Cannot configuration field named "bit_rate_in_kbps"') |
- return |
- desired_bit_rate = int(desired_bit_rate) |
- # Add new column data type description. |
- description['desired_bit_rate'] = ('number', 'Desired bit rate (kbps)') |
- for row in data: |
- row['desired_bit_rate'] = desired_bit_rate |
- bit_rate = gviz_api.DataTable(description, data) |
- # pylint: disable=W0612 |
- json_bit_rate_data = bit_rate.ToJSon(helper.GetOrdering(description)) |
- |
- # Format the messages list with newlines. |
- messages = '\n'.join(messages) |
- |
- # Put the variables as JSon strings into the template. |
- print page_template % vars() |
- |
-def FindConfiguration(configuration, name): |
- """ Finds a configuration value using it's name. |
- Returns the first configuration with a matching name. Returns None if no |
- matching configuration is found. """ |
- return_value = None |
- for row in configuration: |
- if row['name'] == name: |
- return_value = row['value'] |
- break |
- return return_value |
- |
-def ShowErrorPage(error_message): |
- print '<html><body>%s</body></html>' % error_message |
- |
-if __name__ == '__main__': |
- main() |