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_RAW_H_
6#define MEDIA_CAST_LOGGING_LOGGING_RAW_H_
7
8#include <map>
9#include <string>
10#include <vector>
11
12#include "base/basictypes.h"
13#include "base/memory/linked_ptr.h"
14#include "base/memory/weak_ptr.h"
15#include "base/threading/non_thread_safe.h"
16#include "base/time/tick_clock.h"
17#include "media/cast/logging/logging_defines.h"
18
19namespace media {
20namespace cast {
21
22// This class is not thread safe, and should only be called from the main
23// thread.
24class LoggingRaw : public base::NonThreadSafe,
25                   public base::SupportsWeakPtr<LoggingRaw> {
26 public:
27  explicit LoggingRaw(base::TickClock* clock);
28  ~LoggingRaw();
29
30  // Inform of new event: three types of events: frame, packets and generic.
31  // Frame events can be inserted with different parameters.
32  void InsertFrameEvent(CastLoggingEvent event,
33                        uint32 rtp_timestamp,
34                        uint32 frame_id);
35
36  // Size - Inserting the size implies that this is an encoded frame.
37  void InsertFrameEventWithSize(CastLoggingEvent event,
38                                uint32 rtp_timestamp,
39                                uint32 frame_id,
40                                int frame_size);
41
42  // Render/playout delay
43  void InsertFrameEventWithDelay(CastLoggingEvent event,
44                                 uint32 rtp_timestamp,
45                                 uint32 frame_id,
46                                 base::TimeDelta delay);
47
48  // Insert a packet event.
49  void InsertPacketEvent(CastLoggingEvent event,
50                         uint32 rtp_timestamp,
51                         uint32 frame_id,
52                         uint16 packet_id,
53                         uint16 max_packet_id,
54                         size_t size);
55
56  void InsertGenericEvent(CastLoggingEvent event, int value);
57
58  // Get raw log data.
59  FrameRawMap GetFrameData() const;
60  PacketRawMap GetPacketData() const;
61  GenericRawMap GetGenericData() const;
62
63
64  // Reset all log data.
65  void Reset();
66
67 private:
68  void InsertBaseFrameEvent(CastLoggingEvent event,
69                            uint32 frame_id,
70                            uint32 rtp_timestamp);
71
72  base::TickClock* const clock_;  // Not owned by this class.
73  FrameRawMap frame_map_;
74  PacketRawMap packet_map_;
75  GenericRawMap generic_map_;
76  base::WeakPtrFactory<LoggingRaw> weak_factory_;
77
78  DISALLOW_COPY_AND_ASSIGN(LoggingRaw);
79};
80
81}  // namespace cast
82}  // namespace media
83
84#endif  // MEDIA_CAST_LOGGING_LOGGING_RAW_H_
85
86