render_process_user_data.h 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. // Copyright 2019 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. #ifndef COMPONENTS_PERFORMANCE_MANAGER_RENDER_PROCESS_USER_DATA_H_
  5. #define COMPONENTS_PERFORMANCE_MANAGER_RENDER_PROCESS_USER_DATA_H_
  6. #include <memory>
  7. #include "base/memory/raw_ptr.h"
  8. #include "base/supports_user_data.h"
  9. #include "content/public/browser/render_process_host_observer.h"
  10. namespace content {
  11. class RenderProcessHost;
  12. } // namespace content
  13. namespace performance_manager {
  14. class ProcessNodeImpl;
  15. // Attached to RenderProcessHost as user data, associates the RenderProcessHost
  16. // with the Resource Coordinator process node.
  17. class RenderProcessUserData : public base::SupportsUserData::Data,
  18. public content::RenderProcessHostObserver {
  19. public:
  20. // Observer interface to be notified when a RenderProcessUserData is
  21. // destroyed.
  22. class DestructionObserver {
  23. public:
  24. virtual ~DestructionObserver() = default;
  25. virtual void OnRenderProcessUserDataDestroying(
  26. content::RenderProcessHost*) = 0;
  27. };
  28. RenderProcessUserData(const RenderProcessUserData&) = delete;
  29. RenderProcessUserData& operator=(const RenderProcessUserData&) = delete;
  30. ~RenderProcessUserData() override;
  31. static const void* UserDataKey();
  32. static RenderProcessUserData* GetForRenderProcessHost(
  33. content::RenderProcessHost* host);
  34. // Registers an observer that is notified when the RenderProcessUserData is
  35. // destroyed. Can only be set to non-nullptr if it was previously nullptr, and
  36. // vice-versa.
  37. void SetDestructionObserver(DestructionObserver* destruction_observer);
  38. // Invoked when a process is launched for this RenderProcessHost
  39. // (immediately after RenderProcessHost::GetProcess() becomes valid).
  40. void OnProcessLaunched();
  41. ProcessNodeImpl* process_node() { return process_node_.get(); }
  42. private:
  43. friend class PerformanceManagerRegistryImpl;
  44. explicit RenderProcessUserData(
  45. content::RenderProcessHost* render_process_host);
  46. // Only PerformanceManagerRegistry is allowed to create a
  47. // RenderProcessUserData.
  48. static RenderProcessUserData* CreateForRenderProcessHost(
  49. content::RenderProcessHost* host);
  50. // RenderProcessHostObserver overrides
  51. void RenderProcessExited(
  52. content::RenderProcessHost* host,
  53. const content::ChildProcessTerminationInfo& info) override;
  54. void RenderProcessHostDestroyed(content::RenderProcessHost* host) override;
  55. const raw_ptr<content::RenderProcessHost> host_;
  56. std::unique_ptr<ProcessNodeImpl> process_node_;
  57. raw_ptr<DestructionObserver> destruction_observer_ = nullptr;
  58. };
  59. } // namespace performance_manager
  60. #endif // COMPONENTS_PERFORMANCE_MANAGER_RENDER_PROCESS_USER_DATA_H_