blob: 2386881883e0f25bd49750c0949078e6daa8f7a6 [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CC_SLIM_LAYER_TREE_CC_WRAPPER_H_
#define CC_SLIM_LAYER_TREE_CC_WRAPPER_H_
#include <memory>
#include "cc/slim/layer_tree.h"
#include "cc/trees/layer_tree_host_client.h"
#include "cc/trees/layer_tree_host_single_thread_client.h"
namespace cc {
class AnimationHost;
class LayerTreeHost;
} // namespace cc
namespace cc::slim {
class Layer;
class LayerTreeCcWrapper : public LayerTree,
public cc::LayerTreeHostClient,
public cc::LayerTreeHostSingleThreadClient {
public:
~LayerTreeCcWrapper() override;
// LayerTree.
cc::UIResourceManager* GetUIResourceManager() override;
void SetViewportRectAndScale(
const gfx::Rect& device_viewport_rect,
float device_scale_factor,
const viz::LocalSurfaceId& local_surface_id) override;
void set_background_color(SkColor4f color) override;
void SetVisible(bool visible) override;
bool IsVisible() const override;
using PresentationCallback =
base::OnceCallback<void(const gfx::PresentationFeedback&)>;
void RequestPresentationTimeForNextFrame(
PresentationCallback callback) override;
void RequestSuccessfulPresentationTimeForNextFrame(
SuccessfulCallback callback) override;
void set_display_transform_hint(gfx::OverlayTransform hint) override;
void RequestCopyOfOutput(
std::unique_ptr<viz::CopyOutputRequest> request) override;
base::OnceClosure DeferBeginFrame() override;
void UpdateTopControlsVisibleHeight(float height) override;
void SetNeedsAnimate() override;
void SetNeedsRedraw() override;
void MaybeCompositeNow() override {}
const scoped_refptr<Layer>& root() const override;
void SetRoot(scoped_refptr<Layer> root) override;
void SetFrameSink(std::unique_ptr<FrameSink> sink) override;
void ReleaseLayerTreeFrameSink() override;
std::unique_ptr<ScopedKeepSurfaceAlive> CreateScopedKeepSurfaceAlive(
const viz::SurfaceId& surface_id) override;
const SurfaceRangesAndCounts& GetSurfaceRangesForTesting() const override;
// cc::LayerTreeHostClient.
void WillBeginMainFrame() override {}
void DidBeginMainFrame() override {}
void WillUpdateLayers() override {}
void DidUpdateLayers() override {}
void BeginMainFrame(const viz::BeginFrameArgs& args) override;
void OnDeferMainFrameUpdatesChanged(bool) override {}
void OnDeferCommitsChanged(
bool,
cc::PaintHoldingReason,
absl::optional<cc::PaintHoldingCommitTrigger>) override {}
void OnCommitRequested() override {}
void BeginMainFrameNotExpectedSoon() override {}
void BeginMainFrameNotExpectedUntil(base::TimeTicks time) override {}
void UpdateLayerTreeHost() override {}
void ApplyViewportChanges(const cc::ApplyViewportChangesArgs& args) override {
}
void UpdateCompositorScrollState(
const cc::CompositorCommitData& commit_data) override {}
void RequestNewLayerTreeFrameSink() override;
void DidInitializeLayerTreeFrameSink() override;
void DidFailToInitializeLayerTreeFrameSink() override;
void WillCommit(const cc::CommitState&) override {}
void DidCommit(base::TimeTicks, base::TimeTicks) override {}
void DidCommitAndDrawFrame() override {}
void DidReceiveCompositorFrameAck() override;
void DidCompletePageScaleAnimation() override {}
void DidPresentCompositorFrame(
uint32_t frame_token,
const gfx::PresentationFeedback& feedback) override {}
void RecordStartOfFrameMetrics() override {}
void RecordEndOfFrameMetrics(
base::TimeTicks frame_begin_time,
cc::ActiveFrameSequenceTrackers trackers) override {}
std::unique_ptr<cc::BeginMainFrameMetrics> GetBeginMainFrameMetrics()
override;
std::unique_ptr<cc::WebVitalMetrics> GetWebVitalMetrics() override;
void NotifyThroughputTrackerResults(
cc::CustomTrackerResults results) override {}
void DidObserveFirstScrollDelay(
base::TimeDelta first_scroll_delay,
base::TimeTicks first_scroll_timestamp) override {}
// cc::LayerTreeHostSingleThreadClient.
void DidSubmitCompositorFrame() override;
void DidLoseLayerTreeFrameSink() override;
// Called by `LayerTree::ScopedKeepSurfaceAlive`'s to keep the surface
// referenced.
void AddSurfaceRange(const viz::SurfaceRange& surface_range);
void RemoveSurfaceRange(const viz::SurfaceRange& surface_range);
private:
friend LayerTree;
explicit LayerTreeCcWrapper(InitParams init_params);
const raw_ptr<LayerTreeClient> client_;
std::unique_ptr<cc::AnimationHost> animation_host_;
std::unique_ptr<cc::LayerTreeHost> host_;
scoped_refptr<Layer> root_;
base::WeakPtrFactory<LayerTreeCcWrapper> weak_factory_{this};
};
} // namespace cc::slim
#endif // CC_SLIM_LAYER_TREE_CC_WRAPPER_H_