blob: 977f03b053d977efb1bdf03e0d9f8bf71d90c6a5 [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"
12#include "cc/surfaces/surface_factory.h"
13#include "cc/surfaces/surface_factory_client.h"
14#include "ui/android/ui_android_export.h"
15#include "ui/gfx/selection_bound.h"
16
17namespace cc {
18
19class CompositorFrame;
khushalsagara693aa72016-08-16 22:18:0620class Layer;
khushalsagara693aa72016-08-16 22:18:0621class SurfaceManager;
22class SurfaceLayer;
23class SurfaceIdAllocator;
24enum class SurfaceDrawStatus;
25
26} // namespace cc
27
28namespace ui {
29class ViewAndroid;
30class WindowAndroidCompositor;
31
32class UI_ANDROID_EXPORT DelegatedFrameHostAndroid
33 : public cc::SurfaceFactoryClient {
34 public:
eseckler8c15fc32016-12-20 20:22:2035 class Client {
36 public:
37 virtual void SetBeginFrameSource(
38 cc::BeginFrameSource* begin_frame_source) = 0;
39 virtual void ReturnResources(const cc::ReturnedResourceArray&) = 0;
40 };
khushalsagara693aa72016-08-16 22:18:0641
42 DelegatedFrameHostAndroid(ViewAndroid* view,
43 SkColor background_color,
eseckler8c15fc32016-12-20 20:22:2044 Client* client);
khushalsagara693aa72016-08-16 22:18:0645
46 ~DelegatedFrameHostAndroid() override;
47
48 void SubmitCompositorFrame(cc::CompositorFrame frame,
49 cc::SurfaceFactory::DrawCallback draw_callback);
50
51 void DestroyDelegatedContent();
52
53 bool HasDelegatedContent() const;
54
fsamuele0f705b2016-10-01 14:07:1455 cc::FrameSinkId GetFrameSinkId() const;
khushalsagara693aa72016-08-16 22:18:0656
57 // Should only be called when the host has a content layer.
58 void RequestCopyOfSurface(
59 WindowAndroidCompositor* compositor,
60 const gfx::Rect& src_subrect_in_pixel,
61 cc::CopyOutputRequest::CopyOutputRequestCallback result_callback);
62
danakj1120f4c2016-09-15 02:05:3263 void CompositorFrameSinkChanged();
khushalsagara693aa72016-08-16 22:18:0664
65 void UpdateBackgroundColor(SkColor color);
66
khushalsagara693aa72016-08-16 22:18:0667 void UpdateContainerSizeinDIP(const gfx::Size& size_in_dip);
68
ennea487a272016-09-30 19:56:1869 // Called when this DFH is attached/detached from a parent browser compositor
70 // and needs to be attached to the surface hierarchy.
fsamuele0f705b2016-10-01 14:07:1471 void RegisterFrameSinkHierarchy(const cc::FrameSinkId& parent_id);
72 void UnregisterFrameSinkHierarchy();
ennea487a272016-09-30 19:56:1873
khushalsagara693aa72016-08-16 22:18:0674 private:
75 // cc::SurfaceFactoryClient implementation.
76 void ReturnResources(const cc::ReturnedResourceArray& resources) override;
77 void SetBeginFrameSource(cc::BeginFrameSource* begin_frame_source) override;
78
79 void UpdateBackgroundLayer();
80
fsamuelb6acafa2016-10-04 03:21:5281 const cc::FrameSinkId frame_sink_id_;
82
khushalsagara693aa72016-08-16 22:18:0683 ViewAndroid* view_;
84
85 cc::SurfaceManager* surface_manager_;
86 std::unique_ptr<cc::SurfaceIdAllocator> surface_id_allocator_;
fsamuele0f705b2016-10-01 14:07:1487 cc::FrameSinkId registered_parent_frame_sink_id_;
eseckler8c15fc32016-12-20 20:22:2088 Client* client_;
khushalsagara693aa72016-08-16 22:18:0689
90 std::unique_ptr<cc::SurfaceFactory> surface_factory_;
91
92 struct FrameData {
93 FrameData();
94 ~FrameData();
95
fsamuel01f36202016-10-06 01:08:2896 cc::LocalFrameId local_frame_id;
khushalsagara693aa72016-08-16 22:18:0697 gfx::Size surface_size;
ianwene5fc5782016-08-18 04:05:1598 float top_controls_height;
99 float top_controls_shown_ratio;
100 float bottom_controls_height;
101 float bottom_controls_shown_ratio;
khushalsagara693aa72016-08-16 22:18:06102 cc::Selection<gfx::SelectionBound> viewport_selection;
jbauman862bef92016-09-08 00:32:47103 bool has_transparent_background;
khushalsagara693aa72016-08-16 22:18:06104 };
105 std::unique_ptr<FrameData> current_frame_;
106
107 scoped_refptr<cc::SurfaceLayer> content_layer_;
108
109 scoped_refptr<cc::Layer> background_layer_;
110
111 gfx::Size container_size_in_dip_;
112
113 DISALLOW_COPY_AND_ASSIGN(DelegatedFrameHostAndroid);
114};
115
116} // namespace ui
117
118#endif // UI_ANDROID_DELEGATED_FRAME_HOST_ANDROID_H_