Home | History | Annotate | Download | only in logging
      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 
     19 namespace media {
     20 namespace cast {
     21 
     22 // This class is not thread safe, and should only be called from the main
     23 // thread.
     24 class 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