1 // Copyright 2017 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 COMPONENTS_VIZ_TEST_COMPOSITOR_FRAME_HELPERS_H_ 6 #define COMPONENTS_VIZ_TEST_COMPOSITOR_FRAME_HELPERS_H_ 7 8 #include <memory> 9 #include <vector> 10 11 #include "base/optional.h" 12 #include "components/viz/common/quads/compositor_frame.h" 13 #include "components/viz/common/quads/compositor_render_pass.h" 14 #include "components/viz/common/quads/frame_deadline.h" 15 #include "components/viz/common/resources/transferable_resource.h" 16 #include "components/viz/common/surfaces/surface_id.h" 17 #include "components/viz/service/display/aggregated_frame.h" 18 #include "ui/latency/latency_info.h" 19 20 namespace viz { 21 22 // A builder class for constructing CompositorFrames in tests. The initial 23 // CompositorFrame will have a valid BeginFrameAck and device_scale_factor of 1. 24 // At least one RenderPass must be added for the CompositorFrame to be valid. 25 class CompositorFrameBuilder { 26 public: 27 CompositorFrameBuilder(); 28 ~CompositorFrameBuilder(); 29 30 // Builds the CompositorFrame and leaves |this| in an invalid state. This can 31 // only be called once. 32 CompositorFrame Build(); 33 34 // Adds a render pass with 20x20 output_rect and empty damage_rect. 35 CompositorFrameBuilder& AddDefaultRenderPass(); 36 // Adds a render pass with specified |output_rect| and |damage_rect|. 37 CompositorFrameBuilder& AddRenderPass(const gfx::Rect& output_rect, 38 const gfx::Rect& damage_rect); 39 CompositorFrameBuilder& AddRenderPass( 40 std::unique_ptr<CompositorRenderPass> render_pass); 41 // Sets list of render passes. The list of render passes must be empty when 42 // this is called. 43 CompositorFrameBuilder& SetRenderPassList( 44 CompositorRenderPassList render_pass_list); 45 46 CompositorFrameBuilder& AddTransferableResource( 47 TransferableResource resource); 48 // Sets list of transferable resources. The list of transferable resources 49 // must be empty when this is called. 50 CompositorFrameBuilder& SetTransferableResources( 51 std::vector<TransferableResource> resource_list); 52 53 // Sets the BeginFrameAck. This replaces the default BeginFrameAck. 54 CompositorFrameBuilder& SetBeginFrameAck(const BeginFrameAck& ack); 55 CompositorFrameBuilder& SetDeviceScaleFactor(float device_scale_factor); 56 CompositorFrameBuilder& AddLatencyInfo(ui::LatencyInfo latency_info); 57 CompositorFrameBuilder& AddLatencyInfos( 58 std::vector<ui::LatencyInfo> latency_info); 59 CompositorFrameBuilder& SetReferencedSurfaces( 60 std::vector<SurfaceRange> referenced_surfaces); 61 CompositorFrameBuilder& SetActivationDependencies( 62 std::vector<SurfaceId> activation_dependencies); 63 CompositorFrameBuilder& SetDeadline(const FrameDeadline& deadline); 64 CompositorFrameBuilder& SetSendFrameTokenToEmbedder(bool send); 65 66 private: 67 CompositorFrame MakeInitCompositorFrame() const; 68 69 base::Optional<CompositorFrame> frame_; 70 CompositorRenderPassId::Generator render_pass_id_generator_; 71 72 DISALLOW_COPY_AND_ASSIGN(CompositorFrameBuilder); 73 }; 74 75 // Creates a CompositorFrame that has a render pass with 20x20 output_rect and 76 // empty damage_rect. This CompositorFrame is valid and can be sent over IPC. 77 CompositorFrame MakeDefaultCompositorFrame(); 78 79 // Makes an aggregated frame out of the default compositor frame. 80 AggregatedFrame MakeDefaultAggregatedFrame(size_t num_render_passes = 1); 81 82 // Creates a CompositorFrame that will be valid once its render_pass_list is 83 // initialized. 84 CompositorFrame MakeEmptyCompositorFrame(); 85 86 } // namespace viz 87 88 #endif // COMPONENTS_VIZ_TEST_COMPOSITOR_FRAME_HELPERS_H_ 89