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.
5 #include "init_webrtc.h"
7 #include "base/command_line.h"
8 #include "base/files/file_path.h"
9 #include "base/files/file_util.h"
10 #include "base/logging.h"
11 #include "base/metrics/field_trial.h"
12 #include "base/metrics/histogram.h"
13 #include "base/native_library.h"
14 #include "base/path_service.h"
15 #include "base/trace_event/trace_event.h"
16 #include "third_party/webrtc/overrides/webrtc/base/logging.h"
17 #include "third_party/webrtc/system_wrappers/interface/cpu_info.h"
18 #include "third_party/webrtc/system_wrappers/interface/event_tracer.h"
20 const unsigned char* GetCategoryGroupEnabled(const char* category_group
) {
21 return TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED(category_group
);
24 void AddTraceEvent(char phase
,
25 const unsigned char* category_group_enabled
,
27 unsigned long long id
,
29 const char** arg_names
,
30 const unsigned char* arg_types
,
31 const unsigned long long* arg_values
,
32 unsigned char flags
) {
33 TRACE_EVENT_API_ADD_TRACE_EVENT(phase
, category_group_enabled
, name
, id
,
34 num_args
, arg_names
, arg_types
, arg_values
,
39 // Define webrtc::field_trial::FindFullName to provide webrtc with a field trial
41 namespace field_trial
{
42 std::string
FindFullName(const std::string
& trial_name
) {
43 return base::FieldTrialList::FindFullName(trial_name
);
45 } // namespace field_trial
47 // Define webrtc::metrics functions to provide webrtc with implementations.
50 // This class doesn't actually exist, so don't go looking for it :)
51 // This type is just fwd declared here in order to use it as an opaque type
52 // between the Histogram functions in this file.
55 Histogram
* HistogramFactoryGetCounts(
56 const std::string
& name
, int min
, int max
, int bucket_count
) {
57 return reinterpret_cast<Histogram
*>(
58 base::Histogram::FactoryGet(name
, min
, max
, bucket_count
,
59 base::HistogramBase::kUmaTargetedHistogramFlag
));
62 Histogram
* HistogramFactoryGetEnumeration(
63 const std::string
& name
, int boundary
) {
64 return reinterpret_cast<Histogram
*>(
65 base::LinearHistogram::FactoryGet(name
, 1, boundary
, boundary
+ 1,
66 base::HistogramBase::kUmaTargetedHistogramFlag
));
70 Histogram
* histogram_pointer
, const std::string
& name
, int sample
) {
71 base::HistogramBase
* ptr
=
72 reinterpret_cast<base::HistogramBase
*>(histogram_pointer
);
73 // The name should not vary.
74 DCHECK(ptr
->histogram_name() == name
);
77 } // namespace metrics
80 bool InitializeWebRtcModule() {
81 // Workaround for crbug.com/176522
82 // On Linux, we can't fetch the number of cores after the sandbox has been
83 // initialized, so we call DetectNumberOfCores() here, to cache the value.
84 webrtc::CpuInfo::DetectNumberOfCores();
85 webrtc::SetupEventTracer(&GetCategoryGroupEnabled
, &AddTraceEvent
);