1// Copyright 2013 The Flutter 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 FLUTTER_SHELL_TEST_EXTERNAL_VIEW_EMBEDDER_H_
6#define FLUTTER_SHELL_TEST_EXTERNAL_VIEW_EMBEDDER_H_
7
8#include "flutter/flow/embedded_views.h"
9#include "flutter/fml/raster_thread_merger.h"
10
11namespace flutter {
12
13//------------------------------------------------------------------------------
14/// @brief The external view embedder used by |ShellTestPlatformViewGL|
15///
16class ShellTestExternalViewEmbedder final : public ExternalViewEmbedder {
17 public:
18 using EndFrameCallBack = std::function<void(bool)>;
19
20 ShellTestExternalViewEmbedder(const EndFrameCallBack& end_frame_call_back,
21 PostPrerollResult post_preroll_result)
22 : end_frame_call_back_(end_frame_call_back),
23 post_preroll_result_(post_preroll_result) {}
24
25 ~ShellTestExternalViewEmbedder() = default;
26
27 private:
28 // |ExternalViewEmbedder|
29 void CancelFrame() override;
30
31 // |ExternalViewEmbedder|
32 void BeginFrame(
33 SkISize frame_size,
34 GrDirectContext* context,
35 double device_pixel_ratio,
36 fml::RefPtr<fml::RasterThreadMerger> raster_thread_merger) override;
37
38 // |ExternalViewEmbedder|
39 void PrerollCompositeEmbeddedView(
40 int view_id,
41 std::unique_ptr<EmbeddedViewParams> params) override;
42
43 // |ExternalViewEmbedder|
44 PostPrerollResult PostPrerollAction(
45 fml::RefPtr<fml::RasterThreadMerger> raster_thread_merger) override;
46
47 // |ExternalViewEmbedder|
48 std::vector<SkCanvas*> GetCurrentCanvases() override;
49
50 // |ExternalViewEmbedder|
51 SkCanvas* CompositeEmbeddedView(int view_id) override;
52
53 // |ExternalViewEmbedder|
54 void SubmitFrame(GrDirectContext* context,
55 std::unique_ptr<SurfaceFrame> frame) override;
56
57 // |ExternalViewEmbedder|
58 void EndFrame(
59 bool should_resubmit_frame,
60 fml::RefPtr<fml::RasterThreadMerger> raster_thread_merger) override;
61
62 // |ExternalViewEmbedder|
63 SkCanvas* GetRootCanvas() override;
64
65 const EndFrameCallBack end_frame_call_back_;
66 const PostPrerollResult post_preroll_result_;
67
68 FML_DISALLOW_COPY_AND_ASSIGN(ShellTestExternalViewEmbedder);
69};
70
71} // namespace flutter
72
73#endif // FLUTTER_SHELL_TEST_EXTERNAL_VIEW_EMBEDDER_H_
74