Home | History | Annotate | Download | only in logging
      1 // Copyright 2014 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_defines.h"
      6 #include "media/cast/logging/logging_raw.h"
      7 #include "media/cast/logging/simple_event_subscriber.h"
      8 #include "testing/gtest/include/gtest/gtest.h"
      9 
     10 namespace media {
     11 namespace cast {
     12 
     13 class LoggingRawTest : public ::testing::Test {
     14  protected:
     15   LoggingRawTest() {
     16     raw_.AddSubscriber(&event_subscriber_);
     17   }
     18 
     19   virtual ~LoggingRawTest() { raw_.RemoveSubscriber(&event_subscriber_); }
     20 
     21   LoggingRaw raw_;
     22   SimpleEventSubscriber event_subscriber_;
     23   std::vector<FrameEvent> frame_events_;
     24   std::vector<PacketEvent> packet_events_;
     25 };
     26 
     27 TEST_F(LoggingRawTest, FrameEvent) {
     28   CastLoggingEvent event_type = FRAME_DECODED;
     29   EventMediaType media_type = VIDEO_EVENT;
     30   uint32 frame_id = 456u;
     31   RtpTimestamp rtp_timestamp = 123u;
     32   base::TimeTicks timestamp = base::TimeTicks();
     33   raw_.InsertFrameEvent(timestamp, event_type, media_type,
     34       rtp_timestamp, frame_id);
     35 
     36   event_subscriber_.GetPacketEventsAndReset(&packet_events_);
     37   EXPECT_TRUE(packet_events_.empty());
     38 
     39   event_subscriber_.GetFrameEventsAndReset(&frame_events_);
     40   ASSERT_EQ(1u, frame_events_.size());
     41   EXPECT_EQ(rtp_timestamp, frame_events_[0].rtp_timestamp);
     42   EXPECT_EQ(frame_id, frame_events_[0].frame_id);
     43   EXPECT_EQ(0u, frame_events_[0].size);
     44   EXPECT_EQ(timestamp, frame_events_[0].timestamp);
     45   EXPECT_EQ(event_type, frame_events_[0].type);
     46   EXPECT_EQ(media_type, frame_events_[0].media_type);
     47   EXPECT_EQ(base::TimeDelta(), frame_events_[0].delay_delta);
     48 }
     49 
     50 TEST_F(LoggingRawTest, EncodedFrameEvent) {
     51   CastLoggingEvent event_type = FRAME_ENCODED;
     52   EventMediaType media_type = VIDEO_EVENT;
     53   uint32 frame_id = 456u;
     54   RtpTimestamp rtp_timestamp = 123u;
     55   base::TimeTicks timestamp = base::TimeTicks();
     56   int size = 1024;
     57   bool key_frame = true;
     58   int target_bitrate = 4096;
     59   raw_.InsertEncodedFrameEvent(timestamp, event_type, media_type,
     60       rtp_timestamp, frame_id, size, key_frame, target_bitrate);
     61 
     62   event_subscriber_.GetPacketEventsAndReset(&packet_events_);
     63   EXPECT_TRUE(packet_events_.empty());
     64 
     65   event_subscriber_.GetFrameEventsAndReset(&frame_events_);
     66   ASSERT_EQ(1u, frame_events_.size());
     67   EXPECT_EQ(rtp_timestamp, frame_events_[0].rtp_timestamp);
     68   EXPECT_EQ(frame_id, frame_events_[0].frame_id);
     69   EXPECT_EQ(size, static_cast<int>(frame_events_[0].size));
     70   EXPECT_EQ(timestamp, frame_events_[0].timestamp);
     71   EXPECT_EQ(event_type, frame_events_[0].type);
     72   EXPECT_EQ(media_type, frame_events_[0].media_type);
     73   EXPECT_EQ(base::TimeDelta(), frame_events_[0].delay_delta);
     74   EXPECT_EQ(key_frame, frame_events_[0].key_frame);
     75   EXPECT_EQ(target_bitrate, frame_events_[0].target_bitrate);
     76 }
     77 
     78 TEST_F(LoggingRawTest, FrameEventWithDelay) {
     79   CastLoggingEvent event_type = FRAME_PLAYOUT;
     80   EventMediaType media_type = VIDEO_EVENT;
     81   uint32 frame_id = 456u;
     82   RtpTimestamp rtp_timestamp = 123u;
     83   base::TimeTicks timestamp = base::TimeTicks();
     84   base::TimeDelta delay = base::TimeDelta::FromMilliseconds(20);
     85   raw_.InsertFrameEventWithDelay(timestamp, event_type, media_type,
     86       rtp_timestamp, frame_id, delay);
     87 
     88   event_subscriber_.GetPacketEventsAndReset(&packet_events_);
     89   EXPECT_TRUE(packet_events_.empty());
     90 
     91   event_subscriber_.GetFrameEventsAndReset(&frame_events_);
     92   ASSERT_EQ(1u, frame_events_.size());
     93   EXPECT_EQ(rtp_timestamp, frame_events_[0].rtp_timestamp);
     94   EXPECT_EQ(frame_id, frame_events_[0].frame_id);
     95   EXPECT_EQ(0u, frame_events_[0].size);
     96   EXPECT_EQ(timestamp, frame_events_[0].timestamp);
     97   EXPECT_EQ(event_type, frame_events_[0].type);
     98   EXPECT_EQ(media_type, frame_events_[0].media_type);
     99   EXPECT_EQ(delay, frame_events_[0].delay_delta);
    100 }
    101 
    102 TEST_F(LoggingRawTest, PacketEvent) {
    103   CastLoggingEvent event_type = PACKET_RECEIVED;
    104   EventMediaType media_type = VIDEO_EVENT;
    105   uint32 frame_id = 456u;
    106   uint16 packet_id = 1u;
    107   uint16 max_packet_id = 10u;
    108   RtpTimestamp rtp_timestamp = 123u;
    109   base::TimeTicks timestamp = base::TimeTicks();
    110   size_t size = 1024u;
    111   raw_.InsertPacketEvent(timestamp, event_type, media_type,
    112       rtp_timestamp, frame_id, packet_id, max_packet_id, size);
    113 
    114   event_subscriber_.GetFrameEventsAndReset(&frame_events_);
    115   EXPECT_TRUE(frame_events_.empty());
    116 
    117   event_subscriber_.GetPacketEventsAndReset(&packet_events_);
    118   ASSERT_EQ(1u, packet_events_.size());
    119 
    120   EXPECT_EQ(rtp_timestamp, packet_events_[0].rtp_timestamp);
    121   EXPECT_EQ(frame_id, packet_events_[0].frame_id);
    122   EXPECT_EQ(max_packet_id, packet_events_[0].max_packet_id);
    123   EXPECT_EQ(packet_id, packet_events_[0].packet_id);
    124   EXPECT_EQ(size, packet_events_[0].size);
    125   EXPECT_EQ(timestamp, packet_events_[0].timestamp);
    126   EXPECT_EQ(event_type, packet_events_[0].type);
    127   EXPECT_EQ(media_type, packet_events_[0].media_type);
    128 }
    129 
    130 TEST_F(LoggingRawTest, MultipleSubscribers) {
    131   SimpleEventSubscriber event_subscriber_2;
    132 
    133   // Now raw_ has two subscribers.
    134   raw_.AddSubscriber(&event_subscriber_2);
    135 
    136   CastLoggingEvent event_type = FRAME_DECODED;
    137   EventMediaType media_type = VIDEO_EVENT;
    138   uint32 frame_id = 456u;
    139   RtpTimestamp rtp_timestamp = 123u;
    140   base::TimeTicks timestamp = base::TimeTicks();
    141   raw_.InsertFrameEvent(timestamp, event_type, media_type,
    142                         rtp_timestamp, frame_id);
    143 
    144   event_subscriber_.GetPacketEventsAndReset(&packet_events_);
    145   EXPECT_TRUE(packet_events_.empty());
    146 
    147   event_subscriber_.GetFrameEventsAndReset(&frame_events_);
    148   ASSERT_EQ(1u, frame_events_.size());
    149   EXPECT_EQ(rtp_timestamp, frame_events_[0].rtp_timestamp);
    150   EXPECT_EQ(frame_id, frame_events_[0].frame_id);
    151   EXPECT_EQ(0u, frame_events_[0].size);
    152   EXPECT_EQ(timestamp, frame_events_[0].timestamp);
    153   EXPECT_EQ(event_type, frame_events_[0].type);
    154   EXPECT_EQ(media_type, frame_events_[0].media_type);
    155   EXPECT_EQ(base::TimeDelta(), frame_events_[0].delay_delta);
    156 
    157   event_subscriber_2.GetPacketEventsAndReset(&packet_events_);
    158   EXPECT_TRUE(packet_events_.empty());
    159 
    160   event_subscriber_2.GetFrameEventsAndReset(&frame_events_);
    161   ASSERT_EQ(1u, frame_events_.size());
    162   EXPECT_EQ(rtp_timestamp, frame_events_[0].rtp_timestamp);
    163   EXPECT_EQ(frame_id, frame_events_[0].frame_id);
    164   EXPECT_EQ(0u, frame_events_[0].size);
    165   EXPECT_EQ(timestamp, frame_events_[0].timestamp);
    166   EXPECT_EQ(event_type, frame_events_[0].type);
    167   EXPECT_EQ(media_type, frame_events_[0].media_type);
    168   EXPECT_EQ(base::TimeDelta(), frame_events_[0].delay_delta);
    169 
    170   // Remove event_subscriber_2, so it shouldn't receive events after this.
    171   raw_.RemoveSubscriber(&event_subscriber_2);
    172 
    173   media_type = AUDIO_EVENT;
    174   frame_id = 789;
    175   rtp_timestamp = 456;
    176   timestamp = base::TimeTicks();
    177   raw_.InsertFrameEvent(timestamp, event_type, media_type,
    178                         rtp_timestamp, frame_id);
    179 
    180   // |event_subscriber_| should still receive events.
    181   event_subscriber_.GetFrameEventsAndReset(&frame_events_);
    182   ASSERT_EQ(1u, frame_events_.size());
    183   EXPECT_EQ(rtp_timestamp, frame_events_[0].rtp_timestamp);
    184   EXPECT_EQ(frame_id, frame_events_[0].frame_id);
    185   EXPECT_EQ(0u, frame_events_[0].size);
    186   EXPECT_EQ(timestamp, frame_events_[0].timestamp);
    187   EXPECT_EQ(event_type, frame_events_[0].type);
    188   EXPECT_EQ(media_type, frame_events_[0].media_type);
    189   EXPECT_EQ(base::TimeDelta(), frame_events_[0].delay_delta);
    190 
    191   event_subscriber_2.GetFrameEventsAndReset(&frame_events_);
    192   EXPECT_TRUE(frame_events_.empty());
    193 }
    194 
    195 }  // namespace cast
    196 }  // namespace media
    197