Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(413)

Side by Side Diff: chromeos/trace/arc_trace_agent.cc

Issue 2400163003: arc: enable Android tracing in verified-boot mode (Closed)
Patch Set: Fix some nits Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 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 "chromeos/trace/arc_trace_agent.h"
6
7 #include "base/bind.h"
8 #include "base/logging.h"
9 #include "base/memory/ref_counted.h"
10 #include "base/memory/singleton.h"
11 #include "base/threading/thread_task_runner_handle.h"
12
13 namespace chromeos {
14
15 namespace {
16
17 constexpr char kArcTracingAgentName[] = "arc";
18 constexpr char kArcTraceLabel[] = "ArcTraceEvents";
19
20 class ArcTraceAgentImpl : public ArcTraceAgent {
21 public:
22 ArcTraceAgentImpl() : delegate_(nullptr), weak_ptr_factory_(this) {}
23
24 ~ArcTraceAgentImpl() override = default;
25
26 // base::trace_event::TracingAgent overrides:
27 std::string GetTracingAgentName() override { return kArcTracingAgentName; }
28
29 std::string GetTraceEventLabel() override { return kArcTraceLabel; }
30
31 void StartAgentTracing(const base::trace_event::TraceConfig& trace_config,
Luis Héctor Chávez 2017/01/17 19:20:32 Can you add DCHECK_CURRENTLY_ON(content::BrowserT
Earl Ou 2017/01/18 09:13:21 Add thread_checker here as we don't want to add de
32 const StartAgentTracingCallback& callback) override {
33 // delegate_ may be nullptr if ARC is not enabled on the system. In such
34 // case, simply do nothing.
35 if (!delegate_) {
36 // Use PostTask as the convention of TraceAgent. The caller expects
37 // callback to be called after this function returns.
38 base::ThreadTaskRunnerHandle::Get()->PostTask(
39 FROM_HERE, base::Bind(callback, GetTracingAgentName(), false));
40 return;
41 }
42
43 delegate_->StartTracing(trace_config,
44 base::Bind(callback, GetTracingAgentName()));
45 }
46
47 void StopAgentTracing(const StopAgentTracingCallback& callback) override {
48 if (!delegate_) {
49 std::string no_data;
50 callback.Run(GetTracingAgentName(), GetTraceEventLabel(),
51 base::RefCountedString::TakeString(&no_data));
52 return;
53 }
54
55 delegate_->StopTracing(base::Bind(&ArcTraceAgentImpl::OnStopAgentTracing,
56 weak_ptr_factory_.GetWeakPtr(),
57 callback));
58 }
59
60 // ArcTraceAgent overrides:
61 void SetDelegate(Delegate* delegate) override { delegate_ = delegate; }
62
63 static ArcTraceAgentImpl* GetInstance() {
64 return base::Singleton<ArcTraceAgentImpl>::get();
65 }
66
67 private:
68 // This allows constructor and destructor to be private and usable only
Yusuke Sato 2017/01/17 22:17:21 Then can you make them private: ?
Earl Ou 2017/01/18 09:13:21 Done.
69 // by the Singleton class.
70 friend struct base::DefaultSingletonTraits<ArcTraceAgentImpl>;
71
72 void OnStopAgentTracing(const StopAgentTracingCallback& callback,
73 const std::string& report) {
74 std::string data(report);
75 callback.Run(kArcTracingAgentName, kArcTraceLabel,
76 base::RefCountedString::TakeString(&data));
77 }
78
79 Delegate* delegate_; // Owned by ArcServiceLauncher.
80 base::WeakPtrFactory<ArcTraceAgentImpl> weak_ptr_factory_;
81
82 DISALLOW_COPY_AND_ASSIGN(ArcTraceAgentImpl);
83 };
84
85 } // namespace
86
87 // static
88 ArcTraceAgent* ArcTraceAgent::GetInstance() {
89 return ArcTraceAgentImpl::GetInstance();
90 }
91
92 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698