// Copyright 2021 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_VIZ_SERVICE_DISPLAY_RESOLVED_FRAME_DATA_H_ #define COMPONENTS_VIZ_SERVICE_DISPLAY_RESOLVED_FRAME_DATA_H_ #include <memory> #include <unordered_map> #include <vector> #include "base/containers/flat_map.h" #include "base/functional/bind_internal.h" #include "base/memory/raw_ptr.h" #include "components/viz/common/quads/aggregated_render_pass.h" #include "components/viz/common/quads/compositor_frame_metadata.h" #include "components/viz/common/quads/compositor_render_pass.h" #include "components/viz/common/quads/draw_quad.h" #include "components/viz/common/quads/offset_tag.h" #include "components/viz/common/resources/resource_id.h" #include "components/viz/common/surfaces/surface_id.h" #include "components/viz/service/display/display_resource_provider.h" #include "components/viz/service/surfaces/frame_index_constants.h" #include "components/viz/service/viz_service_export.h" namespace viz { class Surface; // Returns |damage_rect| field from the DrawQuad if it exists otherwise returns // an empty optional. const std::optional<gfx::Rect>& GetOptionalDamageRectFromQuad( const DrawQuad* quad); // Data associated with a DrawQuad in a resolved frame. struct VIZ_SERVICE_EXPORT ResolvedQuadData { … }; // Render pass data that is fixed for the lifetime of ResolvedPassData. struct VIZ_SERVICE_EXPORT FixedPassData { … }; class ResolvedPassData; // Render pass data that must be recomputed each aggregation. Unlike // FixedPassData this changes each aggregation depending on what other // Surfaces/CompositorFrames are part of the draw tree. struct VIZ_SERVICE_EXPORT AggregationPassData { … }; // Render pass data that must be recomputed each aggregation and needs to be // persisted to next aggregation. struct PersistentPassData { … }; // Data associated with a CompositorRenderPass in a resolved frame. Has fixed // portion that does not change and an aggregation portion that does change. class VIZ_SERVICE_EXPORT ResolvedPassData { … }; enum FrameDamageType { … }; // Holds computed information for a particular Surface+CompositorFrame. The // CompositorFrame computed information will be updated whenever the active // frame for the surface has changed. On destruction any resources registered // with DisplayResourceProvider will be released. // // The first time a resolved frame is needed during aggregation // UpdateForAggregation() then UpdateOffsetTags() must be called. That will // populate all of the internal data. During aggregation the fixed data is // viewed and aggregation data can be modified. After aggregation is over // ResetAfterAggregation() will be called which resets aggregation data. class VIZ_SERVICE_EXPORT ResolvedFrameData { … }; } // namespace viz #endif // COMPONENTS_VIZ_SERVICE_DISPLAY_RESOLVED_FRAME_DATA_H_