#ifndef CC_TREES_COMMIT_STATE_H_
#define CC_TREES_COMMIT_STATE_H_
#include <array>
#include <memory>
#include <tuple>
#include <unordered_map>
#include <utility>
#include <vector>
#include "base/containers/flat_map.h"
#include "base/containers/flat_set.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/raw_ptr_exclusion.h"
#include "base/time/time.h"
#include "cc/benchmarks/micro_benchmark_impl.h"
#include "cc/cc_export.h"
#include "cc/debug/layer_tree_debug_state.h"
#include "cc/input/event_listener_properties.h"
#include "cc/input/layer_selection_bound.h"
#include "cc/input/overscroll_behavior.h"
#include "cc/input/page_scale_animation.h"
#include "cc/layers/layer.h"
#include "cc/layers/layer_list_iterator.h"
#include "cc/metrics/begin_main_frame_metrics.h"
#include "cc/metrics/event_metrics.h"
#include "cc/paint/draw_image.h"
#include "cc/resources/ui_resource_request.h"
#include "cc/trees/begin_main_frame_trace_id.h"
#include "cc/trees/browser_controls_params.h"
#include "cc/trees/layer_tree_host_client.h"
#include "cc/trees/presentation_time_callback_buffer.h"
#include "cc/trees/render_frame_metadata.h"
#include "cc/trees/swap_promise.h"
#include "cc/trees/viewport_property_ids.h"
#include "cc/view_transition/view_transition_request.h"
#include "components/viz/common/surfaces/local_surface_id.h"
#include "third_party/skia/include/core/SkColor.h"
#include "ui/gfx/delegated_ink_metadata.h"
#include "ui/gfx/display_color_spaces.h"
#include "ui/gfx/geometry/rect.h"
#include "ui/gfx/geometry/size.h"
#include "ui/gfx/geometry/vector2d_f.h"
#include "ui/gfx/overlay_transform.h"
#include "arkweb/build/features/features.h"
namespace cc {
static constexpr int kInvalidSourceFrameNumber = -1;
struct CC_EXPORT CommitState {
CommitState();
CommitState(const CommitState&);
CommitState& operator=(const CommitState&) = delete;
~CommitState();
base::flat_set<viz::SurfaceRange> SurfaceRanges() const;
EventListenerProperties GetEventListenerProperties(EventListenerClass) const;
base::flat_map<viz::SurfaceRange, int> surface_ranges;
base::TimeDelta visual_properties_update_duration;
bool needs_gpu_rasterization_histogram = false;
bool have_scroll_event_handlers = false;
bool is_external_pinch_gesture_active = false;
bool is_viewport_mobile_optimized = false;
bool may_throttle_if_undrawn_frames = true;
bool prefers_reduced_motion = false;
BrowserControlsParams browser_controls_params;
std::array<EventListenerProperties, kEventListenerClassCount>
event_listener_properties = {EventListenerProperties::kNone};
float bottom_controls_shown_ratio = 0.f;
float device_scale_factor = 1.f;
float external_page_scale_factor = 1.f;
float load_progress = 0.f;
float max_page_scale_factor = 1.f;
float min_page_scale_factor = 1.f;
float page_scale_factor = 1.f;
float painted_device_scale_factor = 1.f;
float top_controls_shown_ratio = 0.f;
gfx::DisplayColorSpaces display_color_spaces;
gfx::OverlayTransform display_transform_hint = gfx::OVERLAY_TRANSFORM_NONE;
gfx::Rect device_viewport_rect;
gfx::Size visual_device_viewport_size;
gfx::Vector2dF elastic_overscroll;
gfx::InsetsF max_safe_area_insets;
int hud_layer_id = Layer::INVALID_ID;
int source_frame_number = 0;
LayerSelection selection;
#if BUILDFLAG(ARKWEB_MENU)
gfx::Rect clipped_selection_bounds;
#endif
LayerTreeDebugState debug_state;
OverscrollBehavior overscroll_behavior;
SkColor4f background_color = SkColors::kWhite;
ViewportPropertyIds viewport_property_ids;
viz::LocalSurfaceId local_surface_id_from_parent;
bool clear_caches_on_next_commit = false;
bool force_send_metadata_request = false;
bool commit_waits_for_activation = false;
bool needs_full_tree_sync = false;
bool needs_surface_ranges_sync = false;
bool new_local_surface_id_request = false;
bool next_commit_forces_recalculate_raster_scales = false;
bool next_commit_forces_redraw = false;
PropertyChangeForcesCommitCriteria property_change_forces_commit_criteria =
PropertyChangeForcesCommitCriteria::kNone;
BeginMainFrameTraceId trace_id{0};
EventMetrics::List event_metrics;
std::unique_ptr<BeginMainFrameMetrics> begin_main_frame_metrics;
std::unique_ptr<gfx::DelegatedInkMetadata> delegated_ink_metadata;
std::unique_ptr<PendingPageScaleAnimation> pending_page_scale_animation;
std::vector<std::tuple<int, std::unique_ptr<DrawImage>, bool>>
queued_image_decodes;
std::vector<PresentationTimeCallbackBuffer::Callback>
pending_presentation_callbacks;
std::vector<PresentationTimeCallbackBuffer::SuccessfulCallbackWithDetails>
pending_successful_presentation_callbacks;
std::vector<std::unique_ptr<MicroBenchmarkImpl>> benchmarks;
std::vector<std::unique_ptr<ViewTransitionRequest>> view_transition_requests;
std::vector<std::unique_ptr<SwapPromise>> swap_promises;
std::vector<UIResourceRequest> ui_resource_request_queue;
base::flat_map<UIResourceId, gfx::Size> ui_resource_sizes;
PropertyTreesChangeState property_trees_change_state;
RAW_PTR_EXCLUSION base::flat_set<Layer*> layers_that_should_push_properties;
base::flat_set<ElementId> scrollers_clobbering_active_value;
base::UnguessableToken screenshot_destination_token;
int64_t primary_main_frame_item_sequence_number =
RenderFrameMetadata::kInvalidItemSequenceNumber;
};
struct CC_EXPORT ThreadUnsafeCommitState {
ThreadUnsafeCommitState(MutatorHost* mh,
const ProtectedSequenceSynchronizer& synchronizer);
~ThreadUnsafeCommitState();
LayerListConstIterator begin() const {
return LayerListConstIterator(root_layer.get());
}
LayerListConstIterator end() const { return LayerListConstIterator(nullptr); }
raw_ptr<MutatorHost> mutator_host;
PropertyTrees property_trees;
scoped_refptr<Layer> root_layer;
};
struct CC_EXPORT CommitTimestamps {
base::TimeTicks start;
base::TimeTicks finish;
};
}
#endif