| #!/usr/bin/python |
| # |
| # Copyright (C) 2017 The Android Open Source Project |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| # Test converter of a Config proto. |
| |
| # Generate with: |
| # aprotoc -I=system/extras/perfprofd --python_out=system/extras/perfprofd/scripts \ |
| # system/extras/perfprofd/binder_interface/perfprofd_config.proto |
| import perfprofd_config_pb2 |
| |
| import sys |
| |
| config_options = [ |
| ('collection_interval_in_s', 'u'), |
| ('use_fixed_seed', 'u'), |
| ('main_loop_iterations', 'u'), |
| ('destination_directory', 's'), |
| ('config_directory', 's'), |
| ('perf_path', 's'), |
| ('sampling_period', 'u'), |
| ('sample_duration_in_s', 'u'), |
| ('only_debug_build', 'b'), |
| ('hardwire_cpus', 'b'), |
| ('hardwire_cpus_max_duration_in_s', 'u'), |
| ('max_unprocessed_profiles', 'u'), |
| ('stack_profile', 'b'), |
| ('collect_cpu_utilization', 'b'), |
| ('collect_charging_state', 'b'), |
| ('collect_booting', 'b'), |
| ('collect_camera_active', 'b'), |
| ('process', 'i'), |
| ('use_elf_symbolizer', 'b'), |
| ('send_to_dropbox', 'b'), |
| ] |
| |
| def collect_and_write(filename): |
| config = perfprofd_config_pb2.ProfilingConfig() |
| |
| for (option, option_type) in config_options: |
| input = raw_input('%s(%s): ' % (option, option_type)) |
| if input == '': |
| # Skip this argument. |
| continue |
| elif input == '!': |
| # Special-case input, end argument collection. |
| break |
| # Now do some actual parsing work. |
| if option_type == 'u' or option_type == 'i': |
| option_val = int(input) |
| elif option_type == 'b': |
| if input == '1' or input == 't' or input == 'true': |
| option_val = True |
| elif input == '0' or input == 'f' or input == 'false': |
| option_val = False |
| else: |
| assert False, 'Unknown boolean %s' % input |
| else: |
| assert False, 'Unknown type %s' % type |
| setattr(config, option, option_val) |
| |
| f = open(filename, "wb") |
| f.write(config.SerializeToString()) |
| f.close() |
| |
| def read_and_print(filename): |
| config = perfprofd_config_pb2.ProfilingConfig() |
| |
| f = open(filename, "rb") |
| config.ParseFromString(f.read()) |
| f.close() |
| |
| print config |
| |
| if sys.argv[1] == 'read': |
| read_and_print(sys.argv[2]) |
| elif sys.argv[1] == 'write': |
| collect_and_write(sys.argv[2]) |
| else: |
| print 'Usage: python perf_config_proto.py (read|write) filename' |