• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include "media/cast/logging/logging_raw.h"
6 
7 #include "base/logging.h"
8 #include "base/metrics/histogram.h"
9 #include "base/time/time.h"
10 
11 namespace media {
12 namespace cast {
13 
LoggingRaw(base::TickClock * clock)14 LoggingRaw::LoggingRaw(base::TickClock* clock)
15     : clock_(clock),
16       frame_map_(),
17       packet_map_(),
18       generic_map_(),
19       weak_factory_(this) {}
20 
~LoggingRaw()21 LoggingRaw::~LoggingRaw() {}
22 
InsertFrameEvent(CastLoggingEvent event,uint32 rtp_timestamp,uint32 frame_id)23 void LoggingRaw::InsertFrameEvent(CastLoggingEvent event,
24                                   uint32 rtp_timestamp,
25                                   uint32 frame_id) {
26   InsertBaseFrameEvent(event, frame_id, rtp_timestamp);
27 }
28 
InsertFrameEventWithSize(CastLoggingEvent event,uint32 rtp_timestamp,uint32 frame_id,int size)29 void LoggingRaw::InsertFrameEventWithSize(CastLoggingEvent event,
30                                           uint32 rtp_timestamp,
31                                           uint32 frame_id,
32                                           int size) {
33   InsertBaseFrameEvent(event, frame_id, rtp_timestamp);
34   // Now insert size.
35   FrameRawMap::iterator it = frame_map_.find(rtp_timestamp);
36   DCHECK(it != frame_map_.end());
37   it->second.size = size;
38 }
39 
InsertFrameEventWithDelay(CastLoggingEvent event,uint32 rtp_timestamp,uint32 frame_id,base::TimeDelta delay)40 void LoggingRaw::InsertFrameEventWithDelay(CastLoggingEvent event,
41                                            uint32 rtp_timestamp,
42                                            uint32 frame_id,
43                                            base::TimeDelta delay) {
44   InsertBaseFrameEvent(event, frame_id, rtp_timestamp);
45   // Now insert delay.
46   FrameRawMap::iterator it = frame_map_.find(rtp_timestamp);
47   DCHECK(it != frame_map_.end());
48   it->second.delay_delta = delay;
49 }
50 
InsertBaseFrameEvent(CastLoggingEvent event,uint32 frame_id,uint32 rtp_timestamp)51 void LoggingRaw::InsertBaseFrameEvent(CastLoggingEvent event,
52                                       uint32 frame_id,
53                                       uint32 rtp_timestamp) {
54   // Is this a new event?
55   FrameRawMap::iterator it = frame_map_.find(rtp_timestamp);
56   if (it == frame_map_.end()) {
57     // Create a new map entry.
58     FrameEvent info;
59     info.frame_id = frame_id;
60     info.timestamp.push_back(clock_->NowTicks());
61     info.type.push_back(event);
62     frame_map_.insert(std::make_pair(rtp_timestamp, info));
63   } else {
64     // Insert to an existing entry.
65     it->second.timestamp.push_back(clock_->NowTicks());
66     it->second.type.push_back(event);
67     // Do we have a valid frame_id?
68     // Not all events have a valid frame id.
69     if (it->second.frame_id == kFrameIdUnknown && frame_id != kFrameIdUnknown)
70       it->second.frame_id = frame_id;
71   }
72 }
73 
InsertPacketEvent(CastLoggingEvent event,uint32 rtp_timestamp,uint32 frame_id,uint16 packet_id,uint16 max_packet_id,size_t size)74 void LoggingRaw::InsertPacketEvent(CastLoggingEvent event,
75                                    uint32 rtp_timestamp,
76                                    uint32 frame_id,
77                                    uint16 packet_id,
78                                    uint16 max_packet_id,
79                                    size_t size) {
80   // Is this packet belonging to a new frame?
81   PacketRawMap::iterator it = packet_map_.find(rtp_timestamp);
82   if (it == packet_map_.end()) {
83     // Create a new entry - start with base packet map.
84     PacketEvent info;
85     info.frame_id = frame_id;
86     info.max_packet_id = max_packet_id;
87     BasePacketInfo base_info;
88     base_info.size = size;
89     base_info.timestamp.push_back(clock_->NowTicks());
90     base_info.type.push_back(event);
91     packet_map_.insert(std::make_pair(rtp_timestamp, info));
92   } else {
93     // Is this a new packet?
94     BasePacketMap::iterator packet_it = it->second.packet_map.find(packet_id);
95     if (packet_it == it->second.packet_map.end()) {
96       BasePacketInfo base_info;
97       base_info.size = size;
98       base_info.timestamp.push_back(clock_->NowTicks());
99       base_info.type.push_back(event);
100       it->second.packet_map.insert(std::make_pair(packet_id, base_info));
101     } else {
102       packet_it->second.timestamp.push_back(clock_->NowTicks());
103       packet_it->second.type.push_back(event);
104     }
105   }
106 }
107 
InsertGenericEvent(CastLoggingEvent event,int value)108 void LoggingRaw::InsertGenericEvent(CastLoggingEvent event, int value) {
109   GenericEvent event_data;
110   event_data.value.push_back(value);
111   event_data.timestamp.push_back(clock_->NowTicks());
112   // Is this a new event?
113   GenericRawMap::iterator it = generic_map_.find(event);
114   if (it == generic_map_.end()) {
115     // Create new entry.
116     generic_map_.insert(std::make_pair(event, event_data));
117   } else {
118     // Insert to existing entry.
119     it->second.value.push_back(value);
120     it->second.timestamp.push_back(clock_->NowTicks());
121   }
122 }
123 
GetFrameData() const124 FrameRawMap LoggingRaw::GetFrameData() const {
125   return frame_map_;
126 }
127 
GetPacketData() const128 PacketRawMap LoggingRaw::GetPacketData() const {
129   return packet_map_;
130 }
131 
GetGenericData() const132 GenericRawMap LoggingRaw::GetGenericData() const {
133   return generic_map_;
134 }
135 
Reset()136 void LoggingRaw::Reset() {
137   frame_map_.clear();
138   packet_map_.clear();
139   generic_map_.clear();
140 }
141 
142 }  // namespace cast
143 }  // namespace media
144