blob: e2dd65698c18258454b77fac8823e869fb5e571c [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"
samansb779eca2017-03-02 22:16:3712#include "cc/surfaces/compositor_frame_sink_support.h"
13#include "cc/surfaces/compositor_frame_sink_support_client.h"
samanse7398c552017-03-21 21:36:2814#include "cc/surfaces/surface_info.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 SurfaceManager;
21class 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
samansb779eca2017-03-02 22:16:3731 : public cc::CompositorFrameSinkSupportClient,
32 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,
khushalsagar31690fb2017-02-28 23:23:4843 cc::SurfaceManager* surface_manager,
xlai9351829f2017-01-27 18:39:1344 Client* client,
45 const cc::FrameSinkId& frame_sink_id);
khushalsagara693aa72016-08-16 22:18:0646
47 ~DelegatedFrameHostAndroid() override;
48
samanse7398c552017-03-21 21:36:2849 void SubmitCompositorFrame(const cc::LocalSurfaceId& local_surface_id,
50 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
fsamuele0f705b2016-10-01 14:07:1457 cc::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.
73 cc::SurfaceId SurfaceId() const;
74
khushalsagara693aa72016-08-16 22:18:0675 private:
samansb779eca2017-03-02 22:16:3776 // cc::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;
samansb779eca2017-03-02 22:16:3782 void WillDrawSurface(const cc::LocalSurfaceId& local_surface_id,
83 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
fsamuelb6acafa2016-10-04 03:21:5290 const cc::FrameSinkId frame_sink_id_;
91
khushalsagara693aa72016-08-16 22:18:0692 ViewAndroid* view_;
93
94 cc::SurfaceManager* surface_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
samansb779eca2017-03-02 22:16:3798 std::unique_ptr<cc::CompositorFrameSinkSupport> support_;
99 cc::ExternalBeginFrameSource begin_frame_source_;
khushalsagara693aa72016-08-16 22:18:06100
samanse7398c552017-03-21 21:36:28101 cc::SurfaceInfo surface_info_;
102 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_