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