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

Side by Side Diff: services/resource_coordinator/tracing/recorder.h

Issue 2886203002: tracing: the recorder implementation (Closed)
Patch Set: review Created 3 years, 7 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 2017 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 #ifndef SERVICES_RESOURCE_COORDINATOR_TRACING_RECORDER_H_
6 #define SERVICES_RESOURCE_COORDINATOR_TRACING_RECORDER_H_
7
8 #include "base/callback_forward.h"
9 #include "base/memory/ref_counted.h"
10 #include "base/memory/weak_ptr.h"
11 #include "base/sequenced_task_runner.h"
12 #include "mojo/public/cpp/bindings/binding.h"
13 #include "services/resource_coordinator/public/interfaces/tracing/tracing.mojom. h"
14
15 namespace {
16 class DictionaryValue;
oystein (OOO til 10th of July) 2017/05/25 16:55:26 What's this? If was originally a forward declarati
chiniforooshan 2017/05/25 19:45:32 Done.
17 }
18
19 namespace tracing {
20
21 class Recorder : public mojom::Recorder {
22 public:
23 // The tracing service creates instances of the |Recorder| class and send them
24 // to agents. The agents then use the recorder for sending trace data to the
25 // tracing service.
26 //
27 // |data_is_array| tells the recorder whether the data is of type array or
28 // string. Chunks of type array are concatenated using a comma as the
29 // separator; chuunks of type string are concatenated without a separator.
30 //
31 // |on_data_change_callback| is run whenever the recorder receives data from
32 // the agent or when the connection is lost to notify the tracing service of
33 // the data change.
34 //
35 // |background_task_runner| is used so that if the tracing service is run on
36 // the UI thread we do not block it. So buffering trace events and copying
37 // them to data pipes are done on a background thread.
38 Recorder(
oystein (OOO til 10th of July) 2017/05/25 16:55:26 The convention is usually that the Mojo interface
chiniforooshan 2017/05/25 19:45:32 It looks like the convention is to name the implem
oystein (OOO til 10th of July) 2017/05/25 20:01:24 Also ImageDecoderImpl, BatteryMonitorImpl, Clipb
39 mojom::RecorderRequest request,
40 bool data_is_array,
41 const base::Closure& on_data_change_callback,
42 const scoped_refptr<base::SequencedTaskRunner>& background_task_runner);
43 ~Recorder() override;
44
45 const std::string& data() const {
46 // All access to |data_| should be done on the background thread.
47 DCHECK(background_task_runner_->RunsTasksOnCurrentThread());
oystein (OOO til 10th of July) 2017/05/25 16:55:27 "base/logging.h" for these
chiniforooshan 2017/05/25 19:45:32 Done.
48 return data_;
49 }
50
51 void clear_data() {
52 // All access to |data_| should be done on the background thread.
53 DCHECK(background_task_runner_->RunsTasksOnCurrentThread());
54 data_.clear();
55 }
56
57 const base::DictionaryValue& metadata() const { return metadata_; }
58 bool is_recording() const { return is_recording_; }
59 bool data_is_array() const { return data_is_array_; }
60
61 private:
62 friend class RecorderTest; // For testing.
63 // mojom::Recorder
64 // These are called by agents for sending trace data to the tracing service.
65 void AddChunk(const std::string& chunk) override;
66 void AddMetadata(std::unique_ptr<base::DictionaryValue> metadata) override;
67
68 void OnConnectionError();
69
70 std::string data_;
71 base::DictionaryValue metadata_;
72 bool is_recording_;
73 bool data_is_array_;
74 base::Closure on_data_change_callback_;
75 // To avoid blocking the UI thread if the tracing service is run on the UI
76 // thread, we make sure that buffering trace events and copying them to the
77 // final stream is done on a background thread.
78 scoped_refptr<base::SequencedTaskRunner> background_task_runner_;
79 mojo::Binding<mojom::Recorder> binding_;
80 base::WeakPtrFactory<Recorder> weak_factory_;
81
82 DISALLOW_COPY_AND_ASSIGN(Recorder);
oystein (OOO til 10th of July) 2017/05/25 16:55:26 nit: base/macros.h
chiniforooshan 2017/05/25 19:45:32 Done.
83 };
84
85 } // namespace tracing
86 #endif // SERVICES_RESOURCE_COORDINATOR_TRACING_RECORDER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698