1# Copyright (c) 2017 The Chromium OS Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5import logging 6 7import common 8 9from autotest_lib.server.cros import cfm_jmidata_v3_helper 10 11 12def GetDataFromLogs(testcase, data_type, log_lines): 13 """Returns a list of data_type from JMI data in javascript log. 14 15 @param testcase: Testcase instance. 16 @param data_type: Type of data to be retrieved (audio sent/audio received 17 etc. See above for complete list.). 18 @param log_lines: log_file to be parsed. 19 20 @return A list of data_type from javascript log. If the data_type is not 21 supported for the given type of data (i.e. the underlying helper raises 22 NotImplementedError), an empty list is returned. 23 """ 24 helper = cfm_jmidata_v3_helper.JMIDataV3Helper(log_lines) 25 data_type_to_func_map = { 26 'video_sent_bytes': helper.GetVideoSentBytesList, 27 'video_received_bytes': helper.GetVideoReceivedBytesList, 28 'audio_sent_bytes': helper.GetAudioSentBytesList, 29 'audio_received_bytes': helper.GetAudioReceivedBytesList, 30 'audio_received_energy_level': helper.GetAudioReceivedEnergyList, 31 'audio_sent_energy_level': helper.GetAudioSentEnergyList, 32 'framerate_received': helper.GetVideoIncomingFramerateReceivedList, 33 'framerate_sent': helper.GetVideoOutgoingFramerateSentList, 34 'framerate_decoded': helper.GetVideoIncomingFramerateDecodedList, 35 'frames_decoded': helper.GetVideoIncomingFramesDecodedList, 36 'frames_encoded': helper.GetVideoOutgoingFramesEncodedList, 37 'average_encode_time': helper.GetVideoEncodeTimeList, 38 'framerate_to_renderer': helper.GetVideoIncomingFramerateList, 39 'framerate_outgoing': helper.GetVideoOutgoingFramerateInputList, 40 'video_sent_frame_width': helper.GetVideoSentFrameWidthList, 41 'video_received_frame_width': helper.GetVideoReceivedFrameWidthList, 42 'video_sent_frame_height': helper.GetVideoSentFrameHeightList, 43 'video_received_frame_height': helper.GetVideoReceivedFrameHeightList, 44 'cpu_adaptation': helper.GetCPULimitedResolutionList, 45 'bandwidth_adaptation': helper.GetBandwidthLimitedResolutionList, 46 'adaptation_changes': helper.GetVideoAdaptationChangeList, 47 'video_packets_sent': helper.GetVideoPacketsSentList, 48 'video_packets_lost': helper.GetVideoPacketsLostList, 49 'video_encode_cpu_usage': helper.GetVideoEncodeCpuUsagePercentList, 50 'num_active_vid_in_streams': 51 helper.GetNumberOfActiveIncomingVideoStreams, 52 'cpu_processors': helper.GetNumOfProcessors, 53 'cpu_percent': helper.GetTotalCpuPercentage, 54 'browser_cpu_percent': helper.GetBrowserCpuPercentage, 55 'gpu_cpu_percent': helper.GetGpuCpuPercentage, 56 'nacl_effects_cpu_percent': helper.GetNaclEffectsCpuPercentage, 57 'renderer_cpu_percent': helper.GetRendererCpuPercentage, 58 } 59 60 try: 61 data_array = data_type_to_func_map[data_type]() 62 except NotImplementedError as e: 63 logging.warning('data_type "%s" is not implemented in helper %s, ' 64 'returning empty data set', 65 data_type, 66 helper, 67 exc_info = True) 68 data_array = [0] 69 logging.info('Data Type: %s, Data Array: %s', data_type, str(data_array)) 70 # Ensure we always return at least one element, or perf uploads will be 71 # sad. 72 return data_array or [0] 73