1*6dbdd20aSAndroid Build Coastguard Worker#!/usr/bin/env python3 2*6dbdd20aSAndroid Build Coastguard Worker# Copyright (C) 2020 The Android Open Source Project 3*6dbdd20aSAndroid Build Coastguard Worker# 4*6dbdd20aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 5*6dbdd20aSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 6*6dbdd20aSAndroid Build Coastguard Worker# You may obtain a copy of the License at 7*6dbdd20aSAndroid Build Coastguard Worker# 8*6dbdd20aSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 9*6dbdd20aSAndroid Build Coastguard Worker# 10*6dbdd20aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 11*6dbdd20aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 12*6dbdd20aSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*6dbdd20aSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 14*6dbdd20aSAndroid Build Coastguard Worker# limitations under the License. 15*6dbdd20aSAndroid Build Coastguard Worker 16*6dbdd20aSAndroid Build Coastguard Workerfrom __future__ import absolute_import 17*6dbdd20aSAndroid Build Coastguard Workerfrom __future__ import division 18*6dbdd20aSAndroid Build Coastguard Workerfrom __future__ import print_function 19*6dbdd20aSAndroid Build Coastguard Worker 20*6dbdd20aSAndroid Build Coastguard Workerimport argparse 21*6dbdd20aSAndroid Build Coastguard Workerimport os 22*6dbdd20aSAndroid Build Coastguard Workerimport sys 23*6dbdd20aSAndroid Build Coastguard Worker 24*6dbdd20aSAndroid Build Coastguard WorkerROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 25*6dbdd20aSAndroid Build Coastguard Workersys.path.append(ROOT_DIR) 26*6dbdd20aSAndroid Build Coastguard Worker 27*6dbdd20aSAndroid Build Coastguard Workerfrom python.generators.diff_tests.utils import serialize_textproto_trace, serialize_python_trace 28*6dbdd20aSAndroid Build Coastguard Worker 29*6dbdd20aSAndroid Build Coastguard Worker 30*6dbdd20aSAndroid Build Coastguard Workerdef main(): 31*6dbdd20aSAndroid Build Coastguard Worker parser = argparse.ArgumentParser() 32*6dbdd20aSAndroid Build Coastguard Worker parser.add_argument( 33*6dbdd20aSAndroid Build Coastguard Worker '--out', type=str, help='out directory to search for trace descriptor') 34*6dbdd20aSAndroid Build Coastguard Worker parser.add_argument( 35*6dbdd20aSAndroid Build Coastguard Worker '--descriptor', type=str, help='path to the trace descriptor') 36*6dbdd20aSAndroid Build Coastguard Worker parser.add_argument('trace_path', type=str, help='path of trace to serialize') 37*6dbdd20aSAndroid Build Coastguard Worker args = parser.parse_args() 38*6dbdd20aSAndroid Build Coastguard Worker 39*6dbdd20aSAndroid Build Coastguard Worker if args.out and not args.descriptor: 40*6dbdd20aSAndroid Build Coastguard Worker trace_protos_path = os.path.join(args.out, 'gen', 'protos', 'perfetto', 41*6dbdd20aSAndroid Build Coastguard Worker 'trace') 42*6dbdd20aSAndroid Build Coastguard Worker chrome_extension_descriptor_path = os.path.join( 43*6dbdd20aSAndroid Build Coastguard Worker args.out, 'gen', 'protos', 'third_party', 'chromium', 44*6dbdd20aSAndroid Build Coastguard Worker 'chrome_track_event.descriptor') 45*6dbdd20aSAndroid Build Coastguard Worker trace_descriptor_path = os.path.join(trace_protos_path, 'trace.descriptor') 46*6dbdd20aSAndroid Build Coastguard Worker test_extensions_descriptor_path = os.path.join( 47*6dbdd20aSAndroid Build Coastguard Worker trace_protos_path, 'test_extensions.descriptor') 48*6dbdd20aSAndroid Build Coastguard Worker winscope_extensions_descriptor_path = os.path.join(trace_protos_path, 49*6dbdd20aSAndroid Build Coastguard Worker 'android', 50*6dbdd20aSAndroid Build Coastguard Worker 'winscope.descriptor') 51*6dbdd20aSAndroid Build Coastguard Worker extension_descriptors = [ 52*6dbdd20aSAndroid Build Coastguard Worker chrome_extension_descriptor_path, test_extensions_descriptor_path, 53*6dbdd20aSAndroid Build Coastguard Worker winscope_extensions_descriptor_path 54*6dbdd20aSAndroid Build Coastguard Worker ] 55*6dbdd20aSAndroid Build Coastguard Worker elif args.descriptor and not args.out: 56*6dbdd20aSAndroid Build Coastguard Worker trace_descriptor_path = args.descriptor 57*6dbdd20aSAndroid Build Coastguard Worker extension_descriptors = [] 58*6dbdd20aSAndroid Build Coastguard Worker else: 59*6dbdd20aSAndroid Build Coastguard Worker raise RuntimeError( 60*6dbdd20aSAndroid Build Coastguard Worker 'Exactly one of --out and --descriptor should be provided') 61*6dbdd20aSAndroid Build Coastguard Worker 62*6dbdd20aSAndroid Build Coastguard Worker trace_path = args.trace_path 63*6dbdd20aSAndroid Build Coastguard Worker 64*6dbdd20aSAndroid Build Coastguard Worker if trace_path.endswith('.py'): 65*6dbdd20aSAndroid Build Coastguard Worker serialize_python_trace(ROOT_DIR, trace_descriptor_path, trace_path, 66*6dbdd20aSAndroid Build Coastguard Worker sys.stdout.buffer) 67*6dbdd20aSAndroid Build Coastguard Worker elif trace_path.endswith('.textproto'): 68*6dbdd20aSAndroid Build Coastguard Worker serialize_textproto_trace(trace_descriptor_path, extension_descriptors, 69*6dbdd20aSAndroid Build Coastguard Worker trace_path, sys.stdout.buffer) 70*6dbdd20aSAndroid Build Coastguard Worker else: 71*6dbdd20aSAndroid Build Coastguard Worker raise RuntimeError('Invalid extension for unserialized trace file') 72*6dbdd20aSAndroid Build Coastguard Worker 73*6dbdd20aSAndroid Build Coastguard Worker return 0 74*6dbdd20aSAndroid Build Coastguard Worker 75*6dbdd20aSAndroid Build Coastguard Worker 76*6dbdd20aSAndroid Build Coastguard Workerif __name__ == '__main__': 77*6dbdd20aSAndroid Build Coastguard Worker sys.exit(main()) 78