blob: 0e0991e628f28ccd00b315b31d7c413f6ace39df [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;
39 virtual void ReclaimResources(const cc::ReturnedResourceArray&) = 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(
78 const cc::ReturnedResourceArray& resources) override;
samansb779eca2017-03-02 22:16:3779 void OnBeginFrame(const cc::BeginFrameArgs& args) override;
80 void ReclaimResources(const cc::ReturnedResourceArray& resources) override;
81 void WillDrawSurface(const cc::LocalSurfaceId& local_surface_id,
82 const gfx::Rect& damage_rect) override;
83
84 // cc::ExternalBeginFrameSourceClient implementation.
85 void OnNeedsBeginFrames(bool needs_begin_frames) override;
samansb779eca2017-03-02 22:16:3786
87 void CreateNewCompositorFrameSinkSupport();
khushalsagara693aa72016-08-16 22:18:0688
fsamuelb6acafa2016-10-04 03:21:5289 const cc::FrameSinkId frame_sink_id_;
90
khushalsagara693aa72016-08-16 22:18:0691 ViewAndroid* view_;
92
93 cc::SurfaceManager* surface_manager_;
starazaa231112017-02-07 17:53:2494 WindowAndroidCompositor* registered_parent_compositor_ = nullptr;
eseckler8c15fc32016-12-20 20:22:2095 Client* client_;
khushalsagara693aa72016-08-16 22:18:0696
samansb779eca2017-03-02 22:16:3797 std::unique_ptr<cc::CompositorFrameSinkSupport> support_;
98 cc::ExternalBeginFrameSource begin_frame_source_;
khushalsagara693aa72016-08-16 22:18:0699
samanse7398c552017-03-21 21:36:28100 cc::SurfaceInfo surface_info_;
101 bool has_transparent_background_ = false;
khushalsagara693aa72016-08-16 22:18:06102
103 scoped_refptr<cc::SurfaceLayer> content_layer_;
104
khushalsagara693aa72016-08-16 22:18:06105 DISALLOW_COPY_AND_ASSIGN(DelegatedFrameHostAndroid);
106};
107
108} // namespace ui
109
110#endif // UI_ANDROID_DELEGATED_FRAME_HOST_ANDROID_H_