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
|
// Copyright 2024 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_COMMON_QUADS_FRAME_INTERVAL_INPUTS_H_
#define COMPONENTS_VIZ_COMMON_QUADS_FRAME_INTERVAL_INPUTS_H_
#include <cstdint>
#include <string>
#include <vector>
#include "base/time/time.h"
#include "components/viz/common/viz_common_export.h"
namespace viz {
// Information passed from viz clients used to compute the overall ideal frame
// interval. Information should generally be descriptive of information in
// clients, but clients should generally avoid doing aggregation itself to allow
// viz decide using full description of all clients. For example clients should
// not compute a preferred frame interval unless the content it's displaying
// actually has a fixed or specified frame interval.
// This file should generally avoid OS build flags checks (eg IS_ANDROID),
// though exception can be made for if the information is expensive to compute,
// or if feature is really specific to a specific platform.
// The type of content that has a fixed or specified frame interval.
enum class ContentFrameIntervalType {
kVideo,
kAnimatingImage, // Gifs.
kScrollBarFadeOutAnimation,
kCompositorScroll,
};
VIZ_COMMON_EXPORT std::string ContentFrameIntervalTypeToString(
ContentFrameIntervalType type);
struct VIZ_COMMON_EXPORT ContentFrameIntervalInfo {
// Type of content that has fixed content frame interval.
ContentFrameIntervalType type = ContentFrameIntervalType::kVideo;
// Content frame interval. 0 for kCompositorScroll.
base::TimeDelta frame_interval;
// Number of _additional_ content this entry refers to. Eg if there are 2
// videos with the same content frame interval, then they can share the same
// entry and `duplicate_count` should be set to 1.
uint32_t duplicate_count = 0u;
};
struct VIZ_COMMON_EXPORT FrameIntervalInputs {
FrameIntervalInputs();
FrameIntervalInputs(const FrameIntervalInputs& other);
~FrameIntervalInputs();
// Frame time used to produce this frame. This is used to selectively ignore
// clients that has not submitted a frame for some time.
base::TimeTicks frame_time;
// Ported from old system that client has received user input recently.
// Ideally this should be limited to latency-sensitive animations only, such
// as touch scrolling, in the future.
bool has_input = false;
// Frame has input from user. This intentionally excludes non-user input
// events such as fling. In contrast to `has_input`, this only applies to the
// current frame, is set to false immediately instead of with a delay; this
// also means it can flip back and forth frequently.
bool has_user_input = false;
// The maximum of x or y scroll speed.
float major_scroll_speed_in_pixels_per_second = 0.f;
// Any content that has a fixed or specified content frame interval can be
// added to `content_interval_info`. If `content_interval_info` contains
// information on _all_ updating content in this client , then client can
// indicate this by setting `has_only_content_frame_interval_updates` to true.
std::vector<ContentFrameIntervalInfo> content_interval_info;
bool has_only_content_frame_interval_updates = false;
};
} // namespace viz
#endif // COMPONENTS_VIZ_COMMON_QUADS_FRAME_INTERVAL_INPUTS_H_
|