xref: /aosp_15_r20/external/autotest/server/cros/cfm_jmidata_log_collector.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
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