1c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org/* 2c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 3c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org * 4c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org * Use of this source code is governed by a BSD-style license 5c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org * that can be found in the LICENSE file in the root of the source 6c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org * tree. An additional intellectual property rights grant can be found 7c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org * in the file PATENTS. All contributing project authors may 8c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org */ 10c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org 11c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org#ifndef WEBRTC_MODULES_REMOTE_BITRATE_ESTIMATOR_TEST_BWE_TEST_LOGGING_H_ 12c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org#define WEBRTC_MODULES_REMOTE_BITRATE_ESTIMATOR_TEST_BWE_TEST_LOGGING_H_ 13c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org 14c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// To enable BWE logging, run this command from trunk/ : 15c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// build/gyp_chromium --depth=. webrtc/modules/modules.gyp 16c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// -Denable_bwe_test_logging=1 17c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org#ifndef BWE_TEST_LOGGING_COMPILE_TIME_ENABLE 18c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org#define BWE_TEST_LOGGING_COMPILE_TIME_ENABLE 0 19c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org#endif // BWE_TEST_LOGGING_COMPILE_TIME_ENABLE 20c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org 21c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// BWE logging allows you to insert dynamically named log/plot points in the 22c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// call tree. E.g. the function: 23c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// void f1() { 24c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// BWE_TEST_LOGGING_TIME(clock_->TimeInMilliseconds()); 25c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// BWE_TEST_LOGGING_CONTEXT("stream"); 26c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// for (uint32_t i=0; i<4; ++i) { 27c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// BWE_TEST_LOGGING_ENABLE(i & 1); 28c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// BWE_TEST_LOGGING_CONTEXT(i); 29c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// BWE_TEST_LOGGING_LOG1("weight", "%f tonnes", weights_[i]); 30c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// for (float j=0.0f; j<1.0; j+=0.4f) { 31c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// BWE_TEST_LOGGING_PLOT("bps", -1, j); 32c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// } 33c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// } 34c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// } 35c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// 36c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// Might produce the output: 37c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// stream_00000001_weight 13.000000 tonnes 38c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// PLOT stream_00000001_bps 1.000000 0.000000 39c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// PLOT stream_00000001_bps 1.000000 0.400000 40c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// PLOT stream_00000001_bps 1.000000 0.800000 41c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// stream_00000003_weight 39.000000 tonnes 42c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// PLOT stream_00000003_bps 1.000000 0.000000 43c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// PLOT stream_00000003_bps 1.000000 0.400000 44c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// PLOT stream_00000003_bps 1.000000 0.800000 45c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// 46c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// Log *contexts* are names concatenated with '_' between them, with the name 47c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// of the logged/plotted string/value last. Plot *time* is inherited down the 48c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// tree. A branch is enabled by default but can be *disabled* to reduce output. 49c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// The difference between the LOG and PLOT macros is that PLOT prefixes the line 50c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// so it can be easily filtered, plus it outputs the current time. 51c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org 52c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org#if !(BWE_TEST_LOGGING_COMPILE_TIME_ENABLE) 53c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org 54cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org// Set a thread-global base logging context. This name will be prepended to all 55cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org// hierarchical contexts. 56cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org// |name| is a char*, std::string or uint32_t to name the context. 57cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org#define BWE_TEST_LOGGING_GLOBAL_CONTEXT(name) 58cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org 59cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org// Thread-globally allow/disallow logging. 60cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org// |enable| is expected to be a bool. 61cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org#define BWE_TEST_LOGGING_GLOBAL_ENABLE(enabled) 62cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org 63c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// Insert a (hierarchical) logging context. 64c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// |name| is a char*, std::string or uint32_t to name the context. 65c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org#define BWE_TEST_LOGGING_CONTEXT(name) 66c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org 67c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// Allow/disallow logging down the call tree from this point. Logging must be 68c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// enabled all the way to the root of the call tree to take place. 69c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// |enable| is expected to be a bool. 70c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org#define BWE_TEST_LOGGING_ENABLE(enabled) 71c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org 72c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// Set current time (only affects PLOT output). Down the call tree, the latest 73c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// time set always takes precedence. 74c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// |time| is an int64_t time in ms, or -1 to inherit time from previous context. 75c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org#define BWE_TEST_LOGGING_TIME(time) 76c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org 77c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// Print to stdout, e.g.: 78c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// Context1_Context2_Name printf-formated-string 79c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// |name| is a char*, std::string or uint32_t to name the log line. 80c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// |format| is a printf format string. 81c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// |_1...| are arguments for printf. 82c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org#define BWE_TEST_LOGGING_LOG1(name, format, _1) 83c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org#define BWE_TEST_LOGGING_LOG2(name, format, _1, _2) 84c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org#define BWE_TEST_LOGGING_LOG3(name, format, _1, _2, _3) 85c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org#define BWE_TEST_LOGGING_LOG4(name, format, _1, _2, _3, _4) 86c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org#define BWE_TEST_LOGGING_LOG5(name, format, _1, _2, _3, _4, _5) 87c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org 88c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// Print to stdout in tab-separated format suitable for plotting, e.g.: 89c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// PLOT Context1_Context2_Name time value 90c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// |name| is a char*, std::string or uint32_t to name the plotted value. 91c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// |time| is an int64_t time in ms, or -1 to inherit time from previous context. 92c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org// |value| is a double precision float to be plotted. 93c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org#define BWE_TEST_LOGGING_PLOT(name, time, value) 94c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org 95c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org#else // BWE_TEST_LOGGING_COMPILE_TIME_ENABLE 96c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org 97c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org#include <map> 98c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org#include <stack> 99c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org#include <string> 100c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org 101774b3d38a4a0f1a8ec08972a3c543cb5d607ce13henrike@webrtc.org#include "webrtc/base/constructormagic.h" 102c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org#include "webrtc/common_types.h" 103c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org#include "webrtc/system_wrappers/interface/scoped_ptr.h" 104c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org 105cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org#define BWE_TEST_LOGGING_GLOBAL_CONTEXT(name) \ 106cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org do { \ 107cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org webrtc::testing::bwe::Logging::GetInstance()->SetGlobalContext(name); \ 108cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org } while (0); 109cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org 110cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org#define BWE_TEST_LOGGING_GLOBAL_ENABLE(enabled) \ 111cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org do { \ 112cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org webrtc::testing::bwe::Logging::GetInstance()->SetGlobalEnable(enabled); \ 113cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org } while (0); 114cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org 115c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org#define __BWE_TEST_LOGGING_CONTEXT_NAME(ctx, line) ctx ## line 116c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org#define __BWE_TEST_LOGGING_CONTEXT_DECLARE(ctx, line, name, time, enabled) \ 117c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org webrtc::testing::bwe::Logging::Context \ 118c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org __BWE_TEST_LOGGING_CONTEXT_NAME(ctx, line)(name, time, enabled) 119c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org 120c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org#define BWE_TEST_LOGGING_CONTEXT(name) \ 121c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org __BWE_TEST_LOGGING_CONTEXT_DECLARE(__bwe_log_, __LINE__, name, -1, true) 122c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org#define BWE_TEST_LOGGING_ENABLE(enabled) \ 123c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org __BWE_TEST_LOGGING_CONTEXT_DECLARE(__bwe_log_, __LINE__, "", -1, \ 124c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org static_cast<bool>(enabled)) 125c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org#define BWE_TEST_LOGGING_TIME(time) \ 126c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org __BWE_TEST_LOGGING_CONTEXT_DECLARE(__bwe_log_, __LINE__, "", \ 127c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org static_cast<int64_t>(time), true) 128c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org 129c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org#define BWE_TEST_LOGGING_LOG1(name, format, _1) \ 130c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org do { \ 131c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org BWE_TEST_LOGGING_CONTEXT(name); \ 132c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org webrtc::testing::bwe::Logging::GetInstance()->Log(format, _1); \ 133c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org } while (0); 134c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org#define BWE_TEST_LOGGING_LOG2(name, format, _1, _2) \ 135c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org do { \ 136c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org BWE_TEST_LOGGING_CONTEXT(name); \ 137c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org webrtc::testing::bwe::Logging::GetInstance()->Log(format, _1, _2); \ 138c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org } while (0); 139c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org#define BWE_TEST_LOGGING_LOG3(name, format, _1, _2, _3) \ 140c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org do { \ 141c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org BWE_TEST_LOGGING_CONTEXT(name); \ 142c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org webrtc::testing::bwe::Logging::GetInstance()->Log(format, _1, _2, _3); \ 143c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org } while (0); 144c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org#define BWE_TEST_LOGGING_LOG4(name, format, _1, _2, _3, _4) \ 145c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org do { \ 146c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org BWE_TEST_LOGGING_CONTEXT(name); \ 147c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org webrtc::testing::bwe::Logging::GetInstance()->Log(format, _1, _2, _3, \ 148c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org _4); \ 149c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org } while (0); 150c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org#define BWE_TEST_LOGGING_LOG5(name, format, _1, _2, _3, _4, _5) \ 151c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org do {\ 152c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org BWE_TEST_LOGGING_CONTEXT(name); \ 153c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org webrtc::testing::bwe::Logging::GetInstance()->Log(format, _1, _2, _3, \ 154c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org _4, _5); \ 155c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org } while (0); 156c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org 157c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org#define BWE_TEST_LOGGING_PLOT(name, time, value)\ 158c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org do { \ 159c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org __BWE_TEST_LOGGING_CONTEXT_DECLARE(__bwe_log_, __LINE__, name, \ 160c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org static_cast<int64_t>(time), true); \ 161c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org webrtc::testing::bwe::Logging::GetInstance()->Plot(value); \ 162c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org } while (0); 163c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org 164c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.orgnamespace webrtc { 165c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org 166c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.orgclass CriticalSectionWrapper; 167c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org 168c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.orgnamespace testing { 169c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.orgnamespace bwe { 170c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org 171c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.orgclass Logging { 172c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org public: 173c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org class Context { 174c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org public: 175c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org Context(uint32_t name, int64_t timestamp_ms, bool enabled); 176c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org Context(const std::string& name, int64_t timestamp_ms, bool enabled); 177c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org Context(const char* name, int64_t timestamp_ms, bool enabled); 178c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org ~Context(); 179c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org private: 180c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org DISALLOW_IMPLICIT_CONSTRUCTORS(Context); 181c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org }; 182c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org 183c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org static Logging* GetInstance(); 184cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org 185cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org void SetGlobalContext(uint32_t name); 186cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org void SetGlobalContext(const std::string& name); 187cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org void SetGlobalContext(const char* name); 188cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org void SetGlobalEnable(bool enabled); 189cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org 190c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org void Log(const char format[], ...); 191c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org void Plot(double value); 192c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org 193c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org private: 194c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org struct State { 195cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org State(); 196cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org State(const std::string& new_tag, int64_t timestamp_ms, bool enabled); 197cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org void MergePrevious(const State& previous); 198cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org 199c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org std::string tag; 200c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org int64_t timestamp_ms; 201c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org bool enabled; 202c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org }; 203cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org struct ThreadState { 204cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org State global_state; 205cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org std::stack<State> stack; 206cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org }; 207cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org typedef std::map<uint32_t, ThreadState> ThreadMap; 208c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org 209c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org Logging(); 210cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org void PushState(const std::string& append_to_tag, int64_t timestamp_ms, 211c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org bool enabled); 212c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org void PopState(); 213c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org 214c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org static Logging g_Logging; 215c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org scoped_ptr<CriticalSectionWrapper> crit_sect_; 216c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org ThreadMap thread_map_; 217c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org 218c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org DISALLOW_COPY_AND_ASSIGN(Logging); 219c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org}; 220c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org} // namespace bwe 221c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org} // namespace testing 222c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org} // namespace webrtc 223c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org 224c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org#endif // BWE_TEST_LOGGING_COMPILE_TIME_ENABLE 225c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org#endif // WEBRTC_MODULES_REMOTE_BITRATE_ESTIMATOR_TEST_BWE_TEST_LOGGING_H_ 226