blob: 2428a23b2adeaf68ebdd79c1ad73eccde8650a52 [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;
Alex Zhang96cb9e712017-07-07 21:03:4720class FrameSinkManager;
khushalsagara693aa72016-08-16 22:18:0621class SurfaceLayer;
khushalsagara693aa72016-08-16 22:18:0622enum class SurfaceDrawStatus;
23
24} // namespace cc
25
26namespace ui {
27class ViewAndroid;
28class WindowAndroidCompositor;
29
30class UI_ANDROID_EXPORT DelegatedFrameHostAndroid
danakjc391f332017-07-12 20:45:5231 : public viz::CompositorFrameSinkSupportClient,
samansb779eca2017-03-02 22:16:3732 public cc::ExternalBeginFrameSourceClient {
khushalsagara693aa72016-08-16 22:18:0633 public:
eseckler8c15fc32016-12-20 20:22:2034 class Client {
35 public:
36 virtual void SetBeginFrameSource(
37 cc::BeginFrameSource* begin_frame_source) = 0;
samansb779eca2017-03-02 22:16:3738 virtual void DidReceiveCompositorFrameAck() = 0;
danakj30464ba12017-06-29 21:26:4539 virtual void ReclaimResources(const std::vector<cc::ReturnedResource>&) = 0;
eseckler8c15fc32016-12-20 20:22:2040 };
khushalsagara693aa72016-08-16 22:18:0641
42 DelegatedFrameHostAndroid(ViewAndroid* view,
Alex Zhang96cb9e712017-07-07 21:03:4743 cc::FrameSinkManager* frame_sink_manager,
xlai9351829f2017-01-27 18:39:1344 Client* client,
Fady Samueld5c26182017-07-12 02:43:3345 const viz::FrameSinkId& frame_sink_id);
khushalsagara693aa72016-08-16 22:18:0646
47 ~DelegatedFrameHostAndroid() override;
48
Fady Samueld5c26182017-07-12 02:43:3349 void SubmitCompositorFrame(const viz::LocalSurfaceId& local_surface_id,
samanse7398c552017-03-21 21:36:2850 cc::CompositorFrame frame);
eseckler9404a232017-05-22 14:49:4351 void DidNotProduceFrame(const cc::BeginFrameAck& ack);
khushalsagara693aa72016-08-16 22:18:0652
53 void DestroyDelegatedContent();
54
55 bool HasDelegatedContent() const;
56
Fady Samueld5c26182017-07-12 02:43:3357 viz::FrameSinkId GetFrameSinkId() const;
khushalsagara693aa72016-08-16 22:18:0658
59 // Should only be called when the host has a content layer.
60 void RequestCopyOfSurface(
61 WindowAndroidCompositor* compositor,
62 const gfx::Rect& src_subrect_in_pixel,
63 cc::CopyOutputRequest::CopyOutputRequestCallback result_callback);
64
danakj1120f4c2016-09-15 02:05:3265 void CompositorFrameSinkChanged();
khushalsagara693aa72016-08-16 22:18:0666
ennea487a272016-09-30 19:56:1867 // Called when this DFH is attached/detached from a parent browser compositor
68 // and needs to be attached to the surface hierarchy.
starazaa231112017-02-07 17:53:2469 void AttachToCompositor(WindowAndroidCompositor* compositor);
70 void DetachFromCompositor();
ennea487a272016-09-30 19:56:1871
kenrb2b5d08b2017-03-08 22:31:2972 // Returns the ID for the current Surface.
Fady Samueld5c26182017-07-12 02:43:3373 viz::SurfaceId SurfaceId() const;
kenrb2b5d08b2017-03-08 22:31:2974
khushalsagara693aa72016-08-16 22:18:0675 private:
danakjc391f332017-07-12 20:45:5276 // viz::CompositorFrameSinkSupportClient implementation.
samans8d3604f2017-04-11 22:15:3077 void DidReceiveCompositorFrameAck(
danakj30464ba12017-06-29 21:26:4578 const std::vector<cc::ReturnedResource>& resources) override;
samansb779eca2017-03-02 22:16:3779 void OnBeginFrame(const cc::BeginFrameArgs& args) override;
danakj30464ba12017-06-29 21:26:4580 void ReclaimResources(
81 const std::vector<cc::ReturnedResource>& resources) override;
Fady Samueld5c26182017-07-12 02:43:3382 void WillDrawSurface(const viz::LocalSurfaceId& local_surface_id,
samansb779eca2017-03-02 22:16:3783 const gfx::Rect& damage_rect) override;
84
85 // cc::ExternalBeginFrameSourceClient implementation.
86 void OnNeedsBeginFrames(bool needs_begin_frames) override;
samansb779eca2017-03-02 22:16:3787
88 void CreateNewCompositorFrameSinkSupport();
khushalsagara693aa72016-08-16 22:18:0689
Fady Samueld5c26182017-07-12 02:43:3390 const viz::FrameSinkId frame_sink_id_;
fsamuelb6acafa2016-10-04 03:21:5291
khushalsagara693aa72016-08-16 22:18:0692 ViewAndroid* view_;
93
Alex Zhang96cb9e712017-07-07 21:03:4794 cc::FrameSinkManager* const frame_sink_manager_;
starazaa231112017-02-07 17:53:2495 WindowAndroidCompositor* registered_parent_compositor_ = nullptr;
eseckler8c15fc32016-12-20 20:22:2096 Client* client_;
khushalsagara693aa72016-08-16 22:18:0697
danakjc391f332017-07-12 20:45:5298 std::unique_ptr<viz::CompositorFrameSinkSupport> support_;
samansb779eca2017-03-02 22:16:3799 cc::ExternalBeginFrameSource begin_frame_source_;
khushalsagara693aa72016-08-16 22:18:06100
Fady Samuel1a21156e2017-07-13 04:57:29101 viz::SurfaceInfo surface_info_;
samanse7398c552017-03-21 21:36:28102 bool has_transparent_background_ = false;
khushalsagara693aa72016-08-16 22:18:06103
104 scoped_refptr<cc::SurfaceLayer> content_layer_;
105
khushalsagara693aa72016-08-16 22:18:06106 DISALLOW_COPY_AND_ASSIGN(DelegatedFrameHostAndroid);
107};
108
109} // namespace ui
110
111#endif // UI_ANDROID_DELEGATED_FRAME_HOST_ANDROID_H_