logging_defines.h revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
1// Copyright 2013 The Chromium 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 5#ifndef MEDIA_CAST_LOGGING_LOGGING_DEFINES_H_ 6#define MEDIA_CAST_LOGGING_LOGGING_DEFINES_H_ 7 8#include <map> 9#include <string> 10#include <vector> 11 12#include "base/time/time.h" 13 14namespace media { 15namespace cast { 16 17static const uint32 kFrameIdUnknown = 0xFFFFFFFF; 18 19typedef uint32 RtpTimestamp; 20 21struct CastLoggingConfig { 22 // Constructs default config - all logging is disabled. 23 CastLoggingConfig(); 24 ~CastLoggingConfig(); 25 26 bool enable_raw_data_collection; 27 bool enable_stats_data_collection; 28 bool enable_tracing; 29}; 30 31// Currently these are the same as the default config. 32CastLoggingConfig GetDefaultCastSenderLoggingConfig(); 33CastLoggingConfig GetDefaultCastReceiverLoggingConfig(); 34 35// Enable raw and stats data collection. Disable tracing. 36CastLoggingConfig GetLoggingConfigWithRawEventsAndStatsEnabled(); 37 38enum CastLoggingEvent { 39 // Generic events. 40 kUnknown, 41 kRttMs, 42 kPacketLoss, 43 kJitterMs, 44 kVideoAckReceived, 45 kRembBitrate, 46 // TODO(imcheng): k{Audio,Video}AckSent may need to be FrameEvents 47 // (crbug.com/339590) 48 kAudioAckSent, 49 kVideoAckSent, 50 // Audio sender. 51 kAudioFrameReceived, 52 kAudioFrameCaptured, 53 kAudioFrameEncoded, 54 // Audio receiver. 55 kAudioPlayoutDelay, 56 kAudioFrameDecoded, 57 // Video sender. 58 kVideoFrameCaptured, 59 kVideoFrameReceived, 60 kVideoFrameSentToEncoder, 61 kVideoFrameEncoded, 62 // Video receiver. 63 kVideoFrameDecoded, 64 kVideoRenderDelay, 65 // Send-side packet events. 66 kAudioPacketSentToPacer, 67 kVideoPacketSentToPacer, 68 kAudioPacketSentToNetwork, 69 kVideoPacketSentToNetwork, 70 kAudioPacketRetransmitted, 71 kVideoPacketRetransmitted, 72 // Receive-side packet events. 73 kAudioPacketReceived, 74 kVideoPacketReceived, 75 kDuplicateAudioPacketReceived, 76 kDuplicateVideoPacketReceived, 77 kNumOfLoggingEvents = kDuplicateVideoPacketReceived 78}; 79 80std::string CastLoggingToString(CastLoggingEvent event); 81 82// CastLoggingEvent are classified into one of three following types. 83enum EventMediaType { AUDIO_EVENT, VIDEO_EVENT, OTHER_EVENT }; 84 85EventMediaType GetEventMediaType(CastLoggingEvent event); 86 87struct FrameEvent { 88 FrameEvent(); 89 ~FrameEvent(); 90 91 RtpTimestamp rtp_timestamp; 92 uint32 frame_id; 93 size_t size; // Encoded size only. 94 95 // Time of event logged. 96 base::TimeTicks timestamp; 97 CastLoggingEvent type; 98 99 // Render / playout delay. Only set for kAudioPlayoutDelay and 100 // kVideoRenderDelay events. 101 base::TimeDelta delay_delta; 102}; 103 104struct PacketEvent { 105 PacketEvent(); 106 ~PacketEvent(); 107 108 RtpTimestamp rtp_timestamp; 109 uint32 frame_id; 110 uint16 max_packet_id; 111 uint16 packet_id; 112 size_t size; 113 114 // Time of event logged. 115 base::TimeTicks timestamp; 116 CastLoggingEvent type; 117}; 118 119struct GenericEvent { 120 GenericEvent(); 121 ~GenericEvent(); 122 123 CastLoggingEvent type; 124 125 // Depending on |type|, |value| can have different meanings: 126 // kRttMs - RTT in milliseconds 127 // kPacketLoss - Fraction of packet loss, denominated in 256 128 // kJitterMs - Jitter in milliseconds 129 // kVideoAckReceived - Frame ID 130 // kRembBitrate - Receiver Estimated Maximum Bitrate 131 // kAudioAckSent - Frame ID 132 // kVideoAckSent - Frame ID 133 int value; 134 135 // Time of event logged. 136 base::TimeTicks timestamp; 137}; 138 139// Generic statistics given the raw data. More specific data (e.g. frame rate 140// and bit rate) can be computed given the basic metrics. 141// Some of the metrics will only be set when applicable, e.g. delay and size. 142struct FrameLogStats { 143 FrameLogStats(); 144 ~FrameLogStats(); 145 base::TimeTicks first_event_time; 146 base::TimeTicks last_event_time; 147 int event_counter; 148 size_t sum_size; 149 base::TimeDelta min_delay; 150 base::TimeDelta max_delay; 151 base::TimeDelta sum_delay; 152}; 153 154struct PacketLogStats { 155 PacketLogStats(); 156 ~PacketLogStats(); 157 base::TimeTicks first_event_time; 158 base::TimeTicks last_event_time; 159 int event_counter; 160 size_t sum_size; 161}; 162 163struct GenericLogStats { 164 GenericLogStats(); 165 ~GenericLogStats(); 166 base::TimeTicks first_event_time; 167 base::TimeTicks last_event_time; 168 int event_counter; 169 int sum; 170 uint64 sum_squared; 171 int min; 172 int max; 173}; 174 175 176typedef std::map<CastLoggingEvent, FrameLogStats> FrameStatsMap; 177typedef std::map<CastLoggingEvent, PacketLogStats> PacketStatsMap; 178typedef std::map<CastLoggingEvent, GenericLogStats> GenericStatsMap; 179 180} // namespace cast 181} // namespace media 182 183#endif // MEDIA_CAST_LOGGING_LOGGING_DEFINES_H_ 184