blob: cc86ace6e9658f8beb9211ab1f81aa8618609f5e [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "cc/trees/frame_data.h"
#include <utility>
#include "base/test/trace_test_utils.h"
#include "base/trace_event/trace_config.h"
#include "base/trace_event/trace_log.h"
#include "components/viz/common/quads/compositor_render_pass.h"
#include "components/viz/common/quads/solid_color_draw_quad.h"
#include "components/viz/common/quads/trees_in_viz_timing.h"
#include "components/viz/test/begin_frame_args_test.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gfx/geometry/size.h"
namespace cc {
TEST(FrameDataTest, FrameDataAsValueTest) {
base::test::TracingEnvironment tracing_env;
base::trace_event::TraceLog::GetInstance()->SetEnabled(
base::trace_event::TraceConfig(TRACE_DISABLED_BY_DEFAULT("viz.quads"),
""));
FrameData frame;
auto begin_frame_args = viz::CreateBeginFrameArgsForTesting(
BEGINFRAME_FROM_HERE, viz::BeginFrameArgs::kManualSourceId, 1,
base::TimeTicks() + base::Milliseconds(1));
frame.begin_frame_ack = viz::BeginFrameAck(begin_frame_args, true);
frame.origin_begin_main_frame_args = begin_frame_args;
// Create one fake render pass
auto render_pass = viz::CompositorRenderPass::Create();
viz::SharedQuadState* shared_quad_state =
render_pass->CreateAndAppendSharedQuadState();
gfx::Size content_bounds;
gfx::Rect quad_rect(content_bounds);
auto* quad = render_pass->CreateAndAppendDrawQuad<viz::SolidColorDrawQuad>();
quad->SetNew(shared_quad_state, quad_rect, quad_rect, SkColors::kTransparent,
false);
viz::CompositorRenderPassList render_pass_list;
render_pass_list.push_back(std::move(render_pass));
frame.render_passes = std::move(render_pass_list);
std::string frame_string = frame.ToString();
// Test that the frame has some strings set.
EXPECT_TRUE(base::Contains(frame_string, ("\"has_no_damage\": false")));
EXPECT_TRUE(base::Contains(frame_string, ("\"render_passes\": [ {")));
// Disable tracelog to avoid teardown failures.
base::trace_event::TraceLog::GetInstance()->SetDisabled();
}
TEST(FrameDataTest, FrameDataSetTreesInVizTimestamps) {
FrameData frame;
viz::TreesInVizTiming timing_details{
base::TimeTicks::Now(), base::TimeTicks::Now() + base::Milliseconds(1),
base::TimeTicks::Now() + base::Milliseconds(2),
base::TimeTicks::Now() + base::Milliseconds(3)};
frame.set_trees_in_viz_timestamps(timing_details);
ASSERT_EQ(frame.trees_in_viz_timing_details->start_update_display_tree,
timing_details.start_update_display_tree);
ASSERT_EQ(frame.trees_in_viz_timing_details->start_prepare_to_draw,
timing_details.start_prepare_to_draw);
ASSERT_EQ(frame.trees_in_viz_timing_details->start_draw_layers,
timing_details.start_draw_layers);
ASSERT_EQ(frame.trees_in_viz_timing_details->submit_compositor_frame,
timing_details.submit_compositor_frame);
}
} // namespace cc