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

Unified Diff: services/resource_coordinator/tracing/agent_set_impl.h

Issue 2833873003: WIP: The tracing service prototype
Patch Set: sync 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 side-by-side diff with in-line comments
Download patch
Index: services/resource_coordinator/tracing/agent_set_impl.h
diff --git a/services/resource_coordinator/tracing/agent_set_impl.h b/services/resource_coordinator/tracing/agent_set_impl.h
new file mode 100644
index 0000000000000000000000000000000000000000..0f0ccd4aac5714c6313a00e1d55c9f804d431771
--- /dev/null
+++ b/services/resource_coordinator/tracing/agent_set_impl.h
@@ -0,0 +1,94 @@
+// Copyright 2017 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 SERVICES_RESOURCE_COORDINATOR_TRACING_AGENT_SET_IMPL_H_
+#define SERVICES_RESOURCE_COORDINATOR_TRACING_AGENT_SET_IMPL_H_
+
+#include "base/callback_forward.h"
+#include "mojo/public/cpp/bindings/binding_set.h"
+#include "services/resource_coordinator/public/interfaces/tracing/tracing.mojom.h"
+#include "services/service_manager/public/cpp/bind_source_info.h"
+
+namespace resource_coordinator {
+namespace tracing {
+
+class AgentSetImpl : public mojom::AgentSet {
+ public:
+ class Entry {
+ public:
+ Entry(size_t id,
+ AgentSetImpl* agent_set,
+ mojom::AgentPtr agent,
+ const std::string& label,
+ mojom::TraceDataType type,
+ bool supports_explicit_clock_sync);
+ ~Entry();
+
+ mojom::Agent* agent() const { return agent_.get(); }
+ const std::string& label() const { return label_; }
+ mojom::TraceDataType type() const { return type_; }
+ bool supports_explicit_clock_sync() const {
+ return supports_explicit_clock_sync_;
+ }
+
+ void AddDisconnectClosure(const std::string& closure_type,
+ base::OnceClosure closure);
+ bool RemoveDisconnectClosure(const std::string& closure_type);
+ void OnConnectionError();
+
+ private:
+ const size_t id_;
+ AgentSetImpl* agent_set_;
+ mojom::AgentPtr agent_;
+ const std::string label_;
+ const mojom::TraceDataType type_;
+ const bool supports_explicit_clock_sync_;
+
+ std::unordered_map<std::string, base::OnceClosure> closures_;
+ DISALLOW_COPY_AND_ASSIGN(Entry);
+ };
+
+ typedef base::RepeatingCallback<void(Entry*)> AgentProcessingCallback;
+
+ // The getter of the unique instance.
+ static AgentSetImpl* GetInstance();
+
+ AgentSetImpl();
+
+ void BindAgentSetRequest(const service_manager::BindSourceInfo& source_info,
+ mojom::AgentSetRequest request);
+ void SetAgentProcessingCallback(const AgentProcessingCallback& callback);
+ void ResetAgentProcessingCallback();
+
+ template <typename FunctionType>
+ void ForAllAgents(FunctionType function) {
+ for (const auto& key_value : agents_) {
+ function(key_value.second.get());
+ }
+ }
+
+ private:
+ friend std::default_delete<AgentSetImpl>;
+
+ ~AgentSetImpl() override;
+
+ // mojom::AgentSet
+ void RegisterAgent(mojom::AgentPtr agent,
+ const std::string& label,
+ mojom::TraceDataType type,
+ bool supports_explicit_clock_sync) override;
+
+ void UnregisterAgent(size_t agent_id);
+
+ mojo::BindingSet<mojom::AgentSet> bindings_;
+ size_t next_agent_id_ = 0;
+ std::unordered_map<size_t, std::unique_ptr<Entry>> agents_;
+ AgentProcessingCallback agent_processing_callback_;
+ DISALLOW_COPY_AND_ASSIGN(AgentSetImpl);
+};
+
+} // namespace tracing
+} // namespace resource_coordinator
+
+#endif // SERVICES_RESOURCE_COORDINATOR_TRACING_AGENT_SET_IMPL_H_
« no previous file with comments | « services/resource_coordinator/tracing/BUILD.gn ('k') | services/resource_coordinator/tracing/agent_set_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698