blob: 56656fcf2949ebb1e6190fcdda0e67d7ccc51478 [file] [log] [blame]
khushalsagara693aa72016-08-16 22:18:061// Copyright 2016 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
5#ifndef UI_ANDROID_DELEGATED_FRAME_HOST_ANDROID_H_
6#define UI_ANDROID_DELEGATED_FRAME_HOST_ANDROID_H_
7
8#include "base/macros.h"
9#include "base/memory/ref_counted.h"
10#include "cc/output/copy_output_request.h"
11#include "cc/resources/returned_resource.h"
Fady Samuel1a21156e2017-07-13 04:57:2912#include "components/viz/common/surfaces/surface_info.h"
danakjc391f332017-07-12 20:45:5213#include "components/viz/service/frame_sinks/compositor_frame_sink_support.h"
14#include "components/viz/service/frame_sinks/compositor_frame_sink_support_client.h"
khushalsagara693aa72016-08-16 22:18:0615#include "ui/android/ui_android_export.h"
khushalsagara693aa72016-08-16 22:18:0616
17namespace cc {
18
19class CompositorFrame;
khushalsagara693aa72016-08-16 22:18:0620class SurfaceLayer;
khushalsagara693aa72016-08-16 22:18:0621enum class SurfaceDrawStatus;
22
23} // namespace cc
24
kylechara0900162017-07-14 17:35:2525namespace viz {
26class FrameSinkManager;
27class HostFrameSinkManager;
28} // namespace viz
29
khushalsagara693aa72016-08-16 22:18:0630namespace ui {
31class ViewAndroid;
32class WindowAndroidCompositor;
33
34class UI_ANDROID_EXPORT DelegatedFrameHostAndroid
danakjc391f332017-07-12 20:45:5235 : public viz::CompositorFrameSinkSupportClient,
samansb779eca2017-03-02 22:16:3736 public cc::ExternalBeginFrameSourceClient {
khushalsagara693aa72016-08-16 22:18:0637 public:
eseckler8c15fc32016-12-20 20:22:2038 class Client {
39 public:
40 virtual void SetBeginFrameSource(
41 cc::BeginFrameSource* begin_frame_source) = 0;
samansb779eca2017-03-02 22:16:3742 virtual void DidReceiveCompositorFrameAck() = 0;
danakj30464ba12017-06-29 21:26:4543 virtual void ReclaimResources(const std::vector<cc::ReturnedResource>&) = 0;
eseckler8c15fc32016-12-20 20:22:2044 };
khushalsagara693aa72016-08-16 22:18:0645
46 DelegatedFrameHostAndroid(ViewAndroid* view,
kylechara0900162017-07-14 17:35:2547 viz::HostFrameSinkManager* host_frame_sink_manager,
Fady Samuel764e0a42017-07-13 22:35:4448 viz::FrameSinkManager* frame_sink_manager,
xlai9351829f2017-01-27 18:39:1349 Client* client,
Fady Samueld5c26182017-07-12 02:43:3350 const viz::FrameSinkId& frame_sink_id);
khushalsagara693aa72016-08-16 22:18:0651
52 ~DelegatedFrameHostAndroid() override;
53
Fady Samueld5c26182017-07-12 02:43:3354 void SubmitCompositorFrame(const viz::LocalSurfaceId& local_surface_id,
samanse7398c552017-03-21 21:36:2855 cc::CompositorFrame frame);
eseckler9404a232017-05-22 14:49:4356 void DidNotProduceFrame(const cc::BeginFrameAck& ack);
khushalsagara693aa72016-08-16 22:18:0657
58 void DestroyDelegatedContent();
59
60 bool HasDelegatedContent() const;
61
Fady Samueld5c26182017-07-12 02:43:3362 viz::FrameSinkId GetFrameSinkId() const;
khushalsagara693aa72016-08-16 22:18:0663
64 // Should only be called when the host has a content layer.
65 void RequestCopyOfSurface(
66 WindowAndroidCompositor* compositor,
67 const gfx::Rect& src_subrect_in_pixel,
68 cc::CopyOutputRequest::CopyOutputRequestCallback result_callback);
69
danakj1120f4c2016-09-15 02:05:3270 void CompositorFrameSinkChanged();
khushalsagara693aa72016-08-16 22:18:0671
ennea487a272016-09-30 19:56:1872 // Called when this DFH is attached/detached from a parent browser compositor
73 // and needs to be attached to the surface hierarchy.
starazaa231112017-02-07 17:53:2474 void AttachToCompositor(WindowAndroidCompositor* compositor);
75 void DetachFromCompositor();
ennea487a272016-09-30 19:56:1876
kenrb2b5d08b2017-03-08 22:31:2977 // Returns the ID for the current Surface.
Fady Samueld5c26182017-07-12 02:43:3378 viz::SurfaceId SurfaceId() const;
kenrb2b5d08b2017-03-08 22:31:2979
khushalsagara693aa72016-08-16 22:18:0680 private:
danakjc391f332017-07-12 20:45:5281 // viz::CompositorFrameSinkSupportClient implementation.
samans8d3604f2017-04-11 22:15:3082 void DidReceiveCompositorFrameAck(
danakj30464ba12017-06-29 21:26:4583 const std::vector<cc::ReturnedResource>& resources) override;
samansb779eca2017-03-02 22:16:3784 void OnBeginFrame(const cc::BeginFrameArgs& args) override;
danakj30464ba12017-06-29 21:26:4585 void ReclaimResources(
86 const std::vector<cc::ReturnedResource>& resources) override;
Fady Samueld5c26182017-07-12 02:43:3387 void WillDrawSurface(const viz::LocalSurfaceId& local_surface_id,
samansb779eca2017-03-02 22:16:3788 const gfx::Rect& damage_rect) override;
89
90 // cc::ExternalBeginFrameSourceClient implementation.
91 void OnNeedsBeginFrames(bool needs_begin_frames) override;
samansb779eca2017-03-02 22:16:3792
93 void CreateNewCompositorFrameSinkSupport();
khushalsagara693aa72016-08-16 22:18:0694
Fady Samueld5c26182017-07-12 02:43:3395 const viz::FrameSinkId frame_sink_id_;
fsamuelb6acafa2016-10-04 03:21:5296
khushalsagara693aa72016-08-16 22:18:0697 ViewAndroid* view_;
98
kylechara0900162017-07-14 17:35:2599 viz::HostFrameSinkManager* const host_frame_sink_manager_;
Fady Samuel764e0a42017-07-13 22:35:44100 viz::FrameSinkManager* const frame_sink_manager_;
starazaa231112017-02-07 17:53:24101 WindowAndroidCompositor* registered_parent_compositor_ = nullptr;
eseckler8c15fc32016-12-20 20:22:20102 Client* client_;
khushalsagara693aa72016-08-16 22:18:06103
danakjc391f332017-07-12 20:45:52104 std::unique_ptr<viz::CompositorFrameSinkSupport> support_;
samansb779eca2017-03-02 22:16:37105 cc::ExternalBeginFrameSource begin_frame_source_;
khushalsagara693aa72016-08-16 22:18:06106
Fady Samuel1a21156e2017-07-13 04:57:29107 viz::SurfaceInfo surface_info_;
samanse7398c552017-03-21 21:36:28108 bool has_transparent_background_ = false;
khushalsagara693aa72016-08-16 22:18:06109
110 scoped_refptr<cc::SurfaceLayer> content_layer_;
111
khushalsagara693aa72016-08-16 22:18:06112 DISALLOW_COPY_AND_ASSIGN(DelegatedFrameHostAndroid);
113};
114
115} // namespace ui
116
117#endif // UI_ANDROID_DELEGATED_FRAME_HOST_ANDROID_H_