1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
// Copyright 2015 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_CA_LAYER_OVERLAY_H_
#define COMPONENTS_VIZ_SERVICE_DISPLAY_CA_LAYER_OVERLAY_H_
#include "base/containers/flat_map.h"
#include "base/memory/ref_counted.h"
#include "components/viz/common/quads/aggregated_render_pass.h"
#include "components/viz/common/quads/compositor_render_pass.h"
#include "components/viz/service/display/overlay_candidate.h"
#include "components/viz/service/viz_service_export.h"
#include "gpu/command_buffer/common/mailbox.h"
#include "third_party/skia/include/core/SkColor.h"
#include "ui/gfx/ca_layer_result.h"
#include "ui/gfx/geometry/rect_f.h"
#include "ui/gfx/geometry/rrect_f.h"
#include "ui/gfx/geometry/transform.h"
#include "ui/gfx/hdr_metadata.h"
#include "ui/gfx/video_types.h"
#include "ui/gl/ca_renderer_layer_params.h"
namespace viz {
class DisplayResourceProvider;
class DrawQuad;
// TODO(weiliangc): Eventually fold this class into OverlayProcessorMac.
class VIZ_SERVICE_EXPORT CALayerOverlayProcessor {
public:
CALayerOverlayProcessor();
CALayerOverlayProcessor(const CALayerOverlayProcessor&) = delete;
CALayerOverlayProcessor& operator=(const CALayerOverlayProcessor&) = delete;
virtual ~CALayerOverlayProcessor() = default;
bool AreClipSettingsValid(const OverlayCandidate& ca_layer_overlay,
OverlayCandidateList* ca_layer_overlay_list) const;
void PutForcedOverlayContentIntoUnderlays(
const DisplayResourceProvider* resource_provider,
AggregatedRenderPass* render_pass,
const gfx::RectF& display_rect,
QuadList* quad_list,
const base::flat_map<AggregatedRenderPassId,
raw_ptr<cc::FilterOperations, CtnExperimental>>&
render_pass_filters,
const base::flat_map<AggregatedRenderPassId,
raw_ptr<cc::FilterOperations, CtnExperimental>>&
render_pass_backdrop_filters,
OverlayCandidateList* ca_layer_overlays) const;
// Returns true if all quads in the root render pass have been replaced by
// CALayerOverlays. Virtual for testing.
virtual bool ProcessForCALayerOverlays(
AggregatedRenderPass* render_passes,
const DisplayResourceProvider* resource_provider,
const gfx::RectF& display_rect,
const base::flat_map<AggregatedRenderPassId,
raw_ptr<cc::FilterOperations, CtnExperimental>>&
render_pass_filters,
const base::flat_map<AggregatedRenderPassId,
raw_ptr<cc::FilterOperations, CtnExperimental>>&
render_pass_backdrop_filters,
OverlayCandidateList* ca_layer_overlays);
gfx::CALayerResult ca_layer_result() { return ca_layer_result_; }
private:
// Returns whether future candidate quads should be considered
bool PutQuadInSeparateOverlay(
QuadList::Iterator at,
const DisplayResourceProvider* resource_provider,
AggregatedRenderPass* render_pass,
const gfx::RectF& display_rect,
const DrawQuad* quad,
const base::flat_map<AggregatedRenderPassId,
raw_ptr<cc::FilterOperations, CtnExperimental>>&
render_pass_filters,
const base::flat_map<AggregatedRenderPassId,
raw_ptr<cc::FilterOperations, CtnExperimental>>&
render_pass_backdrop_filters,
gfx::ProtectedVideoType protected_video_type,
OverlayCandidateList* ca_layer_overlays) const;
void SaveCALayerResult(gfx::CALayerResult result);
// Set to false if the APIs required for overlays are not present, or the
// feature has been disabled.
const bool overlays_allowed_;
// Controls the feature of replacying all quads with overlays is enabled.
const bool enable_ca_renderer_;
// Controls the feature of putting HDR videos into underlays if the
// CARenderer fails (so that we can use the tone mapping provided by macOS).
const bool enable_hdr_underlays_;
size_t layer_limit_with_many_videos_ = 0;
size_t layer_limit_default_ = 0;
// The error code in ProcessForCALayerOverlays()
gfx::CALayerResult ca_layer_result_ = gfx::kCALayerSuccess;
};
} // namespace viz
#endif // COMPONENTS_VIZ_SERVICE_DISPLAY_CA_LAYER_OVERLAY_H_
|