OLD | NEW |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 module resource_coordinator.tracing.mojom; | 5 module resource_coordinator.tracing.mojom; |
6 | 6 |
7 import "mojo/common/time.mojom"; | 7 import "mojo/common/time.mojom"; |
8 import "mojo/common/values.mojom"; | 8 import "mojo/common/values.mojom"; |
9 | 9 |
10 // The JSON type of data coming from a tracing agents. | 10 // The JSON type of data coming from a tracing agents. |
11 // | 11 // |
12 // - All agents with the same label should have the same type. | 12 // - All agents with the same label should have the same type. |
13 // - There can be multiple agents with the same label, if their data type is | 13 // - There can be multiple agents with the same label, if their data type is |
14 // ARRAY. Their data will be concatenated together and separated by commas. | 14 // ARRAY. Their data will be concatenated together and separated by commas. |
15 // - There can be only one agent with data type STRING. | 15 // - There can be only one agent with data type STRING. |
16 enum TraceDataType { | 16 enum TraceDataType { |
17 ARRAY, | 17 ARRAY, |
18 STRING | 18 STRING |
19 }; | 19 }; |
20 | 20 |
21 // Tracing agents, like |chrome|, |etw|, |battor|, and |cros|, use this | 21 // Tracing agents, like |chrome|, |etw|, |battor|, and |cros|, use this |
22 // interface to register themselves to the tracing service. | 22 // interface to register themselves to the tracing service. |
23 interface Factory { | 23 interface AgentSet { |
24 RegisterAgent(Agent agent, string name, string label, TraceDataType type, | 24 RegisterAgent(Agent agent, string label, TraceDataType type, |
25 bool supports_explicit_clock_sync_); | 25 bool supports_explicit_clock_sync_); |
26 }; | 26 }; |
27 | 27 |
28 // There should be at most one implementation of this interface per process. | |
29 // When the tracing service calls |StopAndFlush| on an agent, the agent begins | 28 // When the tracing service calls |StopAndFlush| on an agent, the agent begins |
30 // serializing data into the recorder that was given in the |StartTracing| call. | 29 // serializing data into the recorder that was given in the |StartTracing| call. |
31 // When finished, the agent should close the recorder connection to signal the | 30 // When finished, the agent should close the recorder connection to signal the |
32 // tracing service that no more data will be sent. | 31 // tracing service that no more data will be sent. |
33 interface Agent { | 32 interface Agent { |
34 StartTracing(string categories, Recorder recorder); | 33 // If |report_categories_only| is true, the agent should not send trace events |
| 34 // to the recorder; they will be ignored; it should send only the list of |
| 35 // categories known to the agent. |
| 36 StartTracing( |
| 37 string config, Recorder recorder, bool report_categories_only) => (); |
35 StopAndFlush(); | 38 StopAndFlush(); |
36 RequestClockSyncMarker() => (mojo.common.mojom.TimeTicks issue_ts, | 39 RequestClockSyncMarker(string sync_id) => ( |
37 mojo.common.mojom.TimeTicks issue_end_ts); | 40 mojo.common.mojom.TimeTicks issue_ts, |
| 41 mojo.common.mojom.TimeTicks issue_end_ts); |
38 RequestBufferStatus() => (uint32 capacity, uint32 count); | 42 RequestBufferStatus() => (uint32 capacity, uint32 count); |
39 }; | 43 }; |
40 | 44 |
41 // An agent can make several calls to |AddChunk|. Chunks will be concatenated | 45 // An agent can make several calls to |AddChunk|. Chunks will be concatenated |
42 // with no separator (type STRING) or using comma as the separator (type ARRAY). | 46 // with no separator (type STRING) or using comma as the separator (type ARRAY). |
43 // There should be only one agent of type STRING per agent label; otherwise | 47 // There should be only one agent of type STRING per agent label; otherwise |
44 // their trace data would be mixed up. | 48 // their trace data would be mixed up. |
45 interface Recorder { | 49 interface Recorder { |
| 50 AddCategories(string categories); |
46 AddChunk(string chunk); | 51 AddChunk(string chunk); |
47 AddMetadata(mojo.common.mojom.DictionaryValue metadata); | 52 AddMetadata(mojo.common.mojom.DictionaryValue metadata); |
48 }; | 53 }; |
49 | 54 |
50 // A tracing controller uses this interface to coordinate trace data collection | 55 // A tracing controller uses this interface to coordinate trace data collection |
51 // from all registered agents. At any given time, there should be at most one | 56 // from all registered agents. At any given time, there should be at most one |
52 // connected controller. | 57 // connected controller. |
53 interface Coordinator { | 58 interface Coordinator { |
54 StartTracing(handle<data_pipe_producer> stream, string categories); | 59 StartTracing(handle<data_pipe_producer> stream, string config); |
55 StopAndFlush(); | 60 StopAndFlush(); |
56 IsTracing() => (bool is_tracing); | 61 IsTracing() => (bool is_tracing); |
57 RequestBufferUsage() => (float percent_full, uint32 approximate_count); | 62 RequestBufferUsage() => (bool success, float percent_full, |
| 63 uint32 approximate_count); |
| 64 GetCategories() => (string categories); |
58 }; | 65 }; |
OLD | NEW |