blob: fce7a6da1d4ed59122507fa23d894eb92a3f0933 [file] [log] [blame]
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "cc/metrics/total_frame_counter.h"
#include "components/viz/common/frame_sinks/begin_frame_args.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace cc {
namespace {
const uint64_t kSourceId = 1;
TEST(TotalFrameCounterTest, Basic) {
TotalFrameCounter counter;
uint64_t sequence_number = 1;
auto frame_time = base::TimeTicks::Now();
const auto interval = base::TimeDelta::FromMillisecondsD(16.67);
auto args = viz::BeginFrameArgs::Create(
BEGINFRAME_FROM_HERE, kSourceId, sequence_number++, frame_time,
frame_time + interval, interval, viz::BeginFrameArgs::NORMAL);
counter.OnShow(frame_time);
counter.OnBeginFrame(args);
auto advance = base::TimeDelta::FromSeconds(1);
frame_time += advance;
counter.OnHide(frame_time);
EXPECT_EQ(counter.total_frames(), 60u);
}
TEST(TotalFrameCounterTest, BeginFrameIntervalChange) {
TotalFrameCounter counter;
uint64_t sequence_number = 1;
auto frame_time = base::TimeTicks::Now();
auto interval = base::TimeDelta::FromMillisecondsD(16.67);
// Make the page visible at the default frame rate.
auto args = viz::BeginFrameArgs::Create(
BEGINFRAME_FROM_HERE, kSourceId, sequence_number++, frame_time,
frame_time + interval, interval, viz::BeginFrameArgs::NORMAL);
counter.OnShow(frame_time);
counter.OnBeginFrame(args);
// After 10 seconds, change the frame rate to be 120fps.
interval = base::TimeDelta::FromMillisecondsD(8.33);
frame_time += base::TimeDelta::FromSeconds(10);
args = viz::BeginFrameArgs::Create(
BEGINFRAME_FROM_HERE, kSourceId, sequence_number++, frame_time,
frame_time + interval, interval, viz::BeginFrameArgs::NORMAL);
counter.OnBeginFrame(args);
// Hide the page after 10 more seconds.
auto advance = base::TimeDelta::FromSeconds(10);
frame_time += advance;
counter.OnHide(frame_time);
EXPECT_EQ(counter.total_frames(), 1800u);
}
TEST(TotalFrameCounterTest, VisibilityChange) {
TotalFrameCounter counter;
uint64_t sequence_number = 1;
auto frame_time = base::TimeTicks::Now();
auto interval = base::TimeDelta::FromMillisecondsD(16.67);
// Make the page visible at the default frame rate.
auto args = viz::BeginFrameArgs::Create(
BEGINFRAME_FROM_HERE, kSourceId, sequence_number++, frame_time,
frame_time + interval, interval, viz::BeginFrameArgs::NORMAL);
counter.OnShow(frame_time);
counter.OnBeginFrame(args);
// Hide the page after 10 seconds.
frame_time += base::TimeDelta::FromSeconds(10);
counter.OnHide(frame_time);
EXPECT_EQ(counter.total_frames(), 600u);
// After 20 more seconds, make the page visible again and keep it visible for
// 5 more seconds.
frame_time += base::TimeDelta::FromSeconds(20);
counter.OnShow(frame_time);
args = viz::BeginFrameArgs::Create(
BEGINFRAME_FROM_HERE, kSourceId, sequence_number++, frame_time,
frame_time + interval, interval, viz::BeginFrameArgs::NORMAL);
counter.OnBeginFrame(args);
frame_time += base::TimeDelta::FromSeconds(5);
counter.OnHide(frame_time);
EXPECT_EQ(counter.total_frames(), 900u);
}
} // namespace
} // namespace cc