blob: b4ae03c1097d35cd850e3d6171d5d55a9c9cb1bf (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_BROWSER_TRACING_BACKGROUND_TRACING_MANAGER_IMPL_H_
#define CONTENT_BROWSER_TRACING_BACKGROUND_TRACING_MANAGER_IMPL_H_
#include "base/lazy_instance.h"
#include "base/memory/ref_counted_memory.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
#include "base/metrics/histogram.h"
#include "content/browser/tracing/background_tracing_config_impl.h"
#include "content/browser/tracing/tracing_controller_impl.h"
#include "content/public/browser/background_tracing_manager.h"
namespace content {
class BackgroundTracingRule;
class TraceMessageFilter;
class TracingDelegate;
class BackgroundTracingManagerImpl : public BackgroundTracingManager {
public:
static BackgroundTracingManagerImpl* GetInstance();
bool SetActiveScenario(scoped_ptr<BackgroundTracingConfig>,
const ReceiveCallback&,
DataFiltering data_filtering) override;
void WhenIdle(IdleCallback idle_callback) override;
void TriggerNamedEvent(TriggerHandle, StartedFinalizingCallback) override;
TriggerHandle RegisterTriggerType(const char* trigger_name) override;
void InvalidateTriggerHandlesForTesting() override;
void SetTracingEnabledCallbackForTesting(
const base::Closure& callback) override;
void FireTimerForTesting() override;
bool HasActiveScenarioForTesting() override;
void OnHistogramTrigger(const std::string& histogram_name);
void TriggerPreemptiveFinalization();
private:
BackgroundTracingManagerImpl();
~BackgroundTracingManagerImpl() override;
void EnableRecording(std::string, base::trace_event::TraceRecordMode);
void EnableRecordingIfConfigNeedsIt();
void OnFinalizeStarted(base::RefCountedString*);
void OnFinalizeComplete();
void BeginFinalizing(StartedFinalizingCallback);
void ValidateStartupScenario();
void AbortScenario();
scoped_ptr<base::DictionaryValue> GenerateMetadataDict() const;
std::string GetTriggerNameFromHandle(TriggerHandle handle) const;
bool IsTriggerHandleValid(TriggerHandle handle) const;
BackgroundTracingRule* GetRuleAbleToTriggerTracing(
TriggerHandle handle) const;
bool IsSupportedConfig(BackgroundTracingConfigImpl* config);
std::string GetCategoryFilterStringForCategoryPreset(
BackgroundTracingConfigImpl::CategoryPreset) const;
class TracingTimer {
public:
explicit TracingTimer(StartedFinalizingCallback);
~TracingTimer();
void StartTimer(int seconds);
void CancelTimer();
void FireTimerForTesting();
private:
void TracingTimerFired();
base::OneShotTimer<TracingTimer> tracing_timer_;
StartedFinalizingCallback callback_;
};
scoped_ptr<TracingDelegate> delegate_;
scoped_ptr<const content::BackgroundTracingConfigImpl> config_;
std::map<TriggerHandle, std::string> trigger_handles_;
scoped_ptr<TracingTimer> tracing_timer_;
ReceiveCallback receive_callback_;
bool is_gathering_;
bool is_tracing_;
bool requires_anonymized_data_;
int trigger_handle_ids_;
TriggerHandle reactive_triggered_handle_;
IdleCallback idle_callback_;
base::Closure tracing_enabled_callback_for_testing_;
friend struct base::DefaultLazyInstanceTraits<BackgroundTracingManagerImpl>;
DISALLOW_COPY_AND_ASSIGN(BackgroundTracingManagerImpl);
};
} // namespace content
#endif // CONTENT_BROWSER_TRACING_BACKGROUND_TRACING_MANAGER_IMPL_H_
|