// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef COMPONENTS_VIZ_SERVICE_FRAME_SINKS_FRAME_SINK_OBSERVER_H_
#define COMPONENTS_VIZ_SERVICE_FRAME_SINKS_FRAME_SINK_OBSERVER_H_

#include "base/observer_list_types.h"
#include "components/viz/common/quads/compositor_frame_metadata.h"

namespace viz {

class FrameSinkId;
struct BeginFrameArgs;

class FrameSinkObserver : public base::CheckedObserver {
 public:
  ~FrameSinkObserver() override = default;

  // Called when CompositorFrameSink is about to be destroyed
  virtual void OnDestroyedCompositorFrameSink(
      const FrameSinkId& frame_sink_id) {}

  // Called when |parent_frame_sink_id| becomes a parent of
  // |child_frame_sink_id|
  virtual void OnRegisteredFrameSinkHierarchy(
      const FrameSinkId& parent_frame_sink_id,
      const FrameSinkId& child_frame_sink_id) {}

  // Called when |parent_frame_sink_id| stops being a parent of
  // |child_frame_sink_id|
  virtual void OnUnregisteredFrameSinkHierarchy(
      const FrameSinkId& parent_frame_sink_id,
      const FrameSinkId& child_frame_sink_id) {}

  // Called when a sink has started a frame.
  virtual void OnFrameSinkDidBeginFrame(const FrameSinkId& frame_sink_id,
                                        const BeginFrameArgs& args) {}

  // Called when a sink has finished processing a frame.
  virtual void OnFrameSinkDidFinishFrame(const FrameSinkId& frame_sink_id,
                                         const BeginFrameArgs& args) {}

  // Called when the |device_scale_factor| related to |frame_sink_id| changes
  // with latest activated frame.
  virtual void OnFrameSinkDeviceScaleFactorChanged(
      const FrameSinkId& frame_sink_id,
      float device_scale_factor) {}

  // Called when the |is_mobile_optimized| related to |frame_sink_id| changes
  // with latest activated frame.
  virtual void OnFrameSinkMobileOptimizedChanged(
      const FrameSinkId& frame_sink_id,
      bool is_mobile_optimized) {}

  // Called when capturing is started for `frame_sink_id`.
  virtual void OnCaptureStarted(const FrameSinkId& frame_sink_id) {}

  // Called when ViewTransition identified by `transition_token` has had its
  // Save directive fulfilled.
  virtual void OnViewTransitionSaved(
      const blink::ViewTransitionToken& transition_token) {}
};

}  // namespace viz

#endif  // COMPONENTS_VIZ_SERVICE_FRAME_SINKS_FRAME_SINK_OBSERVER_H_
