LCOV - code coverage report
Current view: top level - media/mtransport - rlogconnector.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 3 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 1 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
       2             : /* vim: set ts=2 et sw=2 tw=80: */
       3             : /* This Source Code Form is subject to the terms of the Mozilla Public
       4             :  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
       5             :  * You can obtain one at http://mozilla.org/MPL/2.0/. */
       6             : 
       7             : // Some of this code is cut-and-pasted from nICEr. Copyright is:
       8             : 
       9             : /*
      10             : Copyright (c) 2007, Adobe Systems, Incorporated
      11             : All rights reserved.
      12             : 
      13             : Redistribution and use in source and binary forms, with or without
      14             : modification, are permitted provided that the following conditions are
      15             : met:
      16             : 
      17             : * Redistributions of source code must retain the above copyright
      18             :   notice, this list of conditions and the following disclaimer.
      19             : 
      20             : * Redistributions in binary form must reproduce the above copyright
      21             :   notice, this list of conditions and the following disclaimer in the
      22             :   documentation and/or other materials provided with the distribution.
      23             : 
      24             : * Neither the name of Adobe Systems, Network Resonance nor the names of its
      25             :   contributors may be used to endorse or promote products derived from
      26             :   this software without specific prior written permission.
      27             : 
      28             : THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
      29             : "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
      30             : LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
      31             : A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
      32             : OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
      33             : SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
      34             : LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
      35             : DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
      36             : THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
      37             : (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
      38             : OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
      39             : */
      40             : 
      41             : /* This Source Code Form is subject to the terms of the Mozilla Public
      42             :  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
      43             :  * You can obtain one at http://mozilla.org/MPL/2.0/. */
      44             : 
      45             : /* Original author: bcampen@mozilla.com */
      46             : 
      47             : /*
      48             :    This file defines an r_dest_vlog that can be used to accumulate log messages
      49             :    for later inspection/filtering. The intent is to use this for interactive
      50             :    debug purposes on an about:webrtc page or similar.
      51             : */
      52             : 
      53             : #ifndef rlogconnector_h__
      54             : #define rlogconnector_h__
      55             : 
      56             : #include <stdint.h>
      57             : 
      58             : #include <deque>
      59             : #include <string>
      60             : #include <vector>
      61             : 
      62             : #include "mozilla/Mutex.h"
      63             : 
      64             : #include "m_cpp_utils.h"
      65             : 
      66             : namespace mozilla {
      67             : 
      68             : class RLogConnector {
      69             :   public:
      70             :     /*
      71             :        NB: These are not threadsafe, nor are they safe to call during static
      72             :        init/deinit.
      73             :     */
      74             :     static RLogConnector* CreateInstance();
      75             :     static RLogConnector* GetInstance();
      76             :     static void DestroyInstance();
      77             : 
      78             :     /*
      79             :        Retrieves log statements that match a given substring, subject to a
      80             :        limit. |matching_logs| will be filled in chronological order (front()
      81             :        is oldest, back() is newest). |limit| == 0 will be interpreted as no
      82             :        limit.
      83             :     */
      84             :     void Filter(const std::string& substring,
      85             :                 uint32_t limit,
      86             :                 std::deque<std::string>* matching_logs);
      87             : 
      88             :     void FilterAny(const std::vector<std::string>& substrings,
      89             :                    uint32_t limit,
      90             :                    std::deque<std::string>* matching_logs);
      91             : 
      92           0 :     inline void GetAny(uint32_t limit,
      93             :                        std::deque<std::string>* matching_logs) {
      94           0 :       Filter("", limit, matching_logs);
      95           0 :     }
      96             : 
      97             :     void SetLogLimit(uint32_t new_limit);
      98             :     void Log(int level, std::string&& log);
      99             :     void Clear();
     100             : 
     101             :     // Methods to signal when a PeerConnection exists in a Private Window.
     102             :     void EnterPrivateMode();
     103             :     void ExitPrivateMode();
     104             : 
     105             :   private:
     106             :     RLogConnector();
     107             :     ~RLogConnector();
     108             :     void RemoveOld();
     109             :     void AddMsg(std::string&& msg);
     110             : 
     111             :     static RLogConnector* instance;
     112             : 
     113             :     /*
     114             :      * Might be worthwhile making this a circular buffer, but I think it is
     115             :      * preferable to take up as little space as possible if no logging is
     116             :      * happening/the ringbuffer is not being used.
     117             :     */
     118             :     std::deque<std::string> log_messages_;
     119             :     /* Max size of log buffer (should we use time-depth instead/also?) */
     120             :     uint32_t log_limit_;
     121             :     OffTheBooksMutex mutex_;
     122             :     uint32_t disableCount_;
     123             : 
     124             :     DISALLOW_COPY_ASSIGN(RLogConnector);
     125             : }; // class RLogConnector
     126             : 
     127             : } // namespace mozilla
     128             : 
     129             : #endif // rlogconnector_h__

Generated by: LCOV version 1.13