# Copyright (c) 2017 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import logging

from autotest_lib.server.cros import cfm_jmidata_v3_helper


def GetDataFromLogs(testcase, data_type, log_lines):
    """Returns a list of data_type from JMI data in javascript log.

    @param testcase: Testcase instance.
    @param data_type: Type of data to be retrieved (audio sent/audio received
            etc. See above for complete list.).
    @param log_lines: log_file to be parsed.

    @return A list of data_type from javascript log.
    """
    helper = cfm_jmidata_v3_helper.JMIDataV3Helper(log_lines)
    data_type_to_func_map = {
        'video_sent_bytes': helper.GetVideoSentBytesList,
        'video_received_bytes': helper.GetVideoReceivedBytesList,
        'audio_sent_bytes': helper.GetAudioSentBytesList,
        'audio_received_bytes': helper.GetAudioReceivedBytesList,
        'audio_received_energy_level': helper.GetAudioReceivedEnergyList,
        'audio_sent_energy_level': helper.GetAudioSentEnergyList,
        'framerate_received': helper.GetVideoIncomingFramerateReceivedList,
        'framerate_sent': helper.GetVideoOutgoingFramerateSentList,
        'framerate_decoded': helper.GetVideoIncomingFramerateDecodedList,
        'frames_decoded': helper.GetVideoIncomingFramesDecodedList,
        'frames_encoded': helper.GetVideoOutgoingFramesEncodedList,
        'average_encode_time': helper.GetVideoEncodeTimeList,
        'framerate_to_renderer': helper.GetVideoIncomingFramerateList,
        'framerate_outgoing': helper.GetVideoOutgoingFramerateInputList,
        'video_sent_frame_width': helper.GetVideoSentFrameWidthList,
        'video_received_frame_width': helper.GetVideoReceivedFrameWidthList,
        'video_sent_frame_height': helper.GetVideoSentFrameHeightList,
        'video_received_frame_height': helper.GetVideoReceivedFrameHeightList,
        'cpu_adaptation': helper.GetCPULimitedResolutionList,
        'bandwidth_adaptation': helper.GetBandwidthLimitedResolutionList,
        'adaptation_changes': helper.GetVideoAdaptationChangeList,
        'video_packets_sent': helper.GetVideoPacketsSentList,
        'video_packets_lost': helper.GetVideoPacketsLostList,
        'video_encode_cpu_usage': helper.GetVideoEncodeCpuUsagePercentList,
        'num_active_vid_in_streams':
                helper.GetNumberOfActiveIncomingVideoStreams,
        'cpu_processors': helper.GetNumOfProcessors,
        'cpu_percent': helper.GetTotalCpuPercentage,
        'browser_cpu_percent': helper.GetBrowserCpuPercentage,
        'gpu_cpu_percent': helper.GetGpuCpuPercentage,
        'nacl_effects_cpu_percent': helper.GetNaclEffectsCpuPercentage,
        'renderer_cpu_percent': helper.GetRendererCpuPercentage,
    }


    data_array = data_type_to_func_map[data_type]()
    logging.info('Data Type: %s, Data Array: %s', data_type, str(data_array))
    return data_array
