Index: systrace/systrace/output_generator.py |
diff --git a/systrace/systrace/output_generator.py b/systrace/systrace/output_generator.py |
index f0ff06aa156a8aa8286cb5d560ac0ed10ee0df6c..dae847a28e4984a9a040b3f44b2fafe5683763df 100644 |
--- a/systrace/systrace/output_generator.py |
+++ b/systrace/systrace/output_generator.py |
@@ -12,6 +12,7 @@ import StringIO |
from systrace import tracing_controller |
from systrace import trace_result |
+from tracing.trace_data import trace_data |
# TODO(alexandermont): Current version of trace viewer does not support |
@@ -20,6 +21,22 @@ from systrace import trace_result |
# trace viewer is working again. |
OUTPUT_CONTROLLER_TRACE_ = False |
CONTROLLER_TRACE_DATA_KEY = 'controllerTraceDataKey' |
+_SYSTRACE_TO_TRACE_DATA_NAME_MAPPING = { |
+ 'systemTraceEvents': trace_data.ATRACE_PART, |
+ 'powerTraceAsString': trace_data.BATTOR_TRACE_PART, |
+ 'systraceController': trace_data.TELEMETRY_PART, |
+ 'traceEvents': trace_data.CHROME_TRACE_PART, |
+} |
+_SYSTRACE_HEADER = 'Systrace' |
+ |
+ |
+def NewGenerateHTMLOutput(trace_results, output_file_name): |
+ trace_data_builder = trace_data.TraceDataBuilder() |
+ for trace in trace_results: |
+ trace_data_part = _SYSTRACE_TO_TRACE_DATA_NAME_MAPPING.get( |
+ trace.source_name) |
+ trace_data_builder.AddTraceFor(trace_data_part, trace.raw_data) |
+ trace_data_builder.AsData().Serialize(output_file_name, _SYSTRACE_HEADER) |
def GenerateHTMLOutput(trace_results, output_file_name): |
@@ -33,6 +50,18 @@ def GenerateHTMLOutput(trace_results, output_file_name): |
def _ReadAsset(src_dir, filename): |
return open(os.path.join(src_dir, filename)).read() |
+ # TODO(rnephew): The tracing output formatter is able to handle a single |
+ # systrace trace just as well as it handles multiple traces. The obvious thing |
+ # to do here would be to use it all for all systrace output: however, we want |
+ # to continue using the legacy way of formatting systrace output when a single |
+ # systrace and the tracing controller trace are present in order to match the |
+ # Java verison of systrace. Java systrace is expected to be deleted at a later |
+ # date. We should consolidate this logic when that happens. |
+ |
+ if len(trace_results) > 2: |
+ NewGenerateHTMLOutput(trace_results, output_file_name) |
+ return os.path.abspath(output_file_name) |
+ |
systrace_dir = os.path.abspath(os.path.dirname(__file__)) |
try: |
@@ -63,9 +92,6 @@ def GenerateHTMLOutput(trace_results, output_file_name): |
# for each tracing agent (including the controller tracing agent). |
html_file.write('<!-- BEGIN TRACE -->\n') |
for result in trace_results: |
- if (result.source_name == tracing_controller.TRACE_DATA_CONTROLLER_NAME and |
- not OUTPUT_CONTROLLER_TRACE_): |
- continue |
html_file.write(' <script class="trace-data" type="application/text">\n') |
html_file.write(_ConvertToHtmlString(result.raw_data)) |
html_file.write(' </script>\n') |
@@ -102,8 +128,6 @@ def GenerateJSONOutput(trace_results, output_file_name): |
results = _ConvertTraceListToDictionary(trace_results) |
results[CONTROLLER_TRACE_DATA_KEY] = ( |
tracing_controller.TRACE_DATA_CONTROLLER_NAME) |
- if not OUTPUT_CONTROLLER_TRACE_: |
- results[tracing_controller.TRACE_DATA_CONTROLLER_NAME] = [] |
with open(output_file_name, 'w') as json_file: |
json.dump(results, json_file) |
final_path = os.path.abspath(output_file_name) |