910e62b5创建于 1月15日历史提交
// 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