blob: fb336783fc2527dc9eb5d40ecf95dfb904ca12fc [file] [log] [blame]
// 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 CHROME_BROWSER_PERFORMANCE_MANAGER_WEBUI_GRAPH_DUMP_IMPL_H_
#define CHROME_BROWSER_PERFORMANCE_MANAGER_WEBUI_GRAPH_DUMP_IMPL_H_
#include "chrome/browser/performance_manager/observers/graph_observer.h"
#include "chrome/browser/performance_manager/webui_graph_dump.mojom.h"
#include "mojo/public/cpp/bindings/binding.h"
namespace performance_manager {
class GraphImpl;
class WebUIGraphDumpImpl : public mojom::WebUIGraphDump, public GraphObserver {
public:
explicit WebUIGraphDumpImpl(GraphImpl* graph);
~WebUIGraphDumpImpl() override;
// Bind this instance to |request| with the |error_handler|.
void Bind(mojom::WebUIGraphDumpRequest request,
base::OnceClosure error_handler);
// WebUIGraphDump implementation.
void SubscribeToChanges(
mojom::WebUIGraphChangeStreamPtr change_subscriber) override;
// GraphObserver implementation.
void OnRegistered() override {}
void OnUnregistered() override {}
bool ShouldObserve(const NodeBase* node) override;
void OnNodeAdded(NodeBase* node) override;
void OnBeforeNodeRemoved(NodeBase* node) override;
void OnIsCurrentChanged(FrameNodeImpl* frame_node) override;
void OnNetworkAlmostIdleChanged(FrameNodeImpl* frame_node) override;
void OnLifecycleStateChanged(FrameNodeImpl* frame_node) override;
// Event notification.
void OnNonPersistentNotificationCreated(FrameNodeImpl* frame_node) override {}
void OnIsVisibleChanged(PageNodeImpl* page_node) override;
void OnIsLoadingChanged(PageNodeImpl* page_node) override;
void OnUkmSourceIdChanged(PageNodeImpl* page_node) override;
void OnLifecycleStateChanged(PageNodeImpl* page_node) override;
void OnPageAlmostIdleChanged(PageNodeImpl* page_node) override;
// Event notification.
void OnFaviconUpdated(PageNodeImpl* page_node) override {}
// Event notification.
void OnTitleUpdated(PageNodeImpl* page_node) override {}
// Event notification that also implies the main_frame_url changed.
void OnMainFrameNavigationCommitted(PageNodeImpl* page_node) override;
void OnExpectedTaskQueueingDurationSample(
ProcessNodeImpl* process_node) override;
void OnMainThreadTaskLoadIsLow(ProcessNodeImpl* process_node) override;
void OnRendererIsBloated(ProcessNodeImpl* process_node) override;
// Event notification.
void OnAllFramesInProcessFrozen(ProcessNodeImpl* process_node) override {}
// Ignored
void OnProcessCPUUsageReady(SystemNodeImpl* system_node) override {}
void SetNodeGraph(GraphImpl* graph) override;
private:
void SendFrameNotification(FrameNodeImpl* frame, bool created);
void SendPageNotification(PageNodeImpl* page, bool created);
void SendProcessNotification(ProcessNodeImpl* process, bool created);
void SendDeletionNotification(NodeBase* node);
GraphImpl* graph_;
// The current change subscriber to this dumper. This instance is subscribed
// to every node in |graph_| save for the system node, so long as there is a
// subscriber.
mojom::WebUIGraphChangeStreamPtr change_subscriber_;
mojo::Binding<mojom::WebUIGraphDump> binding_;
DISALLOW_COPY_AND_ASSIGN(WebUIGraphDumpImpl);
};
} // namespace performance_manager
#endif // CHROME_BROWSER_PERFORMANCE_MANAGER_WEBUI_GRAPH_DUMP_IMPL_H_