summaryrefslogtreecommitdiff
path: root/chromium/media/cast/logging/logging_defines.h
blob: 5a7bca1500f62693a9b4ac83659efa9d89ac4e0b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef MEDIA_CAST_LOGGING_LOGGING_DEFINES_H_
#define MEDIA_CAST_LOGGING_LOGGING_DEFINES_H_

#include <map>
#include <string>
#include <vector>

#include "base/memory/linked_ptr.h"
#include "base/time/time.h"

namespace media {
namespace cast {

static const uint32 kFrameIdUnknown = 0xFFFF;

struct CastLoggingConfig {
  CastLoggingConfig();
  ~CastLoggingConfig();

  bool enable_data_collection;
  bool enable_uma_stats;
  bool enable_tracing;
};

// By default, enable raw and stats data collection. Disable tracing and UMA.
CastLoggingConfig GetDefaultCastLoggingConfig();

enum CastLoggingEvent {
  // Generic events.
  kUnknown,
  kRttMs,
  kPacketLoss,
  kJitterMs,
  kAckReceived,
  kRembBitrate,
  kAckSent,
  kLastEvent,
  // Audio sender.
  kAudioFrameReceived,
  kAudioFrameCaptured,
  kAudioFrameEncoded,
  // Audio receiver.
  kAudioPlayoutDelay,
  kAudioFrameDecoded,
  // Video sender.
  kVideoFrameCaptured,
  kVideoFrameReceived,
  kVideoFrameSentToEncoder,
  kVideoFrameEncoded,
  // Video receiver.
  kVideoFrameDecoded,
  kVideoRenderDelay,
  // Send-side packet events.
  kPacketSentToPacer,
  kPacketSentToNetwork,
  kPacketRetransmited,
  // Receive-side packet events.
  kPacketReceived,

  kNumOfLoggingEvents,
};

std::string CastLoggingToString(CastLoggingEvent event);

struct FrameEvent {
  FrameEvent();
  ~FrameEvent();

  uint32 frame_id;
  size_t size;  // Encoded size only.
  std::vector<base::TimeTicks> timestamp;
  std::vector<CastLoggingEvent> type;
  base::TimeDelta delay_delta;  // Render/playout delay.
};

// Internal map sorted by packet id.
struct BasePacketInfo {
  BasePacketInfo();
  ~BasePacketInfo();

  size_t size;
  std::vector<base::TimeTicks> timestamp;
  std::vector<CastLoggingEvent> type;
};

typedef std::map<uint16, BasePacketInfo> BasePacketMap;

struct PacketEvent {
  PacketEvent();
  ~PacketEvent();
  uint32 frame_id;
  int max_packet_id;
  BasePacketMap packet_map;
};

struct GenericEvent {
  GenericEvent();
  ~GenericEvent();
  std::vector<int> value;
  std::vector<base::TimeTicks> timestamp;
};

struct FrameLogStats {
  FrameLogStats();
  ~FrameLogStats();

  double framerate_fps;
  double bitrate_kbps;
  int max_delay_ms;
  int min_delay_ms;
  int avg_delay_ms;
};

// Store all log types in a map based on the event.
typedef std::map<uint32, FrameEvent> FrameRawMap;
typedef std::map<uint32, PacketEvent> PacketRawMap;
typedef std::map<CastLoggingEvent, GenericEvent> GenericRawMap;

typedef std::map<CastLoggingEvent, linked_ptr<FrameLogStats > > FrameStatsMap;
typedef std::map<CastLoggingEvent, double> PacketStatsMap;
typedef std::map<CastLoggingEvent, double> GenericStatsMap;

}  // namespace cast
}  // namespace media

#endif  // MEDIA_CAST_LOGGING_LOGGING_DEFINES_H_